From abf331e7743ce666ee3b9c8322e951b7c3b8d51c Mon Sep 17 00:00:00 2001 From: Marios Trivyzas Date: Fri, 1 Feb 2019 13:03:10 +0200 Subject: [PATCH 1/5] SQL: Implement CURRENT_DATE Since DATE data type is now available, this implements the `CURRENT_DATE/CURRENT_DATE()/TODAY()` similar to `CURRENT_TIMESTAMP`. Closes: #38160 --- .../sql/functions/date-time.asciidoc | 73 + .../xpack/sql/qa/cli/ShowTestCase.java | 1 + .../qa/src/main/resources/command.csv-spec | 6 +- .../sql/qa/src/main/resources/date.csv-spec | 67 + .../sql/qa/src/main/resources/docs.csv-spec | 74 +- x-pack/plugin/sql/src/main/antlr/SqlBase.g4 | 9 +- .../plugin/sql/src/main/antlr/SqlBase.tokens | 406 ++-- .../sql/src/main/antlr/SqlBaseLexer.tokens | 404 ++-- .../expression/function/FunctionRegistry.java | 4 +- .../function/scalar/datetime/CurrentDate.java | 63 + .../xpack/sql/parser/ExpressionBuilder.java | 25 +- .../xpack/sql/parser/SqlBaseBaseListener.java | 24 + .../xpack/sql/parser/SqlBaseBaseVisitor.java | 14 + .../xpack/sql/parser/SqlBaseLexer.java | 828 ++++---- .../xpack/sql/parser/SqlBaseListener.java | 22 + .../xpack/sql/parser/SqlBaseParser.java | 1861 +++++++++-------- .../xpack/sql/parser/SqlBaseVisitor.java | 13 + .../xpack/sql/parser/ExpressionTests.java | 18 +- 18 files changed, 2189 insertions(+), 1723 deletions(-) create mode 100644 x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java diff --git a/docs/reference/sql/functions/date-time.asciidoc b/docs/reference/sql/functions/date-time.asciidoc index 15fdba39026ef..fc52769ac6f4f 100644 --- a/docs/reference/sql/functions/date-time.asciidoc +++ b/docs/reference/sql/functions/date-time.asciidoc @@ -93,6 +93,48 @@ include-tagged::{sql-specs}/docs.csv-spec[dtIntervalMul] beta[] +[[sql-functions-current-date]] +==== `CURRENT_TIMESTAMP/CURDATE` + +.Synopsis: +[source, sql] +-------------------------------------------------- +CURRENT_DATE +CURRENT_DATE() +-------------------------------------------------- + +*Input*: _none_ + +*Output*: date + +.Description: + +Returns the date (no time part) when the current query reached the server. +It can be used both as a keyword: `CURRENT_DATE` or as a function with no arguments: `CURRENT_DATE()`. + +[NOTE] +Unlike CURRENT_DATE, `CURDATE()` can only be used as a function with no arguments and not as a keyword. + +This method always returns the same value within a query. + +["source","sql",subs="attributes,callouts,macros"] +-------------------------------------------------- +include-tagged::{sql-specs}/docs.csv-spec[curDate] +-------------------------------------------------- + +["source","sql",subs="attributes,callouts,macros"] +-------------------------------------------------- +include-tagged::{sql-specs}/docs.csv-spec[curDateFunction] +-------------------------------------------------- + +Typically, this function (as well as its twin <> function +is used for relative date filtering: + +["source","sql",subs="attributes,callouts,macros"] +-------------------------------------------------- +include-tagged::{sql-specs}/docs.csv-spec[filterToday] +-------------------------------------------------- + [[sql-functions-current-timestamp]] ==== `CURRENT_TIMESTAMP` @@ -485,6 +527,37 @@ Extract the year quarter the date/datetime falls in. include-tagged::{sql-specs}/docs.csv-spec[quarter] -------------------------------------------------- +[[sql-functions-today]] +==== `TODAY` + +.Synopsis: +[source, sql] +-------------------------------------------------- +TODAY() +-------------------------------------------------- + +*Input*: _none_ + +*Output*: date + +.Description: + +This function offers the same functionality as <> function: returns +the date when the current query reached the server. This method always returns the same value within a query. + +["source","sql",subs="attributes,callouts,macros"] +-------------------------------------------------- +include-tagged::{sql-specs}/docs.csv-spec[todayFunction] +-------------------------------------------------- + +Typically, this function (as well as its twin <> function is used +for relative date filtering: + +["source","sql",subs="attributes,callouts,macros"] +-------------------------------------------------- +include-tagged::{sql-specs}/docs.csv-spec[filterToday] +-------------------------------------------------- + [[sql-functions-datetime-week]] ==== `WEEK_OF_YEAR/WEEK` diff --git a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/cli/ShowTestCase.java b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/cli/ShowTestCase.java index 382442b5bffec..8d5e399017cf6 100644 --- a/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/cli/ShowTestCase.java +++ b/x-pack/plugin/sql/qa/src/main/java/org/elasticsearch/xpack/sql/qa/cli/ShowTestCase.java @@ -91,6 +91,7 @@ public void testShowFunctionsLikeInfix() throws IOException { assertThat(readLine(), RegexMatcher.matches("\\s*ISODAYOFWEEK\\s*\\|\\s*SCALAR\\s*")); assertThat(readLine(), RegexMatcher.matches("\\s*ISO_DAY_OF_WEEK\\s*\\|\\s*SCALAR\\s*")); assertThat(readLine(), RegexMatcher.matches("\\s*MINUTE_OF_DAY\\s*\\|\\s*SCALAR\\s*")); + assertThat(readLine(), RegexMatcher.matches("\\s*TODAY\\s*\\|\\s*SCALAR\\s*")); assertEquals("", readLine()); } } diff --git a/x-pack/plugin/sql/qa/src/main/resources/command.csv-spec b/x-pack/plugin/sql/qa/src/main/resources/command.csv-spec index c7ebf9420c9a0..15f9f58495deb 100644 --- a/x-pack/plugin/sql/qa/src/main/resources/command.csv-spec +++ b/x-pack/plugin/sql/qa/src/main/resources/command.csv-spec @@ -31,6 +31,8 @@ ISNULL |CONDITIONAL LEAST |CONDITIONAL NULLIF |CONDITIONAL NVL |CONDITIONAL +CURDATE |SCALAR +CURRENT_DATE |SCALAR CURRENT_TIMESTAMP|SCALAR DAY |SCALAR DAYNAME |SCALAR @@ -65,7 +67,8 @@ MONTH_OF_YEAR |SCALAR NOW |SCALAR QUARTER |SCALAR SECOND |SCALAR -SECOND_OF_MINUTE |SCALAR +SECOND_OF_MINUTE |SCALAR +TODAY |SCALAR WEEK |SCALAR WEEK_OF_YEAR |SCALAR YEAR |SCALAR @@ -175,6 +178,7 @@ HOUR_OF_DAY |SCALAR ISODAYOFWEEK |SCALAR ISO_DAY_OF_WEEK|SCALAR MINUTE_OF_DAY |SCALAR +TODAY |SCALAR ; showTables diff --git a/x-pack/plugin/sql/qa/src/main/resources/date.csv-spec b/x-pack/plugin/sql/qa/src/main/resources/date.csv-spec index f744ea9ca6c70..3c9918329f549 100644 --- a/x-pack/plugin/sql/qa/src/main/resources/date.csv-spec +++ b/x-pack/plugin/sql/qa/src/main/resources/date.csv-spec @@ -2,6 +2,73 @@ // Date // +currentDateKeywordWithDivision +SELECT YEAR(CURRENT_TIMESTAMP) / 1000 AS result; + + result +--------------- +2 +; + +currentDateFunctionNoArgsWithDivision +SELECT YEAR(CURRENT_TIMESTAMP()) / 1000 AS result; + + result +--------------- +2 +; + +todayWithDivision +SELECT YEAR(TODAY()) / 1000 AS result; + + result +--------------- +2 +; + +todayIntervalSubstraction +SELECT YEAR(TODAY() - INTERVAL 2 YEARS) / 1000 AS result; + + result +--------------- +2 +; + + +currentDateFilter +SELECT first_name FROM test_emp WHERE hire_date > CURRENT_DATE() - INTERVAL 25 YEARS ORDER BY first_name ASC LIMIT 10; + + first_name +----------------- +Kazuhito +Kenroku +Lillian +Mayumi +Mingsen +Sailaja +Saniya +Shahaf +Suzette +Tuval +; + +currentDateFilterScript +SELECT first_name FROM test_emp WHERE YEAR(hire_date) - YEAR(TODAY()) / 1000 > 10 ORDER BY first_name ASC LIMIT 10; + + first_name +--------------- +Alejandro +Amabile +Anneke +Anoosh +Arumugam +Basil +Berhard +Berni +Bezalel +Bojan +; + dateExtractDateParts SELECT DAY(CAST(birth_date AS DATE)) d, diff --git a/x-pack/plugin/sql/qa/src/main/resources/docs.csv-spec b/x-pack/plugin/sql/qa/src/main/resources/docs.csv-spec index 46196f79b29d0..bb572ecca9d1a 100644 --- a/x-pack/plugin/sql/qa/src/main/resources/docs.csv-spec +++ b/x-pack/plugin/sql/qa/src/main/resources/docs.csv-spec @@ -208,6 +208,8 @@ ISNULL |CONDITIONAL LEAST |CONDITIONAL NULLIF |CONDITIONAL NVL |CONDITIONAL +CURDATE |SCALAR +CURRENT_DATE |SCALAR CURRENT_TIMESTAMP|SCALAR DAY |SCALAR DAYNAME |SCALAR @@ -242,7 +244,8 @@ MONTH_OF_YEAR |SCALAR NOW |SCALAR QUARTER |SCALAR SECOND |SCALAR -SECOND_OF_MINUTE |SCALAR +SECOND_OF_MINUTE |SCALAR +TODAY |SCALAR WEEK |SCALAR WEEK_OF_YEAR |SCALAR YEAR |SCALAR @@ -365,6 +368,7 @@ HOUR_OF_DAY |SCALAR ISODAYOFWEEK |SCALAR ISO_DAY_OF_WEEK|SCALAR MINUTE_OF_DAY |SCALAR +TODAY |SCALAR // end::showFunctionsWithPattern ; @@ -2227,18 +2231,50 @@ SELECT WEEK(CAST('1988-01-05T09:22:10Z' AS TIMESTAMP)) AS week, ISOWEEK(CAST('19 ; -currentNow -// tag::filterNow -SELECT first_name FROM emp WHERE hire_date > NOW() - INTERVAL 100 YEARS ORDER BY first_name ASC LIMIT 5; - first_name ---------------- -Alejandro -Amabile -Anneke -Anoosh -Arumugam -// end::filterNow + +currentDate-Ignore +// tag::curDate +SELECT CURRENT_TIMESTAMP AS result; + + result +------------------------ +2018-12-12 +// end::curDate +; + +currentDateFunction-Ignore +// tag::curDateFunction +SELECT CURRENT_TIMESTAMP() AS result; + + result +------------------------ +2018-12-12 +// end::curDateFunction +; + +todayFunction-Ignore +// tag::todayFunction +SELECT TODAY() AS result; + + result +------------------------ +2018-12-12 +// end::todayFunction +; + +filterToday +// tag::filterToday +SELECT first_name FROM emp WHERE hire_date > TODAY() - INTERVAL 25 YEARS ORDER BY first_name ASC LIMIT 5; + + first_name +------------ +Kazuhito +Kenroku +Lillian +Mayumi +Mingsen +// end::filterToday ; currentTimestamp-Ignore @@ -2282,6 +2318,20 @@ SELECT NOW() AS result; // end::nowFunction ; +filterNow +// tag::filterNow +SELECT first_name FROM emp WHERE hire_date > NOW() - INTERVAL 100 YEARS ORDER BY first_name ASC LIMIT 5; + + first_name +--------------- +Alejandro +Amabile +Anneke +Anoosh +Arumugam +// end::filterNow +; + //////////// // Next two queries need to have the same output, as they should be equivalent. // They are used in the "SQL Limitations" page. diff --git a/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 b/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 index e7cb2e2b1b258..02643011ba85d 100644 --- a/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 +++ b/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 @@ -215,6 +215,7 @@ valueExpression primaryExpression : castExpression #cast | extractExpression #extract + | builtinDateFunction #currentDateFunction | builtinDateTimeFunction #currentDateTimeFunction | constant #constantDefault | (qualifiedName DOT)? ASTERISK #star @@ -235,6 +236,10 @@ castTemplate : CAST '(' expression AS dataType ')' ; +builtinDateFunction + : name=CURRENT_DATE ('(' ')')? + ; + builtinDateTimeFunction : name=CURRENT_TIMESTAMP ('(' precision=INTEGER_VALUE? ')')? ; @@ -337,7 +342,7 @@ string // http://developer.mimer.se/validator/sql-reserved-words.tml nonReserved : ANALYZE | ANALYZED - | CATALOGS | COLUMNS | CURRENT + | CATALOGS | COLUMNS | DAY | DEBUG | EXECUTABLE | EXPLAIN | FIRST | FORMAT | FULL | FUNCTIONS @@ -370,7 +375,7 @@ CATALOG: 'CATALOG'; CATALOGS: 'CATALOGS'; COLUMNS: 'COLUMNS'; CONVERT: 'CONVERT'; -CURRENT: 'CURRENT'; +CURRENT_DATE : 'CURRENT_DATE'; CURRENT_TIMESTAMP : 'CURRENT_TIMESTAMP'; DAY: 'DAY'; DAYS: 'DAYS'; diff --git a/x-pack/plugin/sql/src/main/antlr/SqlBase.tokens b/x-pack/plugin/sql/src/main/antlr/SqlBase.tokens index f2d522b2bc757..fc39ee254c79c 100644 --- a/x-pack/plugin/sql/src/main/antlr/SqlBase.tokens +++ b/x-pack/plugin/sql/src/main/antlr/SqlBase.tokens @@ -17,114 +17,115 @@ CATALOGS=16 COLUMNS=17 CONVERT=18 CURRENT=19 -CURRENT_TIMESTAMP=20 -DAY=21 -DAYS=22 -DEBUG=23 -DESC=24 -DESCRIBE=25 -DISTINCT=26 -ESCAPE=27 -EXECUTABLE=28 -EXISTS=29 -EXPLAIN=30 -EXTRACT=31 -FALSE=32 -FIRST=33 -FORMAT=34 -FROM=35 -FULL=36 -FUNCTIONS=37 -GRAPHVIZ=38 -GROUP=39 -HAVING=40 -HOUR=41 -HOURS=42 -IN=43 -INNER=44 -INTERVAL=45 -IS=46 -JOIN=47 -LAST=48 -LEFT=49 -LIKE=50 -LIMIT=51 -MAPPED=52 -MATCH=53 -MINUTE=54 -MINUTES=55 -MONTH=56 -MONTHS=57 -NATURAL=58 -NOT=59 -NULL=60 -NULLS=61 -ON=62 -OPTIMIZED=63 -OR=64 -ORDER=65 -OUTER=66 -PARSED=67 -PHYSICAL=68 -PLAN=69 -RIGHT=70 -RLIKE=71 -QUERY=72 -SCHEMAS=73 -SECOND=74 -SECONDS=75 -SELECT=76 -SHOW=77 -SYS=78 -TABLE=79 -TABLES=80 -TEXT=81 -TRUE=82 -TO=83 -TYPE=84 -TYPES=85 -USING=86 -VERIFY=87 -WHERE=88 -WITH=89 -YEAR=90 -YEARS=91 -ESCAPE_ESC=92 -FUNCTION_ESC=93 -LIMIT_ESC=94 -DATE_ESC=95 -TIME_ESC=96 -TIMESTAMP_ESC=97 -GUID_ESC=98 -ESC_END=99 -EQ=100 -NULLEQ=101 -NEQ=102 -LT=103 -LTE=104 -GT=105 -GTE=106 -PLUS=107 -MINUS=108 -ASTERISK=109 -SLASH=110 -PERCENT=111 -CONCAT=112 -DOT=113 -PARAM=114 -STRING=115 -INTEGER_VALUE=116 -DECIMAL_VALUE=117 -IDENTIFIER=118 -DIGIT_IDENTIFIER=119 -TABLE_IDENTIFIER=120 -QUOTED_IDENTIFIER=121 -BACKQUOTED_IDENTIFIER=122 -SIMPLE_COMMENT=123 -BRACKETED_COMMENT=124 -WS=125 -UNRECOGNIZED=126 -DELIMITER=127 +CURRENT_DATE=20 +CURRENT_TIMESTAMP=21 +DAY=22 +DAYS=23 +DEBUG=24 +DESC=25 +DESCRIBE=26 +DISTINCT=27 +ESCAPE=28 +EXECUTABLE=29 +EXISTS=30 +EXPLAIN=31 +EXTRACT=32 +FALSE=33 +FIRST=34 +FORMAT=35 +FROM=36 +FULL=37 +FUNCTIONS=38 +GRAPHVIZ=39 +GROUP=40 +HAVING=41 +HOUR=42 +HOURS=43 +IN=44 +INNER=45 +INTERVAL=46 +IS=47 +JOIN=48 +LAST=49 +LEFT=50 +LIKE=51 +LIMIT=52 +MAPPED=53 +MATCH=54 +MINUTE=55 +MINUTES=56 +MONTH=57 +MONTHS=58 +NATURAL=59 +NOT=60 +NULL=61 +NULLS=62 +ON=63 +OPTIMIZED=64 +OR=65 +ORDER=66 +OUTER=67 +PARSED=68 +PHYSICAL=69 +PLAN=70 +RIGHT=71 +RLIKE=72 +QUERY=73 +SCHEMAS=74 +SECOND=75 +SECONDS=76 +SELECT=77 +SHOW=78 +SYS=79 +TABLE=80 +TABLES=81 +TEXT=82 +TRUE=83 +TO=84 +TYPE=85 +TYPES=86 +USING=87 +VERIFY=88 +WHERE=89 +WITH=90 +YEAR=91 +YEARS=92 +ESCAPE_ESC=93 +FUNCTION_ESC=94 +LIMIT_ESC=95 +DATE_ESC=96 +TIME_ESC=97 +TIMESTAMP_ESC=98 +GUID_ESC=99 +ESC_END=100 +EQ=101 +NULLEQ=102 +NEQ=103 +LT=104 +LTE=105 +GT=106 +GTE=107 +PLUS=108 +MINUS=109 +ASTERISK=110 +SLASH=111 +PERCENT=112 +CONCAT=113 +DOT=114 +PARAM=115 +STRING=116 +INTEGER_VALUE=117 +DECIMAL_VALUE=118 +IDENTIFIER=119 +DIGIT_IDENTIFIER=120 +TABLE_IDENTIFIER=121 +QUOTED_IDENTIFIER=122 +BACKQUOTED_IDENTIFIER=123 +SIMPLE_COMMENT=124 +BRACKETED_COMMENT=125 +WS=126 +UNRECOGNIZED=127 +DELIMITER=128 '('=1 ')'=2 ','=3 @@ -144,97 +145,98 @@ DELIMITER=127 'COLUMNS'=17 'CONVERT'=18 'CURRENT'=19 -'CURRENT_TIMESTAMP'=20 -'DAY'=21 -'DAYS'=22 -'DEBUG'=23 -'DESC'=24 -'DESCRIBE'=25 -'DISTINCT'=26 -'ESCAPE'=27 -'EXECUTABLE'=28 -'EXISTS'=29 -'EXPLAIN'=30 -'EXTRACT'=31 -'FALSE'=32 -'FIRST'=33 -'FORMAT'=34 -'FROM'=35 -'FULL'=36 -'FUNCTIONS'=37 -'GRAPHVIZ'=38 -'GROUP'=39 -'HAVING'=40 -'HOUR'=41 -'HOURS'=42 -'IN'=43 -'INNER'=44 -'INTERVAL'=45 -'IS'=46 -'JOIN'=47 -'LAST'=48 -'LEFT'=49 -'LIKE'=50 -'LIMIT'=51 -'MAPPED'=52 -'MATCH'=53 -'MINUTE'=54 -'MINUTES'=55 -'MONTH'=56 -'MONTHS'=57 -'NATURAL'=58 -'NOT'=59 -'NULL'=60 -'NULLS'=61 -'ON'=62 -'OPTIMIZED'=63 -'OR'=64 -'ORDER'=65 -'OUTER'=66 -'PARSED'=67 -'PHYSICAL'=68 -'PLAN'=69 -'RIGHT'=70 -'RLIKE'=71 -'QUERY'=72 -'SCHEMAS'=73 -'SECOND'=74 -'SECONDS'=75 -'SELECT'=76 -'SHOW'=77 -'SYS'=78 -'TABLE'=79 -'TABLES'=80 -'TEXT'=81 -'TRUE'=82 -'TO'=83 -'TYPE'=84 -'TYPES'=85 -'USING'=86 -'VERIFY'=87 -'WHERE'=88 -'WITH'=89 -'YEAR'=90 -'YEARS'=91 -'{ESCAPE'=92 -'{FN'=93 -'{LIMIT'=94 -'{D'=95 -'{T'=96 -'{TS'=97 -'{GUID'=98 -'}'=99 -'='=100 -'<=>'=101 -'<'=103 -'<='=104 -'>'=105 -'>='=106 -'+'=107 -'-'=108 -'*'=109 -'/'=110 -'%'=111 -'||'=112 -'.'=113 -'?'=114 +'CURRENT_DATE'=20 +'CURRENT_TIMESTAMP'=21 +'DAY'=22 +'DAYS'=23 +'DEBUG'=24 +'DESC'=25 +'DESCRIBE'=26 +'DISTINCT'=27 +'ESCAPE'=28 +'EXECUTABLE'=29 +'EXISTS'=30 +'EXPLAIN'=31 +'EXTRACT'=32 +'FALSE'=33 +'FIRST'=34 +'FORMAT'=35 +'FROM'=36 +'FULL'=37 +'FUNCTIONS'=38 +'GRAPHVIZ'=39 +'GROUP'=40 +'HAVING'=41 +'HOUR'=42 +'HOURS'=43 +'IN'=44 +'INNER'=45 +'INTERVAL'=46 +'IS'=47 +'JOIN'=48 +'LAST'=49 +'LEFT'=50 +'LIKE'=51 +'LIMIT'=52 +'MAPPED'=53 +'MATCH'=54 +'MINUTE'=55 +'MINUTES'=56 +'MONTH'=57 +'MONTHS'=58 +'NATURAL'=59 +'NOT'=60 +'NULL'=61 +'NULLS'=62 +'ON'=63 +'OPTIMIZED'=64 +'OR'=65 +'ORDER'=66 +'OUTER'=67 +'PARSED'=68 +'PHYSICAL'=69 +'PLAN'=70 +'RIGHT'=71 +'RLIKE'=72 +'QUERY'=73 +'SCHEMAS'=74 +'SECOND'=75 +'SECONDS'=76 +'SELECT'=77 +'SHOW'=78 +'SYS'=79 +'TABLE'=80 +'TABLES'=81 +'TEXT'=82 +'TRUE'=83 +'TO'=84 +'TYPE'=85 +'TYPES'=86 +'USING'=87 +'VERIFY'=88 +'WHERE'=89 +'WITH'=90 +'YEAR'=91 +'YEARS'=92 +'{ESCAPE'=93 +'{FN'=94 +'{LIMIT'=95 +'{D'=96 +'{T'=97 +'{TS'=98 +'{GUID'=99 +'}'=100 +'='=101 +'<=>'=102 +'<'=104 +'<='=105 +'>'=106 +'>='=107 +'+'=108 +'-'=109 +'*'=110 +'/'=111 +'%'=112 +'||'=113 +'.'=114 +'?'=115 diff --git a/x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens b/x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens index 8b586035f8520..7f08a1dcb46e5 100644 --- a/x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens +++ b/x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens @@ -17,113 +17,114 @@ CATALOGS=16 COLUMNS=17 CONVERT=18 CURRENT=19 -CURRENT_TIMESTAMP=20 -DAY=21 -DAYS=22 -DEBUG=23 -DESC=24 -DESCRIBE=25 -DISTINCT=26 -ESCAPE=27 -EXECUTABLE=28 -EXISTS=29 -EXPLAIN=30 -EXTRACT=31 -FALSE=32 -FIRST=33 -FORMAT=34 -FROM=35 -FULL=36 -FUNCTIONS=37 -GRAPHVIZ=38 -GROUP=39 -HAVING=40 -HOUR=41 -HOURS=42 -IN=43 -INNER=44 -INTERVAL=45 -IS=46 -JOIN=47 -LAST=48 -LEFT=49 -LIKE=50 -LIMIT=51 -MAPPED=52 -MATCH=53 -MINUTE=54 -MINUTES=55 -MONTH=56 -MONTHS=57 -NATURAL=58 -NOT=59 -NULL=60 -NULLS=61 -ON=62 -OPTIMIZED=63 -OR=64 -ORDER=65 -OUTER=66 -PARSED=67 -PHYSICAL=68 -PLAN=69 -RIGHT=70 -RLIKE=71 -QUERY=72 -SCHEMAS=73 -SECOND=74 -SECONDS=75 -SELECT=76 -SHOW=77 -SYS=78 -TABLE=79 -TABLES=80 -TEXT=81 -TRUE=82 -TO=83 -TYPE=84 -TYPES=85 -USING=86 -VERIFY=87 -WHERE=88 -WITH=89 -YEAR=90 -YEARS=91 -ESCAPE_ESC=92 -FUNCTION_ESC=93 -LIMIT_ESC=94 -DATE_ESC=95 -TIME_ESC=96 -TIMESTAMP_ESC=97 -GUID_ESC=98 -ESC_END=99 -EQ=100 -NULLEQ=101 -NEQ=102 -LT=103 -LTE=104 -GT=105 -GTE=106 -PLUS=107 -MINUS=108 -ASTERISK=109 -SLASH=110 -PERCENT=111 -CONCAT=112 -DOT=113 -PARAM=114 -STRING=115 -INTEGER_VALUE=116 -DECIMAL_VALUE=117 -IDENTIFIER=118 -DIGIT_IDENTIFIER=119 -TABLE_IDENTIFIER=120 -QUOTED_IDENTIFIER=121 -BACKQUOTED_IDENTIFIER=122 -SIMPLE_COMMENT=123 -BRACKETED_COMMENT=124 -WS=125 -UNRECOGNIZED=126 +CURRENT_DATE=20 +CURRENT_TIMESTAMP=21 +DAY=22 +DAYS=23 +DEBUG=24 +DESC=25 +DESCRIBE=26 +DISTINCT=27 +ESCAPE=28 +EXECUTABLE=29 +EXISTS=30 +EXPLAIN=31 +EXTRACT=32 +FALSE=33 +FIRST=34 +FORMAT=35 +FROM=36 +FULL=37 +FUNCTIONS=38 +GRAPHVIZ=39 +GROUP=40 +HAVING=41 +HOUR=42 +HOURS=43 +IN=44 +INNER=45 +INTERVAL=46 +IS=47 +JOIN=48 +LAST=49 +LEFT=50 +LIKE=51 +LIMIT=52 +MAPPED=53 +MATCH=54 +MINUTE=55 +MINUTES=56 +MONTH=57 +MONTHS=58 +NATURAL=59 +NOT=60 +NULL=61 +NULLS=62 +ON=63 +OPTIMIZED=64 +OR=65 +ORDER=66 +OUTER=67 +PARSED=68 +PHYSICAL=69 +PLAN=70 +RIGHT=71 +RLIKE=72 +QUERY=73 +SCHEMAS=74 +SECOND=75 +SECONDS=76 +SELECT=77 +SHOW=78 +SYS=79 +TABLE=80 +TABLES=81 +TEXT=82 +TRUE=83 +TO=84 +TYPE=85 +TYPES=86 +USING=87 +VERIFY=88 +WHERE=89 +WITH=90 +YEAR=91 +YEARS=92 +ESCAPE_ESC=93 +FUNCTION_ESC=94 +LIMIT_ESC=95 +DATE_ESC=96 +TIME_ESC=97 +TIMESTAMP_ESC=98 +GUID_ESC=99 +ESC_END=100 +EQ=101 +NULLEQ=102 +NEQ=103 +LT=104 +LTE=105 +GT=106 +GTE=107 +PLUS=108 +MINUS=109 +ASTERISK=110 +SLASH=111 +PERCENT=112 +CONCAT=113 +DOT=114 +PARAM=115 +STRING=116 +INTEGER_VALUE=117 +DECIMAL_VALUE=118 +IDENTIFIER=119 +DIGIT_IDENTIFIER=120 +TABLE_IDENTIFIER=121 +QUOTED_IDENTIFIER=122 +BACKQUOTED_IDENTIFIER=123 +SIMPLE_COMMENT=124 +BRACKETED_COMMENT=125 +WS=126 +UNRECOGNIZED=127 '('=1 ')'=2 ','=3 @@ -143,97 +144,98 @@ UNRECOGNIZED=126 'COLUMNS'=17 'CONVERT'=18 'CURRENT'=19 -'CURRENT_TIMESTAMP'=20 -'DAY'=21 -'DAYS'=22 -'DEBUG'=23 -'DESC'=24 -'DESCRIBE'=25 -'DISTINCT'=26 -'ESCAPE'=27 -'EXECUTABLE'=28 -'EXISTS'=29 -'EXPLAIN'=30 -'EXTRACT'=31 -'FALSE'=32 -'FIRST'=33 -'FORMAT'=34 -'FROM'=35 -'FULL'=36 -'FUNCTIONS'=37 -'GRAPHVIZ'=38 -'GROUP'=39 -'HAVING'=40 -'HOUR'=41 -'HOURS'=42 -'IN'=43 -'INNER'=44 -'INTERVAL'=45 -'IS'=46 -'JOIN'=47 -'LAST'=48 -'LEFT'=49 -'LIKE'=50 -'LIMIT'=51 -'MAPPED'=52 -'MATCH'=53 -'MINUTE'=54 -'MINUTES'=55 -'MONTH'=56 -'MONTHS'=57 -'NATURAL'=58 -'NOT'=59 -'NULL'=60 -'NULLS'=61 -'ON'=62 -'OPTIMIZED'=63 -'OR'=64 -'ORDER'=65 -'OUTER'=66 -'PARSED'=67 -'PHYSICAL'=68 -'PLAN'=69 -'RIGHT'=70 -'RLIKE'=71 -'QUERY'=72 -'SCHEMAS'=73 -'SECOND'=74 -'SECONDS'=75 -'SELECT'=76 -'SHOW'=77 -'SYS'=78 -'TABLE'=79 -'TABLES'=80 -'TEXT'=81 -'TRUE'=82 -'TO'=83 -'TYPE'=84 -'TYPES'=85 -'USING'=86 -'VERIFY'=87 -'WHERE'=88 -'WITH'=89 -'YEAR'=90 -'YEARS'=91 -'{ESCAPE'=92 -'{FN'=93 -'{LIMIT'=94 -'{D'=95 -'{T'=96 -'{TS'=97 -'{GUID'=98 -'}'=99 -'='=100 -'<=>'=101 -'<'=103 -'<='=104 -'>'=105 -'>='=106 -'+'=107 -'-'=108 -'*'=109 -'/'=110 -'%'=111 -'||'=112 -'.'=113 -'?'=114 +'CURRENT_DATE'=20 +'CURRENT_TIMESTAMP'=21 +'DAY'=22 +'DAYS'=23 +'DEBUG'=24 +'DESC'=25 +'DESCRIBE'=26 +'DISTINCT'=27 +'ESCAPE'=28 +'EXECUTABLE'=29 +'EXISTS'=30 +'EXPLAIN'=31 +'EXTRACT'=32 +'FALSE'=33 +'FIRST'=34 +'FORMAT'=35 +'FROM'=36 +'FULL'=37 +'FUNCTIONS'=38 +'GRAPHVIZ'=39 +'GROUP'=40 +'HAVING'=41 +'HOUR'=42 +'HOURS'=43 +'IN'=44 +'INNER'=45 +'INTERVAL'=46 +'IS'=47 +'JOIN'=48 +'LAST'=49 +'LEFT'=50 +'LIKE'=51 +'LIMIT'=52 +'MAPPED'=53 +'MATCH'=54 +'MINUTE'=55 +'MINUTES'=56 +'MONTH'=57 +'MONTHS'=58 +'NATURAL'=59 +'NOT'=60 +'NULL'=61 +'NULLS'=62 +'ON'=63 +'OPTIMIZED'=64 +'OR'=65 +'ORDER'=66 +'OUTER'=67 +'PARSED'=68 +'PHYSICAL'=69 +'PLAN'=70 +'RIGHT'=71 +'RLIKE'=72 +'QUERY'=73 +'SCHEMAS'=74 +'SECOND'=75 +'SECONDS'=76 +'SELECT'=77 +'SHOW'=78 +'SYS'=79 +'TABLE'=80 +'TABLES'=81 +'TEXT'=82 +'TRUE'=83 +'TO'=84 +'TYPE'=85 +'TYPES'=86 +'USING'=87 +'VERIFY'=88 +'WHERE'=89 +'WITH'=90 +'YEAR'=91 +'YEARS'=92 +'{ESCAPE'=93 +'{FN'=94 +'{LIMIT'=95 +'{D'=96 +'{T'=97 +'{TS'=98 +'{GUID'=99 +'}'=100 +'='=101 +'<=>'=102 +'<'=104 +'<='=105 +'>'=106 +'>='=107 +'+'=108 +'-'=109 +'*'=110 +'/'=111 +'%'=112 +'||'=113 +'.'=114 +'?'=115 diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/FunctionRegistry.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/FunctionRegistry.java index 876af256294c8..ea9f8cba24b7e 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/FunctionRegistry.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/FunctionRegistry.java @@ -27,6 +27,7 @@ import org.elasticsearch.xpack.sql.expression.function.scalar.Cast; import org.elasticsearch.xpack.sql.expression.function.scalar.Database; import org.elasticsearch.xpack.sql.expression.function.scalar.User; +import org.elasticsearch.xpack.sql.expression.function.scalar.datetime.CurrentDate; import org.elasticsearch.xpack.sql.expression.function.scalar.datetime.CurrentDateTime; import org.elasticsearch.xpack.sql.expression.function.scalar.datetime.DayName; import org.elasticsearch.xpack.sql.expression.function.scalar.datetime.DayOfMonth; @@ -169,7 +170,8 @@ private void defineDefaultFunctions() { def(Greatest.class, Greatest::new, "GREATEST"), def(Least.class, Least::new, "LEAST")); // Date - addToMap(def(CurrentDateTime.class, CurrentDateTime::new, "CURRENT_TIMESTAMP", "NOW"), + addToMap(def(CurrentDate.class, CurrentDate::new, "CURRENT_DATE", "CURDATE", "TODAY"), + def(CurrentDateTime.class, CurrentDateTime::new, "CURRENT_TIMESTAMP", "NOW"), def(DayName.class, DayName::new, "DAY_NAME", "DAYNAME"), def(DayOfMonth.class, DayOfMonth::new, "DAY_OF_MONTH", "DAYOFMONTH", "DAY", "DOM"), def(DayOfWeek.class, DayOfWeek::new, "DAY_OF_WEEK", "DAYOFWEEK", "DOW"), diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java new file mode 100644 index 0000000000000..fb6eb3f4ed40e --- /dev/null +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java @@ -0,0 +1,63 @@ +/* + * 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.expression.function.scalar.datetime; + +import org.elasticsearch.xpack.sql.expression.function.scalar.ConfigurationFunction; +import org.elasticsearch.xpack.sql.session.Configuration; +import org.elasticsearch.xpack.sql.tree.NodeInfo; +import org.elasticsearch.xpack.sql.tree.Source; +import org.elasticsearch.xpack.sql.type.DataType; +import org.elasticsearch.xpack.sql.util.DateUtils; + +import java.time.ZonedDateTime; +import java.util.Objects; + +public class CurrentDate extends ConfigurationFunction { + + private final ZonedDateTime date; + + public CurrentDate(Source source, Configuration configuration) { + super(source, configuration, DataType.DATE); + this.date = datePrecision(configuration().now()); + } + + @Override + public Object fold() { + return date; + } + + @Override + protected NodeInfo info() { + return NodeInfo.create(this, CurrentDate::new, configuration()); + } + + @Override + public int hashCode() { + return Objects.hash(date); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null || getClass() != obj.getClass()) { + return false; + } + + CurrentDate other = (CurrentDate) obj; + return Objects.equals(date, other.date); + } + + private static ZonedDateTime datePrecision(ZonedDateTime zdt) { + if (zdt == null) { + return null; + } + return DateUtils.asDateOnly(zdt); + } +} diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java index 432872891e5c2..11f94ba8c965b 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java @@ -60,6 +60,7 @@ import org.elasticsearch.xpack.sql.parser.SqlBaseParser.ArithmeticBinaryContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.ArithmeticUnaryContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.BooleanLiteralContext; +import org.elasticsearch.xpack.sql.parser.SqlBaseParser.BuiltinDateFunctionContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.BuiltinDateTimeFunctionContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.CastExpressionContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.CastTemplateContext; @@ -463,9 +464,24 @@ public Function visitExtractExpression(ExtractExpressionContext ctx) { UnresolvedFunction.ResolutionType.EXTRACT, singletonList(expression(template.valueExpression()))); } + @Override + public Object visitBuiltinDateFunction(BuiltinDateFunctionContext ctx) { + // maps CURRENT_DATE to its respective function CURRENT_DATE() + // since the functions need access to the Configuration, the parser only registers the definition and not the actual function + Source source = source(ctx); + + String functionName = ctx.name.getText(); + + if (ctx.name.getType() == SqlBaseLexer.CURRENT_DATE) { + return new UnresolvedFunction(source, functionName, ResolutionType.STANDARD, emptyList()); + } + + throw new ParsingException(source, "Unknown function [{}]", functionName); + } + @Override public Object visitBuiltinDateTimeFunction(BuiltinDateTimeFunctionContext ctx) { - // maps current_XXX to their respective functions + // maps CURRENT_TIMESTAMP to its respective function CURRENT_TIMESTAMP() // since the functions need access to the Configuration, the parser only registers the definition and not the actual function Source source = source(ctx); Literal p = null; @@ -484,10 +500,9 @@ public Object visitBuiltinDateTimeFunction(BuiltinDateTimeFunctionContext ctx) { } String functionName = ctx.name.getText(); - - switch (ctx.name.getType()) { - case SqlBaseLexer.CURRENT_TIMESTAMP: - return new UnresolvedFunction(source, functionName, ResolutionType.STANDARD, p != null ? singletonList(p) : emptyList()); + + if (ctx.name.getType() == SqlBaseLexer.CURRENT_TIMESTAMP) { + return new UnresolvedFunction(source, functionName, ResolutionType.STANDARD, p != null ? singletonList(p) : emptyList()); } throw new ParsingException(source, "Unknown function [{}]", functionName); diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java index a62c5b4083fa3..ac52b53fb25e6 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java @@ -647,6 +647,18 @@ class SqlBaseBaseListener implements SqlBaseListener { *

The default implementation does nothing.

*/ @Override public void exitExtract(SqlBaseParser.ExtractContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx) { } /** * {@inheritDoc} * @@ -755,6 +767,18 @@ class SqlBaseBaseListener implements SqlBaseListener { *

The default implementation does nothing.

*/ @Override public void exitCastTemplate(SqlBaseParser.CastTemplateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx) { } /** * {@inheritDoc} * diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java index 13722407570a7..6e00306d2e2d2 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java @@ -382,6 +382,13 @@ class SqlBaseBaseVisitor extends AbstractParseTreeVisitor implements SqlBa * {@link #visitChildren} on {@code ctx}.

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

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

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

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

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

+ */ + @Override public T visitBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java index fc113cd58c67c..a94786b00e0e9 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java @@ -19,23 +19,24 @@ class SqlBaseLexer extends Lexer { 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, CATALOG=15, CATALOGS=16, COLUMNS=17, - CONVERT=18, CURRENT=19, CURRENT_TIMESTAMP=20, DAY=21, DAYS=22, DEBUG=23, - DESC=24, DESCRIBE=25, DISTINCT=26, ESCAPE=27, EXECUTABLE=28, EXISTS=29, - EXPLAIN=30, EXTRACT=31, FALSE=32, FIRST=33, FORMAT=34, FROM=35, FULL=36, - FUNCTIONS=37, GRAPHVIZ=38, GROUP=39, HAVING=40, HOUR=41, HOURS=42, IN=43, - INNER=44, INTERVAL=45, IS=46, JOIN=47, LAST=48, LEFT=49, LIKE=50, LIMIT=51, - MAPPED=52, MATCH=53, MINUTE=54, MINUTES=55, MONTH=56, MONTHS=57, NATURAL=58, - NOT=59, NULL=60, NULLS=61, ON=62, OPTIMIZED=63, OR=64, ORDER=65, OUTER=66, - PARSED=67, PHYSICAL=68, PLAN=69, RIGHT=70, RLIKE=71, QUERY=72, SCHEMAS=73, - SECOND=74, SECONDS=75, SELECT=76, SHOW=77, SYS=78, TABLE=79, TABLES=80, - TEXT=81, TRUE=82, TO=83, TYPE=84, TYPES=85, USING=86, VERIFY=87, WHERE=88, - WITH=89, YEAR=90, YEARS=91, ESCAPE_ESC=92, FUNCTION_ESC=93, LIMIT_ESC=94, - DATE_ESC=95, TIME_ESC=96, TIMESTAMP_ESC=97, GUID_ESC=98, ESC_END=99, EQ=100, - NULLEQ=101, NEQ=102, LT=103, LTE=104, GT=105, GTE=106, PLUS=107, MINUS=108, - ASTERISK=109, SLASH=110, PERCENT=111, CONCAT=112, DOT=113, PARAM=114, - STRING=115, INTEGER_VALUE=116, DECIMAL_VALUE=117, IDENTIFIER=118, DIGIT_IDENTIFIER=119, - TABLE_IDENTIFIER=120, QUOTED_IDENTIFIER=121, BACKQUOTED_IDENTIFIER=122, - SIMPLE_COMMENT=123, BRACKETED_COMMENT=124, WS=125, UNRECOGNIZED=126; + CONVERT=18, CURRENT=19, CURRENT_DATE=20, CURRENT_TIMESTAMP=21, DAY=22, + DAYS=23, DEBUG=24, DESC=25, DESCRIBE=26, DISTINCT=27, ESCAPE=28, EXECUTABLE=29, + EXISTS=30, EXPLAIN=31, EXTRACT=32, FALSE=33, FIRST=34, FORMAT=35, FROM=36, + FULL=37, FUNCTIONS=38, GRAPHVIZ=39, GROUP=40, HAVING=41, HOUR=42, HOURS=43, + IN=44, INNER=45, INTERVAL=46, IS=47, JOIN=48, LAST=49, LEFT=50, LIKE=51, + LIMIT=52, MAPPED=53, MATCH=54, MINUTE=55, MINUTES=56, MONTH=57, MONTHS=58, + NATURAL=59, NOT=60, NULL=61, NULLS=62, ON=63, OPTIMIZED=64, OR=65, ORDER=66, + OUTER=67, PARSED=68, PHYSICAL=69, PLAN=70, RIGHT=71, RLIKE=72, QUERY=73, + SCHEMAS=74, SECOND=75, SECONDS=76, SELECT=77, SHOW=78, SYS=79, TABLE=80, + TABLES=81, TEXT=82, TRUE=83, TO=84, TYPE=85, TYPES=86, USING=87, VERIFY=88, + WHERE=89, WITH=90, YEAR=91, YEARS=92, ESCAPE_ESC=93, FUNCTION_ESC=94, + LIMIT_ESC=95, DATE_ESC=96, TIME_ESC=97, TIMESTAMP_ESC=98, GUID_ESC=99, + ESC_END=100, EQ=101, NULLEQ=102, NEQ=103, LT=104, LTE=105, GT=106, GTE=107, + PLUS=108, MINUS=109, ASTERISK=110, SLASH=111, PERCENT=112, CONCAT=113, + DOT=114, PARAM=115, STRING=116, INTEGER_VALUE=117, DECIMAL_VALUE=118, + IDENTIFIER=119, DIGIT_IDENTIFIER=120, TABLE_IDENTIFIER=121, QUOTED_IDENTIFIER=122, + BACKQUOTED_IDENTIFIER=123, SIMPLE_COMMENT=124, BRACKETED_COMMENT=125, + WS=126, UNRECOGNIZED=127; public static String[] modeNames = { "DEFAULT_MODE" }; @@ -43,62 +44,62 @@ class SqlBaseLexer extends Lexer { public static final String[] ruleNames = { "T__0", "T__1", "T__2", "T__3", "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOG", "CATALOGS", "COLUMNS", - "CONVERT", "CURRENT", "CURRENT_TIMESTAMP", "DAY", "DAYS", "DEBUG", "DESC", - "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", "EXTRACT", - "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", "GROUP", - "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", "IS", "JOIN", "LAST", - "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", "MINUTES", "MONTH", - "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", "OPTIMIZED", "OR", - "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", - "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", "TABLE", "TABLES", - "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", "WHERE", "WITH", - "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", "DATE_ESC", - "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", "NULLEQ", "NEQ", - "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", - "CONCAT", "DOT", "PARAM", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", - "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "EXPONENT", "DIGIT", "LETTER", "SIMPLE_COMMENT", - "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" + "CONVERT", "CURRENT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", + "DEBUG", "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", + "EXPLAIN", "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", + "GRAPHVIZ", "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", + "IS", "JOIN", "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", + "MINUTES", "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", + "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", + "RLIKE", "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", + "TABLE", "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", + "WHERE", "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", + "DATE_ESC", "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", + "NULLEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", "CONCAT", "DOT", "PARAM", "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'", "'CATALOG'", - "'CATALOGS'", "'COLUMNS'", "'CONVERT'", "'CURRENT'", "'CURRENT_TIMESTAMP'", - "'DAY'", "'DAYS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'ESCAPE'", - "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FIRST'", - "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", "'GROUP'", - "'HAVING'", "'HOUR'", "'HOURS'", "'IN'", "'INNER'", "'INTERVAL'", "'IS'", - "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", "'MATCH'", - "'MINUTE'", "'MINUTES'", "'MONTH'", "'MONTHS'", "'NATURAL'", "'NOT'", - "'NULL'", "'NULLS'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", "'OUTER'", - "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", "'QUERY'", "'SCHEMAS'", - "'SECOND'", "'SECONDS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", "'TABLES'", - "'TEXT'", "'TRUE'", "'TO'", "'TYPE'", "'TYPES'", "'USING'", "'VERIFY'", - "'WHERE'", "'WITH'", "'YEAR'", "'YEARS'", "'{ESCAPE'", "'{FN'", "'{LIMIT'", - "'{D'", "'{T'", "'{TS'", "'{GUID'", "'}'", "'='", "'<=>'", null, "'<'", - "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", "'||'", "'.'", - "'?'" + "'CATALOGS'", "'COLUMNS'", "'CONVERT'", "'CURRENT'", "'CURRENT_DATE'", + "'CURRENT_TIMESTAMP'", "'DAY'", "'DAYS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", + "'DISTINCT'", "'ESCAPE'", "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", + "'FALSE'", "'FIRST'", "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", + "'GROUP'", "'HAVING'", "'HOUR'", "'HOURS'", "'IN'", "'INNER'", "'INTERVAL'", + "'IS'", "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", + "'MATCH'", "'MINUTE'", "'MINUTES'", "'MONTH'", "'MONTHS'", "'NATURAL'", + "'NOT'", "'NULL'", "'NULLS'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", + "'OUTER'", "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", "'QUERY'", + "'SCHEMAS'", "'SECOND'", "'SECONDS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", + "'TABLES'", "'TEXT'", "'TRUE'", "'TO'", "'TYPE'", "'TYPES'", "'USING'", + "'VERIFY'", "'WHERE'", "'WITH'", "'YEAR'", "'YEARS'", "'{ESCAPE'", "'{FN'", + "'{LIMIT'", "'{D'", "'{T'", "'{TS'", "'{GUID'", "'}'", "'='", "'<=>'", + null, "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", + "'||'", "'.'", "'?'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOG", "CATALOGS", "COLUMNS", - "CONVERT", "CURRENT", "CURRENT_TIMESTAMP", "DAY", "DAYS", "DEBUG", "DESC", - "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", "EXTRACT", - "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", "GROUP", - "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", "IS", "JOIN", "LAST", - "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", "MINUTES", "MONTH", - "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", "OPTIMIZED", "OR", - "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", - "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", "TABLE", "TABLES", - "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", "WHERE", "WITH", - "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", "DATE_ESC", - "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", "NULLEQ", "NEQ", - "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", - "CONCAT", "DOT", "PARAM", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", - "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", - "UNRECOGNIZED" + "CONVERT", "CURRENT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", + "DEBUG", "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", + "EXPLAIN", "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", + "GRAPHVIZ", "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", + "IS", "JOIN", "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", + "MINUTES", "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", + "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", + "RLIKE", "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", + "TABLE", "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", + "WHERE", "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", + "DATE_ESC", "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", + "NULLEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", "CONCAT", "DOT", "PARAM", "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); @@ -155,7 +156,7 @@ public SqlBaseLexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\u0080\u0423\b\1\4"+ + "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\u0081\u0432\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"+ @@ -169,352 +170,357 @@ public SqlBaseLexer(CharStream input) { "\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\177\t\177\4\u0080\t"+ - "\u0080\4\u0081\t\u0081\4\u0082\t\u0082\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\21\3\21\3\21\3\22\3\22\3\22\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\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\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\27\3\27\3\27\3\27\3\27"+ - "\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32"+ - "\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33"+ - "\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35"+ - "\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\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.\3.\3.\3.\3.\3.\3.\3.\3.\3/\3/"+ - "\3/\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3"+ - "\62\3\62\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\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\66\3\67\3\67\3"+ - "\67\3\67\3\67\3\67\3\67\38\38\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@\3@\3A\3A\3A\3B\3"+ - "B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3"+ - "E\3E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3"+ - "I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3"+ - "L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3O\3O\3O\3O\3P\3P\3P\3"+ - "P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R\3S\3S\3S\3S\3S\3T\3T\3T\3"+ - "U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3V\3W\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X\3X\3"+ - "X\3Y\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\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\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c\3d\3d\3e\3e\3f\3f\3f\3f\3g\3"+ - "g\3g\3g\5g\u0364\ng\3h\3h\3i\3i\3i\3j\3j\3k\3k\3k\3l\3l\3m\3m\3n\3n\3"+ - "o\3o\3p\3p\3q\3q\3q\3r\3r\3s\3s\3t\3t\3t\3t\7t\u0385\nt\ft\16t\u0388\13"+ - "t\3t\3t\3u\6u\u038d\nu\ru\16u\u038e\3v\6v\u0392\nv\rv\16v\u0393\3v\3v"+ - "\7v\u0398\nv\fv\16v\u039b\13v\3v\3v\6v\u039f\nv\rv\16v\u03a0\3v\6v\u03a4"+ - "\nv\rv\16v\u03a5\3v\3v\7v\u03aa\nv\fv\16v\u03ad\13v\5v\u03af\nv\3v\3v"+ - "\3v\3v\6v\u03b5\nv\rv\16v\u03b6\3v\3v\5v\u03bb\nv\3w\3w\5w\u03bf\nw\3"+ - "w\3w\3w\7w\u03c4\nw\fw\16w\u03c7\13w\3x\3x\3x\3x\6x\u03cd\nx\rx\16x\u03ce"+ - "\3y\3y\3y\6y\u03d4\ny\ry\16y\u03d5\3z\3z\3z\3z\7z\u03dc\nz\fz\16z\u03df"+ - "\13z\3z\3z\3{\3{\3{\3{\7{\u03e7\n{\f{\16{\u03ea\13{\3{\3{\3|\3|\5|\u03f0"+ - "\n|\3|\6|\u03f3\n|\r|\16|\u03f4\3}\3}\3~\3~\3\177\3\177\3\177\3\177\7"+ - "\177\u03ff\n\177\f\177\16\177\u0402\13\177\3\177\5\177\u0405\n\177\3\177"+ - "\5\177\u0408\n\177\3\177\3\177\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080"+ - "\7\u0080\u0411\n\u0080\f\u0080\16\u0080\u0414\13\u0080\3\u0080\3\u0080"+ - "\3\u0080\3\u0080\3\u0080\3\u0081\6\u0081\u041c\n\u0081\r\u0081\16\u0081"+ - "\u041d\3\u0081\3\u0081\3\u0082\3\u0082\3\u0412\2\u0083\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{?}@\177"+ - "A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG\u008dH\u008fI\u0091J\u0093"+ - "K\u0095L\u0097M\u0099N\u009bO\u009dP\u009fQ\u00a1R\u00a3S\u00a5T\u00a7"+ - "U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb"+ - "_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7e\u00c9f\u00cbg\u00cdh\u00cf"+ - "i\u00d1j\u00d3k\u00d5l\u00d7m\u00d9n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3"+ - "s\u00e5t\u00e7u\u00e9v\u00ebw\u00edx\u00efy\u00f1z\u00f3{\u00f5|\u00f7"+ - "\2\u00f9\2\u00fb\2\u00fd}\u00ff~\u0101\177\u0103\u0080\3\2\f\3\2))\4\2"+ - "BBaa\5\2<\3\2\2\2\u01c3\u01c4\7G\2\2\u01c4\u01c5\7Z\2\2\u01c5\u01c6\7V\2"+ - "\2\u01c6\u01c7\7T\2\2\u01c7\u01c8\7C\2\2\u01c8\u01c9\7E\2\2\u01c9\u01ca"+ - "\7V\2\2\u01ca@\3\2\2\2\u01cb\u01cc\7H\2\2\u01cc\u01cd\7C\2\2\u01cd\u01ce"+ - "\7N\2\2\u01ce\u01cf\7U\2\2\u01cf\u01d0\7G\2\2\u01d0B\3\2\2\2\u01d1\u01d2"+ - "\7H\2\2\u01d2\u01d3\7K\2\2\u01d3\u01d4\7T\2\2\u01d4\u01d5\7U\2\2\u01d5"+ - "\u01d6\7V\2\2\u01d6D\3\2\2\2\u01d7\u01d8\7H\2\2\u01d8\u01d9\7Q\2\2\u01d9"+ - "\u01da\7T\2\2\u01da\u01db\7O\2\2\u01db\u01dc\7C\2\2\u01dc\u01dd\7V\2\2"+ - "\u01ddF\3\2\2\2\u01de\u01df\7H\2\2\u01df\u01e0\7T\2\2\u01e0\u01e1\7Q\2"+ - "\2\u01e1\u01e2\7O\2\2\u01e2H\3\2\2\2\u01e3\u01e4\7H\2\2\u01e4\u01e5\7"+ - "W\2\2\u01e5\u01e6\7N\2\2\u01e6\u01e7\7N\2\2\u01e7J\3\2\2\2\u01e8\u01e9"+ - "\7H\2\2\u01e9\u01ea\7W\2\2\u01ea\u01eb\7P\2\2\u01eb\u01ec\7E\2\2\u01ec"+ - "\u01ed\7V\2\2\u01ed\u01ee\7K\2\2\u01ee\u01ef\7Q\2\2\u01ef\u01f0\7P\2\2"+ - "\u01f0\u01f1\7U\2\2\u01f1L\3\2\2\2\u01f2\u01f3\7I\2\2\u01f3\u01f4\7T\2"+ - "\2\u01f4\u01f5\7C\2\2\u01f5\u01f6\7R\2\2\u01f6\u01f7\7J\2\2\u01f7\u01f8"+ - "\7X\2\2\u01f8\u01f9\7K\2\2\u01f9\u01fa\7\\\2\2\u01faN\3\2\2\2\u01fb\u01fc"+ - "\7I\2\2\u01fc\u01fd\7T\2\2\u01fd\u01fe\7Q\2\2\u01fe\u01ff\7W\2\2\u01ff"+ - "\u0200\7R\2\2\u0200P\3\2\2\2\u0201\u0202\7J\2\2\u0202\u0203\7C\2\2\u0203"+ - "\u0204\7X\2\2\u0204\u0205\7K\2\2\u0205\u0206\7P\2\2\u0206\u0207\7I\2\2"+ - "\u0207R\3\2\2\2\u0208\u0209\7J\2\2\u0209\u020a\7Q\2\2\u020a\u020b\7W\2"+ - "\2\u020b\u020c\7T\2\2\u020cT\3\2\2\2\u020d\u020e\7J\2\2\u020e\u020f\7"+ - "Q\2\2\u020f\u0210\7W\2\2\u0210\u0211\7T\2\2\u0211\u0212\7U\2\2\u0212V"+ - "\3\2\2\2\u0213\u0214\7K\2\2\u0214\u0215\7P\2\2\u0215X\3\2\2\2\u0216\u0217"+ - "\7K\2\2\u0217\u0218\7P\2\2\u0218\u0219\7P\2\2\u0219\u021a\7G\2\2\u021a"+ - "\u021b\7T\2\2\u021bZ\3\2\2\2\u021c\u021d\7K\2\2\u021d\u021e\7P\2\2\u021e"+ - "\u021f\7V\2\2\u021f\u0220\7G\2\2\u0220\u0221\7T\2\2\u0221\u0222\7X\2\2"+ - "\u0222\u0223\7C\2\2\u0223\u0224\7N\2\2\u0224\\\3\2\2\2\u0225\u0226\7K"+ - "\2\2\u0226\u0227\7U\2\2\u0227^\3\2\2\2\u0228\u0229\7L\2\2\u0229\u022a"+ - "\7Q\2\2\u022a\u022b\7K\2\2\u022b\u022c\7P\2\2\u022c`\3\2\2\2\u022d\u022e"+ - "\7N\2\2\u022e\u022f\7C\2\2\u022f\u0230\7U\2\2\u0230\u0231\7V\2\2\u0231"+ - "b\3\2\2\2\u0232\u0233\7N\2\2\u0233\u0234\7G\2\2\u0234\u0235\7H\2\2\u0235"+ - "\u0236\7V\2\2\u0236d\3\2\2\2\u0237\u0238\7N\2\2\u0238\u0239\7K\2\2\u0239"+ - "\u023a\7M\2\2\u023a\u023b\7G\2\2\u023bf\3\2\2\2\u023c\u023d\7N\2\2\u023d"+ - "\u023e\7K\2\2\u023e\u023f\7O\2\2\u023f\u0240\7K\2\2\u0240\u0241\7V\2\2"+ - "\u0241h\3\2\2\2\u0242\u0243\7O\2\2\u0243\u0244\7C\2\2\u0244\u0245\7R\2"+ - "\2\u0245\u0246\7R\2\2\u0246\u0247\7G\2\2\u0247\u0248\7F\2\2\u0248j\3\2"+ - "\2\2\u0249\u024a\7O\2\2\u024a\u024b\7C\2\2\u024b\u024c\7V\2\2\u024c\u024d"+ - "\7E\2\2\u024d\u024e\7J\2\2\u024el\3\2\2\2\u024f\u0250\7O\2\2\u0250\u0251"+ - "\7K\2\2\u0251\u0252\7P\2\2\u0252\u0253\7W\2\2\u0253\u0254\7V\2\2\u0254"+ - "\u0255\7G\2\2\u0255n\3\2\2\2\u0256\u0257\7O\2\2\u0257\u0258\7K\2\2\u0258"+ - "\u0259\7P\2\2\u0259\u025a\7W\2\2\u025a\u025b\7V\2\2\u025b\u025c\7G\2\2"+ - "\u025c\u025d\7U\2\2\u025dp\3\2\2\2\u025e\u025f\7O\2\2\u025f\u0260\7Q\2"+ - "\2\u0260\u0261\7P\2\2\u0261\u0262\7V\2\2\u0262\u0263\7J\2\2\u0263r\3\2"+ - "\2\2\u0264\u0265\7O\2\2\u0265\u0266\7Q\2\2\u0266\u0267\7P\2\2\u0267\u0268"+ - "\7V\2\2\u0268\u0269\7J\2\2\u0269\u026a\7U\2\2\u026at\3\2\2\2\u026b\u026c"+ - "\7P\2\2\u026c\u026d\7C\2\2\u026d\u026e\7V\2\2\u026e\u026f\7W\2\2\u026f"+ - "\u0270\7T\2\2\u0270\u0271\7C\2\2\u0271\u0272\7N\2\2\u0272v\3\2\2\2\u0273"+ - "\u0274\7P\2\2\u0274\u0275\7Q\2\2\u0275\u0276\7V\2\2\u0276x\3\2\2\2\u0277"+ - "\u0278\7P\2\2\u0278\u0279\7W\2\2\u0279\u027a\7N\2\2\u027a\u027b\7N\2\2"+ - "\u027bz\3\2\2\2\u027c\u027d\7P\2\2\u027d\u027e\7W\2\2\u027e\u027f\7N\2"+ - "\2\u027f\u0280\7N\2\2\u0280\u0281\7U\2\2\u0281|\3\2\2\2\u0282\u0283\7"+ - "Q\2\2\u0283\u0284\7P\2\2\u0284~\3\2\2\2\u0285\u0286\7Q\2\2\u0286\u0287"+ - "\7R\2\2\u0287\u0288\7V\2\2\u0288\u0289\7K\2\2\u0289\u028a\7O\2\2\u028a"+ - "\u028b\7K\2\2\u028b\u028c\7\\\2\2\u028c\u028d\7G\2\2\u028d\u028e\7F\2"+ - "\2\u028e\u0080\3\2\2\2\u028f\u0290\7Q\2\2\u0290\u0291\7T\2\2\u0291\u0082"+ - "\3\2\2\2\u0292\u0293\7Q\2\2\u0293\u0294\7T\2\2\u0294\u0295\7F\2\2\u0295"+ - "\u0296\7G\2\2\u0296\u0297\7T\2\2\u0297\u0084\3\2\2\2\u0298\u0299\7Q\2"+ - "\2\u0299\u029a\7W\2\2\u029a\u029b\7V\2\2\u029b\u029c\7G\2\2\u029c\u029d"+ - "\7T\2\2\u029d\u0086\3\2\2\2\u029e\u029f\7R\2\2\u029f\u02a0\7C\2\2\u02a0"+ - "\u02a1\7T\2\2\u02a1\u02a2\7U\2\2\u02a2\u02a3\7G\2\2\u02a3\u02a4\7F\2\2"+ - "\u02a4\u0088\3\2\2\2\u02a5\u02a6\7R\2\2\u02a6\u02a7\7J\2\2\u02a7\u02a8"+ - "\7[\2\2\u02a8\u02a9\7U\2\2\u02a9\u02aa\7K\2\2\u02aa\u02ab\7E\2\2\u02ab"+ - "\u02ac\7C\2\2\u02ac\u02ad\7N\2\2\u02ad\u008a\3\2\2\2\u02ae\u02af\7R\2"+ - "\2\u02af\u02b0\7N\2\2\u02b0\u02b1\7C\2\2\u02b1\u02b2\7P\2\2\u02b2\u008c"+ - "\3\2\2\2\u02b3\u02b4\7T\2\2\u02b4\u02b5\7K\2\2\u02b5\u02b6\7I\2\2\u02b6"+ - "\u02b7\7J\2\2\u02b7\u02b8\7V\2\2\u02b8\u008e\3\2\2\2\u02b9\u02ba\7T\2"+ - "\2\u02ba\u02bb\7N\2\2\u02bb\u02bc\7K\2\2\u02bc\u02bd\7M\2\2\u02bd\u02be"+ - "\7G\2\2\u02be\u0090\3\2\2\2\u02bf\u02c0\7S\2\2\u02c0\u02c1\7W\2\2\u02c1"+ - "\u02c2\7G\2\2\u02c2\u02c3\7T\2\2\u02c3\u02c4\7[\2\2\u02c4\u0092\3\2\2"+ - "\2\u02c5\u02c6\7U\2\2\u02c6\u02c7\7E\2\2\u02c7\u02c8\7J\2\2\u02c8\u02c9"+ - "\7G\2\2\u02c9\u02ca\7O\2\2\u02ca\u02cb\7C\2\2\u02cb\u02cc\7U\2\2\u02cc"+ - "\u0094\3\2\2\2\u02cd\u02ce\7U\2\2\u02ce\u02cf\7G\2\2\u02cf\u02d0\7E\2"+ - "\2\u02d0\u02d1\7Q\2\2\u02d1\u02d2\7P\2\2\u02d2\u02d3\7F\2\2\u02d3\u0096"+ - "\3\2\2\2\u02d4\u02d5\7U\2\2\u02d5\u02d6\7G\2\2\u02d6\u02d7\7E\2\2\u02d7"+ - "\u02d8\7Q\2\2\u02d8\u02d9\7P\2\2\u02d9\u02da\7F\2\2\u02da\u02db\7U\2\2"+ - "\u02db\u0098\3\2\2\2\u02dc\u02dd\7U\2\2\u02dd\u02de\7G\2\2\u02de\u02df"+ - "\7N\2\2\u02df\u02e0\7G\2\2\u02e0\u02e1\7E\2\2\u02e1\u02e2\7V\2\2\u02e2"+ - "\u009a\3\2\2\2\u02e3\u02e4\7U\2\2\u02e4\u02e5\7J\2\2\u02e5\u02e6\7Q\2"+ - "\2\u02e6\u02e7\7Y\2\2\u02e7\u009c\3\2\2\2\u02e8\u02e9\7U\2\2\u02e9\u02ea"+ - "\7[\2\2\u02ea\u02eb\7U\2\2\u02eb\u009e\3\2\2\2\u02ec\u02ed\7V\2\2\u02ed"+ - "\u02ee\7C\2\2\u02ee\u02ef\7D\2\2\u02ef\u02f0\7N\2\2\u02f0\u02f1\7G\2\2"+ - "\u02f1\u00a0\3\2\2\2\u02f2\u02f3\7V\2\2\u02f3\u02f4\7C\2\2\u02f4\u02f5"+ - "\7D\2\2\u02f5\u02f6\7N\2\2\u02f6\u02f7\7G\2\2\u02f7\u02f8\7U\2\2\u02f8"+ - "\u00a2\3\2\2\2\u02f9\u02fa\7V\2\2\u02fa\u02fb\7G\2\2\u02fb\u02fc\7Z\2"+ - "\2\u02fc\u02fd\7V\2\2\u02fd\u00a4\3\2\2\2\u02fe\u02ff\7V\2\2\u02ff\u0300"+ - "\7T\2\2\u0300\u0301\7W\2\2\u0301\u0302\7G\2\2\u0302\u00a6\3\2\2\2\u0303"+ - "\u0304\7V\2\2\u0304\u0305\7Q\2\2\u0305\u00a8\3\2\2\2\u0306\u0307\7V\2"+ - "\2\u0307\u0308\7[\2\2\u0308\u0309\7R\2\2\u0309\u030a\7G\2\2\u030a\u00aa"+ - "\3\2\2\2\u030b\u030c\7V\2\2\u030c\u030d\7[\2\2\u030d\u030e\7R\2\2\u030e"+ - "\u030f\7G\2\2\u030f\u0310\7U\2\2\u0310\u00ac\3\2\2\2\u0311\u0312\7W\2"+ - "\2\u0312\u0313\7U\2\2\u0313\u0314\7K\2\2\u0314\u0315\7P\2\2\u0315\u0316"+ - "\7I\2\2\u0316\u00ae\3\2\2\2\u0317\u0318\7X\2\2\u0318\u0319\7G\2\2\u0319"+ - "\u031a\7T\2\2\u031a\u031b\7K\2\2\u031b\u031c\7H\2\2\u031c\u031d\7[\2\2"+ - "\u031d\u00b0\3\2\2\2\u031e\u031f\7Y\2\2\u031f\u0320\7J\2\2\u0320\u0321"+ - "\7G\2\2\u0321\u0322\7T\2\2\u0322\u0323\7G\2\2\u0323\u00b2\3\2\2\2\u0324"+ - "\u0325\7Y\2\2\u0325\u0326\7K\2\2\u0326\u0327\7V\2\2\u0327\u0328\7J\2\2"+ - "\u0328\u00b4\3\2\2\2\u0329\u032a\7[\2\2\u032a\u032b\7G\2\2\u032b\u032c"+ - "\7C\2\2\u032c\u032d\7T\2\2\u032d\u00b6\3\2\2\2\u032e\u032f\7[\2\2\u032f"+ - "\u0330\7G\2\2\u0330\u0331\7C\2\2\u0331\u0332\7T\2\2\u0332\u0333\7U\2\2"+ - "\u0333\u00b8\3\2\2\2\u0334\u0335\7}\2\2\u0335\u0336\7G\2\2\u0336\u0337"+ - "\7U\2\2\u0337\u0338\7E\2\2\u0338\u0339\7C\2\2\u0339\u033a\7R\2\2\u033a"+ - "\u033b\7G\2\2\u033b\u00ba\3\2\2\2\u033c\u033d\7}\2\2\u033d\u033e\7H\2"+ - "\2\u033e\u033f\7P\2\2\u033f\u00bc\3\2\2\2\u0340\u0341\7}\2\2\u0341\u0342"+ - "\7N\2\2\u0342\u0343\7K\2\2\u0343\u0344\7O\2\2\u0344\u0345\7K\2\2\u0345"+ - "\u0346\7V\2\2\u0346\u00be\3\2\2\2\u0347\u0348\7}\2\2\u0348\u0349\7F\2"+ - "\2\u0349\u00c0\3\2\2\2\u034a\u034b\7}\2\2\u034b\u034c\7V\2\2\u034c\u00c2"+ - "\3\2\2\2\u034d\u034e\7}\2\2\u034e\u034f\7V\2\2\u034f\u0350\7U\2\2\u0350"+ - "\u00c4\3\2\2\2\u0351\u0352\7}\2\2\u0352\u0353\7I\2\2\u0353\u0354\7W\2"+ - "\2\u0354\u0355\7K\2\2\u0355\u0356\7F\2\2\u0356\u00c6\3\2\2\2\u0357\u0358"+ - "\7\177\2\2\u0358\u00c8\3\2\2\2\u0359\u035a\7?\2\2\u035a\u00ca\3\2\2\2"+ - "\u035b\u035c\7>\2\2\u035c\u035d\7?\2\2\u035d\u035e\7@\2\2\u035e\u00cc"+ - "\3\2\2\2\u035f\u0360\7>\2\2\u0360\u0364\7@\2\2\u0361\u0362\7#\2\2\u0362"+ - "\u0364\7?\2\2\u0363\u035f\3\2\2\2\u0363\u0361\3\2\2\2\u0364\u00ce\3\2"+ - "\2\2\u0365\u0366\7>\2\2\u0366\u00d0\3\2\2\2\u0367\u0368\7>\2\2\u0368\u0369"+ - "\7?\2\2\u0369\u00d2\3\2\2\2\u036a\u036b\7@\2\2\u036b\u00d4\3\2\2\2\u036c"+ - "\u036d\7@\2\2\u036d\u036e\7?\2\2\u036e\u00d6\3\2\2\2\u036f\u0370\7-\2"+ - "\2\u0370\u00d8\3\2\2\2\u0371\u0372\7/\2\2\u0372\u00da\3\2\2\2\u0373\u0374"+ - "\7,\2\2\u0374\u00dc\3\2\2\2\u0375\u0376\7\61\2\2\u0376\u00de\3\2\2\2\u0377"+ - "\u0378\7\'\2\2\u0378\u00e0\3\2\2\2\u0379\u037a\7~\2\2\u037a\u037b\7~\2"+ - "\2\u037b\u00e2\3\2\2\2\u037c\u037d\7\60\2\2\u037d\u00e4\3\2\2\2\u037e"+ - "\u037f\7A\2\2\u037f\u00e6\3\2\2\2\u0380\u0386\7)\2\2\u0381\u0385\n\2\2"+ - "\2\u0382\u0383\7)\2\2\u0383\u0385\7)\2\2\u0384\u0381\3\2\2\2\u0384\u0382"+ - "\3\2\2\2\u0385\u0388\3\2\2\2\u0386\u0384\3\2\2\2\u0386\u0387\3\2\2\2\u0387"+ - "\u0389\3\2\2\2\u0388\u0386\3\2\2\2\u0389\u038a\7)\2\2\u038a\u00e8\3\2"+ - "\2\2\u038b\u038d\5\u00f9}\2\u038c\u038b\3\2\2\2\u038d\u038e\3\2\2\2\u038e"+ - "\u038c\3\2\2\2\u038e\u038f\3\2\2\2\u038f\u00ea\3\2\2\2\u0390\u0392\5\u00f9"+ - "}\2\u0391\u0390\3\2\2\2\u0392\u0393\3\2\2\2\u0393\u0391\3\2\2\2\u0393"+ - "\u0394\3\2\2\2\u0394\u0395\3\2\2\2\u0395\u0399\5\u00e3r\2\u0396\u0398"+ - "\5\u00f9}\2\u0397\u0396\3\2\2\2\u0398\u039b\3\2\2\2\u0399\u0397\3\2\2"+ - "\2\u0399\u039a\3\2\2\2\u039a\u03bb\3\2\2\2\u039b\u0399\3\2\2\2\u039c\u039e"+ - "\5\u00e3r\2\u039d\u039f\5\u00f9}\2\u039e\u039d\3\2\2\2\u039f\u03a0\3\2"+ - "\2\2\u03a0\u039e\3\2\2\2\u03a0\u03a1\3\2\2\2\u03a1\u03bb\3\2\2\2\u03a2"+ - "\u03a4\5\u00f9}\2\u03a3\u03a2\3\2\2\2\u03a4\u03a5\3\2\2\2\u03a5\u03a3"+ - "\3\2\2\2\u03a5\u03a6\3\2\2\2\u03a6\u03ae\3\2\2\2\u03a7\u03ab\5\u00e3r"+ - "\2\u03a8\u03aa\5\u00f9}\2\u03a9\u03a8\3\2\2\2\u03aa\u03ad\3\2\2\2\u03ab"+ - "\u03a9\3\2\2\2\u03ab\u03ac\3\2\2\2\u03ac\u03af\3\2\2\2\u03ad\u03ab\3\2"+ - "\2\2\u03ae\u03a7\3\2\2\2\u03ae\u03af\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0"+ - "\u03b1\5\u00f7|\2\u03b1\u03bb\3\2\2\2\u03b2\u03b4\5\u00e3r\2\u03b3\u03b5"+ - "\5\u00f9}\2\u03b4\u03b3\3\2\2\2\u03b5\u03b6\3\2\2\2\u03b6\u03b4\3\2\2"+ - "\2\u03b6\u03b7\3\2\2\2\u03b7\u03b8\3\2\2\2\u03b8\u03b9\5\u00f7|\2\u03b9"+ - "\u03bb\3\2\2\2\u03ba\u0391\3\2\2\2\u03ba\u039c\3\2\2\2\u03ba\u03a3\3\2"+ - "\2\2\u03ba\u03b2\3\2\2\2\u03bb\u00ec\3\2\2\2\u03bc\u03bf\5\u00fb~\2\u03bd"+ - "\u03bf\7a\2\2\u03be\u03bc\3\2\2\2\u03be\u03bd\3\2\2\2\u03bf\u03c5\3\2"+ - "\2\2\u03c0\u03c4\5\u00fb~\2\u03c1\u03c4\5\u00f9}\2\u03c2\u03c4\t\3\2\2"+ - "\u03c3\u03c0\3\2\2\2\u03c3\u03c1\3\2\2\2\u03c3\u03c2\3\2\2\2\u03c4\u03c7"+ - "\3\2\2\2\u03c5\u03c3\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u00ee\3\2\2\2\u03c7"+ - "\u03c5\3\2\2\2\u03c8\u03cc\5\u00f9}\2\u03c9\u03cd\5\u00fb~\2\u03ca\u03cd"+ - "\5\u00f9}\2\u03cb\u03cd\t\4\2\2\u03cc\u03c9\3\2\2\2\u03cc\u03ca\3\2\2"+ - "\2\u03cc\u03cb\3\2\2\2\u03cd\u03ce\3\2\2\2\u03ce\u03cc\3\2\2\2\u03ce\u03cf"+ - "\3\2\2\2\u03cf\u00f0\3\2\2\2\u03d0\u03d4\5\u00fb~\2\u03d1\u03d4\5\u00f9"+ - "}\2\u03d2\u03d4\7a\2\2\u03d3\u03d0\3\2\2\2\u03d3\u03d1\3\2\2\2\u03d3\u03d2"+ - "\3\2\2\2\u03d4\u03d5\3\2\2\2\u03d5\u03d3\3\2\2\2\u03d5\u03d6\3\2\2\2\u03d6"+ - "\u00f2\3\2\2\2\u03d7\u03dd\7$\2\2\u03d8\u03dc\n\5\2\2\u03d9\u03da\7$\2"+ - "\2\u03da\u03dc\7$\2\2\u03db\u03d8\3\2\2\2\u03db\u03d9\3\2\2\2\u03dc\u03df"+ - "\3\2\2\2\u03dd\u03db\3\2\2\2\u03dd\u03de\3\2\2\2\u03de\u03e0\3\2\2\2\u03df"+ - "\u03dd\3\2\2\2\u03e0\u03e1\7$\2\2\u03e1\u00f4\3\2\2\2\u03e2\u03e8\7b\2"+ - "\2\u03e3\u03e7\n\6\2\2\u03e4\u03e5\7b\2\2\u03e5\u03e7\7b\2\2\u03e6\u03e3"+ - "\3\2\2\2\u03e6\u03e4\3\2\2\2\u03e7\u03ea\3\2\2\2\u03e8\u03e6\3\2\2\2\u03e8"+ - "\u03e9\3\2\2\2\u03e9\u03eb\3\2\2\2\u03ea\u03e8\3\2\2\2\u03eb\u03ec\7b"+ - "\2\2\u03ec\u00f6\3\2\2\2\u03ed\u03ef\7G\2\2\u03ee\u03f0\t\7\2\2\u03ef"+ - "\u03ee\3\2\2\2\u03ef\u03f0\3\2\2\2\u03f0\u03f2\3\2\2\2\u03f1\u03f3\5\u00f9"+ - "}\2\u03f2\u03f1\3\2\2\2\u03f3\u03f4\3\2\2\2\u03f4\u03f2\3\2\2\2\u03f4"+ - "\u03f5\3\2\2\2\u03f5\u00f8\3\2\2\2\u03f6\u03f7\t\b\2\2\u03f7\u00fa\3\2"+ - "\2\2\u03f8\u03f9\t\t\2\2\u03f9\u00fc\3\2\2\2\u03fa\u03fb\7/\2\2\u03fb"+ - "\u03fc\7/\2\2\u03fc\u0400\3\2\2\2\u03fd\u03ff\n\n\2\2\u03fe\u03fd\3\2"+ - "\2\2\u03ff\u0402\3\2\2\2\u0400\u03fe\3\2\2\2\u0400\u0401\3\2\2\2\u0401"+ - "\u0404\3\2\2\2\u0402\u0400\3\2\2\2\u0403\u0405\7\17\2\2\u0404\u0403\3"+ - "\2\2\2\u0404\u0405\3\2\2\2\u0405\u0407\3\2\2\2\u0406\u0408\7\f\2\2\u0407"+ - "\u0406\3\2\2\2\u0407\u0408\3\2\2\2\u0408\u0409\3\2\2\2\u0409\u040a\b\177"+ - "\2\2\u040a\u00fe\3\2\2\2\u040b\u040c\7\61\2\2\u040c\u040d\7,\2\2\u040d"+ - "\u0412\3\2\2\2\u040e\u0411\5\u00ff\u0080\2\u040f\u0411\13\2\2\2\u0410"+ - "\u040e\3\2\2\2\u0410\u040f\3\2\2\2\u0411\u0414\3\2\2\2\u0412\u0413\3\2"+ - "\2\2\u0412\u0410\3\2\2\2\u0413\u0415\3\2\2\2\u0414\u0412\3\2\2\2\u0415"+ - "\u0416\7,\2\2\u0416\u0417\7\61\2\2\u0417\u0418\3\2\2\2\u0418\u0419\b\u0080"+ - "\2\2\u0419\u0100\3\2\2\2\u041a\u041c\t\13\2\2\u041b\u041a\3\2\2\2\u041c"+ - "\u041d\3\2\2\2\u041d\u041b\3\2\2\2\u041d\u041e\3\2\2\2\u041e\u041f\3\2"+ - "\2\2\u041f\u0420\b\u0081\2\2\u0420\u0102\3\2\2\2\u0421\u0422\13\2\2\2"+ - "\u0422\u0104\3\2\2\2\"\2\u0363\u0384\u0386\u038e\u0393\u0399\u03a0\u03a5"+ - "\u03ab\u03ae\u03b6\u03ba\u03be\u03c3\u03c5\u03cc\u03ce\u03d3\u03d5\u03db"+ - "\u03dd\u03e6\u03e8\u03ef\u03f4\u0400\u0404\u0407\u0410\u0412\u041d\3\2"+ - "\3\2"; + "\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\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\21\3\21\3\21\3\22\3\22\3\22\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\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\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\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\30\3\30\3\30"+ + "\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\33"+ + "\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\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\35\3\35\3\36\3\36\3\36\3\36"+ + "\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\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-\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\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63"+ + "\3\63\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66"+ + "\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\3"+ + "8\38\38\39\39\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@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3C\3C\3C\3C\3C\3C\3"+ + "D\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3F\3F\3G\3"+ + "G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3K\3"+ + "K\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3N\3"+ + "N\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3"+ + "R\3R\3R\3R\3R\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3U\3U\3U\3V\3V\3V\3V\3V\3"+ + "W\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3"+ + "Z\3Z\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\3b\3b\3b\3c\3c"+ + "\3c\3c\3d\3d\3d\3d\3d\3d\3e\3e\3f\3f\3g\3g\3g\3g\3h\3h\3h\3h\5h\u0373"+ + "\nh\3i\3i\3j\3j\3j\3k\3k\3l\3l\3l\3m\3m\3n\3n\3o\3o\3p\3p\3q\3q\3r\3r"+ + "\3r\3s\3s\3t\3t\3u\3u\3u\3u\7u\u0394\nu\fu\16u\u0397\13u\3u\3u\3v\6v\u039c"+ + "\nv\rv\16v\u039d\3w\6w\u03a1\nw\rw\16w\u03a2\3w\3w\7w\u03a7\nw\fw\16w"+ + "\u03aa\13w\3w\3w\6w\u03ae\nw\rw\16w\u03af\3w\6w\u03b3\nw\rw\16w\u03b4"+ + "\3w\3w\7w\u03b9\nw\fw\16w\u03bc\13w\5w\u03be\nw\3w\3w\3w\3w\6w\u03c4\n"+ + "w\rw\16w\u03c5\3w\3w\5w\u03ca\nw\3x\3x\5x\u03ce\nx\3x\3x\3x\7x\u03d3\n"+ + "x\fx\16x\u03d6\13x\3y\3y\3y\3y\6y\u03dc\ny\ry\16y\u03dd\3z\3z\3z\6z\u03e3"+ + "\nz\rz\16z\u03e4\3{\3{\3{\3{\7{\u03eb\n{\f{\16{\u03ee\13{\3{\3{\3|\3|"+ + "\3|\3|\7|\u03f6\n|\f|\16|\u03f9\13|\3|\3|\3}\3}\5}\u03ff\n}\3}\6}\u0402"+ + "\n}\r}\16}\u0403\3~\3~\3\177\3\177\3\u0080\3\u0080\3\u0080\3\u0080\7\u0080"+ + "\u040e\n\u0080\f\u0080\16\u0080\u0411\13\u0080\3\u0080\5\u0080\u0414\n"+ + "\u0080\3\u0080\5\u0080\u0417\n\u0080\3\u0080\3\u0080\3\u0081\3\u0081\3"+ + "\u0081\3\u0081\3\u0081\7\u0081\u0420\n\u0081\f\u0081\16\u0081\u0423\13"+ + "\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0082\6\u0082\u042b\n"+ + "\u0082\r\u0082\16\u0082\u042c\3\u0082\3\u0082\3\u0083\3\u0083\3\u0421"+ + "\2\u0084\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\35"+ + "9\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66"+ + "k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG"+ + "\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009f"+ + "Q\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3"+ + "[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7"+ + "e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9n\u00db"+ + "o\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00edx\u00ef"+ + "y\u00f1z\u00f3{\u00f5|\u00f7}\u00f9\2\u00fb\2\u00fd\2\u00ff~\u0101\177"+ + "\u0103\u0080\u0105\u0081\3\2\f\3\2))\4\2BBaa\5\2<\3\2\2\2\u01ca\u01cb\7G\2\2\u01cb\u01cc\7Z\2"+ + "\2\u01cc\u01cd\7R\2\2\u01cd\u01ce\7N\2\2\u01ce\u01cf\7C\2\2\u01cf\u01d0"+ + "\7K\2\2\u01d0\u01d1\7P\2\2\u01d1@\3\2\2\2\u01d2\u01d3\7G\2\2\u01d3\u01d4"+ + "\7Z\2\2\u01d4\u01d5\7V\2\2\u01d5\u01d6\7T\2\2\u01d6\u01d7\7C\2\2\u01d7"+ + "\u01d8\7E\2\2\u01d8\u01d9\7V\2\2\u01d9B\3\2\2\2\u01da\u01db\7H\2\2\u01db"+ + "\u01dc\7C\2\2\u01dc\u01dd\7N\2\2\u01dd\u01de\7U\2\2\u01de\u01df\7G\2\2"+ + "\u01dfD\3\2\2\2\u01e0\u01e1\7H\2\2\u01e1\u01e2\7K\2\2\u01e2\u01e3\7T\2"+ + "\2\u01e3\u01e4\7U\2\2\u01e4\u01e5\7V\2\2\u01e5F\3\2\2\2\u01e6\u01e7\7"+ + "H\2\2\u01e7\u01e8\7Q\2\2\u01e8\u01e9\7T\2\2\u01e9\u01ea\7O\2\2\u01ea\u01eb"+ + "\7C\2\2\u01eb\u01ec\7V\2\2\u01ecH\3\2\2\2\u01ed\u01ee\7H\2\2\u01ee\u01ef"+ + "\7T\2\2\u01ef\u01f0\7Q\2\2\u01f0\u01f1\7O\2\2\u01f1J\3\2\2\2\u01f2\u01f3"+ + "\7H\2\2\u01f3\u01f4\7W\2\2\u01f4\u01f5\7N\2\2\u01f5\u01f6\7N\2\2\u01f6"+ + "L\3\2\2\2\u01f7\u01f8\7H\2\2\u01f8\u01f9\7W\2\2\u01f9\u01fa\7P\2\2\u01fa"+ + "\u01fb\7E\2\2\u01fb\u01fc\7V\2\2\u01fc\u01fd\7K\2\2\u01fd\u01fe\7Q\2\2"+ + "\u01fe\u01ff\7P\2\2\u01ff\u0200\7U\2\2\u0200N\3\2\2\2\u0201\u0202\7I\2"+ + "\2\u0202\u0203\7T\2\2\u0203\u0204\7C\2\2\u0204\u0205\7R\2\2\u0205\u0206"+ + "\7J\2\2\u0206\u0207\7X\2\2\u0207\u0208\7K\2\2\u0208\u0209\7\\\2\2\u0209"+ + "P\3\2\2\2\u020a\u020b\7I\2\2\u020b\u020c\7T\2\2\u020c\u020d\7Q\2\2\u020d"+ + "\u020e\7W\2\2\u020e\u020f\7R\2\2\u020fR\3\2\2\2\u0210\u0211\7J\2\2\u0211"+ + "\u0212\7C\2\2\u0212\u0213\7X\2\2\u0213\u0214\7K\2\2\u0214\u0215\7P\2\2"+ + "\u0215\u0216\7I\2\2\u0216T\3\2\2\2\u0217\u0218\7J\2\2\u0218\u0219\7Q\2"+ + "\2\u0219\u021a\7W\2\2\u021a\u021b\7T\2\2\u021bV\3\2\2\2\u021c\u021d\7"+ + "J\2\2\u021d\u021e\7Q\2\2\u021e\u021f\7W\2\2\u021f\u0220\7T\2\2\u0220\u0221"+ + "\7U\2\2\u0221X\3\2\2\2\u0222\u0223\7K\2\2\u0223\u0224\7P\2\2\u0224Z\3"+ + "\2\2\2\u0225\u0226\7K\2\2\u0226\u0227\7P\2\2\u0227\u0228\7P\2\2\u0228"+ + "\u0229\7G\2\2\u0229\u022a\7T\2\2\u022a\\\3\2\2\2\u022b\u022c\7K\2\2\u022c"+ + "\u022d\7P\2\2\u022d\u022e\7V\2\2\u022e\u022f\7G\2\2\u022f\u0230\7T\2\2"+ + "\u0230\u0231\7X\2\2\u0231\u0232\7C\2\2\u0232\u0233\7N\2\2\u0233^\3\2\2"+ + "\2\u0234\u0235\7K\2\2\u0235\u0236\7U\2\2\u0236`\3\2\2\2\u0237\u0238\7"+ + "L\2\2\u0238\u0239\7Q\2\2\u0239\u023a\7K\2\2\u023a\u023b\7P\2\2\u023bb"+ + "\3\2\2\2\u023c\u023d\7N\2\2\u023d\u023e\7C\2\2\u023e\u023f\7U\2\2\u023f"+ + "\u0240\7V\2\2\u0240d\3\2\2\2\u0241\u0242\7N\2\2\u0242\u0243\7G\2\2\u0243"+ + "\u0244\7H\2\2\u0244\u0245\7V\2\2\u0245f\3\2\2\2\u0246\u0247\7N\2\2\u0247"+ + "\u0248\7K\2\2\u0248\u0249\7M\2\2\u0249\u024a\7G\2\2\u024ah\3\2\2\2\u024b"+ + "\u024c\7N\2\2\u024c\u024d\7K\2\2\u024d\u024e\7O\2\2\u024e\u024f\7K\2\2"+ + "\u024f\u0250\7V\2\2\u0250j\3\2\2\2\u0251\u0252\7O\2\2\u0252\u0253\7C\2"+ + "\2\u0253\u0254\7R\2\2\u0254\u0255\7R\2\2\u0255\u0256\7G\2\2\u0256\u0257"+ + "\7F\2\2\u0257l\3\2\2\2\u0258\u0259\7O\2\2\u0259\u025a\7C\2\2\u025a\u025b"+ + "\7V\2\2\u025b\u025c\7E\2\2\u025c\u025d\7J\2\2\u025dn\3\2\2\2\u025e\u025f"+ + "\7O\2\2\u025f\u0260\7K\2\2\u0260\u0261\7P\2\2\u0261\u0262\7W\2\2\u0262"+ + "\u0263\7V\2\2\u0263\u0264\7G\2\2\u0264p\3\2\2\2\u0265\u0266\7O\2\2\u0266"+ + "\u0267\7K\2\2\u0267\u0268\7P\2\2\u0268\u0269\7W\2\2\u0269\u026a\7V\2\2"+ + "\u026a\u026b\7G\2\2\u026b\u026c\7U\2\2\u026cr\3\2\2\2\u026d\u026e\7O\2"+ + "\2\u026e\u026f\7Q\2\2\u026f\u0270\7P\2\2\u0270\u0271\7V\2\2\u0271\u0272"+ + "\7J\2\2\u0272t\3\2\2\2\u0273\u0274\7O\2\2\u0274\u0275\7Q\2\2\u0275\u0276"+ + "\7P\2\2\u0276\u0277\7V\2\2\u0277\u0278\7J\2\2\u0278\u0279\7U\2\2\u0279"+ + "v\3\2\2\2\u027a\u027b\7P\2\2\u027b\u027c\7C\2\2\u027c\u027d\7V\2\2\u027d"+ + "\u027e\7W\2\2\u027e\u027f\7T\2\2\u027f\u0280\7C\2\2\u0280\u0281\7N\2\2"+ + "\u0281x\3\2\2\2\u0282\u0283\7P\2\2\u0283\u0284\7Q\2\2\u0284\u0285\7V\2"+ + "\2\u0285z\3\2\2\2\u0286\u0287\7P\2\2\u0287\u0288\7W\2\2\u0288\u0289\7"+ + "N\2\2\u0289\u028a\7N\2\2\u028a|\3\2\2\2\u028b\u028c\7P\2\2\u028c\u028d"+ + "\7W\2\2\u028d\u028e\7N\2\2\u028e\u028f\7N\2\2\u028f\u0290\7U\2\2\u0290"+ + "~\3\2\2\2\u0291\u0292\7Q\2\2\u0292\u0293\7P\2\2\u0293\u0080\3\2\2\2\u0294"+ + "\u0295\7Q\2\2\u0295\u0296\7R\2\2\u0296\u0297\7V\2\2\u0297\u0298\7K\2\2"+ + "\u0298\u0299\7O\2\2\u0299\u029a\7K\2\2\u029a\u029b\7\\\2\2\u029b\u029c"+ + "\7G\2\2\u029c\u029d\7F\2\2\u029d\u0082\3\2\2\2\u029e\u029f\7Q\2\2\u029f"+ + "\u02a0\7T\2\2\u02a0\u0084\3\2\2\2\u02a1\u02a2\7Q\2\2\u02a2\u02a3\7T\2"+ + "\2\u02a3\u02a4\7F\2\2\u02a4\u02a5\7G\2\2\u02a5\u02a6\7T\2\2\u02a6\u0086"+ + "\3\2\2\2\u02a7\u02a8\7Q\2\2\u02a8\u02a9\7W\2\2\u02a9\u02aa\7V\2\2\u02aa"+ + "\u02ab\7G\2\2\u02ab\u02ac\7T\2\2\u02ac\u0088\3\2\2\2\u02ad\u02ae\7R\2"+ + "\2\u02ae\u02af\7C\2\2\u02af\u02b0\7T\2\2\u02b0\u02b1\7U\2\2\u02b1\u02b2"+ + "\7G\2\2\u02b2\u02b3\7F\2\2\u02b3\u008a\3\2\2\2\u02b4\u02b5\7R\2\2\u02b5"+ + "\u02b6\7J\2\2\u02b6\u02b7\7[\2\2\u02b7\u02b8\7U\2\2\u02b8\u02b9\7K\2\2"+ + "\u02b9\u02ba\7E\2\2\u02ba\u02bb\7C\2\2\u02bb\u02bc\7N\2\2\u02bc\u008c"+ + "\3\2\2\2\u02bd\u02be\7R\2\2\u02be\u02bf\7N\2\2\u02bf\u02c0\7C\2\2\u02c0"+ + "\u02c1\7P\2\2\u02c1\u008e\3\2\2\2\u02c2\u02c3\7T\2\2\u02c3\u02c4\7K\2"+ + "\2\u02c4\u02c5\7I\2\2\u02c5\u02c6\7J\2\2\u02c6\u02c7\7V\2\2\u02c7\u0090"+ + "\3\2\2\2\u02c8\u02c9\7T\2\2\u02c9\u02ca\7N\2\2\u02ca\u02cb\7K\2\2\u02cb"+ + "\u02cc\7M\2\2\u02cc\u02cd\7G\2\2\u02cd\u0092\3\2\2\2\u02ce\u02cf\7S\2"+ + "\2\u02cf\u02d0\7W\2\2\u02d0\u02d1\7G\2\2\u02d1\u02d2\7T\2\2\u02d2\u02d3"+ + "\7[\2\2\u02d3\u0094\3\2\2\2\u02d4\u02d5\7U\2\2\u02d5\u02d6\7E\2\2\u02d6"+ + "\u02d7\7J\2\2\u02d7\u02d8\7G\2\2\u02d8\u02d9\7O\2\2\u02d9\u02da\7C\2\2"+ + "\u02da\u02db\7U\2\2\u02db\u0096\3\2\2\2\u02dc\u02dd\7U\2\2\u02dd\u02de"+ + "\7G\2\2\u02de\u02df\7E\2\2\u02df\u02e0\7Q\2\2\u02e0\u02e1\7P\2\2\u02e1"+ + "\u02e2\7F\2\2\u02e2\u0098\3\2\2\2\u02e3\u02e4\7U\2\2\u02e4\u02e5\7G\2"+ + "\2\u02e5\u02e6\7E\2\2\u02e6\u02e7\7Q\2\2\u02e7\u02e8\7P\2\2\u02e8\u02e9"+ + "\7F\2\2\u02e9\u02ea\7U\2\2\u02ea\u009a\3\2\2\2\u02eb\u02ec\7U\2\2\u02ec"+ + "\u02ed\7G\2\2\u02ed\u02ee\7N\2\2\u02ee\u02ef\7G\2\2\u02ef\u02f0\7E\2\2"+ + "\u02f0\u02f1\7V\2\2\u02f1\u009c\3\2\2\2\u02f2\u02f3\7U\2\2\u02f3\u02f4"+ + "\7J\2\2\u02f4\u02f5\7Q\2\2\u02f5\u02f6\7Y\2\2\u02f6\u009e\3\2\2\2\u02f7"+ + "\u02f8\7U\2\2\u02f8\u02f9\7[\2\2\u02f9\u02fa\7U\2\2\u02fa\u00a0\3\2\2"+ + "\2\u02fb\u02fc\7V\2\2\u02fc\u02fd\7C\2\2\u02fd\u02fe\7D\2\2\u02fe\u02ff"+ + "\7N\2\2\u02ff\u0300\7G\2\2\u0300\u00a2\3\2\2\2\u0301\u0302\7V\2\2\u0302"+ + "\u0303\7C\2\2\u0303\u0304\7D\2\2\u0304\u0305\7N\2\2\u0305\u0306\7G\2\2"+ + "\u0306\u0307\7U\2\2\u0307\u00a4\3\2\2\2\u0308\u0309\7V\2\2\u0309\u030a"+ + "\7G\2\2\u030a\u030b\7Z\2\2\u030b\u030c\7V\2\2\u030c\u00a6\3\2\2\2\u030d"+ + "\u030e\7V\2\2\u030e\u030f\7T\2\2\u030f\u0310\7W\2\2\u0310\u0311\7G\2\2"+ + "\u0311\u00a8\3\2\2\2\u0312\u0313\7V\2\2\u0313\u0314\7Q\2\2\u0314\u00aa"+ + "\3\2\2\2\u0315\u0316\7V\2\2\u0316\u0317\7[\2\2\u0317\u0318\7R\2\2\u0318"+ + "\u0319\7G\2\2\u0319\u00ac\3\2\2\2\u031a\u031b\7V\2\2\u031b\u031c\7[\2"+ + "\2\u031c\u031d\7R\2\2\u031d\u031e\7G\2\2\u031e\u031f\7U\2\2\u031f\u00ae"+ + "\3\2\2\2\u0320\u0321\7W\2\2\u0321\u0322\7U\2\2\u0322\u0323\7K\2\2\u0323"+ + "\u0324\7P\2\2\u0324\u0325\7I\2\2\u0325\u00b0\3\2\2\2\u0326\u0327\7X\2"+ + "\2\u0327\u0328\7G\2\2\u0328\u0329\7T\2\2\u0329\u032a\7K\2\2\u032a\u032b"+ + "\7H\2\2\u032b\u032c\7[\2\2\u032c\u00b2\3\2\2\2\u032d\u032e\7Y\2\2\u032e"+ + "\u032f\7J\2\2\u032f\u0330\7G\2\2\u0330\u0331\7T\2\2\u0331\u0332\7G\2\2"+ + "\u0332\u00b4\3\2\2\2\u0333\u0334\7Y\2\2\u0334\u0335\7K\2\2\u0335\u0336"+ + "\7V\2\2\u0336\u0337\7J\2\2\u0337\u00b6\3\2\2\2\u0338\u0339\7[\2\2\u0339"+ + "\u033a\7G\2\2\u033a\u033b\7C\2\2\u033b\u033c\7T\2\2\u033c\u00b8\3\2\2"+ + "\2\u033d\u033e\7[\2\2\u033e\u033f\7G\2\2\u033f\u0340\7C\2\2\u0340\u0341"+ + "\7T\2\2\u0341\u0342\7U\2\2\u0342\u00ba\3\2\2\2\u0343\u0344\7}\2\2\u0344"+ + "\u0345\7G\2\2\u0345\u0346\7U\2\2\u0346\u0347\7E\2\2\u0347\u0348\7C\2\2"+ + "\u0348\u0349\7R\2\2\u0349\u034a\7G\2\2\u034a\u00bc\3\2\2\2\u034b\u034c"+ + "\7}\2\2\u034c\u034d\7H\2\2\u034d\u034e\7P\2\2\u034e\u00be\3\2\2\2\u034f"+ + "\u0350\7}\2\2\u0350\u0351\7N\2\2\u0351\u0352\7K\2\2\u0352\u0353\7O\2\2"+ + "\u0353\u0354\7K\2\2\u0354\u0355\7V\2\2\u0355\u00c0\3\2\2\2\u0356\u0357"+ + "\7}\2\2\u0357\u0358\7F\2\2\u0358\u00c2\3\2\2\2\u0359\u035a\7}\2\2\u035a"+ + "\u035b\7V\2\2\u035b\u00c4\3\2\2\2\u035c\u035d\7}\2\2\u035d\u035e\7V\2"+ + "\2\u035e\u035f\7U\2\2\u035f\u00c6\3\2\2\2\u0360\u0361\7}\2\2\u0361\u0362"+ + "\7I\2\2\u0362\u0363\7W\2\2\u0363\u0364\7K\2\2\u0364\u0365\7F\2\2\u0365"+ + "\u00c8\3\2\2\2\u0366\u0367\7\177\2\2\u0367\u00ca\3\2\2\2\u0368\u0369\7"+ + "?\2\2\u0369\u00cc\3\2\2\2\u036a\u036b\7>\2\2\u036b\u036c\7?\2\2\u036c"+ + "\u036d\7@\2\2\u036d\u00ce\3\2\2\2\u036e\u036f\7>\2\2\u036f\u0373\7@\2"+ + "\2\u0370\u0371\7#\2\2\u0371\u0373\7?\2\2\u0372\u036e\3\2\2\2\u0372\u0370"+ + "\3\2\2\2\u0373\u00d0\3\2\2\2\u0374\u0375\7>\2\2\u0375\u00d2\3\2\2\2\u0376"+ + "\u0377\7>\2\2\u0377\u0378\7?\2\2\u0378\u00d4\3\2\2\2\u0379\u037a\7@\2"+ + "\2\u037a\u00d6\3\2\2\2\u037b\u037c\7@\2\2\u037c\u037d\7?\2\2\u037d\u00d8"+ + "\3\2\2\2\u037e\u037f\7-\2\2\u037f\u00da\3\2\2\2\u0380\u0381\7/\2\2\u0381"+ + "\u00dc\3\2\2\2\u0382\u0383\7,\2\2\u0383\u00de\3\2\2\2\u0384\u0385\7\61"+ + "\2\2\u0385\u00e0\3\2\2\2\u0386\u0387\7\'\2\2\u0387\u00e2\3\2\2\2\u0388"+ + "\u0389\7~\2\2\u0389\u038a\7~\2\2\u038a\u00e4\3\2\2\2\u038b\u038c\7\60"+ + "\2\2\u038c\u00e6\3\2\2\2\u038d\u038e\7A\2\2\u038e\u00e8\3\2\2\2\u038f"+ + "\u0395\7)\2\2\u0390\u0394\n\2\2\2\u0391\u0392\7)\2\2\u0392\u0394\7)\2"+ + "\2\u0393\u0390\3\2\2\2\u0393\u0391\3\2\2\2\u0394\u0397\3\2\2\2\u0395\u0393"+ + "\3\2\2\2\u0395\u0396\3\2\2\2\u0396\u0398\3\2\2\2\u0397\u0395\3\2\2\2\u0398"+ + "\u0399\7)\2\2\u0399\u00ea\3\2\2\2\u039a\u039c\5\u00fb~\2\u039b\u039a\3"+ + "\2\2\2\u039c\u039d\3\2\2\2\u039d\u039b\3\2\2\2\u039d\u039e\3\2\2\2\u039e"+ + "\u00ec\3\2\2\2\u039f\u03a1\5\u00fb~\2\u03a0\u039f\3\2\2\2\u03a1\u03a2"+ + "\3\2\2\2\u03a2\u03a0\3\2\2\2\u03a2\u03a3\3\2\2\2\u03a3\u03a4\3\2\2\2\u03a4"+ + "\u03a8\5\u00e5s\2\u03a5\u03a7\5\u00fb~\2\u03a6\u03a5\3\2\2\2\u03a7\u03aa"+ + "\3\2\2\2\u03a8\u03a6\3\2\2\2\u03a8\u03a9\3\2\2\2\u03a9\u03ca\3\2\2\2\u03aa"+ + "\u03a8\3\2\2\2\u03ab\u03ad\5\u00e5s\2\u03ac\u03ae\5\u00fb~\2\u03ad\u03ac"+ + "\3\2\2\2\u03ae\u03af\3\2\2\2\u03af\u03ad\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0"+ + "\u03ca\3\2\2\2\u03b1\u03b3\5\u00fb~\2\u03b2\u03b1\3\2\2\2\u03b3\u03b4"+ + "\3\2\2\2\u03b4\u03b2\3\2\2\2\u03b4\u03b5\3\2\2\2\u03b5\u03bd\3\2\2\2\u03b6"+ + "\u03ba\5\u00e5s\2\u03b7\u03b9\5\u00fb~\2\u03b8\u03b7\3\2\2\2\u03b9\u03bc"+ + "\3\2\2\2\u03ba\u03b8\3\2\2\2\u03ba\u03bb\3\2\2\2\u03bb\u03be\3\2\2\2\u03bc"+ + "\u03ba\3\2\2\2\u03bd\u03b6\3\2\2\2\u03bd\u03be\3\2\2\2\u03be\u03bf\3\2"+ + "\2\2\u03bf\u03c0\5\u00f9}\2\u03c0\u03ca\3\2\2\2\u03c1\u03c3\5\u00e5s\2"+ + "\u03c2\u03c4\5\u00fb~\2\u03c3\u03c2\3\2\2\2\u03c4\u03c5\3\2\2\2\u03c5"+ + "\u03c3\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u03c7\3\2\2\2\u03c7\u03c8\5\u00f9"+ + "}\2\u03c8\u03ca\3\2\2\2\u03c9\u03a0\3\2\2\2\u03c9\u03ab\3\2\2\2\u03c9"+ + "\u03b2\3\2\2\2\u03c9\u03c1\3\2\2\2\u03ca\u00ee\3\2\2\2\u03cb\u03ce\5\u00fd"+ + "\177\2\u03cc\u03ce\7a\2\2\u03cd\u03cb\3\2\2\2\u03cd\u03cc\3\2\2\2\u03ce"+ + "\u03d4\3\2\2\2\u03cf\u03d3\5\u00fd\177\2\u03d0\u03d3\5\u00fb~\2\u03d1"+ + "\u03d3\t\3\2\2\u03d2\u03cf\3\2\2\2\u03d2\u03d0\3\2\2\2\u03d2\u03d1\3\2"+ + "\2\2\u03d3\u03d6\3\2\2\2\u03d4\u03d2\3\2\2\2\u03d4\u03d5\3\2\2\2\u03d5"+ + "\u00f0\3\2\2\2\u03d6\u03d4\3\2\2\2\u03d7\u03db\5\u00fb~\2\u03d8\u03dc"+ + "\5\u00fd\177\2\u03d9\u03dc\5\u00fb~\2\u03da\u03dc\t\4\2\2\u03db\u03d8"+ + "\3\2\2\2\u03db\u03d9\3\2\2\2\u03db\u03da\3\2\2\2\u03dc\u03dd\3\2\2\2\u03dd"+ + "\u03db\3\2\2\2\u03dd\u03de\3\2\2\2\u03de\u00f2\3\2\2\2\u03df\u03e3\5\u00fd"+ + "\177\2\u03e0\u03e3\5\u00fb~\2\u03e1\u03e3\7a\2\2\u03e2\u03df\3\2\2\2\u03e2"+ + "\u03e0\3\2\2\2\u03e2\u03e1\3\2\2\2\u03e3\u03e4\3\2\2\2\u03e4\u03e2\3\2"+ + "\2\2\u03e4\u03e5\3\2\2\2\u03e5\u00f4\3\2\2\2\u03e6\u03ec\7$\2\2\u03e7"+ + "\u03eb\n\5\2\2\u03e8\u03e9\7$\2\2\u03e9\u03eb\7$\2\2\u03ea\u03e7\3\2\2"+ + "\2\u03ea\u03e8\3\2\2\2\u03eb\u03ee\3\2\2\2\u03ec\u03ea\3\2\2\2\u03ec\u03ed"+ + "\3\2\2\2\u03ed\u03ef\3\2\2\2\u03ee\u03ec\3\2\2\2\u03ef\u03f0\7$\2\2\u03f0"+ + "\u00f6\3\2\2\2\u03f1\u03f7\7b\2\2\u03f2\u03f6\n\6\2\2\u03f3\u03f4\7b\2"+ + "\2\u03f4\u03f6\7b\2\2\u03f5\u03f2\3\2\2\2\u03f5\u03f3\3\2\2\2\u03f6\u03f9"+ + "\3\2\2\2\u03f7\u03f5\3\2\2\2\u03f7\u03f8\3\2\2\2\u03f8\u03fa\3\2\2\2\u03f9"+ + "\u03f7\3\2\2\2\u03fa\u03fb\7b\2\2\u03fb\u00f8\3\2\2\2\u03fc\u03fe\7G\2"+ + "\2\u03fd\u03ff\t\7\2\2\u03fe\u03fd\3\2\2\2\u03fe\u03ff\3\2\2\2\u03ff\u0401"+ + "\3\2\2\2\u0400\u0402\5\u00fb~\2\u0401\u0400\3\2\2\2\u0402\u0403\3\2\2"+ + "\2\u0403\u0401\3\2\2\2\u0403\u0404\3\2\2\2\u0404\u00fa\3\2\2\2\u0405\u0406"+ + "\t\b\2\2\u0406\u00fc\3\2\2\2\u0407\u0408\t\t\2\2\u0408\u00fe\3\2\2\2\u0409"+ + "\u040a\7/\2\2\u040a\u040b\7/\2\2\u040b\u040f\3\2\2\2\u040c\u040e\n\n\2"+ + "\2\u040d\u040c\3\2\2\2\u040e\u0411\3\2\2\2\u040f\u040d\3\2\2\2\u040f\u0410"+ + "\3\2\2\2\u0410\u0413\3\2\2\2\u0411\u040f\3\2\2\2\u0412\u0414\7\17\2\2"+ + "\u0413\u0412\3\2\2\2\u0413\u0414\3\2\2\2\u0414\u0416\3\2\2\2\u0415\u0417"+ + "\7\f\2\2\u0416\u0415\3\2\2\2\u0416\u0417\3\2\2\2\u0417\u0418\3\2\2\2\u0418"+ + "\u0419\b\u0080\2\2\u0419\u0100\3\2\2\2\u041a\u041b\7\61\2\2\u041b\u041c"+ + "\7,\2\2\u041c\u0421\3\2\2\2\u041d\u0420\5\u0101\u0081\2\u041e\u0420\13"+ + "\2\2\2\u041f\u041d\3\2\2\2\u041f\u041e\3\2\2\2\u0420\u0423\3\2\2\2\u0421"+ + "\u0422\3\2\2\2\u0421\u041f\3\2\2\2\u0422\u0424\3\2\2\2\u0423\u0421\3\2"+ + "\2\2\u0424\u0425\7,\2\2\u0425\u0426\7\61\2\2\u0426\u0427\3\2\2\2\u0427"+ + "\u0428\b\u0081\2\2\u0428\u0102\3\2\2\2\u0429\u042b\t\13\2\2\u042a\u0429"+ + "\3\2\2\2\u042b\u042c\3\2\2\2\u042c\u042a\3\2\2\2\u042c\u042d\3\2\2\2\u042d"+ + "\u042e\3\2\2\2\u042e\u042f\b\u0082\2\2\u042f\u0104\3\2\2\2\u0430\u0431"+ + "\13\2\2\2\u0431\u0106\3\2\2\2\"\2\u0372\u0393\u0395\u039d\u03a2\u03a8"+ + "\u03af\u03b4\u03ba\u03bd\u03c5\u03c9\u03cd\u03d2\u03d4\u03db\u03dd\u03e2"+ + "\u03e4\u03ea\u03ec\u03f5\u03f7\u03fe\u0403\u040f\u0413\u0416\u041f\u0421"+ + "\u042c\3\2\3\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java index 7b5a8ea5fbad9..71b1808022fd2 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java @@ -597,6 +597,18 @@ interface SqlBaseListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExtract(SqlBaseParser.ExtractContext ctx); + /** + * Enter a parse tree produced by the {@code currentDateFunction} + * labeled alternative in {@link SqlBaseParser#primaryExpression}. + * @param ctx the parse tree + */ + void enterCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx); + /** + * Exit a parse tree produced by the {@code currentDateFunction} + * labeled alternative in {@link SqlBaseParser#primaryExpression}. + * @param ctx the parse tree + */ + void exitCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx); /** * Enter a parse tree produced by the {@code currentDateTimeFunction} * labeled alternative in {@link SqlBaseParser#primaryExpression}. @@ -701,6 +713,16 @@ interface SqlBaseListener extends ParseTreeListener { * @param ctx the parse tree */ void exitCastTemplate(SqlBaseParser.CastTemplateContext ctx); + /** + * Enter a parse tree produced by {@link SqlBaseParser#builtinDateFunction}. + * @param ctx the parse tree + */ + void enterBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx); + /** + * Exit a parse tree produced by {@link SqlBaseParser#builtinDateFunction}. + * @param ctx the parse tree + */ + void exitBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx); /** * Enter a parse tree produced by {@link SqlBaseParser#builtinDateTimeFunction}. * @param ctx the parse tree diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java index 7549bfab8320a..4a0e7b5ec1e30 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java @@ -19,23 +19,24 @@ class SqlBaseParser extends Parser { 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, CATALOG=15, CATALOGS=16, COLUMNS=17, - CONVERT=18, CURRENT=19, CURRENT_TIMESTAMP=20, DAY=21, DAYS=22, DEBUG=23, - DESC=24, DESCRIBE=25, DISTINCT=26, ESCAPE=27, EXECUTABLE=28, EXISTS=29, - EXPLAIN=30, EXTRACT=31, FALSE=32, FIRST=33, FORMAT=34, FROM=35, FULL=36, - FUNCTIONS=37, GRAPHVIZ=38, GROUP=39, HAVING=40, HOUR=41, HOURS=42, IN=43, - INNER=44, INTERVAL=45, IS=46, JOIN=47, LAST=48, LEFT=49, LIKE=50, LIMIT=51, - MAPPED=52, MATCH=53, MINUTE=54, MINUTES=55, MONTH=56, MONTHS=57, NATURAL=58, - NOT=59, NULL=60, NULLS=61, ON=62, OPTIMIZED=63, OR=64, ORDER=65, OUTER=66, - PARSED=67, PHYSICAL=68, PLAN=69, RIGHT=70, RLIKE=71, QUERY=72, SCHEMAS=73, - SECOND=74, SECONDS=75, SELECT=76, SHOW=77, SYS=78, TABLE=79, TABLES=80, - TEXT=81, TRUE=82, TO=83, TYPE=84, TYPES=85, USING=86, VERIFY=87, WHERE=88, - WITH=89, YEAR=90, YEARS=91, ESCAPE_ESC=92, FUNCTION_ESC=93, LIMIT_ESC=94, - DATE_ESC=95, TIME_ESC=96, TIMESTAMP_ESC=97, GUID_ESC=98, ESC_END=99, EQ=100, - NULLEQ=101, NEQ=102, LT=103, LTE=104, GT=105, GTE=106, PLUS=107, MINUS=108, - ASTERISK=109, SLASH=110, PERCENT=111, CONCAT=112, DOT=113, PARAM=114, - STRING=115, INTEGER_VALUE=116, DECIMAL_VALUE=117, IDENTIFIER=118, DIGIT_IDENTIFIER=119, - TABLE_IDENTIFIER=120, QUOTED_IDENTIFIER=121, BACKQUOTED_IDENTIFIER=122, - SIMPLE_COMMENT=123, BRACKETED_COMMENT=124, WS=125, UNRECOGNIZED=126, DELIMITER=127; + CONVERT=18, CURRENT=19, CURRENT_DATE=20, CURRENT_TIMESTAMP=21, DAY=22, + DAYS=23, DEBUG=24, DESC=25, DESCRIBE=26, DISTINCT=27, ESCAPE=28, EXECUTABLE=29, + EXISTS=30, EXPLAIN=31, EXTRACT=32, FALSE=33, FIRST=34, FORMAT=35, FROM=36, + FULL=37, FUNCTIONS=38, GRAPHVIZ=39, GROUP=40, HAVING=41, HOUR=42, HOURS=43, + IN=44, INNER=45, INTERVAL=46, IS=47, JOIN=48, LAST=49, LEFT=50, LIKE=51, + LIMIT=52, MAPPED=53, MATCH=54, MINUTE=55, MINUTES=56, MONTH=57, MONTHS=58, + NATURAL=59, NOT=60, NULL=61, NULLS=62, ON=63, OPTIMIZED=64, OR=65, ORDER=66, + OUTER=67, PARSED=68, PHYSICAL=69, PLAN=70, RIGHT=71, RLIKE=72, QUERY=73, + SCHEMAS=74, SECOND=75, SECONDS=76, SELECT=77, SHOW=78, SYS=79, TABLE=80, + TABLES=81, TEXT=82, TRUE=83, TO=84, TYPE=85, TYPES=86, USING=87, VERIFY=88, + WHERE=89, WITH=90, YEAR=91, YEARS=92, ESCAPE_ESC=93, FUNCTION_ESC=94, + LIMIT_ESC=95, DATE_ESC=96, TIME_ESC=97, TIMESTAMP_ESC=98, GUID_ESC=99, + ESC_END=100, EQ=101, NULLEQ=102, NEQ=103, LT=104, LTE=105, GT=106, GTE=107, + PLUS=108, MINUS=109, ASTERISK=110, SLASH=111, PERCENT=112, CONCAT=113, + DOT=114, PARAM=115, STRING=116, INTEGER_VALUE=117, DECIMAL_VALUE=118, + IDENTIFIER=119, DIGIT_IDENTIFIER=120, TABLE_IDENTIFIER=121, QUOTED_IDENTIFIER=122, + BACKQUOTED_IDENTIFIER=123, SIMPLE_COMMENT=124, BRACKETED_COMMENT=125, + WS=126, UNRECOGNIZED=127, DELIMITER=128; public static final int RULE_singleStatement = 0, RULE_singleExpression = 1, RULE_statement = 2, RULE_query = 3, RULE_queryNoWith = 4, RULE_limitClause = 5, RULE_queryTerm = 6, @@ -46,13 +47,14 @@ class SqlBaseParser extends Parser { RULE_expression = 21, RULE_booleanExpression = 22, RULE_matchQueryOptions = 23, RULE_predicated = 24, RULE_predicate = 25, RULE_likePattern = 26, RULE_pattern = 27, RULE_patternEscape = 28, RULE_valueExpression = 29, RULE_primaryExpression = 30, - RULE_castExpression = 31, RULE_castTemplate = 32, RULE_builtinDateTimeFunction = 33, - RULE_convertTemplate = 34, RULE_extractExpression = 35, RULE_extractTemplate = 36, - RULE_functionExpression = 37, RULE_functionTemplate = 38, RULE_functionName = 39, - RULE_constant = 40, RULE_comparisonOperator = 41, RULE_booleanValue = 42, - RULE_interval = 43, RULE_intervalField = 44, RULE_dataType = 45, RULE_qualifiedName = 46, - RULE_identifier = 47, RULE_tableIdentifier = 48, RULE_quoteIdentifier = 49, - RULE_unquoteIdentifier = 50, RULE_number = 51, RULE_string = 52, RULE_nonReserved = 53; + RULE_castExpression = 31, RULE_castTemplate = 32, RULE_builtinDateFunction = 33, + RULE_builtinDateTimeFunction = 34, RULE_convertTemplate = 35, RULE_extractExpression = 36, + RULE_extractTemplate = 37, RULE_functionExpression = 38, RULE_functionTemplate = 39, + RULE_functionName = 40, RULE_constant = 41, RULE_comparisonOperator = 42, + RULE_booleanValue = 43, RULE_interval = 44, RULE_intervalField = 45, RULE_dataType = 46, + RULE_qualifiedName = 47, RULE_identifier = 48, RULE_tableIdentifier = 49, + RULE_quoteIdentifier = 50, RULE_unquoteIdentifier = 51, RULE_number = 52, + RULE_string = 53, RULE_nonReserved = 54; public static final String[] ruleNames = { "singleStatement", "singleExpression", "statement", "query", "queryNoWith", "limitClause", "queryTerm", "orderBy", "querySpecification", "fromClause", @@ -61,51 +63,51 @@ class SqlBaseParser extends Parser { "relationPrimary", "expression", "booleanExpression", "matchQueryOptions", "predicated", "predicate", "likePattern", "pattern", "patternEscape", "valueExpression", "primaryExpression", "castExpression", "castTemplate", - "builtinDateTimeFunction", "convertTemplate", "extractExpression", "extractTemplate", - "functionExpression", "functionTemplate", "functionName", "constant", - "comparisonOperator", "booleanValue", "interval", "intervalField", "dataType", - "qualifiedName", "identifier", "tableIdentifier", "quoteIdentifier", "unquoteIdentifier", - "number", "string", "nonReserved" + "builtinDateFunction", "builtinDateTimeFunction", "convertTemplate", "extractExpression", + "extractTemplate", "functionExpression", "functionTemplate", "functionName", + "constant", "comparisonOperator", "booleanValue", "interval", "intervalField", + "dataType", "qualifiedName", "identifier", "tableIdentifier", "quoteIdentifier", + "unquoteIdentifier", "number", "string", "nonReserved" }; private static final String[] _LITERAL_NAMES = { null, "'('", "')'", "','", "':'", "'ALL'", "'ANALYZE'", "'ANALYZED'", "'AND'", "'ANY'", "'AS'", "'ASC'", "'BETWEEN'", "'BY'", "'CAST'", "'CATALOG'", - "'CATALOGS'", "'COLUMNS'", "'CONVERT'", "'CURRENT'", "'CURRENT_TIMESTAMP'", - "'DAY'", "'DAYS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'ESCAPE'", - "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FIRST'", - "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", "'GROUP'", - "'HAVING'", "'HOUR'", "'HOURS'", "'IN'", "'INNER'", "'INTERVAL'", "'IS'", - "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", "'MATCH'", - "'MINUTE'", "'MINUTES'", "'MONTH'", "'MONTHS'", "'NATURAL'", "'NOT'", - "'NULL'", "'NULLS'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", "'OUTER'", - "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", "'QUERY'", "'SCHEMAS'", - "'SECOND'", "'SECONDS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", "'TABLES'", - "'TEXT'", "'TRUE'", "'TO'", "'TYPE'", "'TYPES'", "'USING'", "'VERIFY'", - "'WHERE'", "'WITH'", "'YEAR'", "'YEARS'", "'{ESCAPE'", "'{FN'", "'{LIMIT'", - "'{D'", "'{T'", "'{TS'", "'{GUID'", "'}'", "'='", "'<=>'", null, "'<'", - "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", "'||'", "'.'", - "'?'" + "'CATALOGS'", "'COLUMNS'", "'CONVERT'", "'CURRENT'", "'CURRENT_DATE'", + "'CURRENT_TIMESTAMP'", "'DAY'", "'DAYS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", + "'DISTINCT'", "'ESCAPE'", "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", + "'FALSE'", "'FIRST'", "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", + "'GROUP'", "'HAVING'", "'HOUR'", "'HOURS'", "'IN'", "'INNER'", "'INTERVAL'", + "'IS'", "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", + "'MATCH'", "'MINUTE'", "'MINUTES'", "'MONTH'", "'MONTHS'", "'NATURAL'", + "'NOT'", "'NULL'", "'NULLS'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", + "'OUTER'", "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", "'QUERY'", + "'SCHEMAS'", "'SECOND'", "'SECONDS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", + "'TABLES'", "'TEXT'", "'TRUE'", "'TO'", "'TYPE'", "'TYPES'", "'USING'", + "'VERIFY'", "'WHERE'", "'WITH'", "'YEAR'", "'YEARS'", "'{ESCAPE'", "'{FN'", + "'{LIMIT'", "'{D'", "'{T'", "'{TS'", "'{GUID'", "'}'", "'='", "'<=>'", + null, "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", + "'||'", "'.'", "'?'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOG", "CATALOGS", "COLUMNS", - "CONVERT", "CURRENT", "CURRENT_TIMESTAMP", "DAY", "DAYS", "DEBUG", "DESC", - "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", "EXTRACT", - "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", "GROUP", - "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", "IS", "JOIN", "LAST", - "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", "MINUTES", "MONTH", - "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", "OPTIMIZED", "OR", - "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", "QUERY", - "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", "TABLE", "TABLES", - "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", "WHERE", "WITH", - "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", "DATE_ESC", - "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", "NULLEQ", "NEQ", - "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", - "CONCAT", "DOT", "PARAM", "STRING", "INTEGER_VALUE", "DECIMAL_VALUE", - "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", "QUOTED_IDENTIFIER", - "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", - "UNRECOGNIZED", "DELIMITER" + "CONVERT", "CURRENT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", + "DEBUG", "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", + "EXPLAIN", "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", + "GRAPHVIZ", "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", + "IS", "JOIN", "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", + "MINUTES", "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", + "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", + "RLIKE", "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", + "TABLE", "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", + "WHERE", "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", + "DATE_ESC", "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", + "NULLEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", + "SLASH", "PERCENT", "CONCAT", "DOT", "PARAM", "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); @@ -186,9 +188,9 @@ public final SingleStatementContext singleStatement() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(108); + setState(110); statement(); - setState(109); + setState(111); match(EOF); } } @@ -233,9 +235,9 @@ public final SingleExpressionContext singleExpression() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(111); + setState(113); expression(); - setState(112); + setState(114); match(EOF); } } @@ -598,14 +600,14 @@ public final StatementContext statement() throws RecognitionException { enterRule(_localctx, 4, RULE_statement); int _la; try { - setState(215); + setState(217); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { case 1: _localctx = new StatementDefaultContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(114); + setState(116); query(); } break; @@ -613,27 +615,27 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ExplainContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(115); + setState(117); match(EXPLAIN); - setState(129); + setState(131); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { case 1: { - setState(116); + setState(118); match(T__0); - setState(125); + setState(127); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & ((1L << (FORMAT - 34)) | (1L << (PLAN - 34)) | (1L << (VERIFY - 34)))) != 0)) { + while (((((_la - 35)) & ~0x3f) == 0 && ((1L << (_la - 35)) & ((1L << (FORMAT - 35)) | (1L << (PLAN - 35)) | (1L << (VERIFY - 35)))) != 0)) { { - setState(123); + setState(125); switch (_input.LA(1)) { case PLAN: { - setState(117); + setState(119); match(PLAN); - setState(118); + setState(120); ((ExplainContext)_localctx).type = _input.LT(1); _la = _input.LA(1); if ( !(((((_la - 5)) & ~0x3f) == 0 && ((1L << (_la - 5)) & ((1L << (ALL - 5)) | (1L << (ANALYZED - 5)) | (1L << (EXECUTABLE - 5)) | (1L << (MAPPED - 5)) | (1L << (OPTIMIZED - 5)) | (1L << (PARSED - 5)))) != 0)) ) { @@ -645,9 +647,9 @@ public final StatementContext statement() throws RecognitionException { break; case FORMAT: { - setState(119); + setState(121); match(FORMAT); - setState(120); + setState(122); ((ExplainContext)_localctx).format = _input.LT(1); _la = _input.LA(1); if ( !(_la==GRAPHVIZ || _la==TEXT) ) { @@ -659,9 +661,9 @@ public final StatementContext statement() throws RecognitionException { break; case VERIFY: { - setState(121); + setState(123); match(VERIFY); - setState(122); + setState(124); ((ExplainContext)_localctx).verify = booleanValue(); } break; @@ -669,16 +671,16 @@ public final StatementContext statement() throws RecognitionException { throw new NoViableAltException(this); } } - setState(127); + setState(129); _errHandler.sync(this); _la = _input.LA(1); } - setState(128); + setState(130); match(T__1); } break; } - setState(131); + setState(133); statement(); } break; @@ -686,27 +688,27 @@ public final StatementContext statement() throws RecognitionException { _localctx = new DebugContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(132); + setState(134); match(DEBUG); - setState(144); + setState(146); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { case 1: { - setState(133); + setState(135); match(T__0); - setState(140); + setState(142); _errHandler.sync(this); _la = _input.LA(1); while (_la==FORMAT || _la==PLAN) { { - setState(138); + setState(140); switch (_input.LA(1)) { case PLAN: { - setState(134); + setState(136); match(PLAN); - setState(135); + setState(137); ((DebugContext)_localctx).type = _input.LT(1); _la = _input.LA(1); if ( !(_la==ANALYZED || _la==OPTIMIZED) ) { @@ -718,9 +720,9 @@ public final StatementContext statement() throws RecognitionException { break; case FORMAT: { - setState(136); + setState(138); match(FORMAT); - setState(137); + setState(139); ((DebugContext)_localctx).format = _input.LT(1); _la = _input.LA(1); if ( !(_la==GRAPHVIZ || _la==TEXT) ) { @@ -734,16 +736,16 @@ public final StatementContext statement() throws RecognitionException { throw new NoViableAltException(this); } } - setState(142); + setState(144); _errHandler.sync(this); _la = _input.LA(1); } - setState(143); + setState(145); match(T__1); } break; } - setState(146); + setState(148); statement(); } break; @@ -751,15 +753,15 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowTablesContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(147); + setState(149); match(SHOW); - setState(148); + setState(150); match(TABLES); - setState(151); + setState(153); switch (_input.LA(1)) { case LIKE: { - setState(149); + setState(151); ((ShowTablesContext)_localctx).tableLike = likePattern(); } break; @@ -806,7 +808,7 @@ public final StatementContext statement() throws RecognitionException { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: { - setState(150); + setState(152); ((ShowTablesContext)_localctx).tableIdent = tableIdentifier(); } break; @@ -821,22 +823,22 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowColumnsContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(153); + setState(155); match(SHOW); - setState(154); + setState(156); match(COLUMNS); - setState(155); + setState(157); _la = _input.LA(1); if ( !(_la==FROM || _la==IN) ) { _errHandler.recoverInline(this); } else { consume(); } - setState(158); + setState(160); switch (_input.LA(1)) { case LIKE: { - setState(156); + setState(158); ((ShowColumnsContext)_localctx).tableLike = likePattern(); } break; @@ -883,7 +885,7 @@ public final StatementContext statement() throws RecognitionException { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: { - setState(157); + setState(159); ((ShowColumnsContext)_localctx).tableIdent = tableIdentifier(); } break; @@ -896,18 +898,18 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowColumnsContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(160); + setState(162); _la = _input.LA(1); if ( !(_la==DESC || _la==DESCRIBE) ) { _errHandler.recoverInline(this); } else { consume(); } - setState(163); + setState(165); switch (_input.LA(1)) { case LIKE: { - setState(161); + setState(163); ((ShowColumnsContext)_localctx).tableLike = likePattern(); } break; @@ -954,7 +956,7 @@ public final StatementContext statement() throws RecognitionException { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: { - setState(162); + setState(164); ((ShowColumnsContext)_localctx).tableIdent = tableIdentifier(); } break; @@ -967,15 +969,15 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowFunctionsContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(165); + setState(167); match(SHOW); - setState(166); - match(FUNCTIONS); setState(168); + match(FUNCTIONS); + setState(170); _la = _input.LA(1); if (_la==LIKE) { { - setState(167); + setState(169); likePattern(); } } @@ -986,9 +988,9 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowSchemasContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(170); + setState(172); match(SHOW); - setState(171); + setState(173); match(SCHEMAS); } break; @@ -996,58 +998,58 @@ public final StatementContext statement() throws RecognitionException { _localctx = new SysTablesContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(172); + setState(174); match(SYS); - setState(173); + setState(175); match(TABLES); - setState(176); + setState(178); _la = _input.LA(1); if (_la==CATALOG) { { - setState(174); + setState(176); match(CATALOG); - setState(175); + setState(177); ((SysTablesContext)_localctx).clusterLike = likePattern(); } } - setState(180); + setState(182); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { case 1: { - setState(178); + setState(180); ((SysTablesContext)_localctx).tableLike = likePattern(); } break; case 2: { - setState(179); + setState(181); ((SysTablesContext)_localctx).tableIdent = tableIdentifier(); } break; } - setState(191); + setState(193); _la = _input.LA(1); if (_la==TYPE) { { - setState(182); + setState(184); match(TYPE); - setState(183); + setState(185); string(); - setState(188); + setState(190); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(184); + setState(186); match(T__2); - setState(185); + setState(187); string(); } } - setState(190); + setState(192); _errHandler.sync(this); _la = _input.LA(1); } @@ -1060,28 +1062,28 @@ public final StatementContext statement() throws RecognitionException { _localctx = new SysColumnsContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(193); + setState(195); match(SYS); - setState(194); + setState(196); match(COLUMNS); - setState(197); + setState(199); _la = _input.LA(1); if (_la==CATALOG) { { - setState(195); + setState(197); match(CATALOG); - setState(196); + setState(198); ((SysColumnsContext)_localctx).cluster = string(); } } - setState(202); + setState(204); switch (_input.LA(1)) { case TABLE: { - setState(199); + setState(201); match(TABLE); - setState(200); + setState(202); ((SysColumnsContext)_localctx).tableLike = likePattern(); } break; @@ -1128,7 +1130,7 @@ public final StatementContext statement() throws RecognitionException { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: { - setState(201); + setState(203); ((SysColumnsContext)_localctx).tableIdent = tableIdentifier(); } break; @@ -1138,11 +1140,11 @@ public final StatementContext statement() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(205); + setState(207); _la = _input.LA(1); if (_la==LIKE) { { - setState(204); + setState(206); ((SysColumnsContext)_localctx).columnPattern = likePattern(); } } @@ -1153,19 +1155,19 @@ public final StatementContext statement() throws RecognitionException { _localctx = new SysTypesContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(207); + setState(209); match(SYS); - setState(208); + setState(210); match(TYPES); - setState(213); + setState(215); _la = _input.LA(1); - if (((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PLUS - 107)) | (1L << (MINUS - 107)) | (1L << (INTEGER_VALUE - 107)) | (1L << (DECIMAL_VALUE - 107)))) != 0)) { + if (((((_la - 108)) & ~0x3f) == 0 && ((1L << (_la - 108)) & ((1L << (PLUS - 108)) | (1L << (MINUS - 108)) | (1L << (INTEGER_VALUE - 108)) | (1L << (DECIMAL_VALUE - 108)))) != 0)) { { - setState(210); + setState(212); _la = _input.LA(1); if (_la==PLUS || _la==MINUS) { { - setState(209); + setState(211); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { _errHandler.recoverInline(this); @@ -1175,7 +1177,7 @@ public final StatementContext statement() throws RecognitionException { } } - setState(212); + setState(214); ((SysTypesContext)_localctx).type = number(); } } @@ -1232,34 +1234,34 @@ public final QueryContext query() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(226); + setState(228); _la = _input.LA(1); if (_la==WITH) { { - setState(217); + setState(219); match(WITH); - setState(218); + setState(220); namedQuery(); - setState(223); + setState(225); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(219); + setState(221); match(T__2); - setState(220); + setState(222); namedQuery(); } } - setState(225); + setState(227); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(228); + setState(230); queryNoWith(); } } @@ -1315,42 +1317,42 @@ public final QueryNoWithContext queryNoWith() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(230); + setState(232); queryTerm(); - setState(241); + setState(243); _la = _input.LA(1); if (_la==ORDER) { { - setState(231); + setState(233); match(ORDER); - setState(232); + setState(234); match(BY); - setState(233); + setState(235); orderBy(); - setState(238); + setState(240); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(234); + setState(236); match(T__2); - setState(235); + setState(237); orderBy(); } } - setState(240); + setState(242); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(244); + setState(246); _la = _input.LA(1); if (_la==LIMIT || _la==LIMIT_ESC) { { - setState(243); + setState(245); limitClause(); } } @@ -1399,14 +1401,14 @@ public final LimitClauseContext limitClause() throws RecognitionException { enterRule(_localctx, 10, RULE_limitClause); int _la; try { - setState(251); + setState(253); switch (_input.LA(1)) { case LIMIT: enterOuterAlt(_localctx, 1); { - setState(246); + setState(248); match(LIMIT); - setState(247); + setState(249); ((LimitClauseContext)_localctx).limit = _input.LT(1); _la = _input.LA(1); if ( !(_la==ALL || _la==INTEGER_VALUE) ) { @@ -1419,9 +1421,9 @@ public final LimitClauseContext limitClause() throws RecognitionException { case LIMIT_ESC: enterOuterAlt(_localctx, 2); { - setState(248); + setState(250); match(LIMIT_ESC); - setState(249); + setState(251); ((LimitClauseContext)_localctx).limit = _input.LT(1); _la = _input.LA(1); if ( !(_la==ALL || _la==INTEGER_VALUE) ) { @@ -1429,7 +1431,7 @@ public final LimitClauseContext limitClause() throws RecognitionException { } else { consume(); } - setState(250); + setState(252); match(ESC_END); } break; @@ -1502,13 +1504,13 @@ public final QueryTermContext queryTerm() throws RecognitionException { QueryTermContext _localctx = new QueryTermContext(_ctx, getState()); enterRule(_localctx, 12, RULE_queryTerm); try { - setState(258); + setState(260); switch (_input.LA(1)) { case SELECT: _localctx = new QueryPrimaryDefaultContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(253); + setState(255); querySpecification(); } break; @@ -1516,11 +1518,11 @@ public final QueryTermContext queryTerm() throws RecognitionException { _localctx = new SubqueryContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(254); + setState(256); match(T__0); - setState(255); + setState(257); queryNoWith(); - setState(256); + setState(258); match(T__1); } break; @@ -1576,13 +1578,13 @@ public final OrderByContext orderBy() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(260); - expression(); setState(262); + expression(); + setState(264); _la = _input.LA(1); if (_la==ASC || _la==DESC) { { - setState(261); + setState(263); ((OrderByContext)_localctx).ordering = _input.LT(1); _la = _input.LA(1); if ( !(_la==ASC || _la==DESC) ) { @@ -1593,13 +1595,13 @@ public final OrderByContext orderBy() throws RecognitionException { } } - setState(266); + setState(268); _la = _input.LA(1); if (_la==NULLS) { { - setState(264); + setState(266); match(NULLS); - setState(265); + setState(267); ((OrderByContext)_localctx).nullOrdering = _input.LT(1); _la = _input.LA(1); if ( !(_la==FIRST || _la==LAST) ) { @@ -1678,75 +1680,75 @@ public final QuerySpecificationContext querySpecification() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(268); - match(SELECT); setState(270); + match(SELECT); + setState(272); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(269); + setState(271); setQuantifier(); } } - setState(272); + setState(274); selectItem(); - setState(277); + setState(279); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(273); + setState(275); match(T__2); - setState(274); + setState(276); selectItem(); } } - setState(279); + setState(281); _errHandler.sync(this); _la = _input.LA(1); } - setState(281); + setState(283); _la = _input.LA(1); if (_la==FROM) { { - setState(280); + setState(282); fromClause(); } } - setState(285); + setState(287); _la = _input.LA(1); if (_la==WHERE) { { - setState(283); + setState(285); match(WHERE); - setState(284); + setState(286); ((QuerySpecificationContext)_localctx).where = booleanExpression(0); } } - setState(290); + setState(292); _la = _input.LA(1); if (_la==GROUP) { { - setState(287); + setState(289); match(GROUP); - setState(288); + setState(290); match(BY); - setState(289); + setState(291); groupBy(); } } - setState(294); + setState(296); _la = _input.LA(1); if (_la==HAVING) { { - setState(292); + setState(294); match(HAVING); - setState(293); + setState(295); ((QuerySpecificationContext)_localctx).having = booleanExpression(0); } } @@ -1798,23 +1800,23 @@ public final FromClauseContext fromClause() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(296); + setState(298); match(FROM); - setState(297); + setState(299); relation(); - setState(302); + setState(304); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(298); + setState(300); match(T__2); - setState(299); + setState(301); relation(); } } - setState(304); + setState(306); _errHandler.sync(this); _la = _input.LA(1); } @@ -1867,30 +1869,30 @@ public final GroupByContext groupBy() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(306); + setState(308); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(305); + setState(307); setQuantifier(); } } - setState(308); + setState(310); groupingElement(); - setState(313); + setState(315); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(309); + setState(311); match(T__2); - setState(310); + setState(312); groupingElement(); } } - setState(315); + setState(317); _errHandler.sync(this); _la = _input.LA(1); } @@ -1945,7 +1947,7 @@ public final GroupingElementContext groupingElement() throws RecognitionExceptio _localctx = new SingleGroupingSetContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(316); + setState(318); groupingExpressions(); } } @@ -1991,47 +1993,47 @@ public final GroupingExpressionsContext groupingExpressions() throws Recognition enterRule(_localctx, 24, RULE_groupingExpressions); int _la; try { - setState(331); + setState(333); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(318); + setState(320); match(T__0); - setState(327); + setState(329); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_TIMESTAMP) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LEFT) | (1L << LIMIT) | (1L << MAPPED) | (1L << MATCH) | (1L << MINUTE) | (1L << MONTH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RIGHT - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TRUE - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)) | (1L << (FUNCTION_ESC - 67)) | (1L << (DATE_ESC - 67)) | (1L << (TIME_ESC - 67)) | (1L << (TIMESTAMP_ESC - 67)) | (1L << (GUID_ESC - 67)) | (1L << (PLUS - 67)) | (1L << (MINUS - 67)) | (1L << (ASTERISK - 67)) | (1L << (PARAM - 67)) | (1L << (STRING - 67)) | (1L << (INTEGER_VALUE - 67)) | (1L << (DECIMAL_VALUE - 67)) | (1L << (IDENTIFIER - 67)) | (1L << (DIGIT_IDENTIFIER - 67)) | (1L << (QUOTED_IDENTIFIER - 67)) | (1L << (BACKQUOTED_IDENTIFIER - 67)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_DATE) | (1L << CURRENT_TIMESTAMP) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LEFT) | (1L << LIMIT) | (1L << MAPPED) | (1L << MATCH) | (1L << MINUTE) | (1L << MONTH) | (1L << NOT) | (1L << NULL))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RIGHT - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TRUE - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)) | (1L << (FUNCTION_ESC - 64)) | (1L << (DATE_ESC - 64)) | (1L << (TIME_ESC - 64)) | (1L << (TIMESTAMP_ESC - 64)) | (1L << (GUID_ESC - 64)) | (1L << (PLUS - 64)) | (1L << (MINUS - 64)) | (1L << (ASTERISK - 64)) | (1L << (PARAM - 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(319); + setState(321); expression(); - setState(324); + setState(326); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(320); + setState(322); match(T__2); - setState(321); + setState(323); expression(); } } - setState(326); + setState(328); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(329); + setState(331); match(T__1); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(330); + setState(332); expression(); } break; @@ -2082,15 +2084,15 @@ public final NamedQueryContext namedQuery() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(333); + setState(335); ((NamedQueryContext)_localctx).name = identifier(); - setState(334); + setState(336); match(AS); - setState(335); + setState(337); match(T__0); - setState(336); + setState(338); queryNoWith(); - setState(337); + setState(339); match(T__1); } } @@ -2134,7 +2136,7 @@ public final SetQuantifierContext setQuantifier() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(339); + setState(341); _la = _input.LA(1); if ( !(_la==ALL || _la==DISTINCT) ) { _errHandler.recoverInline(this); @@ -2197,23 +2199,23 @@ public final SelectItemContext selectItem() throws RecognitionException { _localctx = new SelectExpressionContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(341); + setState(343); expression(); - setState(346); + setState(348); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { case 1: { - setState(343); + setState(345); _la = _input.LA(1); if (_la==AS) { { - setState(342); + setState(344); match(AS); } } - setState(345); + setState(347); identifier(); } break; @@ -2267,19 +2269,19 @@ public final RelationContext relation() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(348); + setState(350); relationPrimary(); - setState(352); + setState(354); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 36)) & ~0x3f) == 0 && ((1L << (_la - 36)) & ((1L << (FULL - 36)) | (1L << (INNER - 36)) | (1L << (JOIN - 36)) | (1L << (LEFT - 36)) | (1L << (NATURAL - 36)) | (1L << (RIGHT - 36)))) != 0)) { + while (((((_la - 37)) & ~0x3f) == 0 && ((1L << (_la - 37)) & ((1L << (FULL - 37)) | (1L << (INNER - 37)) | (1L << (JOIN - 37)) | (1L << (LEFT - 37)) | (1L << (NATURAL - 37)) | (1L << (RIGHT - 37)))) != 0)) { { { - setState(349); + setState(351); joinRelation(); } } - setState(354); + setState(356); _errHandler.sync(this); _la = _input.LA(1); } @@ -2333,7 +2335,7 @@ public final JoinRelationContext joinRelation() throws RecognitionException { enterRule(_localctx, 34, RULE_joinRelation); int _la; try { - setState(366); + setState(368); switch (_input.LA(1)) { case FULL: case INNER: @@ -2343,18 +2345,18 @@ public final JoinRelationContext joinRelation() throws RecognitionException { enterOuterAlt(_localctx, 1); { { - setState(355); + setState(357); joinType(); } - setState(356); + setState(358); match(JOIN); - setState(357); - ((JoinRelationContext)_localctx).right = relationPrimary(); setState(359); + ((JoinRelationContext)_localctx).right = relationPrimary(); + setState(361); _la = _input.LA(1); if (_la==ON || _la==USING) { { - setState(358); + setState(360); joinCriteria(); } } @@ -2364,13 +2366,13 @@ public final JoinRelationContext joinRelation() throws RecognitionException { case NATURAL: enterOuterAlt(_localctx, 2); { - setState(361); + setState(363); match(NATURAL); - setState(362); + setState(364); joinType(); - setState(363); + setState(365); match(JOIN); - setState(364); + setState(366); ((JoinRelationContext)_localctx).right = relationPrimary(); } break; @@ -2419,17 +2421,17 @@ public final JoinTypeContext joinType() throws RecognitionException { enterRule(_localctx, 36, RULE_joinType); int _la; try { - setState(383); + setState(385); switch (_input.LA(1)) { case INNER: case JOIN: enterOuterAlt(_localctx, 1); { - setState(369); + setState(371); _la = _input.LA(1); if (_la==INNER) { { - setState(368); + setState(370); match(INNER); } } @@ -2439,13 +2441,13 @@ public final JoinTypeContext joinType() throws RecognitionException { case LEFT: enterOuterAlt(_localctx, 2); { - setState(371); - match(LEFT); setState(373); + match(LEFT); + setState(375); _la = _input.LA(1); if (_la==OUTER) { { - setState(372); + setState(374); match(OUTER); } } @@ -2455,13 +2457,13 @@ public final JoinTypeContext joinType() throws RecognitionException { case RIGHT: enterOuterAlt(_localctx, 3); { - setState(375); - match(RIGHT); setState(377); + match(RIGHT); + setState(379); _la = _input.LA(1); if (_la==OUTER) { { - setState(376); + setState(378); match(OUTER); } } @@ -2471,13 +2473,13 @@ public final JoinTypeContext joinType() throws RecognitionException { case FULL: enterOuterAlt(_localctx, 4); { - setState(379); - match(FULL); setState(381); + match(FULL); + setState(383); _la = _input.LA(1); if (_la==OUTER) { { - setState(380); + setState(382); match(OUTER); } } @@ -2535,43 +2537,43 @@ public final JoinCriteriaContext joinCriteria() throws RecognitionException { enterRule(_localctx, 38, RULE_joinCriteria); int _la; try { - setState(399); + setState(401); switch (_input.LA(1)) { case ON: enterOuterAlt(_localctx, 1); { - setState(385); + setState(387); match(ON); - setState(386); + setState(388); booleanExpression(0); } break; case USING: enterOuterAlt(_localctx, 2); { - setState(387); + setState(389); match(USING); - setState(388); + setState(390); match(T__0); - setState(389); + setState(391); identifier(); - setState(394); + setState(396); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(390); + setState(392); match(T__2); - setState(391); + setState(393); identifier(); } } - setState(396); + setState(398); _errHandler.sync(this); _la = _input.LA(1); } - setState(397); + setState(399); match(T__1); } break; @@ -2676,30 +2678,30 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio enterRule(_localctx, 40, RULE_relationPrimary); int _la; try { - setState(426); + setState(428); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,59,_ctx) ) { case 1: _localctx = new TableNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(401); + setState(403); tableIdentifier(); - setState(406); + setState(408); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { case 1: { - setState(403); + setState(405); _la = _input.LA(1); if (_la==AS) { { - setState(402); + setState(404); match(AS); } } - setState(405); + setState(407); qualifiedName(); } break; @@ -2710,27 +2712,27 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio _localctx = new AliasedQueryContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(408); + setState(410); match(T__0); - setState(409); + setState(411); queryNoWith(); - setState(410); + setState(412); match(T__1); - setState(415); + setState(417); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { case 1: { - setState(412); + setState(414); _la = _input.LA(1); if (_la==AS) { { - setState(411); + setState(413); match(AS); } } - setState(414); + setState(416); qualifiedName(); } break; @@ -2741,27 +2743,27 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio _localctx = new AliasedRelationContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(417); + setState(419); match(T__0); - setState(418); + setState(420); relation(); - setState(419); + setState(421); match(T__1); - setState(424); + setState(426); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { case 1: { - setState(421); + setState(423); _la = _input.LA(1); if (_la==AS) { { - setState(420); + setState(422); match(AS); } } - setState(423); + setState(425); qualifiedName(); } break; @@ -2810,7 +2812,7 @@ public final ExpressionContext expression() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(428); + setState(430); booleanExpression(0); } } @@ -3018,7 +3020,7 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc int _alt; enterOuterAlt(_localctx, 1); { - setState(461); + setState(463); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) { case 1: @@ -3027,9 +3029,9 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _ctx = _localctx; _prevctx = _localctx; - setState(431); + setState(433); match(NOT); - setState(432); + setState(434); booleanExpression(8); } break; @@ -3038,13 +3040,13 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new ExistsContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(433); + setState(435); match(EXISTS); - setState(434); + setState(436); match(T__0); - setState(435); + setState(437); query(); - setState(436); + setState(438); match(T__1); } break; @@ -3053,15 +3055,15 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new StringQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(438); + setState(440); match(QUERY); - setState(439); + setState(441); match(T__0); - setState(440); + setState(442); ((StringQueryContext)_localctx).queryString = string(); - setState(441); + setState(443); matchQueryOptions(); - setState(442); + setState(444); match(T__1); } break; @@ -3070,19 +3072,19 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new MatchQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(444); + setState(446); match(MATCH); - setState(445); + setState(447); match(T__0); - setState(446); + setState(448); ((MatchQueryContext)_localctx).singleField = qualifiedName(); - setState(447); + setState(449); match(T__2); - setState(448); + setState(450); ((MatchQueryContext)_localctx).queryString = string(); - setState(449); + setState(451); matchQueryOptions(); - setState(450); + setState(452); match(T__1); } break; @@ -3091,19 +3093,19 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new MultiMatchQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(452); + setState(454); match(MATCH); - setState(453); + setState(455); match(T__0); - setState(454); + setState(456); ((MultiMatchQueryContext)_localctx).multiFields = string(); - setState(455); + setState(457); match(T__2); - setState(456); + setState(458); ((MultiMatchQueryContext)_localctx).queryString = string(); - setState(457); + setState(459); matchQueryOptions(); - setState(458); + setState(460); match(T__1); } break; @@ -3112,13 +3114,13 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new BooleanDefaultContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(460); + setState(462); predicated(); } break; } _ctx.stop = _input.LT(-1); - setState(471); + setState(473); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,62,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3126,7 +3128,7 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(469); + setState(471); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) { case 1: @@ -3134,11 +3136,11 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); ((LogicalBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression); - setState(463); + setState(465); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(464); + setState(466); ((LogicalBinaryContext)_localctx).operator = match(AND); - setState(465); + setState(467); ((LogicalBinaryContext)_localctx).right = booleanExpression(3); } break; @@ -3147,18 +3149,18 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); ((LogicalBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression); - setState(466); + setState(468); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(467); + setState(469); ((LogicalBinaryContext)_localctx).operator = match(OR); - setState(468); + setState(470); ((LogicalBinaryContext)_localctx).right = booleanExpression(2); } break; } } } - setState(473); + setState(475); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,62,_ctx); } @@ -3208,19 +3210,19 @@ public final MatchQueryOptionsContext matchQueryOptions() throws RecognitionExce try { enterOuterAlt(_localctx, 1); { - setState(478); + setState(480); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(474); + setState(476); match(T__2); - setState(475); + setState(477); string(); } } - setState(480); + setState(482); _errHandler.sync(this); _la = _input.LA(1); } @@ -3269,14 +3271,14 @@ public final PredicatedContext predicated() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(481); - valueExpression(0); setState(483); + valueExpression(0); + setState(485); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) { case 1: { - setState(482); + setState(484); predicate(); } break; @@ -3346,142 +3348,142 @@ public final PredicateContext predicate() throws RecognitionException { enterRule(_localctx, 50, RULE_predicate); int _la; try { - setState(531); + setState(533); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(486); + setState(488); _la = _input.LA(1); if (_la==NOT) { { - setState(485); + setState(487); match(NOT); } } - setState(488); + setState(490); ((PredicateContext)_localctx).kind = match(BETWEEN); - setState(489); + setState(491); ((PredicateContext)_localctx).lower = valueExpression(0); - setState(490); + setState(492); match(AND); - setState(491); + setState(493); ((PredicateContext)_localctx).upper = valueExpression(0); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(494); + setState(496); _la = _input.LA(1); if (_la==NOT) { { - setState(493); + setState(495); match(NOT); } } - setState(496); + setState(498); ((PredicateContext)_localctx).kind = match(IN); - setState(497); + setState(499); match(T__0); - setState(498); + setState(500); valueExpression(0); - setState(503); + setState(505); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(499); + setState(501); match(T__2); - setState(500); + setState(502); valueExpression(0); } } - setState(505); + setState(507); _errHandler.sync(this); _la = _input.LA(1); } - setState(506); + setState(508); match(T__1); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(509); + setState(511); _la = _input.LA(1); if (_la==NOT) { { - setState(508); + setState(510); match(NOT); } } - setState(511); + setState(513); ((PredicateContext)_localctx).kind = match(IN); - setState(512); + setState(514); match(T__0); - setState(513); + setState(515); query(); - setState(514); + setState(516); match(T__1); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(517); + setState(519); _la = _input.LA(1); if (_la==NOT) { { - setState(516); + setState(518); match(NOT); } } - setState(519); + setState(521); ((PredicateContext)_localctx).kind = match(LIKE); - setState(520); + setState(522); pattern(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(522); + setState(524); _la = _input.LA(1); if (_la==NOT) { { - setState(521); + setState(523); match(NOT); } } - setState(524); + setState(526); ((PredicateContext)_localctx).kind = match(RLIKE); - setState(525); + setState(527); ((PredicateContext)_localctx).regex = string(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(526); - match(IS); setState(528); + match(IS); + setState(530); _la = _input.LA(1); if (_la==NOT) { { - setState(527); + setState(529); match(NOT); } } - setState(530); + setState(532); ((PredicateContext)_localctx).kind = match(NULL); } break; @@ -3528,9 +3530,9 @@ public final LikePatternContext likePattern() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(533); + setState(535); match(LIKE); - setState(534); + setState(536); pattern(); } } @@ -3578,14 +3580,14 @@ public final PatternContext pattern() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(536); - ((PatternContext)_localctx).value = string(); setState(538); + ((PatternContext)_localctx).value = string(); + setState(540); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) { case 1: { - setState(537); + setState(539); patternEscape(); } break; @@ -3633,25 +3635,25 @@ public final PatternEscapeContext patternEscape() throws RecognitionException { PatternEscapeContext _localctx = new PatternEscapeContext(_ctx, getState()); enterRule(_localctx, 56, RULE_patternEscape); try { - setState(546); + setState(548); switch (_input.LA(1)) { case ESCAPE: enterOuterAlt(_localctx, 1); { - setState(540); + setState(542); match(ESCAPE); - setState(541); + setState(543); ((PatternEscapeContext)_localctx).escape = string(); } break; case ESCAPE_ESC: enterOuterAlt(_localctx, 2); { - setState(542); + setState(544); match(ESCAPE_ESC); - setState(543); + setState(545); ((PatternEscapeContext)_localctx).escape = string(); - setState(544); + setState(546); match(ESC_END); } break; @@ -3796,7 +3798,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti int _alt; enterOuterAlt(_localctx, 1); { - setState(552); + setState(554); switch (_input.LA(1)) { case T__0: case ANALYZE: @@ -3806,6 +3808,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti case COLUMNS: case CONVERT: case CURRENT: + case CURRENT_DATE: case CURRENT_TIMESTAMP: case DAY: case DEBUG: @@ -3864,7 +3867,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _ctx = _localctx; _prevctx = _localctx; - setState(549); + setState(551); primaryExpression(); } break; @@ -3874,7 +3877,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _localctx = new ArithmeticUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(550); + setState(552); ((ArithmeticUnaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { @@ -3882,7 +3885,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti } else { consume(); } - setState(551); + setState(553); valueExpression(4); } break; @@ -3890,7 +3893,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(566); + setState(568); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,77,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3898,7 +3901,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(564); + setState(566); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,76,_ctx) ) { case 1: @@ -3906,17 +3909,17 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); ((ArithmeticBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(554); + setState(556); if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(555); + setState(557); ((ArithmeticBinaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); - if ( !(((((_la - 109)) & ~0x3f) == 0 && ((1L << (_la - 109)) & ((1L << (ASTERISK - 109)) | (1L << (SLASH - 109)) | (1L << (PERCENT - 109)))) != 0)) ) { + if ( !(((((_la - 110)) & ~0x3f) == 0 && ((1L << (_la - 110)) & ((1L << (ASTERISK - 110)) | (1L << (SLASH - 110)) | (1L << (PERCENT - 110)))) != 0)) ) { ((ArithmeticBinaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this); } else { consume(); } - setState(556); + setState(558); ((ArithmeticBinaryContext)_localctx).right = valueExpression(4); } break; @@ -3925,9 +3928,9 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); ((ArithmeticBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(557); + setState(559); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(558); + setState(560); ((ArithmeticBinaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { @@ -3935,7 +3938,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti } else { consume(); } - setState(559); + setState(561); ((ArithmeticBinaryContext)_localctx).right = valueExpression(3); } break; @@ -3944,18 +3947,18 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _localctx = new ComparisonContext(new ValueExpressionContext(_parentctx, _parentState)); ((ComparisonContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(560); + setState(562); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(561); + setState(563); comparisonOperator(); - setState(562); + setState(564); ((ComparisonContext)_localctx).right = valueExpression(2); } break; } } } - setState(568); + setState(570); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,77,_ctx); } @@ -4021,6 +4024,25 @@ public T accept(ParseTreeVisitor visitor) { else return visitor.visitChildren(this); } } + public static class CurrentDateFunctionContext extends PrimaryExpressionContext { + public BuiltinDateFunctionContext builtinDateFunction() { + return getRuleContext(BuiltinDateFunctionContext.class,0); + } + public CurrentDateFunctionContext(PrimaryExpressionContext ctx) { copyFrom(ctx); } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).enterCurrentDateFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).exitCurrentDateFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof SqlBaseVisitor ) return ((SqlBaseVisitor)visitor).visitCurrentDateFunction(this); + else return visitor.visitChildren(this); + } + } public static class ConstantDefaultContext extends PrimaryExpressionContext { public ConstantContext constant() { return getRuleContext(ConstantContext.class,0); @@ -4162,14 +4184,14 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce enterRule(_localctx, 60, RULE_primaryExpression); int _la; try { - setState(589); + setState(592); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,79,_ctx) ) { case 1: _localctx = new CastContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(569); + setState(571); castExpression(); } break; @@ -4177,82 +4199,90 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce _localctx = new ExtractContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(570); + setState(572); extractExpression(); } break; case 3: - _localctx = new CurrentDateTimeFunctionContext(_localctx); + _localctx = new CurrentDateFunctionContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(571); - builtinDateTimeFunction(); + setState(573); + builtinDateFunction(); } break; case 4: - _localctx = new ConstantDefaultContext(_localctx); + _localctx = new CurrentDateTimeFunctionContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(572); - constant(); + setState(574); + builtinDateTimeFunction(); } break; case 5: - _localctx = new StarContext(_localctx); + _localctx = new ConstantDefaultContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(576); + setState(575); + constant(); + } + break; + case 6: + _localctx = new StarContext(_localctx); + enterOuterAlt(_localctx, 6); + { + setState(579); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)) | (1L << (IDENTIFIER - 67)) | (1L << (DIGIT_IDENTIFIER - 67)) | (1L << (QUOTED_IDENTIFIER - 67)) | (1L << (BACKQUOTED_IDENTIFIER - 67)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) { { - setState(573); + setState(576); qualifiedName(); - setState(574); + setState(577); match(DOT); } } - setState(578); + setState(581); match(ASTERISK); } break; - case 6: + case 7: _localctx = new FunctionContext(_localctx); - enterOuterAlt(_localctx, 6); + enterOuterAlt(_localctx, 7); { - setState(579); + setState(582); functionExpression(); } break; - case 7: + case 8: _localctx = new SubqueryExpressionContext(_localctx); - enterOuterAlt(_localctx, 7); + enterOuterAlt(_localctx, 8); { - setState(580); + setState(583); match(T__0); - setState(581); + setState(584); query(); - setState(582); + setState(585); match(T__1); } break; - case 8: + case 9: _localctx = new DereferenceContext(_localctx); - enterOuterAlt(_localctx, 8); + enterOuterAlt(_localctx, 9); { - setState(584); + setState(587); qualifiedName(); } break; - case 9: + case 10: _localctx = new ParenthesizedExpressionContext(_localctx); - enterOuterAlt(_localctx, 9); + enterOuterAlt(_localctx, 10); { - setState(585); + setState(588); match(T__0); - setState(586); + setState(589); expression(); - setState(587); + setState(590); match(T__1); } break; @@ -4301,42 +4331,42 @@ public final CastExpressionContext castExpression() throws RecognitionException CastExpressionContext _localctx = new CastExpressionContext(_ctx, getState()); enterRule(_localctx, 62, RULE_castExpression); try { - setState(601); + setState(604); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(591); + setState(594); castTemplate(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(592); + setState(595); match(FUNCTION_ESC); - setState(593); + setState(596); castTemplate(); - setState(594); + setState(597); match(ESC_END); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(596); + setState(599); convertTemplate(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(597); + setState(600); match(FUNCTION_ESC); - setState(598); + setState(601); convertTemplate(); - setState(599); + setState(602); match(ESC_END); } break; @@ -4387,17 +4417,17 @@ public final CastTemplateContext castTemplate() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(603); + setState(606); match(CAST); - setState(604); + setState(607); match(T__0); - setState(605); + setState(608); expression(); - setState(606); + setState(609); match(AS); - setState(607); + setState(610); dataType(); - setState(608); + setState(611); match(T__1); } } @@ -4412,6 +4442,61 @@ public final CastTemplateContext castTemplate() throws RecognitionException { return _localctx; } + public static class BuiltinDateFunctionContext extends ParserRuleContext { + public Token name; + public TerminalNode CURRENT_DATE() { return getToken(SqlBaseParser.CURRENT_DATE, 0); } + public BuiltinDateFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_builtinDateFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).enterBuiltinDateFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).exitBuiltinDateFunction(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof SqlBaseVisitor ) return ((SqlBaseVisitor)visitor).visitBuiltinDateFunction(this); + else return visitor.visitChildren(this); + } + } + + public final BuiltinDateFunctionContext builtinDateFunction() throws RecognitionException { + BuiltinDateFunctionContext _localctx = new BuiltinDateFunctionContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_builtinDateFunction); + try { + enterOuterAlt(_localctx, 1); + { + setState(613); + ((BuiltinDateFunctionContext)_localctx).name = match(CURRENT_DATE); + setState(616); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) { + case 1: + { + setState(614); + match(T__0); + setState(615); + match(T__1); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + public static class BuiltinDateTimeFunctionContext extends ParserRuleContext { public Token name; public Token precision; @@ -4438,30 +4523,30 @@ public T accept(ParseTreeVisitor visitor) { public final BuiltinDateTimeFunctionContext builtinDateTimeFunction() throws RecognitionException { BuiltinDateTimeFunctionContext _localctx = new BuiltinDateTimeFunctionContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_builtinDateTimeFunction); + enterRule(_localctx, 68, RULE_builtinDateTimeFunction); int _la; try { enterOuterAlt(_localctx, 1); { - setState(610); + setState(618); ((BuiltinDateTimeFunctionContext)_localctx).name = match(CURRENT_TIMESTAMP); - setState(616); + setState(624); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,82,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) { case 1: { - setState(611); + setState(619); match(T__0); - setState(613); + setState(621); _la = _input.LA(1); if (_la==INTEGER_VALUE) { { - setState(612); + setState(620); ((BuiltinDateTimeFunctionContext)_localctx).precision = match(INTEGER_VALUE); } } - setState(615); + setState(623); match(T__1); } break; @@ -4508,21 +4593,21 @@ public T accept(ParseTreeVisitor visitor) { public final ConvertTemplateContext convertTemplate() throws RecognitionException { ConvertTemplateContext _localctx = new ConvertTemplateContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_convertTemplate); + enterRule(_localctx, 70, RULE_convertTemplate); try { enterOuterAlt(_localctx, 1); { - setState(618); + setState(626); match(CONVERT); - setState(619); + setState(627); match(T__0); - setState(620); + setState(628); expression(); - setState(621); + setState(629); match(T__2); - setState(622); + setState(630); dataType(); - setState(623); + setState(631); match(T__1); } } @@ -4564,25 +4649,25 @@ public T accept(ParseTreeVisitor visitor) { public final ExtractExpressionContext extractExpression() throws RecognitionException { ExtractExpressionContext _localctx = new ExtractExpressionContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_extractExpression); + enterRule(_localctx, 72, RULE_extractExpression); try { - setState(630); + setState(638); switch (_input.LA(1)) { case EXTRACT: enterOuterAlt(_localctx, 1); { - setState(625); + setState(633); extractTemplate(); } break; case FUNCTION_ESC: enterOuterAlt(_localctx, 2); { - setState(626); + setState(634); match(FUNCTION_ESC); - setState(627); + setState(635); extractTemplate(); - setState(628); + setState(636); match(ESC_END); } break; @@ -4632,21 +4717,21 @@ public T accept(ParseTreeVisitor visitor) { public final ExtractTemplateContext extractTemplate() throws RecognitionException { ExtractTemplateContext _localctx = new ExtractTemplateContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_extractTemplate); + enterRule(_localctx, 74, RULE_extractTemplate); try { enterOuterAlt(_localctx, 1); { - setState(632); + setState(640); match(EXTRACT); - setState(633); + setState(641); match(T__0); - setState(634); + setState(642); ((ExtractTemplateContext)_localctx).field = identifier(); - setState(635); + setState(643); match(FROM); - setState(636); + setState(644); valueExpression(0); - setState(637); + setState(645); match(T__1); } } @@ -4687,9 +4772,9 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionExpressionContext functionExpression() throws RecognitionException { FunctionExpressionContext _localctx = new FunctionExpressionContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_functionExpression); + enterRule(_localctx, 76, RULE_functionExpression); try { - setState(644); + setState(652); switch (_input.LA(1)) { case ANALYZE: case ANALYZED: @@ -4736,18 +4821,18 @@ public final FunctionExpressionContext functionExpression() throws RecognitionEx case BACKQUOTED_IDENTIFIER: enterOuterAlt(_localctx, 1); { - setState(639); + setState(647); functionTemplate(); } break; case FUNCTION_ESC: enterOuterAlt(_localctx, 2); { - setState(640); + setState(648); match(FUNCTION_ESC); - setState(641); + setState(649); functionTemplate(); - setState(642); + setState(650); match(ESC_END); } break; @@ -4800,50 +4885,50 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionTemplateContext functionTemplate() throws RecognitionException { FunctionTemplateContext _localctx = new FunctionTemplateContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_functionTemplate); + enterRule(_localctx, 78, RULE_functionTemplate); int _la; try { enterOuterAlt(_localctx, 1); { - setState(646); + setState(654); functionName(); - setState(647); + setState(655); match(T__0); - setState(659); + setState(667); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ALL) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_TIMESTAMP) | (1L << DAY) | (1L << DEBUG) | (1L << DISTINCT) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LEFT) | (1L << LIMIT) | (1L << MAPPED) | (1L << MATCH) | (1L << MINUTE) | (1L << MONTH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RIGHT - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TRUE - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)) | (1L << (FUNCTION_ESC - 67)) | (1L << (DATE_ESC - 67)) | (1L << (TIME_ESC - 67)) | (1L << (TIMESTAMP_ESC - 67)) | (1L << (GUID_ESC - 67)) | (1L << (PLUS - 67)) | (1L << (MINUS - 67)) | (1L << (ASTERISK - 67)) | (1L << (PARAM - 67)) | (1L << (STRING - 67)) | (1L << (INTEGER_VALUE - 67)) | (1L << (DECIMAL_VALUE - 67)) | (1L << (IDENTIFIER - 67)) | (1L << (DIGIT_IDENTIFIER - 67)) | (1L << (QUOTED_IDENTIFIER - 67)) | (1L << (BACKQUOTED_IDENTIFIER - 67)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ALL) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_DATE) | (1L << CURRENT_TIMESTAMP) | (1L << DAY) | (1L << DEBUG) | (1L << DISTINCT) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LEFT) | (1L << LIMIT) | (1L << MAPPED) | (1L << MATCH) | (1L << MINUTE) | (1L << MONTH) | (1L << NOT) | (1L << NULL))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RIGHT - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TRUE - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)) | (1L << (FUNCTION_ESC - 64)) | (1L << (DATE_ESC - 64)) | (1L << (TIME_ESC - 64)) | (1L << (TIMESTAMP_ESC - 64)) | (1L << (GUID_ESC - 64)) | (1L << (PLUS - 64)) | (1L << (MINUS - 64)) | (1L << (ASTERISK - 64)) | (1L << (PARAM - 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(649); + setState(657); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(648); + setState(656); setQuantifier(); } } - setState(651); + setState(659); expression(); - setState(656); + setState(664); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(652); + setState(660); match(T__2); - setState(653); + setState(661); expression(); } } - setState(658); + setState(666); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(661); + setState(669); match(T__1); } } @@ -4885,21 +4970,21 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionNameContext functionName() throws RecognitionException { FunctionNameContext _localctx = new FunctionNameContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_functionName); + enterRule(_localctx, 80, RULE_functionName); try { - setState(666); + setState(674); switch (_input.LA(1)) { case LEFT: enterOuterAlt(_localctx, 1); { - setState(663); + setState(671); match(LEFT); } break; case RIGHT: enterOuterAlt(_localctx, 2); { - setState(664); + setState(672); match(RIGHT); } break; @@ -4946,7 +5031,7 @@ public final FunctionNameContext functionName() throws RecognitionException { case BACKQUOTED_IDENTIFIER: enterOuterAlt(_localctx, 3); { - setState(665); + setState(673); identifier(); } break; @@ -5174,16 +5259,16 @@ public T accept(ParseTreeVisitor visitor) { public final ConstantContext constant() throws RecognitionException { ConstantContext _localctx = new ConstantContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_constant); + enterRule(_localctx, 82, RULE_constant); try { int _alt; - setState(694); + setState(702); switch (_input.LA(1)) { case NULL: _localctx = new NullLiteralContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(668); + setState(676); match(NULL); } break; @@ -5191,7 +5276,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new IntervalLiteralContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(669); + setState(677); interval(); } break; @@ -5200,7 +5285,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new NumericLiteralContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(670); + setState(678); number(); } break; @@ -5209,7 +5294,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new BooleanLiteralContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(671); + setState(679); booleanValue(); } break; @@ -5217,7 +5302,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new StringLiteralContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(673); + setState(681); _errHandler.sync(this); _alt = 1; do { @@ -5225,7 +5310,7 @@ public final ConstantContext constant() throws RecognitionException { case 1: { { - setState(672); + setState(680); match(STRING); } } @@ -5233,9 +5318,9 @@ public final ConstantContext constant() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(675); + setState(683); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,89,_ctx); + _alt = getInterpreter().adaptivePredict(_input,90,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); } break; @@ -5243,7 +5328,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new ParamLiteralContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(677); + setState(685); match(PARAM); } break; @@ -5251,11 +5336,11 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new DateEscapedLiteralContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(678); + setState(686); match(DATE_ESC); - setState(679); + setState(687); string(); - setState(680); + setState(688); match(ESC_END); } break; @@ -5263,11 +5348,11 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new TimeEscapedLiteralContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(682); + setState(690); match(TIME_ESC); - setState(683); + setState(691); string(); - setState(684); + setState(692); match(ESC_END); } break; @@ -5275,11 +5360,11 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new TimestampEscapedLiteralContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(686); + setState(694); match(TIMESTAMP_ESC); - setState(687); + setState(695); string(); - setState(688); + setState(696); match(ESC_END); } break; @@ -5287,11 +5372,11 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new GuidEscapedLiteralContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(690); + setState(698); match(GUID_ESC); - setState(691); + setState(699); string(); - setState(692); + setState(700); match(ESC_END); } break; @@ -5339,14 +5424,14 @@ public T accept(ParseTreeVisitor visitor) { public final ComparisonOperatorContext comparisonOperator() throws RecognitionException { ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_comparisonOperator); + enterRule(_localctx, 84, RULE_comparisonOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(696); + setState(704); _la = _input.LA(1); - if ( !(((((_la - 100)) & ~0x3f) == 0 && ((1L << (_la - 100)) & ((1L << (EQ - 100)) | (1L << (NULLEQ - 100)) | (1L << (NEQ - 100)) | (1L << (LT - 100)) | (1L << (LTE - 100)) | (1L << (GT - 100)) | (1L << (GTE - 100)))) != 0)) ) { + if ( !(((((_la - 101)) & ~0x3f) == 0 && ((1L << (_la - 101)) & ((1L << (EQ - 101)) | (1L << (NULLEQ - 101)) | (1L << (NEQ - 101)) | (1L << (LT - 101)) | (1L << (LTE - 101)) | (1L << (GT - 101)) | (1L << (GTE - 101)))) != 0)) ) { _errHandler.recoverInline(this); } else { consume(); @@ -5388,12 +5473,12 @@ public T accept(ParseTreeVisitor visitor) { public final BooleanValueContext booleanValue() throws RecognitionException { BooleanValueContext _localctx = new BooleanValueContext(_ctx, getState()); - enterRule(_localctx, 84, RULE_booleanValue); + enterRule(_localctx, 86, RULE_booleanValue); int _la; try { enterOuterAlt(_localctx, 1); { - setState(698); + setState(706); _la = _input.LA(1); if ( !(_la==FALSE || _la==TRUE) ) { _errHandler.recoverInline(this); @@ -5456,18 +5541,18 @@ public T accept(ParseTreeVisitor visitor) { public final IntervalContext interval() throws RecognitionException { IntervalContext _localctx = new IntervalContext(_ctx, getState()); - enterRule(_localctx, 86, RULE_interval); + enterRule(_localctx, 88, RULE_interval); int _la; try { enterOuterAlt(_localctx, 1); { - setState(700); + setState(708); match(INTERVAL); - setState(702); + setState(710); _la = _input.LA(1); if (_la==PLUS || _la==MINUS) { { - setState(701); + setState(709); ((IntervalContext)_localctx).sign = _input.LT(1); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { @@ -5478,35 +5563,35 @@ public final IntervalContext interval() throws RecognitionException { } } - setState(706); + setState(714); switch (_input.LA(1)) { case INTEGER_VALUE: case DECIMAL_VALUE: { - setState(704); + setState(712); ((IntervalContext)_localctx).valueNumeric = number(); } break; case PARAM: case STRING: { - setState(705); + setState(713); ((IntervalContext)_localctx).valuePattern = string(); } break; default: throw new NoViableAltException(this); } - setState(708); + setState(716); ((IntervalContext)_localctx).leading = intervalField(); - setState(711); + setState(719); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,93,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) { case 1: { - setState(709); + setState(717); match(TO); - setState(710); + setState(718); ((IntervalContext)_localctx).trailing = intervalField(); } break; @@ -5558,14 +5643,14 @@ public T accept(ParseTreeVisitor visitor) { public final IntervalFieldContext intervalField() throws RecognitionException { IntervalFieldContext _localctx = new IntervalFieldContext(_ctx, getState()); - enterRule(_localctx, 88, RULE_intervalField); + enterRule(_localctx, 90, RULE_intervalField); int _la; try { enterOuterAlt(_localctx, 1); { - setState(713); + setState(721); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << DAY) | (1L << DAYS) | (1L << HOUR) | (1L << HOURS) | (1L << MINUTE) | (1L << MINUTES) | (1L << MONTH) | (1L << MONTHS))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (SECOND - 74)) | (1L << (SECONDS - 74)) | (1L << (YEAR - 74)) | (1L << (YEARS - 74)))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << DAY) | (1L << DAYS) | (1L << HOUR) | (1L << HOURS) | (1L << MINUTE) | (1L << MINUTES) | (1L << MONTH) | (1L << MONTHS))) != 0) || ((((_la - 75)) & ~0x3f) == 0 && ((1L << (_la - 75)) & ((1L << (SECOND - 75)) | (1L << (SECONDS - 75)) | (1L << (YEAR - 75)) | (1L << (YEARS - 75)))) != 0)) ) { _errHandler.recoverInline(this); } else { consume(); @@ -5616,12 +5701,12 @@ public T accept(ParseTreeVisitor visitor) { public final DataTypeContext dataType() throws RecognitionException { DataTypeContext _localctx = new DataTypeContext(_ctx, getState()); - enterRule(_localctx, 90, RULE_dataType); + enterRule(_localctx, 92, RULE_dataType); try { _localctx = new PrimitiveDataTypeContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(715); + setState(723); identifier(); } } @@ -5668,30 +5753,30 @@ public T accept(ParseTreeVisitor visitor) { public final QualifiedNameContext qualifiedName() throws RecognitionException { QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState()); - enterRule(_localctx, 92, RULE_qualifiedName); + enterRule(_localctx, 94, RULE_qualifiedName); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(722); + setState(730); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,94,_ctx); + _alt = getInterpreter().adaptivePredict(_input,95,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(717); + setState(725); identifier(); - setState(718); + setState(726); match(DOT); } } } - setState(724); + setState(732); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,94,_ctx); + _alt = getInterpreter().adaptivePredict(_input,95,_ctx); } - setState(725); + setState(733); identifier(); } } @@ -5734,15 +5819,15 @@ public T accept(ParseTreeVisitor visitor) { public final IdentifierContext identifier() throws RecognitionException { IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); - enterRule(_localctx, 94, RULE_identifier); + enterRule(_localctx, 96, RULE_identifier); try { - setState(729); + setState(737); switch (_input.LA(1)) { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: enterOuterAlt(_localctx, 1); { - setState(727); + setState(735); quoteIdentifier(); } break; @@ -5787,7 +5872,7 @@ public final IdentifierContext identifier() throws RecognitionException { case DIGIT_IDENTIFIER: enterOuterAlt(_localctx, 2); { - setState(728); + setState(736); unquoteIdentifier(); } break; @@ -5837,46 +5922,46 @@ public T accept(ParseTreeVisitor visitor) { public final TableIdentifierContext tableIdentifier() throws RecognitionException { TableIdentifierContext _localctx = new TableIdentifierContext(_ctx, getState()); - enterRule(_localctx, 96, RULE_tableIdentifier); + enterRule(_localctx, 98, RULE_tableIdentifier); int _la; try { - setState(743); + setState(751); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(734); + setState(742); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)) | (1L << (IDENTIFIER - 67)) | (1L << (DIGIT_IDENTIFIER - 67)) | (1L << (QUOTED_IDENTIFIER - 67)) | (1L << (BACKQUOTED_IDENTIFIER - 67)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) { { - setState(731); + setState(739); ((TableIdentifierContext)_localctx).catalog = identifier(); - setState(732); + setState(740); match(T__3); } } - setState(736); + setState(744); match(TABLE_IDENTIFIER); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(740); + setState(748); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) { case 1: { - setState(737); + setState(745); ((TableIdentifierContext)_localctx).catalog = identifier(); - setState(738); + setState(746); match(T__3); } break; } - setState(742); + setState(750); ((TableIdentifierContext)_localctx).name = identifier(); } break; @@ -5941,15 +6026,15 @@ public T accept(ParseTreeVisitor visitor) { public final QuoteIdentifierContext quoteIdentifier() throws RecognitionException { QuoteIdentifierContext _localctx = new QuoteIdentifierContext(_ctx, getState()); - enterRule(_localctx, 98, RULE_quoteIdentifier); + enterRule(_localctx, 100, RULE_quoteIdentifier); try { - setState(747); + setState(755); switch (_input.LA(1)) { case QUOTED_IDENTIFIER: _localctx = new QuotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(745); + setState(753); match(QUOTED_IDENTIFIER); } break; @@ -5957,7 +6042,7 @@ public final QuoteIdentifierContext quoteIdentifier() throws RecognitionExceptio _localctx = new BackQuotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(746); + setState(754); match(BACKQUOTED_IDENTIFIER); } break; @@ -6027,15 +6112,15 @@ public T accept(ParseTreeVisitor visitor) { public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionException { UnquoteIdentifierContext _localctx = new UnquoteIdentifierContext(_ctx, getState()); - enterRule(_localctx, 100, RULE_unquoteIdentifier); + enterRule(_localctx, 102, RULE_unquoteIdentifier); try { - setState(752); + setState(760); switch (_input.LA(1)) { case IDENTIFIER: _localctx = new UnquotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(749); + setState(757); match(IDENTIFIER); } break; @@ -6079,7 +6164,7 @@ public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionExce _localctx = new UnquotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(750); + setState(758); nonReserved(); } break; @@ -6087,7 +6172,7 @@ public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionExce _localctx = new DigitIdentifierContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(751); + setState(759); match(DIGIT_IDENTIFIER); } break; @@ -6154,15 +6239,15 @@ public T accept(ParseTreeVisitor visitor) { public final NumberContext number() throws RecognitionException { NumberContext _localctx = new NumberContext(_ctx, getState()); - enterRule(_localctx, 102, RULE_number); + enterRule(_localctx, 104, RULE_number); try { - setState(756); + setState(764); switch (_input.LA(1)) { case DECIMAL_VALUE: _localctx = new DecimalLiteralContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(754); + setState(762); match(DECIMAL_VALUE); } break; @@ -6170,7 +6255,7 @@ public final NumberContext number() throws RecognitionException { _localctx = new IntegerLiteralContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(755); + setState(763); match(INTEGER_VALUE); } break; @@ -6213,12 +6298,12 @@ public T accept(ParseTreeVisitor visitor) { public final StringContext string() throws RecognitionException { StringContext _localctx = new StringContext(_ctx, getState()); - enterRule(_localctx, 104, RULE_string); + enterRule(_localctx, 106, RULE_string); int _la; try { enterOuterAlt(_localctx, 1); { - setState(758); + setState(766); _la = _input.LA(1); if ( !(_la==PARAM || _la==STRING) ) { _errHandler.recoverInline(this); @@ -6297,14 +6382,14 @@ public T accept(ParseTreeVisitor visitor) { public final NonReservedContext nonReserved() throws RecognitionException { NonReservedContext _localctx = new NonReservedContext(_ctx, getState()); - enterRule(_localctx, 106, RULE_nonReserved); + enterRule(_localctx, 108, RULE_nonReserved); int _la; try { enterOuterAlt(_localctx, 1); { - setState(760); + setState(768); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)))) != 0)) ) { _errHandler.recoverInline(this); } else { consume(); @@ -6353,310 +6438,312 @@ private boolean valueExpression_sempred(ValueExpressionContext _localctx, int pr } public static final String _serializedATN = - "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\u0081\u02fd\4\2\t"+ + "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\u0082\u0305\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ - "\64\4\65\t\65\4\66\t\66\4\67\t\67\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3\4\3\4"+ - "\3\4\3\4\3\4\3\4\3\4\3\4\7\4~\n\4\f\4\16\4\u0081\13\4\3\4\5\4\u0084\n"+ - "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u008d\n\4\f\4\16\4\u0090\13\4\3\4\5"+ - "\4\u0093\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u009a\n\4\3\4\3\4\3\4\3\4\3\4\5\4"+ - "\u00a1\n\4\3\4\3\4\3\4\5\4\u00a6\n\4\3\4\3\4\3\4\5\4\u00ab\n\4\3\4\3\4"+ - "\3\4\3\4\3\4\3\4\5\4\u00b3\n\4\3\4\3\4\5\4\u00b7\n\4\3\4\3\4\3\4\3\4\7"+ - "\4\u00bd\n\4\f\4\16\4\u00c0\13\4\5\4\u00c2\n\4\3\4\3\4\3\4\3\4\5\4\u00c8"+ - "\n\4\3\4\3\4\3\4\5\4\u00cd\n\4\3\4\5\4\u00d0\n\4\3\4\3\4\3\4\5\4\u00d5"+ - "\n\4\3\4\5\4\u00d8\n\4\5\4\u00da\n\4\3\5\3\5\3\5\3\5\7\5\u00e0\n\5\f\5"+ - "\16\5\u00e3\13\5\5\5\u00e5\n\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\7\6\u00ef"+ - "\n\6\f\6\16\6\u00f2\13\6\5\6\u00f4\n\6\3\6\5\6\u00f7\n\6\3\7\3\7\3\7\3"+ - "\7\3\7\5\7\u00fe\n\7\3\b\3\b\3\b\3\b\3\b\5\b\u0105\n\b\3\t\3\t\5\t\u0109"+ - "\n\t\3\t\3\t\5\t\u010d\n\t\3\n\3\n\5\n\u0111\n\n\3\n\3\n\3\n\7\n\u0116"+ - "\n\n\f\n\16\n\u0119\13\n\3\n\5\n\u011c\n\n\3\n\3\n\5\n\u0120\n\n\3\n\3"+ - "\n\3\n\5\n\u0125\n\n\3\n\3\n\5\n\u0129\n\n\3\13\3\13\3\13\3\13\7\13\u012f"+ - "\n\13\f\13\16\13\u0132\13\13\3\f\5\f\u0135\n\f\3\f\3\f\3\f\7\f\u013a\n"+ - "\f\f\f\16\f\u013d\13\f\3\r\3\r\3\16\3\16\3\16\3\16\7\16\u0145\n\16\f\16"+ - "\16\16\u0148\13\16\5\16\u014a\n\16\3\16\3\16\5\16\u014e\n\16\3\17\3\17"+ - "\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21\5\21\u015a\n\21\3\21\5\21\u015d"+ - "\n\21\3\22\3\22\7\22\u0161\n\22\f\22\16\22\u0164\13\22\3\23\3\23\3\23"+ - "\3\23\5\23\u016a\n\23\3\23\3\23\3\23\3\23\3\23\5\23\u0171\n\23\3\24\5"+ - "\24\u0174\n\24\3\24\3\24\5\24\u0178\n\24\3\24\3\24\5\24\u017c\n\24\3\24"+ - "\3\24\5\24\u0180\n\24\5\24\u0182\n\24\3\25\3\25\3\25\3\25\3\25\3\25\3"+ - "\25\7\25\u018b\n\25\f\25\16\25\u018e\13\25\3\25\3\25\5\25\u0192\n\25\3"+ - "\26\3\26\5\26\u0196\n\26\3\26\5\26\u0199\n\26\3\26\3\26\3\26\3\26\5\26"+ - "\u019f\n\26\3\26\5\26\u01a2\n\26\3\26\3\26\3\26\3\26\5\26\u01a8\n\26\3"+ - "\26\5\26\u01ab\n\26\5\26\u01ad\n\26\3\27\3\27\3\30\3\30\3\30\3\30\3\30"+ + "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3"+ + "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u0080\n\4\f\4\16\4\u0083\13\4\3\4\5"+ + "\4\u0086\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u008f\n\4\f\4\16\4\u0092"+ + "\13\4\3\4\5\4\u0095\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u009c\n\4\3\4\3\4\3\4"+ + "\3\4\3\4\5\4\u00a3\n\4\3\4\3\4\3\4\5\4\u00a8\n\4\3\4\3\4\3\4\5\4\u00ad"+ + "\n\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u00b5\n\4\3\4\3\4\5\4\u00b9\n\4\3\4\3"+ + "\4\3\4\3\4\7\4\u00bf\n\4\f\4\16\4\u00c2\13\4\5\4\u00c4\n\4\3\4\3\4\3\4"+ + "\3\4\5\4\u00ca\n\4\3\4\3\4\3\4\5\4\u00cf\n\4\3\4\5\4\u00d2\n\4\3\4\3\4"+ + "\3\4\5\4\u00d7\n\4\3\4\5\4\u00da\n\4\5\4\u00dc\n\4\3\5\3\5\3\5\3\5\7\5"+ + "\u00e2\n\5\f\5\16\5\u00e5\13\5\5\5\u00e7\n\5\3\5\3\5\3\6\3\6\3\6\3\6\3"+ + "\6\3\6\7\6\u00f1\n\6\f\6\16\6\u00f4\13\6\5\6\u00f6\n\6\3\6\5\6\u00f9\n"+ + "\6\3\7\3\7\3\7\3\7\3\7\5\7\u0100\n\7\3\b\3\b\3\b\3\b\3\b\5\b\u0107\n\b"+ + "\3\t\3\t\5\t\u010b\n\t\3\t\3\t\5\t\u010f\n\t\3\n\3\n\5\n\u0113\n\n\3\n"+ + "\3\n\3\n\7\n\u0118\n\n\f\n\16\n\u011b\13\n\3\n\5\n\u011e\n\n\3\n\3\n\5"+ + "\n\u0122\n\n\3\n\3\n\3\n\5\n\u0127\n\n\3\n\3\n\5\n\u012b\n\n\3\13\3\13"+ + "\3\13\3\13\7\13\u0131\n\13\f\13\16\13\u0134\13\13\3\f\5\f\u0137\n\f\3"+ + "\f\3\f\3\f\7\f\u013c\n\f\f\f\16\f\u013f\13\f\3\r\3\r\3\16\3\16\3\16\3"+ + "\16\7\16\u0147\n\16\f\16\16\16\u014a\13\16\5\16\u014c\n\16\3\16\3\16\5"+ + "\16\u0150\n\16\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21\5\21"+ + "\u015c\n\21\3\21\5\21\u015f\n\21\3\22\3\22\7\22\u0163\n\22\f\22\16\22"+ + "\u0166\13\22\3\23\3\23\3\23\3\23\5\23\u016c\n\23\3\23\3\23\3\23\3\23\3"+ + "\23\5\23\u0173\n\23\3\24\5\24\u0176\n\24\3\24\3\24\5\24\u017a\n\24\3\24"+ + "\3\24\5\24\u017e\n\24\3\24\3\24\5\24\u0182\n\24\5\24\u0184\n\24\3\25\3"+ + "\25\3\25\3\25\3\25\3\25\3\25\7\25\u018d\n\25\f\25\16\25\u0190\13\25\3"+ + "\25\3\25\5\25\u0194\n\25\3\26\3\26\5\26\u0198\n\26\3\26\5\26\u019b\n\26"+ + "\3\26\3\26\3\26\3\26\5\26\u01a1\n\26\3\26\5\26\u01a4\n\26\3\26\3\26\3"+ + "\26\3\26\5\26\u01aa\n\26\3\26\5\26\u01ad\n\26\5\26\u01af\n\26\3\27\3\27"+ + "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+ "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+ - "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u01d0"+ - "\n\30\3\30\3\30\3\30\3\30\3\30\3\30\7\30\u01d8\n\30\f\30\16\30\u01db\13"+ - "\30\3\31\3\31\7\31\u01df\n\31\f\31\16\31\u01e2\13\31\3\32\3\32\5\32\u01e6"+ - "\n\32\3\33\5\33\u01e9\n\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u01f1\n"+ - "\33\3\33\3\33\3\33\3\33\3\33\7\33\u01f8\n\33\f\33\16\33\u01fb\13\33\3"+ - "\33\3\33\3\33\5\33\u0200\n\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u0208"+ - "\n\33\3\33\3\33\3\33\5\33\u020d\n\33\3\33\3\33\3\33\3\33\5\33\u0213\n"+ - "\33\3\33\5\33\u0216\n\33\3\34\3\34\3\34\3\35\3\35\5\35\u021d\n\35\3\36"+ - "\3\36\3\36\3\36\3\36\3\36\5\36\u0225\n\36\3\37\3\37\3\37\3\37\5\37\u022b"+ - "\n\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\7\37\u0237\n\37"+ - "\f\37\16\37\u023a\13\37\3 \3 \3 \3 \3 \3 \3 \5 \u0243\n \3 \3 \3 \3 \3"+ - " \3 \3 \3 \3 \3 \3 \5 \u0250\n \3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u025c"+ - "\n!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\5#\u0268\n#\3#\5#\u026b\n#\3"+ - "$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\5%\u0279\n%\3&\3&\3&\3&\3&\3&\3&\3"+ - "\'\3\'\3\'\3\'\3\'\5\'\u0287\n\'\3(\3(\3(\5(\u028c\n(\3(\3(\3(\7(\u0291"+ - "\n(\f(\16(\u0294\13(\5(\u0296\n(\3(\3(\3)\3)\3)\5)\u029d\n)\3*\3*\3*\3"+ - "*\3*\6*\u02a4\n*\r*\16*\u02a5\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3"+ - "*\3*\3*\3*\5*\u02b9\n*\3+\3+\3,\3,\3-\3-\5-\u02c1\n-\3-\3-\5-\u02c5\n"+ - "-\3-\3-\3-\5-\u02ca\n-\3.\3.\3/\3/\3\60\3\60\3\60\7\60\u02d3\n\60\f\60"+ - "\16\60\u02d6\13\60\3\60\3\60\3\61\3\61\5\61\u02dc\n\61\3\62\3\62\3\62"+ - "\5\62\u02e1\n\62\3\62\3\62\3\62\3\62\5\62\u02e7\n\62\3\62\5\62\u02ea\n"+ - "\62\3\63\3\63\5\63\u02ee\n\63\3\64\3\64\3\64\5\64\u02f3\n\64\3\65\3\65"+ - "\5\65\u02f7\n\65\3\66\3\66\3\67\3\67\3\67\2\4.<8\2\4\6\b\n\f\16\20\22"+ - "\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjl\2"+ - "\22\b\2\7\7\t\t\36\36\66\66AAEE\4\2((SS\4\2\t\tAA\4\2%%--\3\2\32\33\3"+ - "\2mn\4\2\7\7vv\4\2\r\r\32\32\4\2##\62\62\4\2\7\7\34\34\3\2oq\3\2fl\4\2"+ - "\"\"TT\7\2\27\30+,8;LM\\]\3\2tu\31\2\b\t\22\23\25\25\27\27\31\31\36\36"+ - " #$&(++//\62\62\65\6688::AAEGILOPRSVWYY\\\\\u0358\2n\3\2\2\2\4q\3\2\2"+ - "\2\6\u00d9\3\2\2\2\b\u00e4\3\2\2\2\n\u00e8\3\2\2\2\f\u00fd\3\2\2\2\16"+ - "\u0104\3\2\2\2\20\u0106\3\2\2\2\22\u010e\3\2\2\2\24\u012a\3\2\2\2\26\u0134"+ - "\3\2\2\2\30\u013e\3\2\2\2\32\u014d\3\2\2\2\34\u014f\3\2\2\2\36\u0155\3"+ - "\2\2\2 \u0157\3\2\2\2\"\u015e\3\2\2\2$\u0170\3\2\2\2&\u0181\3\2\2\2(\u0191"+ - "\3\2\2\2*\u01ac\3\2\2\2,\u01ae\3\2\2\2.\u01cf\3\2\2\2\60\u01e0\3\2\2\2"+ - "\62\u01e3\3\2\2\2\64\u0215\3\2\2\2\66\u0217\3\2\2\28\u021a\3\2\2\2:\u0224"+ - "\3\2\2\2<\u022a\3\2\2\2>\u024f\3\2\2\2@\u025b\3\2\2\2B\u025d\3\2\2\2D"+ - "\u0264\3\2\2\2F\u026c\3\2\2\2H\u0278\3\2\2\2J\u027a\3\2\2\2L\u0286\3\2"+ - "\2\2N\u0288\3\2\2\2P\u029c\3\2\2\2R\u02b8\3\2\2\2T\u02ba\3\2\2\2V\u02bc"+ - "\3\2\2\2X\u02be\3\2\2\2Z\u02cb\3\2\2\2\\\u02cd\3\2\2\2^\u02d4\3\2\2\2"+ - "`\u02db\3\2\2\2b\u02e9\3\2\2\2d\u02ed\3\2\2\2f\u02f2\3\2\2\2h\u02f6\3"+ - "\2\2\2j\u02f8\3\2\2\2l\u02fa\3\2\2\2no\5\6\4\2op\7\2\2\3p\3\3\2\2\2qr"+ - "\5,\27\2rs\7\2\2\3s\5\3\2\2\2t\u00da\5\b\5\2u\u0083\7 \2\2v\177\7\3\2"+ - "\2wx\7G\2\2x~\t\2\2\2yz\7$\2\2z~\t\3\2\2{|\7Y\2\2|~\5V,\2}w\3\2\2\2}y"+ - "\3\2\2\2}{\3\2\2\2~\u0081\3\2\2\2\177}\3\2\2\2\177\u0080\3\2\2\2\u0080"+ - "\u0082\3\2\2\2\u0081\177\3\2\2\2\u0082\u0084\7\4\2\2\u0083v\3\2\2\2\u0083"+ - "\u0084\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u00da\5\6\4\2\u0086\u0092\7\31"+ - "\2\2\u0087\u008e\7\3\2\2\u0088\u0089\7G\2\2\u0089\u008d\t\4\2\2\u008a"+ - "\u008b\7$\2\2\u008b\u008d\t\3\2\2\u008c\u0088\3\2\2\2\u008c\u008a\3\2"+ - "\2\2\u008d\u0090\3\2\2\2\u008e\u008c\3\2\2\2\u008e\u008f\3\2\2\2\u008f"+ - "\u0091\3\2\2\2\u0090\u008e\3\2\2\2\u0091\u0093\7\4\2\2\u0092\u0087\3\2"+ - "\2\2\u0092\u0093\3\2\2\2\u0093\u0094\3\2\2\2\u0094\u00da\5\6\4\2\u0095"+ - "\u0096\7O\2\2\u0096\u0099\7R\2\2\u0097\u009a\5\66\34\2\u0098\u009a\5b"+ - "\62\2\u0099\u0097\3\2\2\2\u0099\u0098\3\2\2\2\u0099\u009a\3\2\2\2\u009a"+ - "\u00da\3\2\2\2\u009b\u009c\7O\2\2\u009c\u009d\7\23\2\2\u009d\u00a0\t\5"+ - "\2\2\u009e\u00a1\5\66\34\2\u009f\u00a1\5b\62\2\u00a0\u009e\3\2\2\2\u00a0"+ - "\u009f\3\2\2\2\u00a1\u00da\3\2\2\2\u00a2\u00a5\t\6\2\2\u00a3\u00a6\5\66"+ - "\34\2\u00a4\u00a6\5b\62\2\u00a5\u00a3\3\2\2\2\u00a5\u00a4\3\2\2\2\u00a6"+ - "\u00da\3\2\2\2\u00a7\u00a8\7O\2\2\u00a8\u00aa\7\'\2\2\u00a9\u00ab\5\66"+ - "\34\2\u00aa\u00a9\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00da\3\2\2\2\u00ac"+ - "\u00ad\7O\2\2\u00ad\u00da\7K\2\2\u00ae\u00af\7P\2\2\u00af\u00b2\7R\2\2"+ - "\u00b0\u00b1\7\21\2\2\u00b1\u00b3\5\66\34\2\u00b2\u00b0\3\2\2\2\u00b2"+ - "\u00b3\3\2\2\2\u00b3\u00b6\3\2\2\2\u00b4\u00b7\5\66\34\2\u00b5\u00b7\5"+ - "b\62\2\u00b6\u00b4\3\2\2\2\u00b6\u00b5\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7"+ - "\u00c1\3\2\2\2\u00b8\u00b9\7V\2\2\u00b9\u00be\5j\66\2\u00ba\u00bb\7\5"+ - "\2\2\u00bb\u00bd\5j\66\2\u00bc\u00ba\3\2\2\2\u00bd\u00c0\3\2\2\2\u00be"+ - "\u00bc\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c2\3\2\2\2\u00c0\u00be\3\2"+ - "\2\2\u00c1\u00b8\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00da\3\2\2\2\u00c3"+ - "\u00c4\7P\2\2\u00c4\u00c7\7\23\2\2\u00c5\u00c6\7\21\2\2\u00c6\u00c8\5"+ - "j\66\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00cc\3\2\2\2\u00c9"+ - "\u00ca\7Q\2\2\u00ca\u00cd\5\66\34\2\u00cb\u00cd\5b\62\2\u00cc\u00c9\3"+ - "\2\2\2\u00cc\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00cf\3\2\2\2\u00ce"+ - "\u00d0\5\66\34\2\u00cf\u00ce\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0\u00da\3"+ - "\2\2\2\u00d1\u00d2\7P\2\2\u00d2\u00d7\7W\2\2\u00d3\u00d5\t\7\2\2\u00d4"+ - "\u00d3\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d8\5h"+ - "\65\2\u00d7\u00d4\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8\u00da\3\2\2\2\u00d9"+ - "t\3\2\2\2\u00d9u\3\2\2\2\u00d9\u0086\3\2\2\2\u00d9\u0095\3\2\2\2\u00d9"+ - "\u009b\3\2\2\2\u00d9\u00a2\3\2\2\2\u00d9\u00a7\3\2\2\2\u00d9\u00ac\3\2"+ - "\2\2\u00d9\u00ae\3\2\2\2\u00d9\u00c3\3\2\2\2\u00d9\u00d1\3\2\2\2\u00da"+ - "\7\3\2\2\2\u00db\u00dc\7[\2\2\u00dc\u00e1\5\34\17\2\u00dd\u00de\7\5\2"+ - "\2\u00de\u00e0\5\34\17\2\u00df\u00dd\3\2\2\2\u00e0\u00e3\3\2\2\2\u00e1"+ - "\u00df\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e5\3\2\2\2\u00e3\u00e1\3\2"+ - "\2\2\u00e4\u00db\3\2\2\2\u00e4\u00e5\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6"+ - "\u00e7\5\n\6\2\u00e7\t\3\2\2\2\u00e8\u00f3\5\16\b\2\u00e9\u00ea\7C\2\2"+ - "\u00ea\u00eb\7\17\2\2\u00eb\u00f0\5\20\t\2\u00ec\u00ed\7\5\2\2\u00ed\u00ef"+ - "\5\20\t\2\u00ee\u00ec\3\2\2\2\u00ef\u00f2\3\2\2\2\u00f0\u00ee\3\2\2\2"+ - "\u00f0\u00f1\3\2\2\2\u00f1\u00f4\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00e9"+ - "\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f6\3\2\2\2\u00f5\u00f7\5\f\7\2\u00f6"+ - "\u00f5\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7\13\3\2\2\2\u00f8\u00f9\7\65\2"+ - "\2\u00f9\u00fe\t\b\2\2\u00fa\u00fb\7`\2\2\u00fb\u00fc\t\b\2\2\u00fc\u00fe"+ - "\7e\2\2\u00fd\u00f8\3\2\2\2\u00fd\u00fa\3\2\2\2\u00fe\r\3\2\2\2\u00ff"+ - "\u0105\5\22\n\2\u0100\u0101\7\3\2\2\u0101\u0102\5\n\6\2\u0102\u0103\7"+ - "\4\2\2\u0103\u0105\3\2\2\2\u0104\u00ff\3\2\2\2\u0104\u0100\3\2\2\2\u0105"+ - "\17\3\2\2\2\u0106\u0108\5,\27\2\u0107\u0109\t\t\2\2\u0108\u0107\3\2\2"+ - "\2\u0108\u0109\3\2\2\2\u0109\u010c\3\2\2\2\u010a\u010b\7?\2\2\u010b\u010d"+ - "\t\n\2\2\u010c\u010a\3\2\2\2\u010c\u010d\3\2\2\2\u010d\21\3\2\2\2\u010e"+ - "\u0110\7N\2\2\u010f\u0111\5\36\20\2\u0110\u010f\3\2\2\2\u0110\u0111\3"+ - "\2\2\2\u0111\u0112\3\2\2\2\u0112\u0117\5 \21\2\u0113\u0114\7\5\2\2\u0114"+ - "\u0116\5 \21\2\u0115\u0113\3\2\2\2\u0116\u0119\3\2\2\2\u0117\u0115\3\2"+ - "\2\2\u0117\u0118\3\2\2\2\u0118\u011b\3\2\2\2\u0119\u0117\3\2\2\2\u011a"+ - "\u011c\5\24\13\2\u011b\u011a\3\2\2\2\u011b\u011c\3\2\2\2\u011c\u011f\3"+ - "\2\2\2\u011d\u011e\7Z\2\2\u011e\u0120\5.\30\2\u011f\u011d\3\2\2\2\u011f"+ - "\u0120\3\2\2\2\u0120\u0124\3\2\2\2\u0121\u0122\7)\2\2\u0122\u0123\7\17"+ - "\2\2\u0123\u0125\5\26\f\2\u0124\u0121\3\2\2\2\u0124\u0125\3\2\2\2\u0125"+ - "\u0128\3\2\2\2\u0126\u0127\7*\2\2\u0127\u0129\5.\30\2\u0128\u0126\3\2"+ - "\2\2\u0128\u0129\3\2\2\2\u0129\23\3\2\2\2\u012a\u012b\7%\2\2\u012b\u0130"+ - "\5\"\22\2\u012c\u012d\7\5\2\2\u012d\u012f\5\"\22\2\u012e\u012c\3\2\2\2"+ - "\u012f\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0130\u0131\3\2\2\2\u0131\25"+ - "\3\2\2\2\u0132\u0130\3\2\2\2\u0133\u0135\5\36\20\2\u0134\u0133\3\2\2\2"+ - "\u0134\u0135\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u013b\5\30\r\2\u0137\u0138"+ - "\7\5\2\2\u0138\u013a\5\30\r\2\u0139\u0137\3\2\2\2\u013a\u013d\3\2\2\2"+ - "\u013b\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\27\3\2\2\2\u013d\u013b"+ - "\3\2\2\2\u013e\u013f\5\32\16\2\u013f\31\3\2\2\2\u0140\u0149\7\3\2\2\u0141"+ - "\u0146\5,\27\2\u0142\u0143\7\5\2\2\u0143\u0145\5,\27\2\u0144\u0142\3\2"+ - "\2\2\u0145\u0148\3\2\2\2\u0146\u0144\3\2\2\2\u0146\u0147\3\2\2\2\u0147"+ - "\u014a\3\2\2\2\u0148\u0146\3\2\2\2\u0149\u0141\3\2\2\2\u0149\u014a\3\2"+ - "\2\2\u014a\u014b\3\2\2\2\u014b\u014e\7\4\2\2\u014c\u014e\5,\27\2\u014d"+ - "\u0140\3\2\2\2\u014d\u014c\3\2\2\2\u014e\33\3\2\2\2\u014f\u0150\5`\61"+ - "\2\u0150\u0151\7\f\2\2\u0151\u0152\7\3\2\2\u0152\u0153\5\n\6\2\u0153\u0154"+ - "\7\4\2\2\u0154\35\3\2\2\2\u0155\u0156\t\13\2\2\u0156\37\3\2\2\2\u0157"+ - "\u015c\5,\27\2\u0158\u015a\7\f\2\2\u0159\u0158\3\2\2\2\u0159\u015a\3\2"+ - "\2\2\u015a\u015b\3\2\2\2\u015b\u015d\5`\61\2\u015c\u0159\3\2\2\2\u015c"+ - "\u015d\3\2\2\2\u015d!\3\2\2\2\u015e\u0162\5*\26\2\u015f\u0161\5$\23\2"+ - "\u0160\u015f\3\2\2\2\u0161\u0164\3\2\2\2\u0162\u0160\3\2\2\2\u0162\u0163"+ - "\3\2\2\2\u0163#\3\2\2\2\u0164\u0162\3\2\2\2\u0165\u0166\5&\24\2\u0166"+ - "\u0167\7\61\2\2\u0167\u0169\5*\26\2\u0168\u016a\5(\25\2\u0169\u0168\3"+ - "\2\2\2\u0169\u016a\3\2\2\2\u016a\u0171\3\2\2\2\u016b\u016c\7<\2\2\u016c"+ - "\u016d\5&\24\2\u016d\u016e\7\61\2\2\u016e\u016f\5*\26\2\u016f\u0171\3"+ - "\2\2\2\u0170\u0165\3\2\2\2\u0170\u016b\3\2\2\2\u0171%\3\2\2\2\u0172\u0174"+ - "\7.\2\2\u0173\u0172\3\2\2\2\u0173\u0174\3\2\2\2\u0174\u0182\3\2\2\2\u0175"+ - "\u0177\7\63\2\2\u0176\u0178\7D\2\2\u0177\u0176\3\2\2\2\u0177\u0178\3\2"+ - "\2\2\u0178\u0182\3\2\2\2\u0179\u017b\7H\2\2\u017a\u017c\7D\2\2\u017b\u017a"+ - "\3\2\2\2\u017b\u017c\3\2\2\2\u017c\u0182\3\2\2\2\u017d\u017f\7&\2\2\u017e"+ - "\u0180\7D\2\2\u017f\u017e\3\2\2\2\u017f\u0180\3\2\2\2\u0180\u0182\3\2"+ - "\2\2\u0181\u0173\3\2\2\2\u0181\u0175\3\2\2\2\u0181\u0179\3\2\2\2\u0181"+ - "\u017d\3\2\2\2\u0182\'\3\2\2\2\u0183\u0184\7@\2\2\u0184\u0192\5.\30\2"+ - "\u0185\u0186\7X\2\2\u0186\u0187\7\3\2\2\u0187\u018c\5`\61\2\u0188\u0189"+ - "\7\5\2\2\u0189\u018b\5`\61\2\u018a\u0188\3\2\2\2\u018b\u018e\3\2\2\2\u018c"+ - "\u018a\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018f\3\2\2\2\u018e\u018c\3\2"+ - "\2\2\u018f\u0190\7\4\2\2\u0190\u0192\3\2\2\2\u0191\u0183\3\2\2\2\u0191"+ - "\u0185\3\2\2\2\u0192)\3\2\2\2\u0193\u0198\5b\62\2\u0194\u0196\7\f\2\2"+ - "\u0195\u0194\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0197\3\2\2\2\u0197\u0199"+ - "\5^\60\2\u0198\u0195\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u01ad\3\2\2\2\u019a"+ - "\u019b\7\3\2\2\u019b\u019c\5\n\6\2\u019c\u01a1\7\4\2\2\u019d\u019f\7\f"+ - "\2\2\u019e\u019d\3\2\2\2\u019e\u019f\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0"+ - "\u01a2\5^\60\2\u01a1\u019e\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01ad\3\2"+ - "\2\2\u01a3\u01a4\7\3\2\2\u01a4\u01a5\5\"\22\2\u01a5\u01aa\7\4\2\2\u01a6"+ - "\u01a8\7\f\2\2\u01a7\u01a6\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8\u01a9\3\2"+ - "\2\2\u01a9\u01ab\5^\60\2\u01aa\u01a7\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab"+ - "\u01ad\3\2\2\2\u01ac\u0193\3\2\2\2\u01ac\u019a\3\2\2\2\u01ac\u01a3\3\2"+ - "\2\2\u01ad+\3\2\2\2\u01ae\u01af\5.\30\2\u01af-\3\2\2\2\u01b0\u01b1\b\30"+ - "\1\2\u01b1\u01b2\7=\2\2\u01b2\u01d0\5.\30\n\u01b3\u01b4\7\37\2\2\u01b4"+ - "\u01b5\7\3\2\2\u01b5\u01b6\5\b\5\2\u01b6\u01b7\7\4\2\2\u01b7\u01d0\3\2"+ - "\2\2\u01b8\u01b9\7J\2\2\u01b9\u01ba\7\3\2\2\u01ba\u01bb\5j\66\2\u01bb"+ - "\u01bc\5\60\31\2\u01bc\u01bd\7\4\2\2\u01bd\u01d0\3\2\2\2\u01be\u01bf\7"+ - "\67\2\2\u01bf\u01c0\7\3\2\2\u01c0\u01c1\5^\60\2\u01c1\u01c2\7\5\2\2\u01c2"+ - "\u01c3\5j\66\2\u01c3\u01c4\5\60\31\2\u01c4\u01c5\7\4\2\2\u01c5\u01d0\3"+ - "\2\2\2\u01c6\u01c7\7\67\2\2\u01c7\u01c8\7\3\2\2\u01c8\u01c9\5j\66\2\u01c9"+ - "\u01ca\7\5\2\2\u01ca\u01cb\5j\66\2\u01cb\u01cc\5\60\31\2\u01cc\u01cd\7"+ - "\4\2\2\u01cd\u01d0\3\2\2\2\u01ce\u01d0\5\62\32\2\u01cf\u01b0\3\2\2\2\u01cf"+ - "\u01b3\3\2\2\2\u01cf\u01b8\3\2\2\2\u01cf\u01be\3\2\2\2\u01cf\u01c6\3\2"+ - "\2\2\u01cf\u01ce\3\2\2\2\u01d0\u01d9\3\2\2\2\u01d1\u01d2\f\4\2\2\u01d2"+ - "\u01d3\7\n\2\2\u01d3\u01d8\5.\30\5\u01d4\u01d5\f\3\2\2\u01d5\u01d6\7B"+ - "\2\2\u01d6\u01d8\5.\30\4\u01d7\u01d1\3\2\2\2\u01d7\u01d4\3\2\2\2\u01d8"+ - "\u01db\3\2\2\2\u01d9\u01d7\3\2\2\2\u01d9\u01da\3\2\2\2\u01da/\3\2\2\2"+ - "\u01db\u01d9\3\2\2\2\u01dc\u01dd\7\5\2\2\u01dd\u01df\5j\66\2\u01de\u01dc"+ - "\3\2\2\2\u01df\u01e2\3\2\2\2\u01e0\u01de\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1"+ - "\61\3\2\2\2\u01e2\u01e0\3\2\2\2\u01e3\u01e5\5<\37\2\u01e4\u01e6\5\64\33"+ - "\2\u01e5\u01e4\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6\63\3\2\2\2\u01e7\u01e9"+ - "\7=\2\2\u01e8\u01e7\3\2\2\2\u01e8\u01e9\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea"+ - "\u01eb\7\16\2\2\u01eb\u01ec\5<\37\2\u01ec\u01ed\7\n\2\2\u01ed\u01ee\5"+ - "<\37\2\u01ee\u0216\3\2\2\2\u01ef\u01f1\7=\2\2\u01f0\u01ef\3\2\2\2\u01f0"+ - "\u01f1\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\7-\2\2\u01f3\u01f4\7\3"+ - "\2\2\u01f4\u01f9\5<\37\2\u01f5\u01f6\7\5\2\2\u01f6\u01f8\5<\37\2\u01f7"+ - "\u01f5\3\2\2\2\u01f8\u01fb\3\2\2\2\u01f9\u01f7\3\2\2\2\u01f9\u01fa\3\2"+ - "\2\2\u01fa\u01fc\3\2\2\2\u01fb\u01f9\3\2\2\2\u01fc\u01fd\7\4\2\2\u01fd"+ - "\u0216\3\2\2\2\u01fe\u0200\7=\2\2\u01ff\u01fe\3\2\2\2\u01ff\u0200\3\2"+ - "\2\2\u0200\u0201\3\2\2\2\u0201\u0202\7-\2\2\u0202\u0203\7\3\2\2\u0203"+ - "\u0204\5\b\5\2\u0204\u0205\7\4\2\2\u0205\u0216\3\2\2\2\u0206\u0208\7="+ - "\2\2\u0207\u0206\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u0209\3\2\2\2\u0209"+ - "\u020a\7\64\2\2\u020a\u0216\58\35\2\u020b\u020d\7=\2\2\u020c\u020b\3\2"+ - "\2\2\u020c\u020d\3\2\2\2\u020d\u020e\3\2\2\2\u020e\u020f\7I\2\2\u020f"+ - "\u0216\5j\66\2\u0210\u0212\7\60\2\2\u0211\u0213\7=\2\2\u0212\u0211\3\2"+ - "\2\2\u0212\u0213\3\2\2\2\u0213\u0214\3\2\2\2\u0214\u0216\7>\2\2\u0215"+ - "\u01e8\3\2\2\2\u0215\u01f0\3\2\2\2\u0215\u01ff\3\2\2\2\u0215\u0207\3\2"+ - "\2\2\u0215\u020c\3\2\2\2\u0215\u0210\3\2\2\2\u0216\65\3\2\2\2\u0217\u0218"+ - "\7\64\2\2\u0218\u0219\58\35\2\u0219\67\3\2\2\2\u021a\u021c\5j\66\2\u021b"+ - "\u021d\5:\36\2\u021c\u021b\3\2\2\2\u021c\u021d\3\2\2\2\u021d9\3\2\2\2"+ - "\u021e\u021f\7\35\2\2\u021f\u0225\5j\66\2\u0220\u0221\7^\2\2\u0221\u0222"+ - "\5j\66\2\u0222\u0223\7e\2\2\u0223\u0225\3\2\2\2\u0224\u021e\3\2\2\2\u0224"+ - "\u0220\3\2\2\2\u0225;\3\2\2\2\u0226\u0227\b\37\1\2\u0227\u022b\5> \2\u0228"+ - "\u0229\t\7\2\2\u0229\u022b\5<\37\6\u022a\u0226\3\2\2\2\u022a\u0228\3\2"+ - "\2\2\u022b\u0238\3\2\2\2\u022c\u022d\f\5\2\2\u022d\u022e\t\f\2\2\u022e"+ - "\u0237\5<\37\6\u022f\u0230\f\4\2\2\u0230\u0231\t\7\2\2\u0231\u0237\5<"+ - "\37\5\u0232\u0233\f\3\2\2\u0233\u0234\5T+\2\u0234\u0235\5<\37\4\u0235"+ - "\u0237\3\2\2\2\u0236\u022c\3\2\2\2\u0236\u022f\3\2\2\2\u0236\u0232\3\2"+ - "\2\2\u0237\u023a\3\2\2\2\u0238\u0236\3\2\2\2\u0238\u0239\3\2\2\2\u0239"+ - "=\3\2\2\2\u023a\u0238\3\2\2\2\u023b\u0250\5@!\2\u023c\u0250\5H%\2\u023d"+ - "\u0250\5D#\2\u023e\u0250\5R*\2\u023f\u0240\5^\60\2\u0240\u0241\7s\2\2"+ - "\u0241\u0243\3\2\2\2\u0242\u023f\3\2\2\2\u0242\u0243\3\2\2\2\u0243\u0244"+ - "\3\2\2\2\u0244\u0250\7o\2\2\u0245\u0250\5L\'\2\u0246\u0247\7\3\2\2\u0247"+ - "\u0248\5\b\5\2\u0248\u0249\7\4\2\2\u0249\u0250\3\2\2\2\u024a\u0250\5^"+ - "\60\2\u024b\u024c\7\3\2\2\u024c\u024d\5,\27\2\u024d\u024e\7\4\2\2\u024e"+ - "\u0250\3\2\2\2\u024f\u023b\3\2\2\2\u024f\u023c\3\2\2\2\u024f\u023d\3\2"+ - "\2\2\u024f\u023e\3\2\2\2\u024f\u0242\3\2\2\2\u024f\u0245\3\2\2\2\u024f"+ - "\u0246\3\2\2\2\u024f\u024a\3\2\2\2\u024f\u024b\3\2\2\2\u0250?\3\2\2\2"+ - "\u0251\u025c\5B\"\2\u0252\u0253\7_\2\2\u0253\u0254\5B\"\2\u0254\u0255"+ - "\7e\2\2\u0255\u025c\3\2\2\2\u0256\u025c\5F$\2\u0257\u0258\7_\2\2\u0258"+ - "\u0259\5F$\2\u0259\u025a\7e\2\2\u025a\u025c\3\2\2\2\u025b\u0251\3\2\2"+ - "\2\u025b\u0252\3\2\2\2\u025b\u0256\3\2\2\2\u025b\u0257\3\2\2\2\u025cA"+ - "\3\2\2\2\u025d\u025e\7\20\2\2\u025e\u025f\7\3\2\2\u025f\u0260\5,\27\2"+ - "\u0260\u0261\7\f\2\2\u0261\u0262\5\\/\2\u0262\u0263\7\4\2\2\u0263C\3\2"+ - "\2\2\u0264\u026a\7\26\2\2\u0265\u0267\7\3\2\2\u0266\u0268\7v\2\2\u0267"+ - "\u0266\3\2\2\2\u0267\u0268\3\2\2\2\u0268\u0269\3\2\2\2\u0269\u026b\7\4"+ - "\2\2\u026a\u0265\3\2\2\2\u026a\u026b\3\2\2\2\u026bE\3\2\2\2\u026c\u026d"+ - "\7\24\2\2\u026d\u026e\7\3\2\2\u026e\u026f\5,\27\2\u026f\u0270\7\5\2\2"+ - "\u0270\u0271\5\\/\2\u0271\u0272\7\4\2\2\u0272G\3\2\2\2\u0273\u0279\5J"+ - "&\2\u0274\u0275\7_\2\2\u0275\u0276\5J&\2\u0276\u0277\7e\2\2\u0277\u0279"+ - "\3\2\2\2\u0278\u0273\3\2\2\2\u0278\u0274\3\2\2\2\u0279I\3\2\2\2\u027a"+ - "\u027b\7!\2\2\u027b\u027c\7\3\2\2\u027c\u027d\5`\61\2\u027d\u027e\7%\2"+ - "\2\u027e\u027f\5<\37\2\u027f\u0280\7\4\2\2\u0280K\3\2\2\2\u0281\u0287"+ - "\5N(\2\u0282\u0283\7_\2\2\u0283\u0284\5N(\2\u0284\u0285\7e\2\2\u0285\u0287"+ - "\3\2\2\2\u0286\u0281\3\2\2\2\u0286\u0282\3\2\2\2\u0287M\3\2\2\2\u0288"+ - "\u0289\5P)\2\u0289\u0295\7\3\2\2\u028a\u028c\5\36\20\2\u028b\u028a\3\2"+ - "\2\2\u028b\u028c\3\2\2\2\u028c\u028d\3\2\2\2\u028d\u0292\5,\27\2\u028e"+ - "\u028f\7\5\2\2\u028f\u0291\5,\27\2\u0290\u028e\3\2\2\2\u0291\u0294\3\2"+ - "\2\2\u0292\u0290\3\2\2\2\u0292\u0293\3\2\2\2\u0293\u0296\3\2\2\2\u0294"+ - "\u0292\3\2\2\2\u0295\u028b\3\2\2\2\u0295\u0296\3\2\2\2\u0296\u0297\3\2"+ - "\2\2\u0297\u0298\7\4\2\2\u0298O\3\2\2\2\u0299\u029d\7\63\2\2\u029a\u029d"+ - "\7H\2\2\u029b\u029d\5`\61\2\u029c\u0299\3\2\2\2\u029c\u029a\3\2\2\2\u029c"+ - "\u029b\3\2\2\2\u029dQ\3\2\2\2\u029e\u02b9\7>\2\2\u029f\u02b9\5X-\2\u02a0"+ - "\u02b9\5h\65\2\u02a1\u02b9\5V,\2\u02a2\u02a4\7u\2\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\u02b9"+ - "\3\2\2\2\u02a7\u02b9\7t\2\2\u02a8\u02a9\7a\2\2\u02a9\u02aa\5j\66\2\u02aa"+ - "\u02ab\7e\2\2\u02ab\u02b9\3\2\2\2\u02ac\u02ad\7b\2\2\u02ad\u02ae\5j\66"+ - "\2\u02ae\u02af\7e\2\2\u02af\u02b9\3\2\2\2\u02b0\u02b1\7c\2\2\u02b1\u02b2"+ - "\5j\66\2\u02b2\u02b3\7e\2\2\u02b3\u02b9\3\2\2\2\u02b4\u02b5\7d\2\2\u02b5"+ - "\u02b6\5j\66\2\u02b6\u02b7\7e\2\2\u02b7\u02b9\3\2\2\2\u02b8\u029e\3\2"+ - "\2\2\u02b8\u029f\3\2\2\2\u02b8\u02a0\3\2\2\2\u02b8\u02a1\3\2\2\2\u02b8"+ - "\u02a3\3\2\2\2\u02b8\u02a7\3\2\2\2\u02b8\u02a8\3\2\2\2\u02b8\u02ac\3\2"+ - "\2\2\u02b8\u02b0\3\2\2\2\u02b8\u02b4\3\2\2\2\u02b9S\3\2\2\2\u02ba\u02bb"+ - "\t\r\2\2\u02bbU\3\2\2\2\u02bc\u02bd\t\16\2\2\u02bdW\3\2\2\2\u02be\u02c0"+ - "\7/\2\2\u02bf\u02c1\t\7\2\2\u02c0\u02bf\3\2\2\2\u02c0\u02c1\3\2\2\2\u02c1"+ - "\u02c4\3\2\2\2\u02c2\u02c5\5h\65\2\u02c3\u02c5\5j\66\2\u02c4\u02c2\3\2"+ - "\2\2\u02c4\u02c3\3\2\2\2\u02c5\u02c6\3\2\2\2\u02c6\u02c9\5Z.\2\u02c7\u02c8"+ - "\7U\2\2\u02c8\u02ca\5Z.\2\u02c9\u02c7\3\2\2\2\u02c9\u02ca\3\2\2\2\u02ca"+ - "Y\3\2\2\2\u02cb\u02cc\t\17\2\2\u02cc[\3\2\2\2\u02cd\u02ce\5`\61\2\u02ce"+ - "]\3\2\2\2\u02cf\u02d0\5`\61\2\u02d0\u02d1\7s\2\2\u02d1\u02d3\3\2\2\2\u02d2"+ - "\u02cf\3\2\2\2\u02d3\u02d6\3\2\2\2\u02d4\u02d2\3\2\2\2\u02d4\u02d5\3\2"+ - "\2\2\u02d5\u02d7\3\2\2\2\u02d6\u02d4\3\2\2\2\u02d7\u02d8\5`\61\2\u02d8"+ - "_\3\2\2\2\u02d9\u02dc\5d\63\2\u02da\u02dc\5f\64\2\u02db\u02d9\3\2\2\2"+ - "\u02db\u02da\3\2\2\2\u02dca\3\2\2\2\u02dd\u02de\5`\61\2\u02de\u02df\7"+ - "\6\2\2\u02df\u02e1\3\2\2\2\u02e0\u02dd\3\2\2\2\u02e0\u02e1\3\2\2\2\u02e1"+ - "\u02e2\3\2\2\2\u02e2\u02ea\7z\2\2\u02e3\u02e4\5`\61\2\u02e4\u02e5\7\6"+ - "\2\2\u02e5\u02e7\3\2\2\2\u02e6\u02e3\3\2\2\2\u02e6\u02e7\3\2\2\2\u02e7"+ - "\u02e8\3\2\2\2\u02e8\u02ea\5`\61\2\u02e9\u02e0\3\2\2\2\u02e9\u02e6\3\2"+ - "\2\2\u02eac\3\2\2\2\u02eb\u02ee\7{\2\2\u02ec\u02ee\7|\2\2\u02ed\u02eb"+ - "\3\2\2\2\u02ed\u02ec\3\2\2\2\u02eee\3\2\2\2\u02ef\u02f3\7x\2\2\u02f0\u02f3"+ - "\5l\67\2\u02f1\u02f3\7y\2\2\u02f2\u02ef\3\2\2\2\u02f2\u02f0\3\2\2\2\u02f2"+ - "\u02f1\3\2\2\2\u02f3g\3\2\2\2\u02f4\u02f7\7w\2\2\u02f5\u02f7\7v\2\2\u02f6"+ - "\u02f4\3\2\2\2\u02f6\u02f5\3\2\2\2\u02f7i\3\2\2\2\u02f8\u02f9\t\20\2\2"+ - "\u02f9k\3\2\2\2\u02fa\u02fb\t\21\2\2\u02fbm\3\2\2\2h}\177\u0083\u008c"+ - "\u008e\u0092\u0099\u00a0\u00a5\u00aa\u00b2\u00b6\u00be\u00c1\u00c7\u00cc"+ - "\u00cf\u00d4\u00d7\u00d9\u00e1\u00e4\u00f0\u00f3\u00f6\u00fd\u0104\u0108"+ - "\u010c\u0110\u0117\u011b\u011f\u0124\u0128\u0130\u0134\u013b\u0146\u0149"+ - "\u014d\u0159\u015c\u0162\u0169\u0170\u0173\u0177\u017b\u017f\u0181\u018c"+ - "\u0191\u0195\u0198\u019e\u01a1\u01a7\u01aa\u01ac\u01cf\u01d7\u01d9\u01e0"+ - "\u01e5\u01e8\u01f0\u01f9\u01ff\u0207\u020c\u0212\u0215\u021c\u0224\u022a"+ - "\u0236\u0238\u0242\u024f\u025b\u0267\u026a\u0278\u0286\u028b\u0292\u0295"+ - "\u029c\u02a5\u02b8\u02c0\u02c4\u02c9\u02d4\u02db\u02e0\u02e6\u02e9\u02ed"+ - "\u02f2\u02f6"; + "\3\30\3\30\3\30\5\30\u01d2\n\30\3\30\3\30\3\30\3\30\3\30\3\30\7\30\u01da"+ + "\n\30\f\30\16\30\u01dd\13\30\3\31\3\31\7\31\u01e1\n\31\f\31\16\31\u01e4"+ + "\13\31\3\32\3\32\5\32\u01e8\n\32\3\33\5\33\u01eb\n\33\3\33\3\33\3\33\3"+ + "\33\3\33\3\33\5\33\u01f3\n\33\3\33\3\33\3\33\3\33\3\33\7\33\u01fa\n\33"+ + "\f\33\16\33\u01fd\13\33\3\33\3\33\3\33\5\33\u0202\n\33\3\33\3\33\3\33"+ + "\3\33\3\33\3\33\5\33\u020a\n\33\3\33\3\33\3\33\5\33\u020f\n\33\3\33\3"+ + "\33\3\33\3\33\5\33\u0215\n\33\3\33\5\33\u0218\n\33\3\34\3\34\3\34\3\35"+ + "\3\35\5\35\u021f\n\35\3\36\3\36\3\36\3\36\3\36\3\36\5\36\u0227\n\36\3"+ + "\37\3\37\3\37\3\37\5\37\u022d\n\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37"+ + "\3\37\3\37\3\37\7\37\u0239\n\37\f\37\16\37\u023c\13\37\3 \3 \3 \3 \3 "+ + "\3 \3 \3 \5 \u0246\n \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \5 \u0253\n \3!"+ + "\3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u025f\n!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3"+ + "#\3#\3#\5#\u026b\n#\3$\3$\3$\5$\u0270\n$\3$\5$\u0273\n$\3%\3%\3%\3%\3"+ + "%\3%\3%\3&\3&\3&\3&\3&\5&\u0281\n&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3"+ + "(\3(\3(\5(\u028f\n(\3)\3)\3)\5)\u0294\n)\3)\3)\3)\7)\u0299\n)\f)\16)\u029c"+ + "\13)\5)\u029e\n)\3)\3)\3*\3*\3*\5*\u02a5\n*\3+\3+\3+\3+\3+\6+\u02ac\n"+ + "+\r+\16+\u02ad\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\5+\u02c1"+ + "\n+\3,\3,\3-\3-\3.\3.\5.\u02c9\n.\3.\3.\5.\u02cd\n.\3.\3.\3.\5.\u02d2"+ + "\n.\3/\3/\3\60\3\60\3\61\3\61\3\61\7\61\u02db\n\61\f\61\16\61\u02de\13"+ + "\61\3\61\3\61\3\62\3\62\5\62\u02e4\n\62\3\63\3\63\3\63\5\63\u02e9\n\63"+ + "\3\63\3\63\3\63\3\63\5\63\u02ef\n\63\3\63\5\63\u02f2\n\63\3\64\3\64\5"+ + "\64\u02f6\n\64\3\65\3\65\3\65\5\65\u02fb\n\65\3\66\3\66\5\66\u02ff\n\66"+ + "\3\67\3\67\38\38\38\2\4.<9\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$"+ + "&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjln\2\22\b\2\7\7\t\t\37\37"+ + "\67\67BBFF\4\2))TT\4\2\t\tBB\4\2&&..\3\2\33\34\3\2no\4\2\7\7ww\4\2\r\r"+ + "\33\33\4\2$$\63\63\4\2\7\7\35\35\3\2pr\3\2gm\4\2##UU\7\2\30\31,-9\u0252\3\2\2\2@\u025e\3\2\2\2B\u0260\3\2\2\2D\u0267\3\2\2\2F"+ + "\u026c\3\2\2\2H\u0274\3\2\2\2J\u0280\3\2\2\2L\u0282\3\2\2\2N\u028e\3\2"+ + "\2\2P\u0290\3\2\2\2R\u02a4\3\2\2\2T\u02c0\3\2\2\2V\u02c2\3\2\2\2X\u02c4"+ + "\3\2\2\2Z\u02c6\3\2\2\2\\\u02d3\3\2\2\2^\u02d5\3\2\2\2`\u02dc\3\2\2\2"+ + "b\u02e3\3\2\2\2d\u02f1\3\2\2\2f\u02f5\3\2\2\2h\u02fa\3\2\2\2j\u02fe\3"+ + "\2\2\2l\u0300\3\2\2\2n\u0302\3\2\2\2pq\5\6\4\2qr\7\2\2\3r\3\3\2\2\2st"+ + "\5,\27\2tu\7\2\2\3u\5\3\2\2\2v\u00dc\5\b\5\2w\u0085\7!\2\2x\u0081\7\3"+ + "\2\2yz\7H\2\2z\u0080\t\2\2\2{|\7%\2\2|\u0080\t\3\2\2}~\7Z\2\2~\u0080\5"+ + "X-\2\177y\3\2\2\2\177{\3\2\2\2\177}\3\2\2\2\u0080\u0083\3\2\2\2\u0081"+ + "\177\3\2\2\2\u0081\u0082\3\2\2\2\u0082\u0084\3\2\2\2\u0083\u0081\3\2\2"+ + "\2\u0084\u0086\7\4\2\2\u0085x\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0087"+ + "\3\2\2\2\u0087\u00dc\5\6\4\2\u0088\u0094\7\32\2\2\u0089\u0090\7\3\2\2"+ + "\u008a\u008b\7H\2\2\u008b\u008f\t\4\2\2\u008c\u008d\7%\2\2\u008d\u008f"+ + "\t\3\2\2\u008e\u008a\3\2\2\2\u008e\u008c\3\2\2\2\u008f\u0092\3\2\2\2\u0090"+ + "\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0093\3\2\2\2\u0092\u0090\3\2"+ + "\2\2\u0093\u0095\7\4\2\2\u0094\u0089\3\2\2\2\u0094\u0095\3\2\2\2\u0095"+ + "\u0096\3\2\2\2\u0096\u00dc\5\6\4\2\u0097\u0098\7P\2\2\u0098\u009b\7S\2"+ + "\2\u0099\u009c\5\66\34\2\u009a\u009c\5d\63\2\u009b\u0099\3\2\2\2\u009b"+ + "\u009a\3\2\2\2\u009b\u009c\3\2\2\2\u009c\u00dc\3\2\2\2\u009d\u009e\7P"+ + "\2\2\u009e\u009f\7\23\2\2\u009f\u00a2\t\5\2\2\u00a0\u00a3\5\66\34\2\u00a1"+ + "\u00a3\5d\63\2\u00a2\u00a0\3\2\2\2\u00a2\u00a1\3\2\2\2\u00a3\u00dc\3\2"+ + "\2\2\u00a4\u00a7\t\6\2\2\u00a5\u00a8\5\66\34\2\u00a6\u00a8\5d\63\2\u00a7"+ + "\u00a5\3\2\2\2\u00a7\u00a6\3\2\2\2\u00a8\u00dc\3\2\2\2\u00a9\u00aa\7P"+ + "\2\2\u00aa\u00ac\7(\2\2\u00ab\u00ad\5\66\34\2\u00ac\u00ab\3\2\2\2\u00ac"+ + "\u00ad\3\2\2\2\u00ad\u00dc\3\2\2\2\u00ae\u00af\7P\2\2\u00af\u00dc\7L\2"+ + "\2\u00b0\u00b1\7Q\2\2\u00b1\u00b4\7S\2\2\u00b2\u00b3\7\21\2\2\u00b3\u00b5"+ + "\5\66\34\2\u00b4\u00b2\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\u00b8\3\2\2\2"+ + "\u00b6\u00b9\5\66\34\2\u00b7\u00b9\5d\63\2\u00b8\u00b6\3\2\2\2\u00b8\u00b7"+ + "\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00c3\3\2\2\2\u00ba\u00bb\7W\2\2\u00bb"+ + "\u00c0\5l\67\2\u00bc\u00bd\7\5\2\2\u00bd\u00bf\5l\67\2\u00be\u00bc\3\2"+ + "\2\2\u00bf\u00c2\3\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1"+ + "\u00c4\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c3\u00ba\3\2\2\2\u00c3\u00c4\3\2"+ + "\2\2\u00c4\u00dc\3\2\2\2\u00c5\u00c6\7Q\2\2\u00c6\u00c9\7\23\2\2\u00c7"+ + "\u00c8\7\21\2\2\u00c8\u00ca\5l\67\2\u00c9\u00c7\3\2\2\2\u00c9\u00ca\3"+ + "\2\2\2\u00ca\u00ce\3\2\2\2\u00cb\u00cc\7R\2\2\u00cc\u00cf\5\66\34\2\u00cd"+ + "\u00cf\5d\63\2\u00ce\u00cb\3\2\2\2\u00ce\u00cd\3\2\2\2\u00ce\u00cf\3\2"+ + "\2\2\u00cf\u00d1\3\2\2\2\u00d0\u00d2\5\66\34\2\u00d1\u00d0\3\2\2\2\u00d1"+ + "\u00d2\3\2\2\2\u00d2\u00dc\3\2\2\2\u00d3\u00d4\7Q\2\2\u00d4\u00d9\7X\2"+ + "\2\u00d5\u00d7\t\7\2\2\u00d6\u00d5\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00d8"+ + "\3\2\2\2\u00d8\u00da\5j\66\2\u00d9\u00d6\3\2\2\2\u00d9\u00da\3\2\2\2\u00da"+ + "\u00dc\3\2\2\2\u00dbv\3\2\2\2\u00dbw\3\2\2\2\u00db\u0088\3\2\2\2\u00db"+ + "\u0097\3\2\2\2\u00db\u009d\3\2\2\2\u00db\u00a4\3\2\2\2\u00db\u00a9\3\2"+ + "\2\2\u00db\u00ae\3\2\2\2\u00db\u00b0\3\2\2\2\u00db\u00c5\3\2\2\2\u00db"+ + "\u00d3\3\2\2\2\u00dc\7\3\2\2\2\u00dd\u00de\7\\\2\2\u00de\u00e3\5\34\17"+ + "\2\u00df\u00e0\7\5\2\2\u00e0\u00e2\5\34\17\2\u00e1\u00df\3\2\2\2\u00e2"+ + "\u00e5\3\2\2\2\u00e3\u00e1\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4\u00e7\3\2"+ + "\2\2\u00e5\u00e3\3\2\2\2\u00e6\u00dd\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7"+ + "\u00e8\3\2\2\2\u00e8\u00e9\5\n\6\2\u00e9\t\3\2\2\2\u00ea\u00f5\5\16\b"+ + "\2\u00eb\u00ec\7D\2\2\u00ec\u00ed\7\17\2\2\u00ed\u00f2\5\20\t\2\u00ee"+ + "\u00ef\7\5\2\2\u00ef\u00f1\5\20\t\2\u00f0\u00ee\3\2\2\2\u00f1\u00f4\3"+ + "\2\2\2\u00f2\u00f0\3\2\2\2\u00f2\u00f3\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4"+ + "\u00f2\3\2\2\2\u00f5\u00eb\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f8\3\2"+ + "\2\2\u00f7\u00f9\5\f\7\2\u00f8\u00f7\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9"+ + "\13\3\2\2\2\u00fa\u00fb\7\66\2\2\u00fb\u0100\t\b\2\2\u00fc\u00fd\7a\2"+ + "\2\u00fd\u00fe\t\b\2\2\u00fe\u0100\7f\2\2\u00ff\u00fa\3\2\2\2\u00ff\u00fc"+ + "\3\2\2\2\u0100\r\3\2\2\2\u0101\u0107\5\22\n\2\u0102\u0103\7\3\2\2\u0103"+ + "\u0104\5\n\6\2\u0104\u0105\7\4\2\2\u0105\u0107\3\2\2\2\u0106\u0101\3\2"+ + "\2\2\u0106\u0102\3\2\2\2\u0107\17\3\2\2\2\u0108\u010a\5,\27\2\u0109\u010b"+ + "\t\t\2\2\u010a\u0109\3\2\2\2\u010a\u010b\3\2\2\2\u010b\u010e\3\2\2\2\u010c"+ + "\u010d\7@\2\2\u010d\u010f\t\n\2\2\u010e\u010c\3\2\2\2\u010e\u010f\3\2"+ + "\2\2\u010f\21\3\2\2\2\u0110\u0112\7O\2\2\u0111\u0113\5\36\20\2\u0112\u0111"+ + "\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0114\3\2\2\2\u0114\u0119\5 \21\2\u0115"+ + "\u0116\7\5\2\2\u0116\u0118\5 \21\2\u0117\u0115\3\2\2\2\u0118\u011b\3\2"+ + "\2\2\u0119\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u011d\3\2\2\2\u011b"+ + "\u0119\3\2\2\2\u011c\u011e\5\24\13\2\u011d\u011c\3\2\2\2\u011d\u011e\3"+ + "\2\2\2\u011e\u0121\3\2\2\2\u011f\u0120\7[\2\2\u0120\u0122\5.\30\2\u0121"+ + "\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0126\3\2\2\2\u0123\u0124\7*"+ + "\2\2\u0124\u0125\7\17\2\2\u0125\u0127\5\26\f\2\u0126\u0123\3\2\2\2\u0126"+ + "\u0127\3\2\2\2\u0127\u012a\3\2\2\2\u0128\u0129\7+\2\2\u0129\u012b\5.\30"+ + "\2\u012a\u0128\3\2\2\2\u012a\u012b\3\2\2\2\u012b\23\3\2\2\2\u012c\u012d"+ + "\7&\2\2\u012d\u0132\5\"\22\2\u012e\u012f\7\5\2\2\u012f\u0131\5\"\22\2"+ + "\u0130\u012e\3\2\2\2\u0131\u0134\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0133"+ + "\3\2\2\2\u0133\25\3\2\2\2\u0134\u0132\3\2\2\2\u0135\u0137\5\36\20\2\u0136"+ + "\u0135\3\2\2\2\u0136\u0137\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u013d\5\30"+ + "\r\2\u0139\u013a\7\5\2\2\u013a\u013c\5\30\r\2\u013b\u0139\3\2\2\2\u013c"+ + "\u013f\3\2\2\2\u013d\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e\27\3\2\2"+ + "\2\u013f\u013d\3\2\2\2\u0140\u0141\5\32\16\2\u0141\31\3\2\2\2\u0142\u014b"+ + "\7\3\2\2\u0143\u0148\5,\27\2\u0144\u0145\7\5\2\2\u0145\u0147\5,\27\2\u0146"+ + "\u0144\3\2\2\2\u0147\u014a\3\2\2\2\u0148\u0146\3\2\2\2\u0148\u0149\3\2"+ + "\2\2\u0149\u014c\3\2\2\2\u014a\u0148\3\2\2\2\u014b\u0143\3\2\2\2\u014b"+ + "\u014c\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u0150\7\4\2\2\u014e\u0150\5,"+ + "\27\2\u014f\u0142\3\2\2\2\u014f\u014e\3\2\2\2\u0150\33\3\2\2\2\u0151\u0152"+ + "\5b\62\2\u0152\u0153\7\f\2\2\u0153\u0154\7\3\2\2\u0154\u0155\5\n\6\2\u0155"+ + "\u0156\7\4\2\2\u0156\35\3\2\2\2\u0157\u0158\t\13\2\2\u0158\37\3\2\2\2"+ + "\u0159\u015e\5,\27\2\u015a\u015c\7\f\2\2\u015b\u015a\3\2\2\2\u015b\u015c"+ + "\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015f\5b\62\2\u015e\u015b\3\2\2\2\u015e"+ + "\u015f\3\2\2\2\u015f!\3\2\2\2\u0160\u0164\5*\26\2\u0161\u0163\5$\23\2"+ + "\u0162\u0161\3\2\2\2\u0163\u0166\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0165"+ + "\3\2\2\2\u0165#\3\2\2\2\u0166\u0164\3\2\2\2\u0167\u0168\5&\24\2\u0168"+ + "\u0169\7\62\2\2\u0169\u016b\5*\26\2\u016a\u016c\5(\25\2\u016b\u016a\3"+ + "\2\2\2\u016b\u016c\3\2\2\2\u016c\u0173\3\2\2\2\u016d\u016e\7=\2\2\u016e"+ + "\u016f\5&\24\2\u016f\u0170\7\62\2\2\u0170\u0171\5*\26\2\u0171\u0173\3"+ + "\2\2\2\u0172\u0167\3\2\2\2\u0172\u016d\3\2\2\2\u0173%\3\2\2\2\u0174\u0176"+ + "\7/\2\2\u0175\u0174\3\2\2\2\u0175\u0176\3\2\2\2\u0176\u0184\3\2\2\2\u0177"+ + "\u0179\7\64\2\2\u0178\u017a\7E\2\2\u0179\u0178\3\2\2\2\u0179\u017a\3\2"+ + "\2\2\u017a\u0184\3\2\2\2\u017b\u017d\7I\2\2\u017c\u017e\7E\2\2\u017d\u017c"+ + "\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u0184\3\2\2\2\u017f\u0181\7\'\2\2\u0180"+ + "\u0182\7E\2\2\u0181\u0180\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0184\3\2"+ + "\2\2\u0183\u0175\3\2\2\2\u0183\u0177\3\2\2\2\u0183\u017b\3\2\2\2\u0183"+ + "\u017f\3\2\2\2\u0184\'\3\2\2\2\u0185\u0186\7A\2\2\u0186\u0194\5.\30\2"+ + "\u0187\u0188\7Y\2\2\u0188\u0189\7\3\2\2\u0189\u018e\5b\62\2\u018a\u018b"+ + "\7\5\2\2\u018b\u018d\5b\62\2\u018c\u018a\3\2\2\2\u018d\u0190\3\2\2\2\u018e"+ + "\u018c\3\2\2\2\u018e\u018f\3\2\2\2\u018f\u0191\3\2\2\2\u0190\u018e\3\2"+ + "\2\2\u0191\u0192\7\4\2\2\u0192\u0194\3\2\2\2\u0193\u0185\3\2\2\2\u0193"+ + "\u0187\3\2\2\2\u0194)\3\2\2\2\u0195\u019a\5d\63\2\u0196\u0198\7\f\2\2"+ + "\u0197\u0196\3\2\2\2\u0197\u0198\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019b"+ + "\5`\61\2\u019a\u0197\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u01af\3\2\2\2\u019c"+ + "\u019d\7\3\2\2\u019d\u019e\5\n\6\2\u019e\u01a3\7\4\2\2\u019f\u01a1\7\f"+ + "\2\2\u01a0\u019f\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2"+ + "\u01a4\5`\61\2\u01a3\u01a0\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01af\3\2"+ + "\2\2\u01a5\u01a6\7\3\2\2\u01a6\u01a7\5\"\22\2\u01a7\u01ac\7\4\2\2\u01a8"+ + "\u01aa\7\f\2\2\u01a9\u01a8\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01ab\3\2"+ + "\2\2\u01ab\u01ad\5`\61\2\u01ac\u01a9\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad"+ + "\u01af\3\2\2\2\u01ae\u0195\3\2\2\2\u01ae\u019c\3\2\2\2\u01ae\u01a5\3\2"+ + "\2\2\u01af+\3\2\2\2\u01b0\u01b1\5.\30\2\u01b1-\3\2\2\2\u01b2\u01b3\b\30"+ + "\1\2\u01b3\u01b4\7>\2\2\u01b4\u01d2\5.\30\n\u01b5\u01b6\7 \2\2\u01b6\u01b7"+ + "\7\3\2\2\u01b7\u01b8\5\b\5\2\u01b8\u01b9\7\4\2\2\u01b9\u01d2\3\2\2\2\u01ba"+ + "\u01bb\7K\2\2\u01bb\u01bc\7\3\2\2\u01bc\u01bd\5l\67\2\u01bd\u01be\5\60"+ + "\31\2\u01be\u01bf\7\4\2\2\u01bf\u01d2\3\2\2\2\u01c0\u01c1\78\2\2\u01c1"+ + "\u01c2\7\3\2\2\u01c2\u01c3\5`\61\2\u01c3\u01c4\7\5\2\2\u01c4\u01c5\5l"+ + "\67\2\u01c5\u01c6\5\60\31\2\u01c6\u01c7\7\4\2\2\u01c7\u01d2\3\2\2\2\u01c8"+ + "\u01c9\78\2\2\u01c9\u01ca\7\3\2\2\u01ca\u01cb\5l\67\2\u01cb\u01cc\7\5"+ + "\2\2\u01cc\u01cd\5l\67\2\u01cd\u01ce\5\60\31\2\u01ce\u01cf\7\4\2\2\u01cf"+ + "\u01d2\3\2\2\2\u01d0\u01d2\5\62\32\2\u01d1\u01b2\3\2\2\2\u01d1\u01b5\3"+ + "\2\2\2\u01d1\u01ba\3\2\2\2\u01d1\u01c0\3\2\2\2\u01d1\u01c8\3\2\2\2\u01d1"+ + "\u01d0\3\2\2\2\u01d2\u01db\3\2\2\2\u01d3\u01d4\f\4\2\2\u01d4\u01d5\7\n"+ + "\2\2\u01d5\u01da\5.\30\5\u01d6\u01d7\f\3\2\2\u01d7\u01d8\7C\2\2\u01d8"+ + "\u01da\5.\30\4\u01d9\u01d3\3\2\2\2\u01d9\u01d6\3\2\2\2\u01da\u01dd\3\2"+ + "\2\2\u01db\u01d9\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc/\3\2\2\2\u01dd\u01db"+ + "\3\2\2\2\u01de\u01df\7\5\2\2\u01df\u01e1\5l\67\2\u01e0\u01de\3\2\2\2\u01e1"+ + "\u01e4\3\2\2\2\u01e2\u01e0\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\61\3\2\2"+ + "\2\u01e4\u01e2\3\2\2\2\u01e5\u01e7\5<\37\2\u01e6\u01e8\5\64\33\2\u01e7"+ + "\u01e6\3\2\2\2\u01e7\u01e8\3\2\2\2\u01e8\63\3\2\2\2\u01e9\u01eb\7>\2\2"+ + "\u01ea\u01e9\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed"+ + "\7\16\2\2\u01ed\u01ee\5<\37\2\u01ee\u01ef\7\n\2\2\u01ef\u01f0\5<\37\2"+ + "\u01f0\u0218\3\2\2\2\u01f1\u01f3\7>\2\2\u01f2\u01f1\3\2\2\2\u01f2\u01f3"+ + "\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f5\7.\2\2\u01f5\u01f6\7\3\2\2\u01f6"+ + "\u01fb\5<\37\2\u01f7\u01f8\7\5\2\2\u01f8\u01fa\5<\37\2\u01f9\u01f7\3\2"+ + "\2\2\u01fa\u01fd\3\2\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc"+ + "\u01fe\3\2\2\2\u01fd\u01fb\3\2\2\2\u01fe\u01ff\7\4\2\2\u01ff\u0218\3\2"+ + "\2\2\u0200\u0202\7>\2\2\u0201\u0200\3\2\2\2\u0201\u0202\3\2\2\2\u0202"+ + "\u0203\3\2\2\2\u0203\u0204\7.\2\2\u0204\u0205\7\3\2\2\u0205\u0206\5\b"+ + "\5\2\u0206\u0207\7\4\2\2\u0207\u0218\3\2\2\2\u0208\u020a\7>\2\2\u0209"+ + "\u0208\3\2\2\2\u0209\u020a\3\2\2\2\u020a\u020b\3\2\2\2\u020b\u020c\7\65"+ + "\2\2\u020c\u0218\58\35\2\u020d\u020f\7>\2\2\u020e\u020d\3\2\2\2\u020e"+ + "\u020f\3\2\2\2\u020f\u0210\3\2\2\2\u0210\u0211\7J\2\2\u0211\u0218\5l\67"+ + "\2\u0212\u0214\7\61\2\2\u0213\u0215\7>\2\2\u0214\u0213\3\2\2\2\u0214\u0215"+ + "\3\2\2\2\u0215\u0216\3\2\2\2\u0216\u0218\7?\2\2\u0217\u01ea\3\2\2\2\u0217"+ + "\u01f2\3\2\2\2\u0217\u0201\3\2\2\2\u0217\u0209\3\2\2\2\u0217\u020e\3\2"+ + "\2\2\u0217\u0212\3\2\2\2\u0218\65\3\2\2\2\u0219\u021a\7\65\2\2\u021a\u021b"+ + "\58\35\2\u021b\67\3\2\2\2\u021c\u021e\5l\67\2\u021d\u021f\5:\36\2\u021e"+ + "\u021d\3\2\2\2\u021e\u021f\3\2\2\2\u021f9\3\2\2\2\u0220\u0221\7\36\2\2"+ + "\u0221\u0227\5l\67\2\u0222\u0223\7_\2\2\u0223\u0224\5l\67\2\u0224\u0225"+ + "\7f\2\2\u0225\u0227\3\2\2\2\u0226\u0220\3\2\2\2\u0226\u0222\3\2\2\2\u0227"+ + ";\3\2\2\2\u0228\u0229\b\37\1\2\u0229\u022d\5> \2\u022a\u022b\t\7\2\2\u022b"+ + "\u022d\5<\37\6\u022c\u0228\3\2\2\2\u022c\u022a\3\2\2\2\u022d\u023a\3\2"+ + "\2\2\u022e\u022f\f\5\2\2\u022f\u0230\t\f\2\2\u0230\u0239\5<\37\6\u0231"+ + "\u0232\f\4\2\2\u0232\u0233\t\7\2\2\u0233\u0239\5<\37\5\u0234\u0235\f\3"+ + "\2\2\u0235\u0236\5V,\2\u0236\u0237\5<\37\4\u0237\u0239\3\2\2\2\u0238\u022e"+ + "\3\2\2\2\u0238\u0231\3\2\2\2\u0238\u0234\3\2\2\2\u0239\u023c\3\2\2\2\u023a"+ + "\u0238\3\2\2\2\u023a\u023b\3\2\2\2\u023b=\3\2\2\2\u023c\u023a\3\2\2\2"+ + "\u023d\u0253\5@!\2\u023e\u0253\5J&\2\u023f\u0253\5D#\2\u0240\u0253\5F"+ + "$\2\u0241\u0253\5T+\2\u0242\u0243\5`\61\2\u0243\u0244\7t\2\2\u0244\u0246"+ + "\3\2\2\2\u0245\u0242\3\2\2\2\u0245\u0246\3\2\2\2\u0246\u0247\3\2\2\2\u0247"+ + "\u0253\7p\2\2\u0248\u0253\5N(\2\u0249\u024a\7\3\2\2\u024a\u024b\5\b\5"+ + "\2\u024b\u024c\7\4\2\2\u024c\u0253\3\2\2\2\u024d\u0253\5`\61\2\u024e\u024f"+ + "\7\3\2\2\u024f\u0250\5,\27\2\u0250\u0251\7\4\2\2\u0251\u0253\3\2\2\2\u0252"+ + "\u023d\3\2\2\2\u0252\u023e\3\2\2\2\u0252\u023f\3\2\2\2\u0252\u0240\3\2"+ + "\2\2\u0252\u0241\3\2\2\2\u0252\u0245\3\2\2\2\u0252\u0248\3\2\2\2\u0252"+ + "\u0249\3\2\2\2\u0252\u024d\3\2\2\2\u0252\u024e\3\2\2\2\u0253?\3\2\2\2"+ + "\u0254\u025f\5B\"\2\u0255\u0256\7`\2\2\u0256\u0257\5B\"\2\u0257\u0258"+ + "\7f\2\2\u0258\u025f\3\2\2\2\u0259\u025f\5H%\2\u025a\u025b\7`\2\2\u025b"+ + "\u025c\5H%\2\u025c\u025d\7f\2\2\u025d\u025f\3\2\2\2\u025e\u0254\3\2\2"+ + "\2\u025e\u0255\3\2\2\2\u025e\u0259\3\2\2\2\u025e\u025a\3\2\2\2\u025fA"+ + "\3\2\2\2\u0260\u0261\7\20\2\2\u0261\u0262\7\3\2\2\u0262\u0263\5,\27\2"+ + "\u0263\u0264\7\f\2\2\u0264\u0265\5^\60\2\u0265\u0266\7\4\2\2\u0266C\3"+ + "\2\2\2\u0267\u026a\7\26\2\2\u0268\u0269\7\3\2\2\u0269\u026b\7\4\2\2\u026a"+ + "\u0268\3\2\2\2\u026a\u026b\3\2\2\2\u026bE\3\2\2\2\u026c\u0272\7\27\2\2"+ + "\u026d\u026f\7\3\2\2\u026e\u0270\7w\2\2\u026f\u026e\3\2\2\2\u026f\u0270"+ + "\3\2\2\2\u0270\u0271\3\2\2\2\u0271\u0273\7\4\2\2\u0272\u026d\3\2\2\2\u0272"+ + "\u0273\3\2\2\2\u0273G\3\2\2\2\u0274\u0275\7\24\2\2\u0275\u0276\7\3\2\2"+ + "\u0276\u0277\5,\27\2\u0277\u0278\7\5\2\2\u0278\u0279\5^\60\2\u0279\u027a"+ + "\7\4\2\2\u027aI\3\2\2\2\u027b\u0281\5L\'\2\u027c\u027d\7`\2\2\u027d\u027e"+ + "\5L\'\2\u027e\u027f\7f\2\2\u027f\u0281\3\2\2\2\u0280\u027b\3\2\2\2\u0280"+ + "\u027c\3\2\2\2\u0281K\3\2\2\2\u0282\u0283\7\"\2\2\u0283\u0284\7\3\2\2"+ + "\u0284\u0285\5b\62\2\u0285\u0286\7&\2\2\u0286\u0287\5<\37\2\u0287\u0288"+ + "\7\4\2\2\u0288M\3\2\2\2\u0289\u028f\5P)\2\u028a\u028b\7`\2\2\u028b\u028c"+ + "\5P)\2\u028c\u028d\7f\2\2\u028d\u028f\3\2\2\2\u028e\u0289\3\2\2\2\u028e"+ + "\u028a\3\2\2\2\u028fO\3\2\2\2\u0290\u0291\5R*\2\u0291\u029d\7\3\2\2\u0292"+ + "\u0294\5\36\20\2\u0293\u0292\3\2\2\2\u0293\u0294\3\2\2\2\u0294\u0295\3"+ + "\2\2\2\u0295\u029a\5,\27\2\u0296\u0297\7\5\2\2\u0297\u0299\5,\27\2\u0298"+ + "\u0296\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\u0293\3\2\2\2\u029d"+ + "\u029e\3\2\2\2\u029e\u029f\3\2\2\2\u029f\u02a0\7\4\2\2\u02a0Q\3\2\2\2"+ + "\u02a1\u02a5\7\64\2\2\u02a2\u02a5\7I\2\2\u02a3\u02a5\5b\62\2\u02a4\u02a1"+ + "\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a3\3\2\2\2\u02a5S\3\2\2\2\u02a6"+ + "\u02c1\7?\2\2\u02a7\u02c1\5Z.\2\u02a8\u02c1\5j\66\2\u02a9\u02c1\5X-\2"+ + "\u02aa\u02ac\7v\2\2\u02ab\u02aa\3\2\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02ab"+ + "\3\2\2\2\u02ad\u02ae\3\2\2\2\u02ae\u02c1\3\2\2\2\u02af\u02c1\7u\2\2\u02b0"+ + "\u02b1\7b\2\2\u02b1\u02b2\5l\67\2\u02b2\u02b3\7f\2\2\u02b3\u02c1\3\2\2"+ + "\2\u02b4\u02b5\7c\2\2\u02b5\u02b6\5l\67\2\u02b6\u02b7\7f\2\2\u02b7\u02c1"+ + "\3\2\2\2\u02b8\u02b9\7d\2\2\u02b9\u02ba\5l\67\2\u02ba\u02bb\7f\2\2\u02bb"+ + "\u02c1\3\2\2\2\u02bc\u02bd\7e\2\2\u02bd\u02be\5l\67\2\u02be\u02bf\7f\2"+ + "\2\u02bf\u02c1\3\2\2\2\u02c0\u02a6\3\2\2\2\u02c0\u02a7\3\2\2\2\u02c0\u02a8"+ + "\3\2\2\2\u02c0\u02a9\3\2\2\2\u02c0\u02ab\3\2\2\2\u02c0\u02af\3\2\2\2\u02c0"+ + "\u02b0\3\2\2\2\u02c0\u02b4\3\2\2\2\u02c0\u02b8\3\2\2\2\u02c0\u02bc\3\2"+ + "\2\2\u02c1U\3\2\2\2\u02c2\u02c3\t\r\2\2\u02c3W\3\2\2\2\u02c4\u02c5\t\16"+ + "\2\2\u02c5Y\3\2\2\2\u02c6\u02c8\7\60\2\2\u02c7\u02c9\t\7\2\2\u02c8\u02c7"+ + "\3\2\2\2\u02c8\u02c9\3\2\2\2\u02c9\u02cc\3\2\2\2\u02ca\u02cd\5j\66\2\u02cb"+ + "\u02cd\5l\67\2\u02cc\u02ca\3\2\2\2\u02cc\u02cb\3\2\2\2\u02cd\u02ce\3\2"+ + "\2\2\u02ce\u02d1\5\\/\2\u02cf\u02d0\7V\2\2\u02d0\u02d2\5\\/\2\u02d1\u02cf"+ + "\3\2\2\2\u02d1\u02d2\3\2\2\2\u02d2[\3\2\2\2\u02d3\u02d4\t\17\2\2\u02d4"+ + "]\3\2\2\2\u02d5\u02d6\5b\62\2\u02d6_\3\2\2\2\u02d7\u02d8\5b\62\2\u02d8"+ + "\u02d9\7t\2\2\u02d9\u02db\3\2\2\2\u02da\u02d7\3\2\2\2\u02db\u02de\3\2"+ + "\2\2\u02dc\u02da\3\2\2\2\u02dc\u02dd\3\2\2\2\u02dd\u02df\3\2\2\2\u02de"+ + "\u02dc\3\2\2\2\u02df\u02e0\5b\62\2\u02e0a\3\2\2\2\u02e1\u02e4\5f\64\2"+ + "\u02e2\u02e4\5h\65\2\u02e3\u02e1\3\2\2\2\u02e3\u02e2\3\2\2\2\u02e4c\3"+ + "\2\2\2\u02e5\u02e6\5b\62\2\u02e6\u02e7\7\6\2\2\u02e7\u02e9\3\2\2\2\u02e8"+ + "\u02e5\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02f2\7{"+ + "\2\2\u02eb\u02ec\5b\62\2\u02ec\u02ed\7\6\2\2\u02ed\u02ef\3\2\2\2\u02ee"+ + "\u02eb\3\2\2\2\u02ee\u02ef\3\2\2\2\u02ef\u02f0\3\2\2\2\u02f0\u02f2\5b"+ + "\62\2\u02f1\u02e8\3\2\2\2\u02f1\u02ee\3\2\2\2\u02f2e\3\2\2\2\u02f3\u02f6"+ + "\7|\2\2\u02f4\u02f6\7}\2\2\u02f5\u02f3\3\2\2\2\u02f5\u02f4\3\2\2\2\u02f6"+ + "g\3\2\2\2\u02f7\u02fb\7y\2\2\u02f8\u02fb\5n8\2\u02f9\u02fb\7z\2\2\u02fa"+ + "\u02f7\3\2\2\2\u02fa\u02f8\3\2\2\2\u02fa\u02f9\3\2\2\2\u02fbi\3\2\2\2"+ + "\u02fc\u02ff\7x\2\2\u02fd\u02ff\7w\2\2\u02fe\u02fc\3\2\2\2\u02fe\u02fd"+ + "\3\2\2\2\u02ffk\3\2\2\2\u0300\u0301\t\20\2\2\u0301m\3\2\2\2\u0302\u0303"+ + "\t\21\2\2\u0303o\3\2\2\2i\177\u0081\u0085\u008e\u0090\u0094\u009b\u00a2"+ + "\u00a7\u00ac\u00b4\u00b8\u00c0\u00c3\u00c9\u00ce\u00d1\u00d6\u00d9\u00db"+ + "\u00e3\u00e6\u00f2\u00f5\u00f8\u00ff\u0106\u010a\u010e\u0112\u0119\u011d"+ + "\u0121\u0126\u012a\u0132\u0136\u013d\u0148\u014b\u014f\u015b\u015e\u0164"+ + "\u016b\u0172\u0175\u0179\u017d\u0181\u0183\u018e\u0193\u0197\u019a\u01a0"+ + "\u01a3\u01a9\u01ac\u01ae\u01d1\u01d9\u01db\u01e2\u01e7\u01ea\u01f2\u01fb"+ + "\u0201\u0209\u020e\u0214\u0217\u021e\u0226\u022c\u0238\u023a\u0245\u0252"+ + "\u025e\u026a\u026f\u0272\u0280\u028e\u0293\u029a\u029d\u02a4\u02ad\u02c0"+ + "\u02c8\u02cc\u02d1\u02dc\u02e3\u02e8\u02ee\u02f1\u02f5\u02fa\u02fe"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java index ed64045191be0..b8ecc574ad599 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java @@ -358,6 +358,13 @@ interface SqlBaseVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitExtract(SqlBaseParser.ExtractContext ctx); + /** + * Visit a parse tree produced by the {@code currentDateFunction} + * labeled alternative in {@link SqlBaseParser#primaryExpression}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx); /** * Visit a parse tree produced by the {@code currentDateTimeFunction} * labeled alternative in {@link SqlBaseParser#primaryExpression}. @@ -419,6 +426,12 @@ interface SqlBaseVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitCastTemplate(SqlBaseParser.CastTemplateContext ctx); + /** + * Visit a parse tree produced by {@link SqlBaseParser#builtinDateFunction}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx); /** * Visit a parse tree produced by {@link SqlBaseParser#builtinDateTimeFunction}. * @param ctx the parse tree diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/parser/ExpressionTests.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/parser/ExpressionTests.java index 2e34e947944d4..f56e572612016 100644 --- a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/parser/ExpressionTests.java +++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/parser/ExpressionTests.java @@ -338,6 +338,22 @@ public void testConvertWithInvalidESDataType() { assertEquals("line 1:13: Invalid data type [INVALID] provided", ex.getMessage()); } + public void testCurrentDate() { + Expression expr = parser.createExpression("CURRENT_DATE"); + assertEquals(UnresolvedFunction.class, expr.getClass()); + UnresolvedFunction ur = (UnresolvedFunction) expr; + assertEquals("CURRENT_DATE", ur.sourceText()); + assertEquals(0, ur.children().size()); + } + + public void testCurrentDateWithParentheses() { + Expression expr = parser.createExpression("CURRENT_DATE( )"); + assertEquals(UnresolvedFunction.class, expr.getClass()); + UnresolvedFunction ur = (UnresolvedFunction) expr; + assertEquals("CURRENT_DATE( )", ur.sourceText()); + assertEquals(0, ur.children().size()); + } + public void testCurrentTimestamp() { Expression expr = parser.createExpression("CURRENT_TIMESTAMP"); assertEquals(UnresolvedFunction.class, expr.getClass()); @@ -373,4 +389,4 @@ public void testSourceFunction() throws Exception { Expression expr = parser.createExpression(s); assertEquals(s, expr.sourceText()); } -} \ No newline at end of file +} From 26cca184266dba586fb5bfd8a2389bf338e920a6 Mon Sep 17 00:00:00 2001 From: Marios Trivyzas Date: Sat, 2 Feb 2019 16:06:53 +0200 Subject: [PATCH 2/5] Address comments --- .../sql/functions/date-time.asciidoc | 12 +- .../sql/qa/src/main/resources/date.csv-spec | 52 +- .../qa/src/main/resources/datetime.sql-spec | 7 + x-pack/plugin/sql/src/main/antlr/SqlBase.g4 | 8 +- .../plugin/sql/src/main/antlr/SqlBase.tokens | 410 ++-- .../sql/src/main/antlr/SqlBaseLexer.tokens | 408 ++-- .../function/scalar/datetime/CurrentDate.java | 14 +- .../xpack/sql/parser/ExpressionBuilder.java | 29 +- .../xpack/sql/parser/SqlBaseBaseListener.java | 24 - .../xpack/sql/parser/SqlBaseBaseVisitor.java | 14 - .../xpack/sql/parser/SqlBaseLexer.java | 829 ++++--- .../xpack/sql/parser/SqlBaseListener.java | 22 - .../xpack/sql/parser/SqlBaseParser.java | 1919 ++++++++--------- .../xpack/sql/parser/SqlBaseVisitor.java | 13 - 14 files changed, 1811 insertions(+), 1950 deletions(-) diff --git a/docs/reference/sql/functions/date-time.asciidoc b/docs/reference/sql/functions/date-time.asciidoc index fc52769ac6f4f..2d2678a61704d 100644 --- a/docs/reference/sql/functions/date-time.asciidoc +++ b/docs/reference/sql/functions/date-time.asciidoc @@ -94,7 +94,7 @@ include-tagged::{sql-specs}/docs.csv-spec[dtIntervalMul] beta[] [[sql-functions-current-date]] -==== `CURRENT_TIMESTAMP/CURDATE` +==== `CURRENT_DATE/CURDATE` .Synopsis: [source, sql] @@ -115,7 +115,7 @@ It can be used both as a keyword: `CURRENT_DATE` or as a function with no argume [NOTE] Unlike CURRENT_DATE, `CURDATE()` can only be used as a function with no arguments and not as a keyword. -This method always returns the same value within a query. +This method always returns the same value for its every occurrence within the same query. ["source","sql",subs="attributes,callouts,macros"] -------------------------------------------------- @@ -157,7 +157,7 @@ Returns the date/time when the current query reached the server. As a function, `CURRENT_TIMESTAMP()` accepts _precision_ as an optional parameter for rounding the second fractional digits (nanoseconds). -This method always returns the same value within a query. +This method always returns the same value for its every occurrence within the same query. ["source","sql",subs="attributes,callouts,macros"] -------------------------------------------------- @@ -464,7 +464,8 @@ NOW() .Description: This function offers the same functionality as <> function: returns -the datetime when the current query reached the server. This method always returns the same value within a query. +the datetime when the current query reached the server. This method always returns the same value for its every +occurrence within the same query. ["source","sql",subs="attributes,callouts,macros"] -------------------------------------------------- @@ -543,7 +544,8 @@ TODAY() .Description: This function offers the same functionality as <> function: returns -the date when the current query reached the server. This method always returns the same value within a query. +the date when the current query reached the server. This method always returns the same value for its every occurrence +within the same query. ["source","sql",subs="attributes,callouts,macros"] -------------------------------------------------- diff --git a/x-pack/plugin/sql/qa/src/main/resources/date.csv-spec b/x-pack/plugin/sql/qa/src/main/resources/date.csv-spec index 3c9918329f549..35db16541babf 100644 --- a/x-pack/plugin/sql/qa/src/main/resources/date.csv-spec +++ b/x-pack/plugin/sql/qa/src/main/resources/date.csv-spec @@ -27,11 +27,11 @@ SELECT YEAR(TODAY()) / 1000 AS result; ; todayIntervalSubstraction -SELECT YEAR(TODAY() - INTERVAL 2 YEARS) / 1000 AS result; +SELECT TRUNCATE(YEAR(TODAY() - INTERVAL 50 YEARS) / 1000) AS result; result --------------- -2 +1 ; @@ -53,20 +53,20 @@ Tuval ; currentDateFilterScript -SELECT first_name FROM test_emp WHERE YEAR(hire_date) - YEAR(TODAY()) / 1000 > 10 ORDER BY first_name ASC LIMIT 10; - - first_name ---------------- -Alejandro -Amabile -Anneke -Anoosh -Arumugam -Basil -Berhard -Berni -Bezalel -Bojan +SELECT first_name, TRUNCATE(YEAR(hire_date) - YEAR(TODAY()) / 1000) AS filter FROM test_emp +WHERE TRUNCATE(YEAR(hire_date) - YEAR(TODAY()) / 1000) > 1990 ORDER BY first_name ASC LIMIT 10; + + first_name | filter +Cristinel |1991 +Kazuhito |1993 +Kenroku |1992 +Lillian |1997 +Magy |1991 +Mayumi |1993 +Mingsen |1992 +Sailaja |1994 +Saniya |1992 +Shahaf |1993 ; dateExtractDateParts @@ -142,3 +142,23 @@ SELECT YEAR(CAST('2019-01-21' AS DATE) + INTERVAL '1-2' YEAR TO MONTH) AS y, MON y:i | m:i 2020 | 3 ; + +orderByCurrentDate +SELECT first_name FROM test_emp ORDER BY TODAY(), first_name LIMIT 5; + + first_name +--------------- +Alejandro +Amabile +Anneke +Anoosh +Arumugam +; + +groupByCurrentDate +SELECT MAX(salary) FROM test_emp GROUP BY TODAY(); + + MAX(salary) +--------------- +74999 +; diff --git a/x-pack/plugin/sql/qa/src/main/resources/datetime.sql-spec b/x-pack/plugin/sql/qa/src/main/resources/datetime.sql-spec index 1bdc090ea232f..fc6b65269fea3 100644 --- a/x-pack/plugin/sql/qa/src/main/resources/datetime.sql-spec +++ b/x-pack/plugin/sql/qa/src/main/resources/datetime.sql-spec @@ -120,6 +120,12 @@ SELECT DAY_OF_WEEK(birth_date) day, COUNT(*) c FROM test_emp WHERE DAY_OF_WEEK(b currentTimestampYear SELECT YEAR(CURRENT_TIMESTAMP()) AS result; +orderByCurrentTimestamp +SELECT first_name FROM test_emp ORDER BY NOW(), first_name LIMIT 5; + +groupByCurrentTimestamp +SELECT MAX(salary) FROM test_emp GROUP BY NOW(); + // // H2 uses the local timezone instead of the specified one // @@ -131,3 +137,4 @@ SELECT HOUR(CURRENT_TIMESTAMP()) AS result; currentTimestampMinute-Ignore SELECT MINUTE(CURRENT_TIMESTAMP()) AS result; + diff --git a/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 b/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 index 02643011ba85d..a11121feaa2bc 100644 --- a/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 +++ b/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 @@ -215,7 +215,6 @@ valueExpression primaryExpression : castExpression #cast | extractExpression #extract - | builtinDateFunction #currentDateFunction | builtinDateTimeFunction #currentDateTimeFunction | constant #constantDefault | (qualifiedName DOT)? ASTERISK #star @@ -236,12 +235,9 @@ castTemplate : CAST '(' expression AS dataType ')' ; -builtinDateFunction - : name=CURRENT_DATE ('(' ')')? - ; - builtinDateTimeFunction - : name=CURRENT_TIMESTAMP ('(' precision=INTEGER_VALUE? ')')? + : name=CURRENT_DATE ('(' ')')? + | name=CURRENT_TIMESTAMP ('(' precision=INTEGER_VALUE? ')')? ; convertTemplate diff --git a/x-pack/plugin/sql/src/main/antlr/SqlBase.tokens b/x-pack/plugin/sql/src/main/antlr/SqlBase.tokens index fc39ee254c79c..4c3cc5de06421 100644 --- a/x-pack/plugin/sql/src/main/antlr/SqlBase.tokens +++ b/x-pack/plugin/sql/src/main/antlr/SqlBase.tokens @@ -16,116 +16,115 @@ CATALOG=15 CATALOGS=16 COLUMNS=17 CONVERT=18 -CURRENT=19 -CURRENT_DATE=20 -CURRENT_TIMESTAMP=21 -DAY=22 -DAYS=23 -DEBUG=24 -DESC=25 -DESCRIBE=26 -DISTINCT=27 -ESCAPE=28 -EXECUTABLE=29 -EXISTS=30 -EXPLAIN=31 -EXTRACT=32 -FALSE=33 -FIRST=34 -FORMAT=35 -FROM=36 -FULL=37 -FUNCTIONS=38 -GRAPHVIZ=39 -GROUP=40 -HAVING=41 -HOUR=42 -HOURS=43 -IN=44 -INNER=45 -INTERVAL=46 -IS=47 -JOIN=48 -LAST=49 -LEFT=50 -LIKE=51 -LIMIT=52 -MAPPED=53 -MATCH=54 -MINUTE=55 -MINUTES=56 -MONTH=57 -MONTHS=58 -NATURAL=59 -NOT=60 -NULL=61 -NULLS=62 -ON=63 -OPTIMIZED=64 -OR=65 -ORDER=66 -OUTER=67 -PARSED=68 -PHYSICAL=69 -PLAN=70 -RIGHT=71 -RLIKE=72 -QUERY=73 -SCHEMAS=74 -SECOND=75 -SECONDS=76 -SELECT=77 -SHOW=78 -SYS=79 -TABLE=80 -TABLES=81 -TEXT=82 -TRUE=83 -TO=84 -TYPE=85 -TYPES=86 -USING=87 -VERIFY=88 -WHERE=89 -WITH=90 -YEAR=91 -YEARS=92 -ESCAPE_ESC=93 -FUNCTION_ESC=94 -LIMIT_ESC=95 -DATE_ESC=96 -TIME_ESC=97 -TIMESTAMP_ESC=98 -GUID_ESC=99 -ESC_END=100 -EQ=101 -NULLEQ=102 -NEQ=103 -LT=104 -LTE=105 -GT=106 -GTE=107 -PLUS=108 -MINUS=109 -ASTERISK=110 -SLASH=111 -PERCENT=112 -CONCAT=113 -DOT=114 -PARAM=115 -STRING=116 -INTEGER_VALUE=117 -DECIMAL_VALUE=118 -IDENTIFIER=119 -DIGIT_IDENTIFIER=120 -TABLE_IDENTIFIER=121 -QUOTED_IDENTIFIER=122 -BACKQUOTED_IDENTIFIER=123 -SIMPLE_COMMENT=124 -BRACKETED_COMMENT=125 -WS=126 -UNRECOGNIZED=127 -DELIMITER=128 +CURRENT_DATE=19 +CURRENT_TIMESTAMP=20 +DAY=21 +DAYS=22 +DEBUG=23 +DESC=24 +DESCRIBE=25 +DISTINCT=26 +ESCAPE=27 +EXECUTABLE=28 +EXISTS=29 +EXPLAIN=30 +EXTRACT=31 +FALSE=32 +FIRST=33 +FORMAT=34 +FROM=35 +FULL=36 +FUNCTIONS=37 +GRAPHVIZ=38 +GROUP=39 +HAVING=40 +HOUR=41 +HOURS=42 +IN=43 +INNER=44 +INTERVAL=45 +IS=46 +JOIN=47 +LAST=48 +LEFT=49 +LIKE=50 +LIMIT=51 +MAPPED=52 +MATCH=53 +MINUTE=54 +MINUTES=55 +MONTH=56 +MONTHS=57 +NATURAL=58 +NOT=59 +NULL=60 +NULLS=61 +ON=62 +OPTIMIZED=63 +OR=64 +ORDER=65 +OUTER=66 +PARSED=67 +PHYSICAL=68 +PLAN=69 +RIGHT=70 +RLIKE=71 +QUERY=72 +SCHEMAS=73 +SECOND=74 +SECONDS=75 +SELECT=76 +SHOW=77 +SYS=78 +TABLE=79 +TABLES=80 +TEXT=81 +TRUE=82 +TO=83 +TYPE=84 +TYPES=85 +USING=86 +VERIFY=87 +WHERE=88 +WITH=89 +YEAR=90 +YEARS=91 +ESCAPE_ESC=92 +FUNCTION_ESC=93 +LIMIT_ESC=94 +DATE_ESC=95 +TIME_ESC=96 +TIMESTAMP_ESC=97 +GUID_ESC=98 +ESC_END=99 +EQ=100 +NULLEQ=101 +NEQ=102 +LT=103 +LTE=104 +GT=105 +GTE=106 +PLUS=107 +MINUS=108 +ASTERISK=109 +SLASH=110 +PERCENT=111 +CONCAT=112 +DOT=113 +PARAM=114 +STRING=115 +INTEGER_VALUE=116 +DECIMAL_VALUE=117 +IDENTIFIER=118 +DIGIT_IDENTIFIER=119 +TABLE_IDENTIFIER=120 +QUOTED_IDENTIFIER=121 +BACKQUOTED_IDENTIFIER=122 +SIMPLE_COMMENT=123 +BRACKETED_COMMENT=124 +WS=125 +UNRECOGNIZED=126 +DELIMITER=127 '('=1 ')'=2 ','=3 @@ -144,99 +143,98 @@ DELIMITER=128 'CATALOGS'=16 'COLUMNS'=17 'CONVERT'=18 -'CURRENT'=19 -'CURRENT_DATE'=20 -'CURRENT_TIMESTAMP'=21 -'DAY'=22 -'DAYS'=23 -'DEBUG'=24 -'DESC'=25 -'DESCRIBE'=26 -'DISTINCT'=27 -'ESCAPE'=28 -'EXECUTABLE'=29 -'EXISTS'=30 -'EXPLAIN'=31 -'EXTRACT'=32 -'FALSE'=33 -'FIRST'=34 -'FORMAT'=35 -'FROM'=36 -'FULL'=37 -'FUNCTIONS'=38 -'GRAPHVIZ'=39 -'GROUP'=40 -'HAVING'=41 -'HOUR'=42 -'HOURS'=43 -'IN'=44 -'INNER'=45 -'INTERVAL'=46 -'IS'=47 -'JOIN'=48 -'LAST'=49 -'LEFT'=50 -'LIKE'=51 -'LIMIT'=52 -'MAPPED'=53 -'MATCH'=54 -'MINUTE'=55 -'MINUTES'=56 -'MONTH'=57 -'MONTHS'=58 -'NATURAL'=59 -'NOT'=60 -'NULL'=61 -'NULLS'=62 -'ON'=63 -'OPTIMIZED'=64 -'OR'=65 -'ORDER'=66 -'OUTER'=67 -'PARSED'=68 -'PHYSICAL'=69 -'PLAN'=70 -'RIGHT'=71 -'RLIKE'=72 -'QUERY'=73 -'SCHEMAS'=74 -'SECOND'=75 -'SECONDS'=76 -'SELECT'=77 -'SHOW'=78 -'SYS'=79 -'TABLE'=80 -'TABLES'=81 -'TEXT'=82 -'TRUE'=83 -'TO'=84 -'TYPE'=85 -'TYPES'=86 -'USING'=87 -'VERIFY'=88 -'WHERE'=89 -'WITH'=90 -'YEAR'=91 -'YEARS'=92 -'{ESCAPE'=93 -'{FN'=94 -'{LIMIT'=95 -'{D'=96 -'{T'=97 -'{TS'=98 -'{GUID'=99 -'}'=100 -'='=101 -'<=>'=102 -'<'=104 -'<='=105 -'>'=106 -'>='=107 -'+'=108 -'-'=109 -'*'=110 -'/'=111 -'%'=112 -'||'=113 -'.'=114 -'?'=115 +'CURRENT_DATE'=19 +'CURRENT_TIMESTAMP'=20 +'DAY'=21 +'DAYS'=22 +'DEBUG'=23 +'DESC'=24 +'DESCRIBE'=25 +'DISTINCT'=26 +'ESCAPE'=27 +'EXECUTABLE'=28 +'EXISTS'=29 +'EXPLAIN'=30 +'EXTRACT'=31 +'FALSE'=32 +'FIRST'=33 +'FORMAT'=34 +'FROM'=35 +'FULL'=36 +'FUNCTIONS'=37 +'GRAPHVIZ'=38 +'GROUP'=39 +'HAVING'=40 +'HOUR'=41 +'HOURS'=42 +'IN'=43 +'INNER'=44 +'INTERVAL'=45 +'IS'=46 +'JOIN'=47 +'LAST'=48 +'LEFT'=49 +'LIKE'=50 +'LIMIT'=51 +'MAPPED'=52 +'MATCH'=53 +'MINUTE'=54 +'MINUTES'=55 +'MONTH'=56 +'MONTHS'=57 +'NATURAL'=58 +'NOT'=59 +'NULL'=60 +'NULLS'=61 +'ON'=62 +'OPTIMIZED'=63 +'OR'=64 +'ORDER'=65 +'OUTER'=66 +'PARSED'=67 +'PHYSICAL'=68 +'PLAN'=69 +'RIGHT'=70 +'RLIKE'=71 +'QUERY'=72 +'SCHEMAS'=73 +'SECOND'=74 +'SECONDS'=75 +'SELECT'=76 +'SHOW'=77 +'SYS'=78 +'TABLE'=79 +'TABLES'=80 +'TEXT'=81 +'TRUE'=82 +'TO'=83 +'TYPE'=84 +'TYPES'=85 +'USING'=86 +'VERIFY'=87 +'WHERE'=88 +'WITH'=89 +'YEAR'=90 +'YEARS'=91 +'{ESCAPE'=92 +'{FN'=93 +'{LIMIT'=94 +'{D'=95 +'{T'=96 +'{TS'=97 +'{GUID'=98 +'}'=99 +'='=100 +'<=>'=101 +'<'=103 +'<='=104 +'>'=105 +'>='=106 +'+'=107 +'-'=108 +'*'=109 +'/'=110 +'%'=111 +'||'=112 +'.'=113 +'?'=114 diff --git a/x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens b/x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens index 7f08a1dcb46e5..6d4252c0e723e 100644 --- a/x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens +++ b/x-pack/plugin/sql/src/main/antlr/SqlBaseLexer.tokens @@ -16,115 +16,114 @@ CATALOG=15 CATALOGS=16 COLUMNS=17 CONVERT=18 -CURRENT=19 -CURRENT_DATE=20 -CURRENT_TIMESTAMP=21 -DAY=22 -DAYS=23 -DEBUG=24 -DESC=25 -DESCRIBE=26 -DISTINCT=27 -ESCAPE=28 -EXECUTABLE=29 -EXISTS=30 -EXPLAIN=31 -EXTRACT=32 -FALSE=33 -FIRST=34 -FORMAT=35 -FROM=36 -FULL=37 -FUNCTIONS=38 -GRAPHVIZ=39 -GROUP=40 -HAVING=41 -HOUR=42 -HOURS=43 -IN=44 -INNER=45 -INTERVAL=46 -IS=47 -JOIN=48 -LAST=49 -LEFT=50 -LIKE=51 -LIMIT=52 -MAPPED=53 -MATCH=54 -MINUTE=55 -MINUTES=56 -MONTH=57 -MONTHS=58 -NATURAL=59 -NOT=60 -NULL=61 -NULLS=62 -ON=63 -OPTIMIZED=64 -OR=65 -ORDER=66 -OUTER=67 -PARSED=68 -PHYSICAL=69 -PLAN=70 -RIGHT=71 -RLIKE=72 -QUERY=73 -SCHEMAS=74 -SECOND=75 -SECONDS=76 -SELECT=77 -SHOW=78 -SYS=79 -TABLE=80 -TABLES=81 -TEXT=82 -TRUE=83 -TO=84 -TYPE=85 -TYPES=86 -USING=87 -VERIFY=88 -WHERE=89 -WITH=90 -YEAR=91 -YEARS=92 -ESCAPE_ESC=93 -FUNCTION_ESC=94 -LIMIT_ESC=95 -DATE_ESC=96 -TIME_ESC=97 -TIMESTAMP_ESC=98 -GUID_ESC=99 -ESC_END=100 -EQ=101 -NULLEQ=102 -NEQ=103 -LT=104 -LTE=105 -GT=106 -GTE=107 -PLUS=108 -MINUS=109 -ASTERISK=110 -SLASH=111 -PERCENT=112 -CONCAT=113 -DOT=114 -PARAM=115 -STRING=116 -INTEGER_VALUE=117 -DECIMAL_VALUE=118 -IDENTIFIER=119 -DIGIT_IDENTIFIER=120 -TABLE_IDENTIFIER=121 -QUOTED_IDENTIFIER=122 -BACKQUOTED_IDENTIFIER=123 -SIMPLE_COMMENT=124 -BRACKETED_COMMENT=125 -WS=126 -UNRECOGNIZED=127 +CURRENT_DATE=19 +CURRENT_TIMESTAMP=20 +DAY=21 +DAYS=22 +DEBUG=23 +DESC=24 +DESCRIBE=25 +DISTINCT=26 +ESCAPE=27 +EXECUTABLE=28 +EXISTS=29 +EXPLAIN=30 +EXTRACT=31 +FALSE=32 +FIRST=33 +FORMAT=34 +FROM=35 +FULL=36 +FUNCTIONS=37 +GRAPHVIZ=38 +GROUP=39 +HAVING=40 +HOUR=41 +HOURS=42 +IN=43 +INNER=44 +INTERVAL=45 +IS=46 +JOIN=47 +LAST=48 +LEFT=49 +LIKE=50 +LIMIT=51 +MAPPED=52 +MATCH=53 +MINUTE=54 +MINUTES=55 +MONTH=56 +MONTHS=57 +NATURAL=58 +NOT=59 +NULL=60 +NULLS=61 +ON=62 +OPTIMIZED=63 +OR=64 +ORDER=65 +OUTER=66 +PARSED=67 +PHYSICAL=68 +PLAN=69 +RIGHT=70 +RLIKE=71 +QUERY=72 +SCHEMAS=73 +SECOND=74 +SECONDS=75 +SELECT=76 +SHOW=77 +SYS=78 +TABLE=79 +TABLES=80 +TEXT=81 +TRUE=82 +TO=83 +TYPE=84 +TYPES=85 +USING=86 +VERIFY=87 +WHERE=88 +WITH=89 +YEAR=90 +YEARS=91 +ESCAPE_ESC=92 +FUNCTION_ESC=93 +LIMIT_ESC=94 +DATE_ESC=95 +TIME_ESC=96 +TIMESTAMP_ESC=97 +GUID_ESC=98 +ESC_END=99 +EQ=100 +NULLEQ=101 +NEQ=102 +LT=103 +LTE=104 +GT=105 +GTE=106 +PLUS=107 +MINUS=108 +ASTERISK=109 +SLASH=110 +PERCENT=111 +CONCAT=112 +DOT=113 +PARAM=114 +STRING=115 +INTEGER_VALUE=116 +DECIMAL_VALUE=117 +IDENTIFIER=118 +DIGIT_IDENTIFIER=119 +TABLE_IDENTIFIER=120 +QUOTED_IDENTIFIER=121 +BACKQUOTED_IDENTIFIER=122 +SIMPLE_COMMENT=123 +BRACKETED_COMMENT=124 +WS=125 +UNRECOGNIZED=126 '('=1 ')'=2 ','=3 @@ -143,99 +142,98 @@ UNRECOGNIZED=127 'CATALOGS'=16 'COLUMNS'=17 'CONVERT'=18 -'CURRENT'=19 -'CURRENT_DATE'=20 -'CURRENT_TIMESTAMP'=21 -'DAY'=22 -'DAYS'=23 -'DEBUG'=24 -'DESC'=25 -'DESCRIBE'=26 -'DISTINCT'=27 -'ESCAPE'=28 -'EXECUTABLE'=29 -'EXISTS'=30 -'EXPLAIN'=31 -'EXTRACT'=32 -'FALSE'=33 -'FIRST'=34 -'FORMAT'=35 -'FROM'=36 -'FULL'=37 -'FUNCTIONS'=38 -'GRAPHVIZ'=39 -'GROUP'=40 -'HAVING'=41 -'HOUR'=42 -'HOURS'=43 -'IN'=44 -'INNER'=45 -'INTERVAL'=46 -'IS'=47 -'JOIN'=48 -'LAST'=49 -'LEFT'=50 -'LIKE'=51 -'LIMIT'=52 -'MAPPED'=53 -'MATCH'=54 -'MINUTE'=55 -'MINUTES'=56 -'MONTH'=57 -'MONTHS'=58 -'NATURAL'=59 -'NOT'=60 -'NULL'=61 -'NULLS'=62 -'ON'=63 -'OPTIMIZED'=64 -'OR'=65 -'ORDER'=66 -'OUTER'=67 -'PARSED'=68 -'PHYSICAL'=69 -'PLAN'=70 -'RIGHT'=71 -'RLIKE'=72 -'QUERY'=73 -'SCHEMAS'=74 -'SECOND'=75 -'SECONDS'=76 -'SELECT'=77 -'SHOW'=78 -'SYS'=79 -'TABLE'=80 -'TABLES'=81 -'TEXT'=82 -'TRUE'=83 -'TO'=84 -'TYPE'=85 -'TYPES'=86 -'USING'=87 -'VERIFY'=88 -'WHERE'=89 -'WITH'=90 -'YEAR'=91 -'YEARS'=92 -'{ESCAPE'=93 -'{FN'=94 -'{LIMIT'=95 -'{D'=96 -'{T'=97 -'{TS'=98 -'{GUID'=99 -'}'=100 -'='=101 -'<=>'=102 -'<'=104 -'<='=105 -'>'=106 -'>='=107 -'+'=108 -'-'=109 -'*'=110 -'/'=111 -'%'=112 -'||'=113 -'.'=114 -'?'=115 +'CURRENT_DATE'=19 +'CURRENT_TIMESTAMP'=20 +'DAY'=21 +'DAYS'=22 +'DEBUG'=23 +'DESC'=24 +'DESCRIBE'=25 +'DISTINCT'=26 +'ESCAPE'=27 +'EXECUTABLE'=28 +'EXISTS'=29 +'EXPLAIN'=30 +'EXTRACT'=31 +'FALSE'=32 +'FIRST'=33 +'FORMAT'=34 +'FROM'=35 +'FULL'=36 +'FUNCTIONS'=37 +'GRAPHVIZ'=38 +'GROUP'=39 +'HAVING'=40 +'HOUR'=41 +'HOURS'=42 +'IN'=43 +'INNER'=44 +'INTERVAL'=45 +'IS'=46 +'JOIN'=47 +'LAST'=48 +'LEFT'=49 +'LIKE'=50 +'LIMIT'=51 +'MAPPED'=52 +'MATCH'=53 +'MINUTE'=54 +'MINUTES'=55 +'MONTH'=56 +'MONTHS'=57 +'NATURAL'=58 +'NOT'=59 +'NULL'=60 +'NULLS'=61 +'ON'=62 +'OPTIMIZED'=63 +'OR'=64 +'ORDER'=65 +'OUTER'=66 +'PARSED'=67 +'PHYSICAL'=68 +'PLAN'=69 +'RIGHT'=70 +'RLIKE'=71 +'QUERY'=72 +'SCHEMAS'=73 +'SECOND'=74 +'SECONDS'=75 +'SELECT'=76 +'SHOW'=77 +'SYS'=78 +'TABLE'=79 +'TABLES'=80 +'TEXT'=81 +'TRUE'=82 +'TO'=83 +'TYPE'=84 +'TYPES'=85 +'USING'=86 +'VERIFY'=87 +'WHERE'=88 +'WITH'=89 +'YEAR'=90 +'YEARS'=91 +'{ESCAPE'=92 +'{FN'=93 +'{LIMIT'=94 +'{D'=95 +'{T'=96 +'{TS'=97 +'{GUID'=98 +'}'=99 +'='=100 +'<=>'=101 +'<'=103 +'<='=104 +'>'=105 +'>='=106 +'+'=107 +'-'=108 +'*'=109 +'/'=110 +'%'=111 +'||'=112 +'.'=113 +'?'=114 diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java index fb6eb3f4ed40e..eb82fe759e153 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java @@ -22,7 +22,12 @@ public class CurrentDate extends ConfigurationFunction { public CurrentDate(Source source, Configuration configuration) { super(source, configuration, DataType.DATE); - this.date = datePrecision(configuration().now()); + ZonedDateTime zdt = configuration().now(); + if (zdt == null) { + this.date = null; + } else { + this.date = DateUtils.asDateOnly(configuration().now()); + } } @Override @@ -53,11 +58,4 @@ public boolean equals(Object obj) { CurrentDate other = (CurrentDate) obj; return Objects.equals(date, other.date); } - - private static ZonedDateTime datePrecision(ZonedDateTime zdt) { - if (zdt == null) { - return null; - } - return DateUtils.asDateOnly(zdt); - } } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java index 11f94ba8c965b..fe8f5ac9925b1 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/ExpressionBuilder.java @@ -60,7 +60,6 @@ import org.elasticsearch.xpack.sql.parser.SqlBaseParser.ArithmeticBinaryContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.ArithmeticUnaryContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.BooleanLiteralContext; -import org.elasticsearch.xpack.sql.parser.SqlBaseParser.BuiltinDateFunctionContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.BuiltinDateTimeFunctionContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.CastExpressionContext; import org.elasticsearch.xpack.sql.parser.SqlBaseParser.CastTemplateContext; @@ -464,24 +463,9 @@ public Function visitExtractExpression(ExtractExpressionContext ctx) { UnresolvedFunction.ResolutionType.EXTRACT, singletonList(expression(template.valueExpression()))); } - @Override - public Object visitBuiltinDateFunction(BuiltinDateFunctionContext ctx) { - // maps CURRENT_DATE to its respective function CURRENT_DATE() - // since the functions need access to the Configuration, the parser only registers the definition and not the actual function - Source source = source(ctx); - - String functionName = ctx.name.getText(); - - if (ctx.name.getType() == SqlBaseLexer.CURRENT_DATE) { - return new UnresolvedFunction(source, functionName, ResolutionType.STANDARD, emptyList()); - } - - throw new ParsingException(source, "Unknown function [{}]", functionName); - } - @Override public Object visitBuiltinDateTimeFunction(BuiltinDateTimeFunctionContext ctx) { - // maps CURRENT_TIMESTAMP to its respective function CURRENT_TIMESTAMP() + // maps CURRENT_XXX to its respective function e.g: CURRENT_TIMESTAMP() // since the functions need access to the Configuration, the parser only registers the definition and not the actual function Source source = source(ctx); Literal p = null; @@ -501,11 +485,14 @@ public Object visitBuiltinDateTimeFunction(BuiltinDateTimeFunctionContext ctx) { String functionName = ctx.name.getText(); - if (ctx.name.getType() == SqlBaseLexer.CURRENT_TIMESTAMP) { - return new UnresolvedFunction(source, functionName, ResolutionType.STANDARD, p != null ? singletonList(p) : emptyList()); + switch (ctx.name.getType()) { + case SqlBaseLexer.CURRENT_DATE: + return new UnresolvedFunction(source, functionName, ResolutionType.STANDARD, emptyList()); + case SqlBaseLexer.CURRENT_TIMESTAMP: + return new UnresolvedFunction(source, functionName, ResolutionType.STANDARD, p != null ? singletonList(p) : emptyList()); + default: + throw new ParsingException(source, "Unknown function [{}]", functionName); } - - throw new ParsingException(source, "Unknown function [{}]", functionName); } @Override diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java index ac52b53fb25e6..a62c5b4083fa3 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseListener.java @@ -647,18 +647,6 @@ class SqlBaseBaseListener implements SqlBaseListener { *

The default implementation does nothing.

*/ @Override public void exitExtract(SqlBaseParser.ExtractContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx) { } /** * {@inheritDoc} * @@ -767,18 +755,6 @@ class SqlBaseBaseListener implements SqlBaseListener { *

The default implementation does nothing.

*/ @Override public void exitCastTemplate(SqlBaseParser.CastTemplateContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void enterBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx) { } - /** - * {@inheritDoc} - * - *

The default implementation does nothing.

- */ - @Override public void exitBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx) { } /** * {@inheritDoc} * diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java index 6e00306d2e2d2..13722407570a7 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseBaseVisitor.java @@ -382,13 +382,6 @@ class SqlBaseBaseVisitor extends AbstractParseTreeVisitor implements SqlBa * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitExtract(SqlBaseParser.ExtractContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

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

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

*/ @Override public T visitCastTemplate(SqlBaseParser.CastTemplateContext ctx) { return visitChildren(ctx); } - /** - * {@inheritDoc} - * - *

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

- */ - @Override public T visitBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx) { return visitChildren(ctx); } /** * {@inheritDoc} * diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java index a94786b00e0e9..f62130b14fb07 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseLexer.java @@ -19,24 +19,23 @@ class SqlBaseLexer extends Lexer { 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, CATALOG=15, CATALOGS=16, COLUMNS=17, - CONVERT=18, CURRENT=19, CURRENT_DATE=20, CURRENT_TIMESTAMP=21, DAY=22, - DAYS=23, DEBUG=24, DESC=25, DESCRIBE=26, DISTINCT=27, ESCAPE=28, EXECUTABLE=29, - EXISTS=30, EXPLAIN=31, EXTRACT=32, FALSE=33, FIRST=34, FORMAT=35, FROM=36, - FULL=37, FUNCTIONS=38, GRAPHVIZ=39, GROUP=40, HAVING=41, HOUR=42, HOURS=43, - IN=44, INNER=45, INTERVAL=46, IS=47, JOIN=48, LAST=49, LEFT=50, LIKE=51, - LIMIT=52, MAPPED=53, MATCH=54, MINUTE=55, MINUTES=56, MONTH=57, MONTHS=58, - NATURAL=59, NOT=60, NULL=61, NULLS=62, ON=63, OPTIMIZED=64, OR=65, ORDER=66, - OUTER=67, PARSED=68, PHYSICAL=69, PLAN=70, RIGHT=71, RLIKE=72, QUERY=73, - SCHEMAS=74, SECOND=75, SECONDS=76, SELECT=77, SHOW=78, SYS=79, TABLE=80, - TABLES=81, TEXT=82, TRUE=83, TO=84, TYPE=85, TYPES=86, USING=87, VERIFY=88, - WHERE=89, WITH=90, YEAR=91, YEARS=92, ESCAPE_ESC=93, FUNCTION_ESC=94, - LIMIT_ESC=95, DATE_ESC=96, TIME_ESC=97, TIMESTAMP_ESC=98, GUID_ESC=99, - ESC_END=100, EQ=101, NULLEQ=102, NEQ=103, LT=104, LTE=105, GT=106, GTE=107, - PLUS=108, MINUS=109, ASTERISK=110, SLASH=111, PERCENT=112, CONCAT=113, - DOT=114, PARAM=115, STRING=116, INTEGER_VALUE=117, DECIMAL_VALUE=118, - IDENTIFIER=119, DIGIT_IDENTIFIER=120, TABLE_IDENTIFIER=121, QUOTED_IDENTIFIER=122, - BACKQUOTED_IDENTIFIER=123, SIMPLE_COMMENT=124, BRACKETED_COMMENT=125, - WS=126, UNRECOGNIZED=127; + CONVERT=18, CURRENT_DATE=19, CURRENT_TIMESTAMP=20, DAY=21, DAYS=22, DEBUG=23, + DESC=24, DESCRIBE=25, DISTINCT=26, ESCAPE=27, EXECUTABLE=28, EXISTS=29, + EXPLAIN=30, EXTRACT=31, FALSE=32, FIRST=33, FORMAT=34, FROM=35, FULL=36, + FUNCTIONS=37, GRAPHVIZ=38, GROUP=39, HAVING=40, HOUR=41, HOURS=42, IN=43, + INNER=44, INTERVAL=45, IS=46, JOIN=47, LAST=48, LEFT=49, LIKE=50, LIMIT=51, + MAPPED=52, MATCH=53, MINUTE=54, MINUTES=55, MONTH=56, MONTHS=57, NATURAL=58, + NOT=59, NULL=60, NULLS=61, ON=62, OPTIMIZED=63, OR=64, ORDER=65, OUTER=66, + PARSED=67, PHYSICAL=68, PLAN=69, RIGHT=70, RLIKE=71, QUERY=72, SCHEMAS=73, + SECOND=74, SECONDS=75, SELECT=76, SHOW=77, SYS=78, TABLE=79, TABLES=80, + TEXT=81, TRUE=82, TO=83, TYPE=84, TYPES=85, USING=86, VERIFY=87, WHERE=88, + WITH=89, YEAR=90, YEARS=91, ESCAPE_ESC=92, FUNCTION_ESC=93, LIMIT_ESC=94, + DATE_ESC=95, TIME_ESC=96, TIMESTAMP_ESC=97, GUID_ESC=98, ESC_END=99, EQ=100, + NULLEQ=101, NEQ=102, LT=103, LTE=104, GT=105, GTE=106, PLUS=107, MINUS=108, + ASTERISK=109, SLASH=110, PERCENT=111, CONCAT=112, DOT=113, PARAM=114, + STRING=115, INTEGER_VALUE=116, DECIMAL_VALUE=117, IDENTIFIER=118, DIGIT_IDENTIFIER=119, + TABLE_IDENTIFIER=120, QUOTED_IDENTIFIER=121, BACKQUOTED_IDENTIFIER=122, + SIMPLE_COMMENT=123, BRACKETED_COMMENT=124, WS=125, UNRECOGNIZED=126; public static String[] modeNames = { "DEFAULT_MODE" }; @@ -44,62 +43,62 @@ class SqlBaseLexer extends Lexer { public static final String[] ruleNames = { "T__0", "T__1", "T__2", "T__3", "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOG", "CATALOGS", "COLUMNS", - "CONVERT", "CURRENT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", - "DEBUG", "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", - "EXPLAIN", "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", - "GRAPHVIZ", "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", - "IS", "JOIN", "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", - "MINUTES", "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", - "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", - "RLIKE", "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", - "TABLE", "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", - "WHERE", "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", - "DATE_ESC", "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", - "NULLEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", - "SLASH", "PERCENT", "CONCAT", "DOT", "PARAM", "STRING", "INTEGER_VALUE", - "DECIMAL_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", - "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", "EXPONENT", "DIGIT", "LETTER", - "SIMPLE_COMMENT", "BRACKETED_COMMENT", "WS", "UNRECOGNIZED" + "CONVERT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", "DEBUG", + "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", + "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", + "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", "IS", "JOIN", + "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", "MINUTES", + "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", "OPTIMIZED", + "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", + "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", "TABLE", + "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", "WHERE", + "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", "DATE_ESC", + "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", "NULLEQ", "NEQ", + "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", + "CONCAT", "DOT", "PARAM", "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'", "'CATALOG'", - "'CATALOGS'", "'COLUMNS'", "'CONVERT'", "'CURRENT'", "'CURRENT_DATE'", - "'CURRENT_TIMESTAMP'", "'DAY'", "'DAYS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", - "'DISTINCT'", "'ESCAPE'", "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", - "'FALSE'", "'FIRST'", "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", - "'GROUP'", "'HAVING'", "'HOUR'", "'HOURS'", "'IN'", "'INNER'", "'INTERVAL'", - "'IS'", "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", - "'MATCH'", "'MINUTE'", "'MINUTES'", "'MONTH'", "'MONTHS'", "'NATURAL'", - "'NOT'", "'NULL'", "'NULLS'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", - "'OUTER'", "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", "'QUERY'", - "'SCHEMAS'", "'SECOND'", "'SECONDS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", - "'TABLES'", "'TEXT'", "'TRUE'", "'TO'", "'TYPE'", "'TYPES'", "'USING'", - "'VERIFY'", "'WHERE'", "'WITH'", "'YEAR'", "'YEARS'", "'{ESCAPE'", "'{FN'", - "'{LIMIT'", "'{D'", "'{T'", "'{TS'", "'{GUID'", "'}'", "'='", "'<=>'", - null, "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", - "'||'", "'.'", "'?'" + "'CATALOGS'", "'COLUMNS'", "'CONVERT'", "'CURRENT_DATE'", "'CURRENT_TIMESTAMP'", + "'DAY'", "'DAYS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'ESCAPE'", + "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FIRST'", + "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", "'GROUP'", + "'HAVING'", "'HOUR'", "'HOURS'", "'IN'", "'INNER'", "'INTERVAL'", "'IS'", + "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", "'MATCH'", + "'MINUTE'", "'MINUTES'", "'MONTH'", "'MONTHS'", "'NATURAL'", "'NOT'", + "'NULL'", "'NULLS'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", "'OUTER'", + "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", "'QUERY'", "'SCHEMAS'", + "'SECOND'", "'SECONDS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", "'TABLES'", + "'TEXT'", "'TRUE'", "'TO'", "'TYPE'", "'TYPES'", "'USING'", "'VERIFY'", + "'WHERE'", "'WITH'", "'YEAR'", "'YEARS'", "'{ESCAPE'", "'{FN'", "'{LIMIT'", + "'{D'", "'{T'", "'{TS'", "'{GUID'", "'}'", "'='", "'<=>'", null, "'<'", + "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", "'||'", "'.'", + "'?'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOG", "CATALOGS", "COLUMNS", - "CONVERT", "CURRENT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", - "DEBUG", "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", - "EXPLAIN", "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", - "GRAPHVIZ", "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", - "IS", "JOIN", "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", - "MINUTES", "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", - "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", - "RLIKE", "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", - "TABLE", "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", - "WHERE", "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", - "DATE_ESC", "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", - "NULLEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", - "SLASH", "PERCENT", "CONCAT", "DOT", "PARAM", "STRING", "INTEGER_VALUE", - "DECIMAL_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", - "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", - "WS", "UNRECOGNIZED" + "CONVERT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", "DEBUG", + "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", + "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", + "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", "IS", "JOIN", + "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", "MINUTES", + "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", "OPTIMIZED", + "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", + "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", "TABLE", + "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", "WHERE", + "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", "DATE_ESC", + "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", "NULLEQ", "NEQ", + "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", + "CONCAT", "DOT", "PARAM", "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); @@ -156,7 +155,7 @@ public SqlBaseLexer(CharStream input) { public ATN getATN() { return _ATN; } public static final String _serializedATN = - "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\u0081\u0432\b\1\4"+ + "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2\u0080\u0428\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"+ @@ -170,357 +169,353 @@ public SqlBaseLexer(CharStream input) { "\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\177\t\177\4\u0080\t"+ - "\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\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\21\3\21\3\21\3\22\3\22\3\22\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\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\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\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\30\3\30\3\30"+ - "\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\33"+ - "\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\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\35\3\35\3\36\3\36\3\36\3\36"+ - "\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\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-\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\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63"+ - "\3\63\3\64\3\64\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66"+ - "\3\66\3\66\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\3"+ - "8\38\38\39\39\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@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3C\3C\3C\3C\3C\3C\3"+ - "D\3D\3D\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3F\3F\3G\3"+ - "G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3K\3"+ - "K\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3N\3"+ - "N\3N\3N\3N\3N\3N\3O\3O\3O\3O\3O\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3"+ - "R\3R\3R\3R\3R\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3U\3U\3U\3V\3V\3V\3V\3V\3"+ - "W\3W\3W\3W\3W\3W\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3"+ - "Z\3Z\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\3b\3b\3b\3c\3c"+ - "\3c\3c\3d\3d\3d\3d\3d\3d\3e\3e\3f\3f\3g\3g\3g\3g\3h\3h\3h\3h\5h\u0373"+ - "\nh\3i\3i\3j\3j\3j\3k\3k\3l\3l\3l\3m\3m\3n\3n\3o\3o\3p\3p\3q\3q\3r\3r"+ - "\3r\3s\3s\3t\3t\3u\3u\3u\3u\7u\u0394\nu\fu\16u\u0397\13u\3u\3u\3v\6v\u039c"+ - "\nv\rv\16v\u039d\3w\6w\u03a1\nw\rw\16w\u03a2\3w\3w\7w\u03a7\nw\fw\16w"+ - "\u03aa\13w\3w\3w\6w\u03ae\nw\rw\16w\u03af\3w\6w\u03b3\nw\rw\16w\u03b4"+ - "\3w\3w\7w\u03b9\nw\fw\16w\u03bc\13w\5w\u03be\nw\3w\3w\3w\3w\6w\u03c4\n"+ - "w\rw\16w\u03c5\3w\3w\5w\u03ca\nw\3x\3x\5x\u03ce\nx\3x\3x\3x\7x\u03d3\n"+ - "x\fx\16x\u03d6\13x\3y\3y\3y\3y\6y\u03dc\ny\ry\16y\u03dd\3z\3z\3z\6z\u03e3"+ - "\nz\rz\16z\u03e4\3{\3{\3{\3{\7{\u03eb\n{\f{\16{\u03ee\13{\3{\3{\3|\3|"+ - "\3|\3|\7|\u03f6\n|\f|\16|\u03f9\13|\3|\3|\3}\3}\5}\u03ff\n}\3}\6}\u0402"+ - "\n}\r}\16}\u0403\3~\3~\3\177\3\177\3\u0080\3\u0080\3\u0080\3\u0080\7\u0080"+ - "\u040e\n\u0080\f\u0080\16\u0080\u0411\13\u0080\3\u0080\5\u0080\u0414\n"+ - "\u0080\3\u0080\5\u0080\u0417\n\u0080\3\u0080\3\u0080\3\u0081\3\u0081\3"+ - "\u0081\3\u0081\3\u0081\7\u0081\u0420\n\u0081\f\u0081\16\u0081\u0423\13"+ - "\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0082\6\u0082\u042b\n"+ - "\u0082\r\u0082\16\u0082\u042c\3\u0082\3\u0082\3\u0083\3\u0083\3\u0421"+ - "\2\u0084\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\35"+ - "9\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g\65i\66"+ - "k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F\u008bG"+ - "\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009dP\u009f"+ - "Q\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1Z\u00b3"+ - "[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5d\u00c7"+ - "e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9n\u00db"+ - "o\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00edx\u00ef"+ - "y\u00f1z\u00f3{\u00f5|\u00f7}\u00f9\2\u00fb\2\u00fd\2\u00ff~\u0101\177"+ - "\u0103\u0080\u0105\u0081\3\2\f\3\2))\4\2BBaa\5\2<\3\2\2\2\u01ca\u01cb\7G\2\2\u01cb\u01cc\7Z\2"+ - "\2\u01cc\u01cd\7R\2\2\u01cd\u01ce\7N\2\2\u01ce\u01cf\7C\2\2\u01cf\u01d0"+ - "\7K\2\2\u01d0\u01d1\7P\2\2\u01d1@\3\2\2\2\u01d2\u01d3\7G\2\2\u01d3\u01d4"+ - "\7Z\2\2\u01d4\u01d5\7V\2\2\u01d5\u01d6\7T\2\2\u01d6\u01d7\7C\2\2\u01d7"+ - "\u01d8\7E\2\2\u01d8\u01d9\7V\2\2\u01d9B\3\2\2\2\u01da\u01db\7H\2\2\u01db"+ - "\u01dc\7C\2\2\u01dc\u01dd\7N\2\2\u01dd\u01de\7U\2\2\u01de\u01df\7G\2\2"+ - "\u01dfD\3\2\2\2\u01e0\u01e1\7H\2\2\u01e1\u01e2\7K\2\2\u01e2\u01e3\7T\2"+ - "\2\u01e3\u01e4\7U\2\2\u01e4\u01e5\7V\2\2\u01e5F\3\2\2\2\u01e6\u01e7\7"+ - "H\2\2\u01e7\u01e8\7Q\2\2\u01e8\u01e9\7T\2\2\u01e9\u01ea\7O\2\2\u01ea\u01eb"+ - "\7C\2\2\u01eb\u01ec\7V\2\2\u01ecH\3\2\2\2\u01ed\u01ee\7H\2\2\u01ee\u01ef"+ - "\7T\2\2\u01ef\u01f0\7Q\2\2\u01f0\u01f1\7O\2\2\u01f1J\3\2\2\2\u01f2\u01f3"+ - "\7H\2\2\u01f3\u01f4\7W\2\2\u01f4\u01f5\7N\2\2\u01f5\u01f6\7N\2\2\u01f6"+ - "L\3\2\2\2\u01f7\u01f8\7H\2\2\u01f8\u01f9\7W\2\2\u01f9\u01fa\7P\2\2\u01fa"+ - "\u01fb\7E\2\2\u01fb\u01fc\7V\2\2\u01fc\u01fd\7K\2\2\u01fd\u01fe\7Q\2\2"+ - "\u01fe\u01ff\7P\2\2\u01ff\u0200\7U\2\2\u0200N\3\2\2\2\u0201\u0202\7I\2"+ - "\2\u0202\u0203\7T\2\2\u0203\u0204\7C\2\2\u0204\u0205\7R\2\2\u0205\u0206"+ - "\7J\2\2\u0206\u0207\7X\2\2\u0207\u0208\7K\2\2\u0208\u0209\7\\\2\2\u0209"+ - "P\3\2\2\2\u020a\u020b\7I\2\2\u020b\u020c\7T\2\2\u020c\u020d\7Q\2\2\u020d"+ - "\u020e\7W\2\2\u020e\u020f\7R\2\2\u020fR\3\2\2\2\u0210\u0211\7J\2\2\u0211"+ - "\u0212\7C\2\2\u0212\u0213\7X\2\2\u0213\u0214\7K\2\2\u0214\u0215\7P\2\2"+ - "\u0215\u0216\7I\2\2\u0216T\3\2\2\2\u0217\u0218\7J\2\2\u0218\u0219\7Q\2"+ - "\2\u0219\u021a\7W\2\2\u021a\u021b\7T\2\2\u021bV\3\2\2\2\u021c\u021d\7"+ - "J\2\2\u021d\u021e\7Q\2\2\u021e\u021f\7W\2\2\u021f\u0220\7T\2\2\u0220\u0221"+ - "\7U\2\2\u0221X\3\2\2\2\u0222\u0223\7K\2\2\u0223\u0224\7P\2\2\u0224Z\3"+ - "\2\2\2\u0225\u0226\7K\2\2\u0226\u0227\7P\2\2\u0227\u0228\7P\2\2\u0228"+ - "\u0229\7G\2\2\u0229\u022a\7T\2\2\u022a\\\3\2\2\2\u022b\u022c\7K\2\2\u022c"+ - "\u022d\7P\2\2\u022d\u022e\7V\2\2\u022e\u022f\7G\2\2\u022f\u0230\7T\2\2"+ - "\u0230\u0231\7X\2\2\u0231\u0232\7C\2\2\u0232\u0233\7N\2\2\u0233^\3\2\2"+ - "\2\u0234\u0235\7K\2\2\u0235\u0236\7U\2\2\u0236`\3\2\2\2\u0237\u0238\7"+ - "L\2\2\u0238\u0239\7Q\2\2\u0239\u023a\7K\2\2\u023a\u023b\7P\2\2\u023bb"+ - "\3\2\2\2\u023c\u023d\7N\2\2\u023d\u023e\7C\2\2\u023e\u023f\7U\2\2\u023f"+ - "\u0240\7V\2\2\u0240d\3\2\2\2\u0241\u0242\7N\2\2\u0242\u0243\7G\2\2\u0243"+ - "\u0244\7H\2\2\u0244\u0245\7V\2\2\u0245f\3\2\2\2\u0246\u0247\7N\2\2\u0247"+ - "\u0248\7K\2\2\u0248\u0249\7M\2\2\u0249\u024a\7G\2\2\u024ah\3\2\2\2\u024b"+ - "\u024c\7N\2\2\u024c\u024d\7K\2\2\u024d\u024e\7O\2\2\u024e\u024f\7K\2\2"+ - "\u024f\u0250\7V\2\2\u0250j\3\2\2\2\u0251\u0252\7O\2\2\u0252\u0253\7C\2"+ - "\2\u0253\u0254\7R\2\2\u0254\u0255\7R\2\2\u0255\u0256\7G\2\2\u0256\u0257"+ - "\7F\2\2\u0257l\3\2\2\2\u0258\u0259\7O\2\2\u0259\u025a\7C\2\2\u025a\u025b"+ - "\7V\2\2\u025b\u025c\7E\2\2\u025c\u025d\7J\2\2\u025dn\3\2\2\2\u025e\u025f"+ - "\7O\2\2\u025f\u0260\7K\2\2\u0260\u0261\7P\2\2\u0261\u0262\7W\2\2\u0262"+ - "\u0263\7V\2\2\u0263\u0264\7G\2\2\u0264p\3\2\2\2\u0265\u0266\7O\2\2\u0266"+ - "\u0267\7K\2\2\u0267\u0268\7P\2\2\u0268\u0269\7W\2\2\u0269\u026a\7V\2\2"+ - "\u026a\u026b\7G\2\2\u026b\u026c\7U\2\2\u026cr\3\2\2\2\u026d\u026e\7O\2"+ - "\2\u026e\u026f\7Q\2\2\u026f\u0270\7P\2\2\u0270\u0271\7V\2\2\u0271\u0272"+ - "\7J\2\2\u0272t\3\2\2\2\u0273\u0274\7O\2\2\u0274\u0275\7Q\2\2\u0275\u0276"+ - "\7P\2\2\u0276\u0277\7V\2\2\u0277\u0278\7J\2\2\u0278\u0279\7U\2\2\u0279"+ - "v\3\2\2\2\u027a\u027b\7P\2\2\u027b\u027c\7C\2\2\u027c\u027d\7V\2\2\u027d"+ - "\u027e\7W\2\2\u027e\u027f\7T\2\2\u027f\u0280\7C\2\2\u0280\u0281\7N\2\2"+ - "\u0281x\3\2\2\2\u0282\u0283\7P\2\2\u0283\u0284\7Q\2\2\u0284\u0285\7V\2"+ - "\2\u0285z\3\2\2\2\u0286\u0287\7P\2\2\u0287\u0288\7W\2\2\u0288\u0289\7"+ - "N\2\2\u0289\u028a\7N\2\2\u028a|\3\2\2\2\u028b\u028c\7P\2\2\u028c\u028d"+ - "\7W\2\2\u028d\u028e\7N\2\2\u028e\u028f\7N\2\2\u028f\u0290\7U\2\2\u0290"+ - "~\3\2\2\2\u0291\u0292\7Q\2\2\u0292\u0293\7P\2\2\u0293\u0080\3\2\2\2\u0294"+ - "\u0295\7Q\2\2\u0295\u0296\7R\2\2\u0296\u0297\7V\2\2\u0297\u0298\7K\2\2"+ - "\u0298\u0299\7O\2\2\u0299\u029a\7K\2\2\u029a\u029b\7\\\2\2\u029b\u029c"+ - "\7G\2\2\u029c\u029d\7F\2\2\u029d\u0082\3\2\2\2\u029e\u029f\7Q\2\2\u029f"+ - "\u02a0\7T\2\2\u02a0\u0084\3\2\2\2\u02a1\u02a2\7Q\2\2\u02a2\u02a3\7T\2"+ - "\2\u02a3\u02a4\7F\2\2\u02a4\u02a5\7G\2\2\u02a5\u02a6\7T\2\2\u02a6\u0086"+ - "\3\2\2\2\u02a7\u02a8\7Q\2\2\u02a8\u02a9\7W\2\2\u02a9\u02aa\7V\2\2\u02aa"+ - "\u02ab\7G\2\2\u02ab\u02ac\7T\2\2\u02ac\u0088\3\2\2\2\u02ad\u02ae\7R\2"+ - "\2\u02ae\u02af\7C\2\2\u02af\u02b0\7T\2\2\u02b0\u02b1\7U\2\2\u02b1\u02b2"+ - "\7G\2\2\u02b2\u02b3\7F\2\2\u02b3\u008a\3\2\2\2\u02b4\u02b5\7R\2\2\u02b5"+ - "\u02b6\7J\2\2\u02b6\u02b7\7[\2\2\u02b7\u02b8\7U\2\2\u02b8\u02b9\7K\2\2"+ - "\u02b9\u02ba\7E\2\2\u02ba\u02bb\7C\2\2\u02bb\u02bc\7N\2\2\u02bc\u008c"+ - "\3\2\2\2\u02bd\u02be\7R\2\2\u02be\u02bf\7N\2\2\u02bf\u02c0\7C\2\2\u02c0"+ - "\u02c1\7P\2\2\u02c1\u008e\3\2\2\2\u02c2\u02c3\7T\2\2\u02c3\u02c4\7K\2"+ - "\2\u02c4\u02c5\7I\2\2\u02c5\u02c6\7J\2\2\u02c6\u02c7\7V\2\2\u02c7\u0090"+ - "\3\2\2\2\u02c8\u02c9\7T\2\2\u02c9\u02ca\7N\2\2\u02ca\u02cb\7K\2\2\u02cb"+ - "\u02cc\7M\2\2\u02cc\u02cd\7G\2\2\u02cd\u0092\3\2\2\2\u02ce\u02cf\7S\2"+ - "\2\u02cf\u02d0\7W\2\2\u02d0\u02d1\7G\2\2\u02d1\u02d2\7T\2\2\u02d2\u02d3"+ - "\7[\2\2\u02d3\u0094\3\2\2\2\u02d4\u02d5\7U\2\2\u02d5\u02d6\7E\2\2\u02d6"+ - "\u02d7\7J\2\2\u02d7\u02d8\7G\2\2\u02d8\u02d9\7O\2\2\u02d9\u02da\7C\2\2"+ - "\u02da\u02db\7U\2\2\u02db\u0096\3\2\2\2\u02dc\u02dd\7U\2\2\u02dd\u02de"+ - "\7G\2\2\u02de\u02df\7E\2\2\u02df\u02e0\7Q\2\2\u02e0\u02e1\7P\2\2\u02e1"+ - "\u02e2\7F\2\2\u02e2\u0098\3\2\2\2\u02e3\u02e4\7U\2\2\u02e4\u02e5\7G\2"+ - "\2\u02e5\u02e6\7E\2\2\u02e6\u02e7\7Q\2\2\u02e7\u02e8\7P\2\2\u02e8\u02e9"+ - "\7F\2\2\u02e9\u02ea\7U\2\2\u02ea\u009a\3\2\2\2\u02eb\u02ec\7U\2\2\u02ec"+ - "\u02ed\7G\2\2\u02ed\u02ee\7N\2\2\u02ee\u02ef\7G\2\2\u02ef\u02f0\7E\2\2"+ - "\u02f0\u02f1\7V\2\2\u02f1\u009c\3\2\2\2\u02f2\u02f3\7U\2\2\u02f3\u02f4"+ - "\7J\2\2\u02f4\u02f5\7Q\2\2\u02f5\u02f6\7Y\2\2\u02f6\u009e\3\2\2\2\u02f7"+ - "\u02f8\7U\2\2\u02f8\u02f9\7[\2\2\u02f9\u02fa\7U\2\2\u02fa\u00a0\3\2\2"+ - "\2\u02fb\u02fc\7V\2\2\u02fc\u02fd\7C\2\2\u02fd\u02fe\7D\2\2\u02fe\u02ff"+ - "\7N\2\2\u02ff\u0300\7G\2\2\u0300\u00a2\3\2\2\2\u0301\u0302\7V\2\2\u0302"+ - "\u0303\7C\2\2\u0303\u0304\7D\2\2\u0304\u0305\7N\2\2\u0305\u0306\7G\2\2"+ - "\u0306\u0307\7U\2\2\u0307\u00a4\3\2\2\2\u0308\u0309\7V\2\2\u0309\u030a"+ - "\7G\2\2\u030a\u030b\7Z\2\2\u030b\u030c\7V\2\2\u030c\u00a6\3\2\2\2\u030d"+ - "\u030e\7V\2\2\u030e\u030f\7T\2\2\u030f\u0310\7W\2\2\u0310\u0311\7G\2\2"+ - "\u0311\u00a8\3\2\2\2\u0312\u0313\7V\2\2\u0313\u0314\7Q\2\2\u0314\u00aa"+ - "\3\2\2\2\u0315\u0316\7V\2\2\u0316\u0317\7[\2\2\u0317\u0318\7R\2\2\u0318"+ - "\u0319\7G\2\2\u0319\u00ac\3\2\2\2\u031a\u031b\7V\2\2\u031b\u031c\7[\2"+ - "\2\u031c\u031d\7R\2\2\u031d\u031e\7G\2\2\u031e\u031f\7U\2\2\u031f\u00ae"+ - "\3\2\2\2\u0320\u0321\7W\2\2\u0321\u0322\7U\2\2\u0322\u0323\7K\2\2\u0323"+ - "\u0324\7P\2\2\u0324\u0325\7I\2\2\u0325\u00b0\3\2\2\2\u0326\u0327\7X\2"+ - "\2\u0327\u0328\7G\2\2\u0328\u0329\7T\2\2\u0329\u032a\7K\2\2\u032a\u032b"+ - "\7H\2\2\u032b\u032c\7[\2\2\u032c\u00b2\3\2\2\2\u032d\u032e\7Y\2\2\u032e"+ - "\u032f\7J\2\2\u032f\u0330\7G\2\2\u0330\u0331\7T\2\2\u0331\u0332\7G\2\2"+ - "\u0332\u00b4\3\2\2\2\u0333\u0334\7Y\2\2\u0334\u0335\7K\2\2\u0335\u0336"+ - "\7V\2\2\u0336\u0337\7J\2\2\u0337\u00b6\3\2\2\2\u0338\u0339\7[\2\2\u0339"+ - "\u033a\7G\2\2\u033a\u033b\7C\2\2\u033b\u033c\7T\2\2\u033c\u00b8\3\2\2"+ - "\2\u033d\u033e\7[\2\2\u033e\u033f\7G\2\2\u033f\u0340\7C\2\2\u0340\u0341"+ - "\7T\2\2\u0341\u0342\7U\2\2\u0342\u00ba\3\2\2\2\u0343\u0344\7}\2\2\u0344"+ - "\u0345\7G\2\2\u0345\u0346\7U\2\2\u0346\u0347\7E\2\2\u0347\u0348\7C\2\2"+ - "\u0348\u0349\7R\2\2\u0349\u034a\7G\2\2\u034a\u00bc\3\2\2\2\u034b\u034c"+ - "\7}\2\2\u034c\u034d\7H\2\2\u034d\u034e\7P\2\2\u034e\u00be\3\2\2\2\u034f"+ - "\u0350\7}\2\2\u0350\u0351\7N\2\2\u0351\u0352\7K\2\2\u0352\u0353\7O\2\2"+ - "\u0353\u0354\7K\2\2\u0354\u0355\7V\2\2\u0355\u00c0\3\2\2\2\u0356\u0357"+ - "\7}\2\2\u0357\u0358\7F\2\2\u0358\u00c2\3\2\2\2\u0359\u035a\7}\2\2\u035a"+ - "\u035b\7V\2\2\u035b\u00c4\3\2\2\2\u035c\u035d\7}\2\2\u035d\u035e\7V\2"+ - "\2\u035e\u035f\7U\2\2\u035f\u00c6\3\2\2\2\u0360\u0361\7}\2\2\u0361\u0362"+ - "\7I\2\2\u0362\u0363\7W\2\2\u0363\u0364\7K\2\2\u0364\u0365\7F\2\2\u0365"+ - "\u00c8\3\2\2\2\u0366\u0367\7\177\2\2\u0367\u00ca\3\2\2\2\u0368\u0369\7"+ - "?\2\2\u0369\u00cc\3\2\2\2\u036a\u036b\7>\2\2\u036b\u036c\7?\2\2\u036c"+ - "\u036d\7@\2\2\u036d\u00ce\3\2\2\2\u036e\u036f\7>\2\2\u036f\u0373\7@\2"+ - "\2\u0370\u0371\7#\2\2\u0371\u0373\7?\2\2\u0372\u036e\3\2\2\2\u0372\u0370"+ - "\3\2\2\2\u0373\u00d0\3\2\2\2\u0374\u0375\7>\2\2\u0375\u00d2\3\2\2\2\u0376"+ - "\u0377\7>\2\2\u0377\u0378\7?\2\2\u0378\u00d4\3\2\2\2\u0379\u037a\7@\2"+ - "\2\u037a\u00d6\3\2\2\2\u037b\u037c\7@\2\2\u037c\u037d\7?\2\2\u037d\u00d8"+ - "\3\2\2\2\u037e\u037f\7-\2\2\u037f\u00da\3\2\2\2\u0380\u0381\7/\2\2\u0381"+ - "\u00dc\3\2\2\2\u0382\u0383\7,\2\2\u0383\u00de\3\2\2\2\u0384\u0385\7\61"+ - "\2\2\u0385\u00e0\3\2\2\2\u0386\u0387\7\'\2\2\u0387\u00e2\3\2\2\2\u0388"+ - "\u0389\7~\2\2\u0389\u038a\7~\2\2\u038a\u00e4\3\2\2\2\u038b\u038c\7\60"+ - "\2\2\u038c\u00e6\3\2\2\2\u038d\u038e\7A\2\2\u038e\u00e8\3\2\2\2\u038f"+ - "\u0395\7)\2\2\u0390\u0394\n\2\2\2\u0391\u0392\7)\2\2\u0392\u0394\7)\2"+ - "\2\u0393\u0390\3\2\2\2\u0393\u0391\3\2\2\2\u0394\u0397\3\2\2\2\u0395\u0393"+ - "\3\2\2\2\u0395\u0396\3\2\2\2\u0396\u0398\3\2\2\2\u0397\u0395\3\2\2\2\u0398"+ - "\u0399\7)\2\2\u0399\u00ea\3\2\2\2\u039a\u039c\5\u00fb~\2\u039b\u039a\3"+ - "\2\2\2\u039c\u039d\3\2\2\2\u039d\u039b\3\2\2\2\u039d\u039e\3\2\2\2\u039e"+ - "\u00ec\3\2\2\2\u039f\u03a1\5\u00fb~\2\u03a0\u039f\3\2\2\2\u03a1\u03a2"+ - "\3\2\2\2\u03a2\u03a0\3\2\2\2\u03a2\u03a3\3\2\2\2\u03a3\u03a4\3\2\2\2\u03a4"+ - "\u03a8\5\u00e5s\2\u03a5\u03a7\5\u00fb~\2\u03a6\u03a5\3\2\2\2\u03a7\u03aa"+ - "\3\2\2\2\u03a8\u03a6\3\2\2\2\u03a8\u03a9\3\2\2\2\u03a9\u03ca\3\2\2\2\u03aa"+ - "\u03a8\3\2\2\2\u03ab\u03ad\5\u00e5s\2\u03ac\u03ae\5\u00fb~\2\u03ad\u03ac"+ - "\3\2\2\2\u03ae\u03af\3\2\2\2\u03af\u03ad\3\2\2\2\u03af\u03b0\3\2\2\2\u03b0"+ - "\u03ca\3\2\2\2\u03b1\u03b3\5\u00fb~\2\u03b2\u03b1\3\2\2\2\u03b3\u03b4"+ - "\3\2\2\2\u03b4\u03b2\3\2\2\2\u03b4\u03b5\3\2\2\2\u03b5\u03bd\3\2\2\2\u03b6"+ - "\u03ba\5\u00e5s\2\u03b7\u03b9\5\u00fb~\2\u03b8\u03b7\3\2\2\2\u03b9\u03bc"+ - "\3\2\2\2\u03ba\u03b8\3\2\2\2\u03ba\u03bb\3\2\2\2\u03bb\u03be\3\2\2\2\u03bc"+ - "\u03ba\3\2\2\2\u03bd\u03b6\3\2\2\2\u03bd\u03be\3\2\2\2\u03be\u03bf\3\2"+ - "\2\2\u03bf\u03c0\5\u00f9}\2\u03c0\u03ca\3\2\2\2\u03c1\u03c3\5\u00e5s\2"+ - "\u03c2\u03c4\5\u00fb~\2\u03c3\u03c2\3\2\2\2\u03c4\u03c5\3\2\2\2\u03c5"+ - "\u03c3\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u03c7\3\2\2\2\u03c7\u03c8\5\u00f9"+ - "}\2\u03c8\u03ca\3\2\2\2\u03c9\u03a0\3\2\2\2\u03c9\u03ab\3\2\2\2\u03c9"+ - "\u03b2\3\2\2\2\u03c9\u03c1\3\2\2\2\u03ca\u00ee\3\2\2\2\u03cb\u03ce\5\u00fd"+ - "\177\2\u03cc\u03ce\7a\2\2\u03cd\u03cb\3\2\2\2\u03cd\u03cc\3\2\2\2\u03ce"+ - "\u03d4\3\2\2\2\u03cf\u03d3\5\u00fd\177\2\u03d0\u03d3\5\u00fb~\2\u03d1"+ - "\u03d3\t\3\2\2\u03d2\u03cf\3\2\2\2\u03d2\u03d0\3\2\2\2\u03d2\u03d1\3\2"+ - "\2\2\u03d3\u03d6\3\2\2\2\u03d4\u03d2\3\2\2\2\u03d4\u03d5\3\2\2\2\u03d5"+ - "\u00f0\3\2\2\2\u03d6\u03d4\3\2\2\2\u03d7\u03db\5\u00fb~\2\u03d8\u03dc"+ - "\5\u00fd\177\2\u03d9\u03dc\5\u00fb~\2\u03da\u03dc\t\4\2\2\u03db\u03d8"+ - "\3\2\2\2\u03db\u03d9\3\2\2\2\u03db\u03da\3\2\2\2\u03dc\u03dd\3\2\2\2\u03dd"+ - "\u03db\3\2\2\2\u03dd\u03de\3\2\2\2\u03de\u00f2\3\2\2\2\u03df\u03e3\5\u00fd"+ - "\177\2\u03e0\u03e3\5\u00fb~\2\u03e1\u03e3\7a\2\2\u03e2\u03df\3\2\2\2\u03e2"+ - "\u03e0\3\2\2\2\u03e2\u03e1\3\2\2\2\u03e3\u03e4\3\2\2\2\u03e4\u03e2\3\2"+ - "\2\2\u03e4\u03e5\3\2\2\2\u03e5\u00f4\3\2\2\2\u03e6\u03ec\7$\2\2\u03e7"+ - "\u03eb\n\5\2\2\u03e8\u03e9\7$\2\2\u03e9\u03eb\7$\2\2\u03ea\u03e7\3\2\2"+ - "\2\u03ea\u03e8\3\2\2\2\u03eb\u03ee\3\2\2\2\u03ec\u03ea\3\2\2\2\u03ec\u03ed"+ - "\3\2\2\2\u03ed\u03ef\3\2\2\2\u03ee\u03ec\3\2\2\2\u03ef\u03f0\7$\2\2\u03f0"+ - "\u00f6\3\2\2\2\u03f1\u03f7\7b\2\2\u03f2\u03f6\n\6\2\2\u03f3\u03f4\7b\2"+ - "\2\u03f4\u03f6\7b\2\2\u03f5\u03f2\3\2\2\2\u03f5\u03f3\3\2\2\2\u03f6\u03f9"+ - "\3\2\2\2\u03f7\u03f5\3\2\2\2\u03f7\u03f8\3\2\2\2\u03f8\u03fa\3\2\2\2\u03f9"+ - "\u03f7\3\2\2\2\u03fa\u03fb\7b\2\2\u03fb\u00f8\3\2\2\2\u03fc\u03fe\7G\2"+ - "\2\u03fd\u03ff\t\7\2\2\u03fe\u03fd\3\2\2\2\u03fe\u03ff\3\2\2\2\u03ff\u0401"+ - "\3\2\2\2\u0400\u0402\5\u00fb~\2\u0401\u0400\3\2\2\2\u0402\u0403\3\2\2"+ - "\2\u0403\u0401\3\2\2\2\u0403\u0404\3\2\2\2\u0404\u00fa\3\2\2\2\u0405\u0406"+ - "\t\b\2\2\u0406\u00fc\3\2\2\2\u0407\u0408\t\t\2\2\u0408\u00fe\3\2\2\2\u0409"+ - "\u040a\7/\2\2\u040a\u040b\7/\2\2\u040b\u040f\3\2\2\2\u040c\u040e\n\n\2"+ - "\2\u040d\u040c\3\2\2\2\u040e\u0411\3\2\2\2\u040f\u040d\3\2\2\2\u040f\u0410"+ - "\3\2\2\2\u0410\u0413\3\2\2\2\u0411\u040f\3\2\2\2\u0412\u0414\7\17\2\2"+ - "\u0413\u0412\3\2\2\2\u0413\u0414\3\2\2\2\u0414\u0416\3\2\2\2\u0415\u0417"+ - "\7\f\2\2\u0416\u0415\3\2\2\2\u0416\u0417\3\2\2\2\u0417\u0418\3\2\2\2\u0418"+ - "\u0419\b\u0080\2\2\u0419\u0100\3\2\2\2\u041a\u041b\7\61\2\2\u041b\u041c"+ - "\7,\2\2\u041c\u0421\3\2\2\2\u041d\u0420\5\u0101\u0081\2\u041e\u0420\13"+ - "\2\2\2\u041f\u041d\3\2\2\2\u041f\u041e\3\2\2\2\u0420\u0423\3\2\2\2\u0421"+ - "\u0422\3\2\2\2\u0421\u041f\3\2\2\2\u0422\u0424\3\2\2\2\u0423\u0421\3\2"+ - "\2\2\u0424\u0425\7,\2\2\u0425\u0426\7\61\2\2\u0426\u0427\3\2\2\2\u0427"+ - "\u0428\b\u0081\2\2\u0428\u0102\3\2\2\2\u0429\u042b\t\13\2\2\u042a\u0429"+ - "\3\2\2\2\u042b\u042c\3\2\2\2\u042c\u042a\3\2\2\2\u042c\u042d\3\2\2\2\u042d"+ - "\u042e\3\2\2\2\u042e\u042f\b\u0082\2\2\u042f\u0104\3\2\2\2\u0430\u0431"+ - "\13\2\2\2\u0431\u0106\3\2\2\2\"\2\u0372\u0393\u0395\u039d\u03a2\u03a8"+ - "\u03af\u03b4\u03ba\u03bd\u03c5\u03c9\u03cd\u03d2\u03d4\u03db\u03dd\u03e2"+ - "\u03e4\u03ea\u03ec\u03f5\u03f7\u03fe\u0403\u040f\u0413\u0416\u041f\u0421"+ - "\u042c\3\2\3\2"; + "\u0080\4\u0081\t\u0081\4\u0082\t\u0082\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\21\3\21\3\21\3\22\3\22\3\22\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\24\3\24\3\24\3\24\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\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\27\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31"+ + "\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33"+ + "\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35"+ + "\3\35\3\35\3\35\3\35\3\35\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\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.\3.\3."+ + "\3.\3.\3.\3.\3.\3.\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3"+ + "\61\3\61\3\62\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3"+ + "\64\3\64\3\64\3\64\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\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\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@\3@\3A\3A\3A\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D"+ + "\3D\3D\3D\3E\3E\3E\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G"+ + "\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\3J\3J\3K\3K\3K"+ + "\3K\3K\3K\3K\3L\3L\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N"+ + "\3N\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3R\3R"+ + "\3S\3S\3S\3S\3S\3T\3T\3T\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3V\3W\3W\3W\3W"+ + "\3W\3W\3X\3X\3X\3X\3X\3X\3X\3Y\3Y\3Y\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\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\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c\3d"+ + "\3d\3e\3e\3f\3f\3f\3f\3g\3g\3g\3g\5g\u0369\ng\3h\3h\3i\3i\3i\3j\3j\3k"+ + "\3k\3k\3l\3l\3m\3m\3n\3n\3o\3o\3p\3p\3q\3q\3q\3r\3r\3s\3s\3t\3t\3t\3t"+ + "\7t\u038a\nt\ft\16t\u038d\13t\3t\3t\3u\6u\u0392\nu\ru\16u\u0393\3v\6v"+ + "\u0397\nv\rv\16v\u0398\3v\3v\7v\u039d\nv\fv\16v\u03a0\13v\3v\3v\6v\u03a4"+ + "\nv\rv\16v\u03a5\3v\6v\u03a9\nv\rv\16v\u03aa\3v\3v\7v\u03af\nv\fv\16v"+ + "\u03b2\13v\5v\u03b4\nv\3v\3v\3v\3v\6v\u03ba\nv\rv\16v\u03bb\3v\3v\5v\u03c0"+ + "\nv\3w\3w\5w\u03c4\nw\3w\3w\3w\7w\u03c9\nw\fw\16w\u03cc\13w\3x\3x\3x\3"+ + "x\6x\u03d2\nx\rx\16x\u03d3\3y\3y\3y\6y\u03d9\ny\ry\16y\u03da\3z\3z\3z"+ + "\3z\7z\u03e1\nz\fz\16z\u03e4\13z\3z\3z\3{\3{\3{\3{\7{\u03ec\n{\f{\16{"+ + "\u03ef\13{\3{\3{\3|\3|\5|\u03f5\n|\3|\6|\u03f8\n|\r|\16|\u03f9\3}\3}\3"+ + "~\3~\3\177\3\177\3\177\3\177\7\177\u0404\n\177\f\177\16\177\u0407\13\177"+ + "\3\177\5\177\u040a\n\177\3\177\5\177\u040d\n\177\3\177\3\177\3\u0080\3"+ + "\u0080\3\u0080\3\u0080\3\u0080\7\u0080\u0416\n\u0080\f\u0080\16\u0080"+ + "\u0419\13\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0081\6\u0081"+ + "\u0421\n\u0081\r\u0081\16\u0081\u0422\3\u0081\3\u0081\3\u0082\3\u0082"+ + "\3\u0417\2\u0083\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\64"+ + "g\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089"+ + "F\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009d"+ + "P\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1"+ + "Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5"+ + "d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9"+ + "n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00ed"+ + "x\u00efy\u00f1z\u00f3{\u00f5|\u00f7\2\u00f9\2\u00fb\2\u00fd}\u00ff~\u0101"+ + "\177\u0103\u0080\3\2\f\3\2))\4\2BBaa\5\2<\3\2\2"+ + "\2\u01c8\u01c9\7G\2\2\u01c9\u01ca\7Z\2\2\u01ca\u01cb\7V\2\2\u01cb\u01cc"+ + "\7T\2\2\u01cc\u01cd\7C\2\2\u01cd\u01ce\7E\2\2\u01ce\u01cf\7V\2\2\u01cf"+ + "@\3\2\2\2\u01d0\u01d1\7H\2\2\u01d1\u01d2\7C\2\2\u01d2\u01d3\7N\2\2\u01d3"+ + "\u01d4\7U\2\2\u01d4\u01d5\7G\2\2\u01d5B\3\2\2\2\u01d6\u01d7\7H\2\2\u01d7"+ + "\u01d8\7K\2\2\u01d8\u01d9\7T\2\2\u01d9\u01da\7U\2\2\u01da\u01db\7V\2\2"+ + "\u01dbD\3\2\2\2\u01dc\u01dd\7H\2\2\u01dd\u01de\7Q\2\2\u01de\u01df\7T\2"+ + "\2\u01df\u01e0\7O\2\2\u01e0\u01e1\7C\2\2\u01e1\u01e2\7V\2\2\u01e2F\3\2"+ + "\2\2\u01e3\u01e4\7H\2\2\u01e4\u01e5\7T\2\2\u01e5\u01e6\7Q\2\2\u01e6\u01e7"+ + "\7O\2\2\u01e7H\3\2\2\2\u01e8\u01e9\7H\2\2\u01e9\u01ea\7W\2\2\u01ea\u01eb"+ + "\7N\2\2\u01eb\u01ec\7N\2\2\u01ecJ\3\2\2\2\u01ed\u01ee\7H\2\2\u01ee\u01ef"+ + "\7W\2\2\u01ef\u01f0\7P\2\2\u01f0\u01f1\7E\2\2\u01f1\u01f2\7V\2\2\u01f2"+ + "\u01f3\7K\2\2\u01f3\u01f4\7Q\2\2\u01f4\u01f5\7P\2\2\u01f5\u01f6\7U\2\2"+ + "\u01f6L\3\2\2\2\u01f7\u01f8\7I\2\2\u01f8\u01f9\7T\2\2\u01f9\u01fa\7C\2"+ + "\2\u01fa\u01fb\7R\2\2\u01fb\u01fc\7J\2\2\u01fc\u01fd\7X\2\2\u01fd\u01fe"+ + "\7K\2\2\u01fe\u01ff\7\\\2\2\u01ffN\3\2\2\2\u0200\u0201\7I\2\2\u0201\u0202"+ + "\7T\2\2\u0202\u0203\7Q\2\2\u0203\u0204\7W\2\2\u0204\u0205\7R\2\2\u0205"+ + "P\3\2\2\2\u0206\u0207\7J\2\2\u0207\u0208\7C\2\2\u0208\u0209\7X\2\2\u0209"+ + "\u020a\7K\2\2\u020a\u020b\7P\2\2\u020b\u020c\7I\2\2\u020cR\3\2\2\2\u020d"+ + "\u020e\7J\2\2\u020e\u020f\7Q\2\2\u020f\u0210\7W\2\2\u0210\u0211\7T\2\2"+ + "\u0211T\3\2\2\2\u0212\u0213\7J\2\2\u0213\u0214\7Q\2\2\u0214\u0215\7W\2"+ + "\2\u0215\u0216\7T\2\2\u0216\u0217\7U\2\2\u0217V\3\2\2\2\u0218\u0219\7"+ + "K\2\2\u0219\u021a\7P\2\2\u021aX\3\2\2\2\u021b\u021c\7K\2\2\u021c\u021d"+ + "\7P\2\2\u021d\u021e\7P\2\2\u021e\u021f\7G\2\2\u021f\u0220\7T\2\2\u0220"+ + "Z\3\2\2\2\u0221\u0222\7K\2\2\u0222\u0223\7P\2\2\u0223\u0224\7V\2\2\u0224"+ + "\u0225\7G\2\2\u0225\u0226\7T\2\2\u0226\u0227\7X\2\2\u0227\u0228\7C\2\2"+ + "\u0228\u0229\7N\2\2\u0229\\\3\2\2\2\u022a\u022b\7K\2\2\u022b\u022c\7U"+ + "\2\2\u022c^\3\2\2\2\u022d\u022e\7L\2\2\u022e\u022f\7Q\2\2\u022f\u0230"+ + "\7K\2\2\u0230\u0231\7P\2\2\u0231`\3\2\2\2\u0232\u0233\7N\2\2\u0233\u0234"+ + "\7C\2\2\u0234\u0235\7U\2\2\u0235\u0236\7V\2\2\u0236b\3\2\2\2\u0237\u0238"+ + "\7N\2\2\u0238\u0239\7G\2\2\u0239\u023a\7H\2\2\u023a\u023b\7V\2\2\u023b"+ + "d\3\2\2\2\u023c\u023d\7N\2\2\u023d\u023e\7K\2\2\u023e\u023f\7M\2\2\u023f"+ + "\u0240\7G\2\2\u0240f\3\2\2\2\u0241\u0242\7N\2\2\u0242\u0243\7K\2\2\u0243"+ + "\u0244\7O\2\2\u0244\u0245\7K\2\2\u0245\u0246\7V\2\2\u0246h\3\2\2\2\u0247"+ + "\u0248\7O\2\2\u0248\u0249\7C\2\2\u0249\u024a\7R\2\2\u024a\u024b\7R\2\2"+ + "\u024b\u024c\7G\2\2\u024c\u024d\7F\2\2\u024dj\3\2\2\2\u024e\u024f\7O\2"+ + "\2\u024f\u0250\7C\2\2\u0250\u0251\7V\2\2\u0251\u0252\7E\2\2\u0252\u0253"+ + "\7J\2\2\u0253l\3\2\2\2\u0254\u0255\7O\2\2\u0255\u0256\7K\2\2\u0256\u0257"+ + "\7P\2\2\u0257\u0258\7W\2\2\u0258\u0259\7V\2\2\u0259\u025a\7G\2\2\u025a"+ + "n\3\2\2\2\u025b\u025c\7O\2\2\u025c\u025d\7K\2\2\u025d\u025e\7P\2\2\u025e"+ + "\u025f\7W\2\2\u025f\u0260\7V\2\2\u0260\u0261\7G\2\2\u0261\u0262\7U\2\2"+ + "\u0262p\3\2\2\2\u0263\u0264\7O\2\2\u0264\u0265\7Q\2\2\u0265\u0266\7P\2"+ + "\2\u0266\u0267\7V\2\2\u0267\u0268\7J\2\2\u0268r\3\2\2\2\u0269\u026a\7"+ + "O\2\2\u026a\u026b\7Q\2\2\u026b\u026c\7P\2\2\u026c\u026d\7V\2\2\u026d\u026e"+ + "\7J\2\2\u026e\u026f\7U\2\2\u026ft\3\2\2\2\u0270\u0271\7P\2\2\u0271\u0272"+ + "\7C\2\2\u0272\u0273\7V\2\2\u0273\u0274\7W\2\2\u0274\u0275\7T\2\2\u0275"+ + "\u0276\7C\2\2\u0276\u0277\7N\2\2\u0277v\3\2\2\2\u0278\u0279\7P\2\2\u0279"+ + "\u027a\7Q\2\2\u027a\u027b\7V\2\2\u027bx\3\2\2\2\u027c\u027d\7P\2\2\u027d"+ + "\u027e\7W\2\2\u027e\u027f\7N\2\2\u027f\u0280\7N\2\2\u0280z\3\2\2\2\u0281"+ + "\u0282\7P\2\2\u0282\u0283\7W\2\2\u0283\u0284\7N\2\2\u0284\u0285\7N\2\2"+ + "\u0285\u0286\7U\2\2\u0286|\3\2\2\2\u0287\u0288\7Q\2\2\u0288\u0289\7P\2"+ + "\2\u0289~\3\2\2\2\u028a\u028b\7Q\2\2\u028b\u028c\7R\2\2\u028c\u028d\7"+ + "V\2\2\u028d\u028e\7K\2\2\u028e\u028f\7O\2\2\u028f\u0290\7K\2\2\u0290\u0291"+ + "\7\\\2\2\u0291\u0292\7G\2\2\u0292\u0293\7F\2\2\u0293\u0080\3\2\2\2\u0294"+ + "\u0295\7Q\2\2\u0295\u0296\7T\2\2\u0296\u0082\3\2\2\2\u0297\u0298\7Q\2"+ + "\2\u0298\u0299\7T\2\2\u0299\u029a\7F\2\2\u029a\u029b\7G\2\2\u029b\u029c"+ + "\7T\2\2\u029c\u0084\3\2\2\2\u029d\u029e\7Q\2\2\u029e\u029f\7W\2\2\u029f"+ + "\u02a0\7V\2\2\u02a0\u02a1\7G\2\2\u02a1\u02a2\7T\2\2\u02a2\u0086\3\2\2"+ + "\2\u02a3\u02a4\7R\2\2\u02a4\u02a5\7C\2\2\u02a5\u02a6\7T\2\2\u02a6\u02a7"+ + "\7U\2\2\u02a7\u02a8\7G\2\2\u02a8\u02a9\7F\2\2\u02a9\u0088\3\2\2\2\u02aa"+ + "\u02ab\7R\2\2\u02ab\u02ac\7J\2\2\u02ac\u02ad\7[\2\2\u02ad\u02ae\7U\2\2"+ + "\u02ae\u02af\7K\2\2\u02af\u02b0\7E\2\2\u02b0\u02b1\7C\2\2\u02b1\u02b2"+ + "\7N\2\2\u02b2\u008a\3\2\2\2\u02b3\u02b4\7R\2\2\u02b4\u02b5\7N\2\2\u02b5"+ + "\u02b6\7C\2\2\u02b6\u02b7\7P\2\2\u02b7\u008c\3\2\2\2\u02b8\u02b9\7T\2"+ + "\2\u02b9\u02ba\7K\2\2\u02ba\u02bb\7I\2\2\u02bb\u02bc\7J\2\2\u02bc\u02bd"+ + "\7V\2\2\u02bd\u008e\3\2\2\2\u02be\u02bf\7T\2\2\u02bf\u02c0\7N\2\2\u02c0"+ + "\u02c1\7K\2\2\u02c1\u02c2\7M\2\2\u02c2\u02c3\7G\2\2\u02c3\u0090\3\2\2"+ + "\2\u02c4\u02c5\7S\2\2\u02c5\u02c6\7W\2\2\u02c6\u02c7\7G\2\2\u02c7\u02c8"+ + "\7T\2\2\u02c8\u02c9\7[\2\2\u02c9\u0092\3\2\2\2\u02ca\u02cb\7U\2\2\u02cb"+ + "\u02cc\7E\2\2\u02cc\u02cd\7J\2\2\u02cd\u02ce\7G\2\2\u02ce\u02cf\7O\2\2"+ + "\u02cf\u02d0\7C\2\2\u02d0\u02d1\7U\2\2\u02d1\u0094\3\2\2\2\u02d2\u02d3"+ + "\7U\2\2\u02d3\u02d4\7G\2\2\u02d4\u02d5\7E\2\2\u02d5\u02d6\7Q\2\2\u02d6"+ + "\u02d7\7P\2\2\u02d7\u02d8\7F\2\2\u02d8\u0096\3\2\2\2\u02d9\u02da\7U\2"+ + "\2\u02da\u02db\7G\2\2\u02db\u02dc\7E\2\2\u02dc\u02dd\7Q\2\2\u02dd\u02de"+ + "\7P\2\2\u02de\u02df\7F\2\2\u02df\u02e0\7U\2\2\u02e0\u0098\3\2\2\2\u02e1"+ + "\u02e2\7U\2\2\u02e2\u02e3\7G\2\2\u02e3\u02e4\7N\2\2\u02e4\u02e5\7G\2\2"+ + "\u02e5\u02e6\7E\2\2\u02e6\u02e7\7V\2\2\u02e7\u009a\3\2\2\2\u02e8\u02e9"+ + "\7U\2\2\u02e9\u02ea\7J\2\2\u02ea\u02eb\7Q\2\2\u02eb\u02ec\7Y\2\2\u02ec"+ + "\u009c\3\2\2\2\u02ed\u02ee\7U\2\2\u02ee\u02ef\7[\2\2\u02ef\u02f0\7U\2"+ + "\2\u02f0\u009e\3\2\2\2\u02f1\u02f2\7V\2\2\u02f2\u02f3\7C\2\2\u02f3\u02f4"+ + "\7D\2\2\u02f4\u02f5\7N\2\2\u02f5\u02f6\7G\2\2\u02f6\u00a0\3\2\2\2\u02f7"+ + "\u02f8\7V\2\2\u02f8\u02f9\7C\2\2\u02f9\u02fa\7D\2\2\u02fa\u02fb\7N\2\2"+ + "\u02fb\u02fc\7G\2\2\u02fc\u02fd\7U\2\2\u02fd\u00a2\3\2\2\2\u02fe\u02ff"+ + "\7V\2\2\u02ff\u0300\7G\2\2\u0300\u0301\7Z\2\2\u0301\u0302\7V\2\2\u0302"+ + "\u00a4\3\2\2\2\u0303\u0304\7V\2\2\u0304\u0305\7T\2\2\u0305\u0306\7W\2"+ + "\2\u0306\u0307\7G\2\2\u0307\u00a6\3\2\2\2\u0308\u0309\7V\2\2\u0309\u030a"+ + "\7Q\2\2\u030a\u00a8\3\2\2\2\u030b\u030c\7V\2\2\u030c\u030d\7[\2\2\u030d"+ + "\u030e\7R\2\2\u030e\u030f\7G\2\2\u030f\u00aa\3\2\2\2\u0310\u0311\7V\2"+ + "\2\u0311\u0312\7[\2\2\u0312\u0313\7R\2\2\u0313\u0314\7G\2\2\u0314\u0315"+ + "\7U\2\2\u0315\u00ac\3\2\2\2\u0316\u0317\7W\2\2\u0317\u0318\7U\2\2\u0318"+ + "\u0319\7K\2\2\u0319\u031a\7P\2\2\u031a\u031b\7I\2\2\u031b\u00ae\3\2\2"+ + "\2\u031c\u031d\7X\2\2\u031d\u031e\7G\2\2\u031e\u031f\7T\2\2\u031f\u0320"+ + "\7K\2\2\u0320\u0321\7H\2\2\u0321\u0322\7[\2\2\u0322\u00b0\3\2\2\2\u0323"+ + "\u0324\7Y\2\2\u0324\u0325\7J\2\2\u0325\u0326\7G\2\2\u0326\u0327\7T\2\2"+ + "\u0327\u0328\7G\2\2\u0328\u00b2\3\2\2\2\u0329\u032a\7Y\2\2\u032a\u032b"+ + "\7K\2\2\u032b\u032c\7V\2\2\u032c\u032d\7J\2\2\u032d\u00b4\3\2\2\2\u032e"+ + "\u032f\7[\2\2\u032f\u0330\7G\2\2\u0330\u0331\7C\2\2\u0331\u0332\7T\2\2"+ + "\u0332\u00b6\3\2\2\2\u0333\u0334\7[\2\2\u0334\u0335\7G\2\2\u0335\u0336"+ + "\7C\2\2\u0336\u0337\7T\2\2\u0337\u0338\7U\2\2\u0338\u00b8\3\2\2\2\u0339"+ + "\u033a\7}\2\2\u033a\u033b\7G\2\2\u033b\u033c\7U\2\2\u033c\u033d\7E\2\2"+ + "\u033d\u033e\7C\2\2\u033e\u033f\7R\2\2\u033f\u0340\7G\2\2\u0340\u00ba"+ + "\3\2\2\2\u0341\u0342\7}\2\2\u0342\u0343\7H\2\2\u0343\u0344\7P\2\2\u0344"+ + "\u00bc\3\2\2\2\u0345\u0346\7}\2\2\u0346\u0347\7N\2\2\u0347\u0348\7K\2"+ + "\2\u0348\u0349\7O\2\2\u0349\u034a\7K\2\2\u034a\u034b\7V\2\2\u034b\u00be"+ + "\3\2\2\2\u034c\u034d\7}\2\2\u034d\u034e\7F\2\2\u034e\u00c0\3\2\2\2\u034f"+ + "\u0350\7}\2\2\u0350\u0351\7V\2\2\u0351\u00c2\3\2\2\2\u0352\u0353\7}\2"+ + "\2\u0353\u0354\7V\2\2\u0354\u0355\7U\2\2\u0355\u00c4\3\2\2\2\u0356\u0357"+ + "\7}\2\2\u0357\u0358\7I\2\2\u0358\u0359\7W\2\2\u0359\u035a\7K\2\2\u035a"+ + "\u035b\7F\2\2\u035b\u00c6\3\2\2\2\u035c\u035d\7\177\2\2\u035d\u00c8\3"+ + "\2\2\2\u035e\u035f\7?\2\2\u035f\u00ca\3\2\2\2\u0360\u0361\7>\2\2\u0361"+ + "\u0362\7?\2\2\u0362\u0363\7@\2\2\u0363\u00cc\3\2\2\2\u0364\u0365\7>\2"+ + "\2\u0365\u0369\7@\2\2\u0366\u0367\7#\2\2\u0367\u0369\7?\2\2\u0368\u0364"+ + "\3\2\2\2\u0368\u0366\3\2\2\2\u0369\u00ce\3\2\2\2\u036a\u036b\7>\2\2\u036b"+ + "\u00d0\3\2\2\2\u036c\u036d\7>\2\2\u036d\u036e\7?\2\2\u036e\u00d2\3\2\2"+ + "\2\u036f\u0370\7@\2\2\u0370\u00d4\3\2\2\2\u0371\u0372\7@\2\2\u0372\u0373"+ + "\7?\2\2\u0373\u00d6\3\2\2\2\u0374\u0375\7-\2\2\u0375\u00d8\3\2\2\2\u0376"+ + "\u0377\7/\2\2\u0377\u00da\3\2\2\2\u0378\u0379\7,\2\2\u0379\u00dc\3\2\2"+ + "\2\u037a\u037b\7\61\2\2\u037b\u00de\3\2\2\2\u037c\u037d\7\'\2\2\u037d"+ + "\u00e0\3\2\2\2\u037e\u037f\7~\2\2\u037f\u0380\7~\2\2\u0380\u00e2\3\2\2"+ + "\2\u0381\u0382\7\60\2\2\u0382\u00e4\3\2\2\2\u0383\u0384\7A\2\2\u0384\u00e6"+ + "\3\2\2\2\u0385\u038b\7)\2\2\u0386\u038a\n\2\2\2\u0387\u0388\7)\2\2\u0388"+ + "\u038a\7)\2\2\u0389\u0386\3\2\2\2\u0389\u0387\3\2\2\2\u038a\u038d\3\2"+ + "\2\2\u038b\u0389\3\2\2\2\u038b\u038c\3\2\2\2\u038c\u038e\3\2\2\2\u038d"+ + "\u038b\3\2\2\2\u038e\u038f\7)\2\2\u038f\u00e8\3\2\2\2\u0390\u0392\5\u00f9"+ + "}\2\u0391\u0390\3\2\2\2\u0392\u0393\3\2\2\2\u0393\u0391\3\2\2\2\u0393"+ + "\u0394\3\2\2\2\u0394\u00ea\3\2\2\2\u0395\u0397\5\u00f9}\2\u0396\u0395"+ + "\3\2\2\2\u0397\u0398\3\2\2\2\u0398\u0396\3\2\2\2\u0398\u0399\3\2\2\2\u0399"+ + "\u039a\3\2\2\2\u039a\u039e\5\u00e3r\2\u039b\u039d\5\u00f9}\2\u039c\u039b"+ + "\3\2\2\2\u039d\u03a0\3\2\2\2\u039e\u039c\3\2\2\2\u039e\u039f\3\2\2\2\u039f"+ + "\u03c0\3\2\2\2\u03a0\u039e\3\2\2\2\u03a1\u03a3\5\u00e3r\2\u03a2\u03a4"+ + "\5\u00f9}\2\u03a3\u03a2\3\2\2\2\u03a4\u03a5\3\2\2\2\u03a5\u03a3\3\2\2"+ + "\2\u03a5\u03a6\3\2\2\2\u03a6\u03c0\3\2\2\2\u03a7\u03a9\5\u00f9}\2\u03a8"+ + "\u03a7\3\2\2\2\u03a9\u03aa\3\2\2\2\u03aa\u03a8\3\2\2\2\u03aa\u03ab\3\2"+ + "\2\2\u03ab\u03b3\3\2\2\2\u03ac\u03b0\5\u00e3r\2\u03ad\u03af\5\u00f9}\2"+ + "\u03ae\u03ad\3\2\2\2\u03af\u03b2\3\2\2\2\u03b0\u03ae\3\2\2\2\u03b0\u03b1"+ + "\3\2\2\2\u03b1\u03b4\3\2\2\2\u03b2\u03b0\3\2\2\2\u03b3\u03ac\3\2\2\2\u03b3"+ + "\u03b4\3\2\2\2\u03b4\u03b5\3\2\2\2\u03b5\u03b6\5\u00f7|\2\u03b6\u03c0"+ + "\3\2\2\2\u03b7\u03b9\5\u00e3r\2\u03b8\u03ba\5\u00f9}\2\u03b9\u03b8\3\2"+ + "\2\2\u03ba\u03bb\3\2\2\2\u03bb\u03b9\3\2\2\2\u03bb\u03bc\3\2\2\2\u03bc"+ + "\u03bd\3\2\2\2\u03bd\u03be\5\u00f7|\2\u03be\u03c0\3\2\2\2\u03bf\u0396"+ + "\3\2\2\2\u03bf\u03a1\3\2\2\2\u03bf\u03a8\3\2\2\2\u03bf\u03b7\3\2\2\2\u03c0"+ + "\u00ec\3\2\2\2\u03c1\u03c4\5\u00fb~\2\u03c2\u03c4\7a\2\2\u03c3\u03c1\3"+ + "\2\2\2\u03c3\u03c2\3\2\2\2\u03c4\u03ca\3\2\2\2\u03c5\u03c9\5\u00fb~\2"+ + "\u03c6\u03c9\5\u00f9}\2\u03c7\u03c9\t\3\2\2\u03c8\u03c5\3\2\2\2\u03c8"+ + "\u03c6\3\2\2\2\u03c8\u03c7\3\2\2\2\u03c9\u03cc\3\2\2\2\u03ca\u03c8\3\2"+ + "\2\2\u03ca\u03cb\3\2\2\2\u03cb\u00ee\3\2\2\2\u03cc\u03ca\3\2\2\2\u03cd"+ + "\u03d1\5\u00f9}\2\u03ce\u03d2\5\u00fb~\2\u03cf\u03d2\5\u00f9}\2\u03d0"+ + "\u03d2\t\4\2\2\u03d1\u03ce\3\2\2\2\u03d1\u03cf\3\2\2\2\u03d1\u03d0\3\2"+ + "\2\2\u03d2\u03d3\3\2\2\2\u03d3\u03d1\3\2\2\2\u03d3\u03d4\3\2\2\2\u03d4"+ + "\u00f0\3\2\2\2\u03d5\u03d9\5\u00fb~\2\u03d6\u03d9\5\u00f9}\2\u03d7\u03d9"+ + "\7a\2\2\u03d8\u03d5\3\2\2\2\u03d8\u03d6\3\2\2\2\u03d8\u03d7\3\2\2\2\u03d9"+ + "\u03da\3\2\2\2\u03da\u03d8\3\2\2\2\u03da\u03db\3\2\2\2\u03db\u00f2\3\2"+ + "\2\2\u03dc\u03e2\7$\2\2\u03dd\u03e1\n\5\2\2\u03de\u03df\7$\2\2\u03df\u03e1"+ + "\7$\2\2\u03e0\u03dd\3\2\2\2\u03e0\u03de\3\2\2\2\u03e1\u03e4\3\2\2\2\u03e2"+ + "\u03e0\3\2\2\2\u03e2\u03e3\3\2\2\2\u03e3\u03e5\3\2\2\2\u03e4\u03e2\3\2"+ + "\2\2\u03e5\u03e6\7$\2\2\u03e6\u00f4\3\2\2\2\u03e7\u03ed\7b\2\2\u03e8\u03ec"+ + "\n\6\2\2\u03e9\u03ea\7b\2\2\u03ea\u03ec\7b\2\2\u03eb\u03e8\3\2\2\2\u03eb"+ + "\u03e9\3\2\2\2\u03ec\u03ef\3\2\2\2\u03ed\u03eb\3\2\2\2\u03ed\u03ee\3\2"+ + "\2\2\u03ee\u03f0\3\2\2\2\u03ef\u03ed\3\2\2\2\u03f0\u03f1\7b\2\2\u03f1"+ + "\u00f6\3\2\2\2\u03f2\u03f4\7G\2\2\u03f3\u03f5\t\7\2\2\u03f4\u03f3\3\2"+ + "\2\2\u03f4\u03f5\3\2\2\2\u03f5\u03f7\3\2\2\2\u03f6\u03f8\5\u00f9}\2\u03f7"+ + "\u03f6\3\2\2\2\u03f8\u03f9\3\2\2\2\u03f9\u03f7\3\2\2\2\u03f9\u03fa\3\2"+ + "\2\2\u03fa\u00f8\3\2\2\2\u03fb\u03fc\t\b\2\2\u03fc\u00fa\3\2\2\2\u03fd"+ + "\u03fe\t\t\2\2\u03fe\u00fc\3\2\2\2\u03ff\u0400\7/\2\2\u0400\u0401\7/\2"+ + "\2\u0401\u0405\3\2\2\2\u0402\u0404\n\n\2\2\u0403\u0402\3\2\2\2\u0404\u0407"+ + "\3\2\2\2\u0405\u0403\3\2\2\2\u0405\u0406\3\2\2\2\u0406\u0409\3\2\2\2\u0407"+ + "\u0405\3\2\2\2\u0408\u040a\7\17\2\2\u0409\u0408\3\2\2\2\u0409\u040a\3"+ + "\2\2\2\u040a\u040c\3\2\2\2\u040b\u040d\7\f\2\2\u040c\u040b\3\2\2\2\u040c"+ + "\u040d\3\2\2\2\u040d\u040e\3\2\2\2\u040e\u040f\b\177\2\2\u040f\u00fe\3"+ + "\2\2\2\u0410\u0411\7\61\2\2\u0411\u0412\7,\2\2\u0412\u0417\3\2\2\2\u0413"+ + "\u0416\5\u00ff\u0080\2\u0414\u0416\13\2\2\2\u0415\u0413\3\2\2\2\u0415"+ + "\u0414\3\2\2\2\u0416\u0419\3\2\2\2\u0417\u0418\3\2\2\2\u0417\u0415\3\2"+ + "\2\2\u0418\u041a\3\2\2\2\u0419\u0417\3\2\2\2\u041a\u041b\7,\2\2\u041b"+ + "\u041c\7\61\2\2\u041c\u041d\3\2\2\2\u041d\u041e\b\u0080\2\2\u041e\u0100"+ + "\3\2\2\2\u041f\u0421\t\13\2\2\u0420\u041f\3\2\2\2\u0421\u0422\3\2\2\2"+ + "\u0422\u0420\3\2\2\2\u0422\u0423\3\2\2\2\u0423\u0424\3\2\2\2\u0424\u0425"+ + "\b\u0081\2\2\u0425\u0102\3\2\2\2\u0426\u0427\13\2\2\2\u0427\u0104\3\2"+ + "\2\2\"\2\u0368\u0389\u038b\u0393\u0398\u039e\u03a5\u03aa\u03b0\u03b3\u03bb"+ + "\u03bf\u03c3\u03c8\u03ca\u03d1\u03d3\u03d8\u03da\u03e0\u03e2\u03eb\u03ed"+ + "\u03f4\u03f9\u0405\u0409\u040c\u0415\u0417\u0422\3\2\3\2"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java index 71b1808022fd2..7b5a8ea5fbad9 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseListener.java @@ -597,18 +597,6 @@ interface SqlBaseListener extends ParseTreeListener { * @param ctx the parse tree */ void exitExtract(SqlBaseParser.ExtractContext ctx); - /** - * Enter a parse tree produced by the {@code currentDateFunction} - * labeled alternative in {@link SqlBaseParser#primaryExpression}. - * @param ctx the parse tree - */ - void enterCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx); - /** - * Exit a parse tree produced by the {@code currentDateFunction} - * labeled alternative in {@link SqlBaseParser#primaryExpression}. - * @param ctx the parse tree - */ - void exitCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx); /** * Enter a parse tree produced by the {@code currentDateTimeFunction} * labeled alternative in {@link SqlBaseParser#primaryExpression}. @@ -713,16 +701,6 @@ interface SqlBaseListener extends ParseTreeListener { * @param ctx the parse tree */ void exitCastTemplate(SqlBaseParser.CastTemplateContext ctx); - /** - * Enter a parse tree produced by {@link SqlBaseParser#builtinDateFunction}. - * @param ctx the parse tree - */ - void enterBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx); - /** - * Exit a parse tree produced by {@link SqlBaseParser#builtinDateFunction}. - * @param ctx the parse tree - */ - void exitBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx); /** * Enter a parse tree produced by {@link SqlBaseParser#builtinDateTimeFunction}. * @param ctx the parse tree diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java index 4a0e7b5ec1e30..a690169409e81 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseParser.java @@ -19,24 +19,23 @@ class SqlBaseParser extends Parser { 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, CATALOG=15, CATALOGS=16, COLUMNS=17, - CONVERT=18, CURRENT=19, CURRENT_DATE=20, CURRENT_TIMESTAMP=21, DAY=22, - DAYS=23, DEBUG=24, DESC=25, DESCRIBE=26, DISTINCT=27, ESCAPE=28, EXECUTABLE=29, - EXISTS=30, EXPLAIN=31, EXTRACT=32, FALSE=33, FIRST=34, FORMAT=35, FROM=36, - FULL=37, FUNCTIONS=38, GRAPHVIZ=39, GROUP=40, HAVING=41, HOUR=42, HOURS=43, - IN=44, INNER=45, INTERVAL=46, IS=47, JOIN=48, LAST=49, LEFT=50, LIKE=51, - LIMIT=52, MAPPED=53, MATCH=54, MINUTE=55, MINUTES=56, MONTH=57, MONTHS=58, - NATURAL=59, NOT=60, NULL=61, NULLS=62, ON=63, OPTIMIZED=64, OR=65, ORDER=66, - OUTER=67, PARSED=68, PHYSICAL=69, PLAN=70, RIGHT=71, RLIKE=72, QUERY=73, - SCHEMAS=74, SECOND=75, SECONDS=76, SELECT=77, SHOW=78, SYS=79, TABLE=80, - TABLES=81, TEXT=82, TRUE=83, TO=84, TYPE=85, TYPES=86, USING=87, VERIFY=88, - WHERE=89, WITH=90, YEAR=91, YEARS=92, ESCAPE_ESC=93, FUNCTION_ESC=94, - LIMIT_ESC=95, DATE_ESC=96, TIME_ESC=97, TIMESTAMP_ESC=98, GUID_ESC=99, - ESC_END=100, EQ=101, NULLEQ=102, NEQ=103, LT=104, LTE=105, GT=106, GTE=107, - PLUS=108, MINUS=109, ASTERISK=110, SLASH=111, PERCENT=112, CONCAT=113, - DOT=114, PARAM=115, STRING=116, INTEGER_VALUE=117, DECIMAL_VALUE=118, - IDENTIFIER=119, DIGIT_IDENTIFIER=120, TABLE_IDENTIFIER=121, QUOTED_IDENTIFIER=122, - BACKQUOTED_IDENTIFIER=123, SIMPLE_COMMENT=124, BRACKETED_COMMENT=125, - WS=126, UNRECOGNIZED=127, DELIMITER=128; + CONVERT=18, CURRENT_DATE=19, CURRENT_TIMESTAMP=20, DAY=21, DAYS=22, DEBUG=23, + DESC=24, DESCRIBE=25, DISTINCT=26, ESCAPE=27, EXECUTABLE=28, EXISTS=29, + EXPLAIN=30, EXTRACT=31, FALSE=32, FIRST=33, FORMAT=34, FROM=35, FULL=36, + FUNCTIONS=37, GRAPHVIZ=38, GROUP=39, HAVING=40, HOUR=41, HOURS=42, IN=43, + INNER=44, INTERVAL=45, IS=46, JOIN=47, LAST=48, LEFT=49, LIKE=50, LIMIT=51, + MAPPED=52, MATCH=53, MINUTE=54, MINUTES=55, MONTH=56, MONTHS=57, NATURAL=58, + NOT=59, NULL=60, NULLS=61, ON=62, OPTIMIZED=63, OR=64, ORDER=65, OUTER=66, + PARSED=67, PHYSICAL=68, PLAN=69, RIGHT=70, RLIKE=71, QUERY=72, SCHEMAS=73, + SECOND=74, SECONDS=75, SELECT=76, SHOW=77, SYS=78, TABLE=79, TABLES=80, + TEXT=81, TRUE=82, TO=83, TYPE=84, TYPES=85, USING=86, VERIFY=87, WHERE=88, + WITH=89, YEAR=90, YEARS=91, ESCAPE_ESC=92, FUNCTION_ESC=93, LIMIT_ESC=94, + DATE_ESC=95, TIME_ESC=96, TIMESTAMP_ESC=97, GUID_ESC=98, ESC_END=99, EQ=100, + NULLEQ=101, NEQ=102, LT=103, LTE=104, GT=105, GTE=106, PLUS=107, MINUS=108, + ASTERISK=109, SLASH=110, PERCENT=111, CONCAT=112, DOT=113, PARAM=114, + STRING=115, INTEGER_VALUE=116, DECIMAL_VALUE=117, IDENTIFIER=118, DIGIT_IDENTIFIER=119, + TABLE_IDENTIFIER=120, QUOTED_IDENTIFIER=121, BACKQUOTED_IDENTIFIER=122, + SIMPLE_COMMENT=123, BRACKETED_COMMENT=124, WS=125, UNRECOGNIZED=126, DELIMITER=127; public static final int RULE_singleStatement = 0, RULE_singleExpression = 1, RULE_statement = 2, RULE_query = 3, RULE_queryNoWith = 4, RULE_limitClause = 5, RULE_queryTerm = 6, @@ -47,14 +46,13 @@ class SqlBaseParser extends Parser { RULE_expression = 21, RULE_booleanExpression = 22, RULE_matchQueryOptions = 23, RULE_predicated = 24, RULE_predicate = 25, RULE_likePattern = 26, RULE_pattern = 27, RULE_patternEscape = 28, RULE_valueExpression = 29, RULE_primaryExpression = 30, - RULE_castExpression = 31, RULE_castTemplate = 32, RULE_builtinDateFunction = 33, - RULE_builtinDateTimeFunction = 34, RULE_convertTemplate = 35, RULE_extractExpression = 36, - RULE_extractTemplate = 37, RULE_functionExpression = 38, RULE_functionTemplate = 39, - RULE_functionName = 40, RULE_constant = 41, RULE_comparisonOperator = 42, - RULE_booleanValue = 43, RULE_interval = 44, RULE_intervalField = 45, RULE_dataType = 46, - RULE_qualifiedName = 47, RULE_identifier = 48, RULE_tableIdentifier = 49, - RULE_quoteIdentifier = 50, RULE_unquoteIdentifier = 51, RULE_number = 52, - RULE_string = 53, RULE_nonReserved = 54; + RULE_castExpression = 31, RULE_castTemplate = 32, RULE_builtinDateTimeFunction = 33, + RULE_convertTemplate = 34, RULE_extractExpression = 35, RULE_extractTemplate = 36, + RULE_functionExpression = 37, RULE_functionTemplate = 38, RULE_functionName = 39, + RULE_constant = 40, RULE_comparisonOperator = 41, RULE_booleanValue = 42, + RULE_interval = 43, RULE_intervalField = 44, RULE_dataType = 45, RULE_qualifiedName = 46, + RULE_identifier = 47, RULE_tableIdentifier = 48, RULE_quoteIdentifier = 49, + RULE_unquoteIdentifier = 50, RULE_number = 51, RULE_string = 52, RULE_nonReserved = 53; public static final String[] ruleNames = { "singleStatement", "singleExpression", "statement", "query", "queryNoWith", "limitClause", "queryTerm", "orderBy", "querySpecification", "fromClause", @@ -63,51 +61,51 @@ class SqlBaseParser extends Parser { "relationPrimary", "expression", "booleanExpression", "matchQueryOptions", "predicated", "predicate", "likePattern", "pattern", "patternEscape", "valueExpression", "primaryExpression", "castExpression", "castTemplate", - "builtinDateFunction", "builtinDateTimeFunction", "convertTemplate", "extractExpression", - "extractTemplate", "functionExpression", "functionTemplate", "functionName", - "constant", "comparisonOperator", "booleanValue", "interval", "intervalField", - "dataType", "qualifiedName", "identifier", "tableIdentifier", "quoteIdentifier", - "unquoteIdentifier", "number", "string", "nonReserved" + "builtinDateTimeFunction", "convertTemplate", "extractExpression", "extractTemplate", + "functionExpression", "functionTemplate", "functionName", "constant", + "comparisonOperator", "booleanValue", "interval", "intervalField", "dataType", + "qualifiedName", "identifier", "tableIdentifier", "quoteIdentifier", "unquoteIdentifier", + "number", "string", "nonReserved" }; private static final String[] _LITERAL_NAMES = { null, "'('", "')'", "','", "':'", "'ALL'", "'ANALYZE'", "'ANALYZED'", "'AND'", "'ANY'", "'AS'", "'ASC'", "'BETWEEN'", "'BY'", "'CAST'", "'CATALOG'", - "'CATALOGS'", "'COLUMNS'", "'CONVERT'", "'CURRENT'", "'CURRENT_DATE'", - "'CURRENT_TIMESTAMP'", "'DAY'", "'DAYS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", - "'DISTINCT'", "'ESCAPE'", "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", - "'FALSE'", "'FIRST'", "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", - "'GROUP'", "'HAVING'", "'HOUR'", "'HOURS'", "'IN'", "'INNER'", "'INTERVAL'", - "'IS'", "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", - "'MATCH'", "'MINUTE'", "'MINUTES'", "'MONTH'", "'MONTHS'", "'NATURAL'", - "'NOT'", "'NULL'", "'NULLS'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", - "'OUTER'", "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", "'QUERY'", - "'SCHEMAS'", "'SECOND'", "'SECONDS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", - "'TABLES'", "'TEXT'", "'TRUE'", "'TO'", "'TYPE'", "'TYPES'", "'USING'", - "'VERIFY'", "'WHERE'", "'WITH'", "'YEAR'", "'YEARS'", "'{ESCAPE'", "'{FN'", - "'{LIMIT'", "'{D'", "'{T'", "'{TS'", "'{GUID'", "'}'", "'='", "'<=>'", - null, "'<'", "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", - "'||'", "'.'", "'?'" + "'CATALOGS'", "'COLUMNS'", "'CONVERT'", "'CURRENT_DATE'", "'CURRENT_TIMESTAMP'", + "'DAY'", "'DAYS'", "'DEBUG'", "'DESC'", "'DESCRIBE'", "'DISTINCT'", "'ESCAPE'", + "'EXECUTABLE'", "'EXISTS'", "'EXPLAIN'", "'EXTRACT'", "'FALSE'", "'FIRST'", + "'FORMAT'", "'FROM'", "'FULL'", "'FUNCTIONS'", "'GRAPHVIZ'", "'GROUP'", + "'HAVING'", "'HOUR'", "'HOURS'", "'IN'", "'INNER'", "'INTERVAL'", "'IS'", + "'JOIN'", "'LAST'", "'LEFT'", "'LIKE'", "'LIMIT'", "'MAPPED'", "'MATCH'", + "'MINUTE'", "'MINUTES'", "'MONTH'", "'MONTHS'", "'NATURAL'", "'NOT'", + "'NULL'", "'NULLS'", "'ON'", "'OPTIMIZED'", "'OR'", "'ORDER'", "'OUTER'", + "'PARSED'", "'PHYSICAL'", "'PLAN'", "'RIGHT'", "'RLIKE'", "'QUERY'", "'SCHEMAS'", + "'SECOND'", "'SECONDS'", "'SELECT'", "'SHOW'", "'SYS'", "'TABLE'", "'TABLES'", + "'TEXT'", "'TRUE'", "'TO'", "'TYPE'", "'TYPES'", "'USING'", "'VERIFY'", + "'WHERE'", "'WITH'", "'YEAR'", "'YEARS'", "'{ESCAPE'", "'{FN'", "'{LIMIT'", + "'{D'", "'{T'", "'{TS'", "'{GUID'", "'}'", "'='", "'<=>'", null, "'<'", + "'<='", "'>'", "'>='", "'+'", "'-'", "'*'", "'/'", "'%'", "'||'", "'.'", + "'?'" }; private static final String[] _SYMBOLIC_NAMES = { null, null, null, null, null, "ALL", "ANALYZE", "ANALYZED", "AND", "ANY", "AS", "ASC", "BETWEEN", "BY", "CAST", "CATALOG", "CATALOGS", "COLUMNS", - "CONVERT", "CURRENT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", - "DEBUG", "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", - "EXPLAIN", "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", - "GRAPHVIZ", "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", - "IS", "JOIN", "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", - "MINUTES", "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", - "OPTIMIZED", "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", - "RLIKE", "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", - "TABLE", "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", - "WHERE", "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", - "DATE_ESC", "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", - "NULLEQ", "NEQ", "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", - "SLASH", "PERCENT", "CONCAT", "DOT", "PARAM", "STRING", "INTEGER_VALUE", - "DECIMAL_VALUE", "IDENTIFIER", "DIGIT_IDENTIFIER", "TABLE_IDENTIFIER", - "QUOTED_IDENTIFIER", "BACKQUOTED_IDENTIFIER", "SIMPLE_COMMENT", "BRACKETED_COMMENT", - "WS", "UNRECOGNIZED", "DELIMITER" + "CONVERT", "CURRENT_DATE", "CURRENT_TIMESTAMP", "DAY", "DAYS", "DEBUG", + "DESC", "DESCRIBE", "DISTINCT", "ESCAPE", "EXECUTABLE", "EXISTS", "EXPLAIN", + "EXTRACT", "FALSE", "FIRST", "FORMAT", "FROM", "FULL", "FUNCTIONS", "GRAPHVIZ", + "GROUP", "HAVING", "HOUR", "HOURS", "IN", "INNER", "INTERVAL", "IS", "JOIN", + "LAST", "LEFT", "LIKE", "LIMIT", "MAPPED", "MATCH", "MINUTE", "MINUTES", + "MONTH", "MONTHS", "NATURAL", "NOT", "NULL", "NULLS", "ON", "OPTIMIZED", + "OR", "ORDER", "OUTER", "PARSED", "PHYSICAL", "PLAN", "RIGHT", "RLIKE", + "QUERY", "SCHEMAS", "SECOND", "SECONDS", "SELECT", "SHOW", "SYS", "TABLE", + "TABLES", "TEXT", "TRUE", "TO", "TYPE", "TYPES", "USING", "VERIFY", "WHERE", + "WITH", "YEAR", "YEARS", "ESCAPE_ESC", "FUNCTION_ESC", "LIMIT_ESC", "DATE_ESC", + "TIME_ESC", "TIMESTAMP_ESC", "GUID_ESC", "ESC_END", "EQ", "NULLEQ", "NEQ", + "LT", "LTE", "GT", "GTE", "PLUS", "MINUS", "ASTERISK", "SLASH", "PERCENT", + "CONCAT", "DOT", "PARAM", "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); @@ -188,9 +186,9 @@ public final SingleStatementContext singleStatement() throws RecognitionExceptio try { enterOuterAlt(_localctx, 1); { - setState(110); + setState(108); statement(); - setState(111); + setState(109); match(EOF); } } @@ -235,9 +233,9 @@ public final SingleExpressionContext singleExpression() throws RecognitionExcept try { enterOuterAlt(_localctx, 1); { - setState(113); + setState(111); expression(); - setState(114); + setState(112); match(EOF); } } @@ -600,14 +598,14 @@ public final StatementContext statement() throws RecognitionException { enterRule(_localctx, 4, RULE_statement); int _la; try { - setState(217); + setState(215); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { case 1: _localctx = new StatementDefaultContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(116); + setState(114); query(); } break; @@ -615,27 +613,27 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ExplainContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(117); + setState(115); match(EXPLAIN); - setState(131); + setState(129); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) { case 1: { - setState(118); + setState(116); match(T__0); - setState(127); + setState(125); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 35)) & ~0x3f) == 0 && ((1L << (_la - 35)) & ((1L << (FORMAT - 35)) | (1L << (PLAN - 35)) | (1L << (VERIFY - 35)))) != 0)) { + while (((((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & ((1L << (FORMAT - 34)) | (1L << (PLAN - 34)) | (1L << (VERIFY - 34)))) != 0)) { { - setState(125); + setState(123); switch (_input.LA(1)) { case PLAN: { - setState(119); + setState(117); match(PLAN); - setState(120); + setState(118); ((ExplainContext)_localctx).type = _input.LT(1); _la = _input.LA(1); if ( !(((((_la - 5)) & ~0x3f) == 0 && ((1L << (_la - 5)) & ((1L << (ALL - 5)) | (1L << (ANALYZED - 5)) | (1L << (EXECUTABLE - 5)) | (1L << (MAPPED - 5)) | (1L << (OPTIMIZED - 5)) | (1L << (PARSED - 5)))) != 0)) ) { @@ -647,9 +645,9 @@ public final StatementContext statement() throws RecognitionException { break; case FORMAT: { - setState(121); + setState(119); match(FORMAT); - setState(122); + setState(120); ((ExplainContext)_localctx).format = _input.LT(1); _la = _input.LA(1); if ( !(_la==GRAPHVIZ || _la==TEXT) ) { @@ -661,9 +659,9 @@ public final StatementContext statement() throws RecognitionException { break; case VERIFY: { - setState(123); + setState(121); match(VERIFY); - setState(124); + setState(122); ((ExplainContext)_localctx).verify = booleanValue(); } break; @@ -671,16 +669,16 @@ public final StatementContext statement() throws RecognitionException { throw new NoViableAltException(this); } } - setState(129); + setState(127); _errHandler.sync(this); _la = _input.LA(1); } - setState(130); + setState(128); match(T__1); } break; } - setState(133); + setState(131); statement(); } break; @@ -688,27 +686,27 @@ public final StatementContext statement() throws RecognitionException { _localctx = new DebugContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(134); + setState(132); match(DEBUG); - setState(146); + setState(144); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { case 1: { - setState(135); + setState(133); match(T__0); - setState(142); + setState(140); _errHandler.sync(this); _la = _input.LA(1); while (_la==FORMAT || _la==PLAN) { { - setState(140); + setState(138); switch (_input.LA(1)) { case PLAN: { - setState(136); + setState(134); match(PLAN); - setState(137); + setState(135); ((DebugContext)_localctx).type = _input.LT(1); _la = _input.LA(1); if ( !(_la==ANALYZED || _la==OPTIMIZED) ) { @@ -720,9 +718,9 @@ public final StatementContext statement() throws RecognitionException { break; case FORMAT: { - setState(138); + setState(136); match(FORMAT); - setState(139); + setState(137); ((DebugContext)_localctx).format = _input.LT(1); _la = _input.LA(1); if ( !(_la==GRAPHVIZ || _la==TEXT) ) { @@ -736,16 +734,16 @@ public final StatementContext statement() throws RecognitionException { throw new NoViableAltException(this); } } - setState(144); + setState(142); _errHandler.sync(this); _la = _input.LA(1); } - setState(145); + setState(143); match(T__1); } break; } - setState(148); + setState(146); statement(); } break; @@ -753,15 +751,15 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowTablesContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(149); + setState(147); match(SHOW); - setState(150); + setState(148); match(TABLES); - setState(153); + setState(151); switch (_input.LA(1)) { case LIKE: { - setState(151); + setState(149); ((ShowTablesContext)_localctx).tableLike = likePattern(); } break; @@ -769,7 +767,6 @@ public final StatementContext statement() throws RecognitionException { case ANALYZED: case CATALOGS: case COLUMNS: - case CURRENT: case DAY: case DEBUG: case EXECUTABLE: @@ -808,7 +805,7 @@ public final StatementContext statement() throws RecognitionException { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: { - setState(152); + setState(150); ((ShowTablesContext)_localctx).tableIdent = tableIdentifier(); } break; @@ -823,22 +820,22 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowColumnsContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(155); + setState(153); match(SHOW); - setState(156); + setState(154); match(COLUMNS); - setState(157); + setState(155); _la = _input.LA(1); if ( !(_la==FROM || _la==IN) ) { _errHandler.recoverInline(this); } else { consume(); } - setState(160); + setState(158); switch (_input.LA(1)) { case LIKE: { - setState(158); + setState(156); ((ShowColumnsContext)_localctx).tableLike = likePattern(); } break; @@ -846,7 +843,6 @@ public final StatementContext statement() throws RecognitionException { case ANALYZED: case CATALOGS: case COLUMNS: - case CURRENT: case DAY: case DEBUG: case EXECUTABLE: @@ -885,7 +881,7 @@ public final StatementContext statement() throws RecognitionException { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: { - setState(159); + setState(157); ((ShowColumnsContext)_localctx).tableIdent = tableIdentifier(); } break; @@ -898,18 +894,18 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowColumnsContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(162); + setState(160); _la = _input.LA(1); if ( !(_la==DESC || _la==DESCRIBE) ) { _errHandler.recoverInline(this); } else { consume(); } - setState(165); + setState(163); switch (_input.LA(1)) { case LIKE: { - setState(163); + setState(161); ((ShowColumnsContext)_localctx).tableLike = likePattern(); } break; @@ -917,7 +913,6 @@ public final StatementContext statement() throws RecognitionException { case ANALYZED: case CATALOGS: case COLUMNS: - case CURRENT: case DAY: case DEBUG: case EXECUTABLE: @@ -956,7 +951,7 @@ public final StatementContext statement() throws RecognitionException { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: { - setState(164); + setState(162); ((ShowColumnsContext)_localctx).tableIdent = tableIdentifier(); } break; @@ -969,15 +964,15 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowFunctionsContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(167); + setState(165); match(SHOW); - setState(168); + setState(166); match(FUNCTIONS); - setState(170); + setState(168); _la = _input.LA(1); if (_la==LIKE) { { - setState(169); + setState(167); likePattern(); } } @@ -988,9 +983,9 @@ public final StatementContext statement() throws RecognitionException { _localctx = new ShowSchemasContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(172); + setState(170); match(SHOW); - setState(173); + setState(171); match(SCHEMAS); } break; @@ -998,58 +993,58 @@ public final StatementContext statement() throws RecognitionException { _localctx = new SysTablesContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(174); + setState(172); match(SYS); - setState(175); + setState(173); match(TABLES); - setState(178); + setState(176); _la = _input.LA(1); if (_la==CATALOG) { { - setState(176); + setState(174); match(CATALOG); - setState(177); + setState(175); ((SysTablesContext)_localctx).clusterLike = likePattern(); } } - setState(182); + setState(180); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { case 1: { - setState(180); + setState(178); ((SysTablesContext)_localctx).tableLike = likePattern(); } break; case 2: { - setState(181); + setState(179); ((SysTablesContext)_localctx).tableIdent = tableIdentifier(); } break; } - setState(193); + setState(191); _la = _input.LA(1); if (_la==TYPE) { { - setState(184); + setState(182); match(TYPE); - setState(185); + setState(183); string(); - setState(190); + setState(188); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(186); + setState(184); match(T__2); - setState(187); + setState(185); string(); } } - setState(192); + setState(190); _errHandler.sync(this); _la = _input.LA(1); } @@ -1062,28 +1057,28 @@ public final StatementContext statement() throws RecognitionException { _localctx = new SysColumnsContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(195); + setState(193); match(SYS); - setState(196); + setState(194); match(COLUMNS); - setState(199); + setState(197); _la = _input.LA(1); if (_la==CATALOG) { { - setState(197); + setState(195); match(CATALOG); - setState(198); + setState(196); ((SysColumnsContext)_localctx).cluster = string(); } } - setState(204); + setState(202); switch (_input.LA(1)) { case TABLE: { - setState(201); + setState(199); match(TABLE); - setState(202); + setState(200); ((SysColumnsContext)_localctx).tableLike = likePattern(); } break; @@ -1091,7 +1086,6 @@ public final StatementContext statement() throws RecognitionException { case ANALYZED: case CATALOGS: case COLUMNS: - case CURRENT: case DAY: case DEBUG: case EXECUTABLE: @@ -1130,7 +1124,7 @@ public final StatementContext statement() throws RecognitionException { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: { - setState(203); + setState(201); ((SysColumnsContext)_localctx).tableIdent = tableIdentifier(); } break; @@ -1140,11 +1134,11 @@ public final StatementContext statement() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(207); + setState(205); _la = _input.LA(1); if (_la==LIKE) { { - setState(206); + setState(204); ((SysColumnsContext)_localctx).columnPattern = likePattern(); } } @@ -1155,19 +1149,19 @@ public final StatementContext statement() throws RecognitionException { _localctx = new SysTypesContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(209); + setState(207); match(SYS); - setState(210); + setState(208); match(TYPES); - setState(215); + setState(213); _la = _input.LA(1); - if (((((_la - 108)) & ~0x3f) == 0 && ((1L << (_la - 108)) & ((1L << (PLUS - 108)) | (1L << (MINUS - 108)) | (1L << (INTEGER_VALUE - 108)) | (1L << (DECIMAL_VALUE - 108)))) != 0)) { + if (((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PLUS - 107)) | (1L << (MINUS - 107)) | (1L << (INTEGER_VALUE - 107)) | (1L << (DECIMAL_VALUE - 107)))) != 0)) { { - setState(212); + setState(210); _la = _input.LA(1); if (_la==PLUS || _la==MINUS) { { - setState(211); + setState(209); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { _errHandler.recoverInline(this); @@ -1177,7 +1171,7 @@ public final StatementContext statement() throws RecognitionException { } } - setState(214); + setState(212); ((SysTypesContext)_localctx).type = number(); } } @@ -1234,34 +1228,34 @@ public final QueryContext query() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(228); + setState(226); _la = _input.LA(1); if (_la==WITH) { { - setState(219); + setState(217); match(WITH); - setState(220); + setState(218); namedQuery(); - setState(225); + setState(223); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(221); + setState(219); match(T__2); - setState(222); + setState(220); namedQuery(); } } - setState(227); + setState(225); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(230); + setState(228); queryNoWith(); } } @@ -1317,42 +1311,42 @@ public final QueryNoWithContext queryNoWith() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(232); + setState(230); queryTerm(); - setState(243); + setState(241); _la = _input.LA(1); if (_la==ORDER) { { - setState(233); + setState(231); match(ORDER); - setState(234); + setState(232); match(BY); - setState(235); + setState(233); orderBy(); - setState(240); + setState(238); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(236); + setState(234); match(T__2); - setState(237); + setState(235); orderBy(); } } - setState(242); + setState(240); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(246); + setState(244); _la = _input.LA(1); if (_la==LIMIT || _la==LIMIT_ESC) { { - setState(245); + setState(243); limitClause(); } } @@ -1401,14 +1395,14 @@ public final LimitClauseContext limitClause() throws RecognitionException { enterRule(_localctx, 10, RULE_limitClause); int _la; try { - setState(253); + setState(251); switch (_input.LA(1)) { case LIMIT: enterOuterAlt(_localctx, 1); { - setState(248); + setState(246); match(LIMIT); - setState(249); + setState(247); ((LimitClauseContext)_localctx).limit = _input.LT(1); _la = _input.LA(1); if ( !(_la==ALL || _la==INTEGER_VALUE) ) { @@ -1421,9 +1415,9 @@ public final LimitClauseContext limitClause() throws RecognitionException { case LIMIT_ESC: enterOuterAlt(_localctx, 2); { - setState(250); + setState(248); match(LIMIT_ESC); - setState(251); + setState(249); ((LimitClauseContext)_localctx).limit = _input.LT(1); _la = _input.LA(1); if ( !(_la==ALL || _la==INTEGER_VALUE) ) { @@ -1431,7 +1425,7 @@ public final LimitClauseContext limitClause() throws RecognitionException { } else { consume(); } - setState(252); + setState(250); match(ESC_END); } break; @@ -1504,13 +1498,13 @@ public final QueryTermContext queryTerm() throws RecognitionException { QueryTermContext _localctx = new QueryTermContext(_ctx, getState()); enterRule(_localctx, 12, RULE_queryTerm); try { - setState(260); + setState(258); switch (_input.LA(1)) { case SELECT: _localctx = new QueryPrimaryDefaultContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(255); + setState(253); querySpecification(); } break; @@ -1518,11 +1512,11 @@ public final QueryTermContext queryTerm() throws RecognitionException { _localctx = new SubqueryContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(256); + setState(254); match(T__0); - setState(257); + setState(255); queryNoWith(); - setState(258); + setState(256); match(T__1); } break; @@ -1578,13 +1572,13 @@ public final OrderByContext orderBy() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(262); + setState(260); expression(); - setState(264); + setState(262); _la = _input.LA(1); if (_la==ASC || _la==DESC) { { - setState(263); + setState(261); ((OrderByContext)_localctx).ordering = _input.LT(1); _la = _input.LA(1); if ( !(_la==ASC || _la==DESC) ) { @@ -1595,13 +1589,13 @@ public final OrderByContext orderBy() throws RecognitionException { } } - setState(268); + setState(266); _la = _input.LA(1); if (_la==NULLS) { { - setState(266); + setState(264); match(NULLS); - setState(267); + setState(265); ((OrderByContext)_localctx).nullOrdering = _input.LT(1); _la = _input.LA(1); if ( !(_la==FIRST || _la==LAST) ) { @@ -1680,75 +1674,75 @@ public final QuerySpecificationContext querySpecification() throws RecognitionEx try { enterOuterAlt(_localctx, 1); { - setState(270); + setState(268); match(SELECT); - setState(272); + setState(270); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(271); + setState(269); setQuantifier(); } } - setState(274); + setState(272); selectItem(); - setState(279); + setState(277); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(275); + setState(273); match(T__2); - setState(276); + setState(274); selectItem(); } } - setState(281); + setState(279); _errHandler.sync(this); _la = _input.LA(1); } - setState(283); + setState(281); _la = _input.LA(1); if (_la==FROM) { { - setState(282); + setState(280); fromClause(); } } - setState(287); + setState(285); _la = _input.LA(1); if (_la==WHERE) { { - setState(285); + setState(283); match(WHERE); - setState(286); + setState(284); ((QuerySpecificationContext)_localctx).where = booleanExpression(0); } } - setState(292); + setState(290); _la = _input.LA(1); if (_la==GROUP) { { - setState(289); + setState(287); match(GROUP); - setState(290); + setState(288); match(BY); - setState(291); + setState(289); groupBy(); } } - setState(296); + setState(294); _la = _input.LA(1); if (_la==HAVING) { { - setState(294); + setState(292); match(HAVING); - setState(295); + setState(293); ((QuerySpecificationContext)_localctx).having = booleanExpression(0); } } @@ -1800,23 +1794,23 @@ public final FromClauseContext fromClause() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(298); + setState(296); match(FROM); - setState(299); + setState(297); relation(); - setState(304); + setState(302); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(300); + setState(298); match(T__2); - setState(301); + setState(299); relation(); } } - setState(306); + setState(304); _errHandler.sync(this); _la = _input.LA(1); } @@ -1869,30 +1863,30 @@ public final GroupByContext groupBy() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(308); + setState(306); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(307); + setState(305); setQuantifier(); } } - setState(310); + setState(308); groupingElement(); - setState(315); + setState(313); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(311); + setState(309); match(T__2); - setState(312); + setState(310); groupingElement(); } } - setState(317); + setState(315); _errHandler.sync(this); _la = _input.LA(1); } @@ -1947,7 +1941,7 @@ public final GroupingElementContext groupingElement() throws RecognitionExceptio _localctx = new SingleGroupingSetContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(318); + setState(316); groupingExpressions(); } } @@ -1993,47 +1987,47 @@ public final GroupingExpressionsContext groupingExpressions() throws Recognition enterRule(_localctx, 24, RULE_groupingExpressions); int _la; try { - setState(333); + setState(331); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(320); + setState(318); match(T__0); - setState(329); + setState(327); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_DATE) | (1L << CURRENT_TIMESTAMP) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LEFT) | (1L << LIMIT) | (1L << MAPPED) | (1L << MATCH) | (1L << MINUTE) | (1L << MONTH) | (1L << NOT) | (1L << NULL))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RIGHT - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TRUE - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)) | (1L << (FUNCTION_ESC - 64)) | (1L << (DATE_ESC - 64)) | (1L << (TIME_ESC - 64)) | (1L << (TIMESTAMP_ESC - 64)) | (1L << (GUID_ESC - 64)) | (1L << (PLUS - 64)) | (1L << (MINUS - 64)) | (1L << (ASTERISK - 64)) | (1L << (PARAM - 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)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CONVERT) | (1L << CURRENT_DATE) | (1L << CURRENT_TIMESTAMP) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LEFT) | (1L << LIMIT) | (1L << MAPPED) | (1L << MATCH) | (1L << MINUTE) | (1L << MONTH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RIGHT - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TRUE - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)) | (1L << (FUNCTION_ESC - 67)) | (1L << (DATE_ESC - 67)) | (1L << (TIME_ESC - 67)) | (1L << (TIMESTAMP_ESC - 67)) | (1L << (GUID_ESC - 67)) | (1L << (PLUS - 67)) | (1L << (MINUS - 67)) | (1L << (ASTERISK - 67)) | (1L << (PARAM - 67)) | (1L << (STRING - 67)) | (1L << (INTEGER_VALUE - 67)) | (1L << (DECIMAL_VALUE - 67)) | (1L << (IDENTIFIER - 67)) | (1L << (DIGIT_IDENTIFIER - 67)) | (1L << (QUOTED_IDENTIFIER - 67)) | (1L << (BACKQUOTED_IDENTIFIER - 67)))) != 0)) { { - setState(321); + setState(319); expression(); - setState(326); + setState(324); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(322); + setState(320); match(T__2); - setState(323); + setState(321); expression(); } } - setState(328); + setState(326); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(331); + setState(329); match(T__1); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(332); + setState(330); expression(); } break; @@ -2084,15 +2078,15 @@ public final NamedQueryContext namedQuery() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(335); + setState(333); ((NamedQueryContext)_localctx).name = identifier(); - setState(336); + setState(334); match(AS); - setState(337); + setState(335); match(T__0); - setState(338); + setState(336); queryNoWith(); - setState(339); + setState(337); match(T__1); } } @@ -2136,7 +2130,7 @@ public final SetQuantifierContext setQuantifier() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(341); + setState(339); _la = _input.LA(1); if ( !(_la==ALL || _la==DISTINCT) ) { _errHandler.recoverInline(this); @@ -2199,23 +2193,23 @@ public final SelectItemContext selectItem() throws RecognitionException { _localctx = new SelectExpressionContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(343); + setState(341); expression(); - setState(348); + setState(346); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { case 1: { - setState(345); + setState(343); _la = _input.LA(1); if (_la==AS) { { - setState(344); + setState(342); match(AS); } } - setState(347); + setState(345); identifier(); } break; @@ -2269,19 +2263,19 @@ public final RelationContext relation() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(350); + setState(348); relationPrimary(); - setState(354); + setState(352); _errHandler.sync(this); _la = _input.LA(1); - while (((((_la - 37)) & ~0x3f) == 0 && ((1L << (_la - 37)) & ((1L << (FULL - 37)) | (1L << (INNER - 37)) | (1L << (JOIN - 37)) | (1L << (LEFT - 37)) | (1L << (NATURAL - 37)) | (1L << (RIGHT - 37)))) != 0)) { + while (((((_la - 36)) & ~0x3f) == 0 && ((1L << (_la - 36)) & ((1L << (FULL - 36)) | (1L << (INNER - 36)) | (1L << (JOIN - 36)) | (1L << (LEFT - 36)) | (1L << (NATURAL - 36)) | (1L << (RIGHT - 36)))) != 0)) { { { - setState(351); + setState(349); joinRelation(); } } - setState(356); + setState(354); _errHandler.sync(this); _la = _input.LA(1); } @@ -2335,7 +2329,7 @@ public final JoinRelationContext joinRelation() throws RecognitionException { enterRule(_localctx, 34, RULE_joinRelation); int _la; try { - setState(368); + setState(366); switch (_input.LA(1)) { case FULL: case INNER: @@ -2345,18 +2339,18 @@ public final JoinRelationContext joinRelation() throws RecognitionException { enterOuterAlt(_localctx, 1); { { - setState(357); + setState(355); joinType(); } - setState(358); + setState(356); match(JOIN); - setState(359); + setState(357); ((JoinRelationContext)_localctx).right = relationPrimary(); - setState(361); + setState(359); _la = _input.LA(1); if (_la==ON || _la==USING) { { - setState(360); + setState(358); joinCriteria(); } } @@ -2366,13 +2360,13 @@ public final JoinRelationContext joinRelation() throws RecognitionException { case NATURAL: enterOuterAlt(_localctx, 2); { - setState(363); + setState(361); match(NATURAL); - setState(364); + setState(362); joinType(); - setState(365); + setState(363); match(JOIN); - setState(366); + setState(364); ((JoinRelationContext)_localctx).right = relationPrimary(); } break; @@ -2421,17 +2415,17 @@ public final JoinTypeContext joinType() throws RecognitionException { enterRule(_localctx, 36, RULE_joinType); int _la; try { - setState(385); + setState(383); switch (_input.LA(1)) { case INNER: case JOIN: enterOuterAlt(_localctx, 1); { - setState(371); + setState(369); _la = _input.LA(1); if (_la==INNER) { { - setState(370); + setState(368); match(INNER); } } @@ -2441,13 +2435,13 @@ public final JoinTypeContext joinType() throws RecognitionException { case LEFT: enterOuterAlt(_localctx, 2); { - setState(373); + setState(371); match(LEFT); - setState(375); + setState(373); _la = _input.LA(1); if (_la==OUTER) { { - setState(374); + setState(372); match(OUTER); } } @@ -2457,13 +2451,13 @@ public final JoinTypeContext joinType() throws RecognitionException { case RIGHT: enterOuterAlt(_localctx, 3); { - setState(377); + setState(375); match(RIGHT); - setState(379); + setState(377); _la = _input.LA(1); if (_la==OUTER) { { - setState(378); + setState(376); match(OUTER); } } @@ -2473,13 +2467,13 @@ public final JoinTypeContext joinType() throws RecognitionException { case FULL: enterOuterAlt(_localctx, 4); { - setState(381); + setState(379); match(FULL); - setState(383); + setState(381); _la = _input.LA(1); if (_la==OUTER) { { - setState(382); + setState(380); match(OUTER); } } @@ -2537,43 +2531,43 @@ public final JoinCriteriaContext joinCriteria() throws RecognitionException { enterRule(_localctx, 38, RULE_joinCriteria); int _la; try { - setState(401); + setState(399); switch (_input.LA(1)) { case ON: enterOuterAlt(_localctx, 1); { - setState(387); + setState(385); match(ON); - setState(388); + setState(386); booleanExpression(0); } break; case USING: enterOuterAlt(_localctx, 2); { - setState(389); + setState(387); match(USING); - setState(390); + setState(388); match(T__0); - setState(391); + setState(389); identifier(); - setState(396); + setState(394); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(392); + setState(390); match(T__2); - setState(393); + setState(391); identifier(); } } - setState(398); + setState(396); _errHandler.sync(this); _la = _input.LA(1); } - setState(399); + setState(397); match(T__1); } break; @@ -2678,30 +2672,30 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio enterRule(_localctx, 40, RULE_relationPrimary); int _la; try { - setState(428); + setState(426); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,59,_ctx) ) { case 1: _localctx = new TableNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(403); + setState(401); tableIdentifier(); - setState(408); + setState(406); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { case 1: { - setState(405); + setState(403); _la = _input.LA(1); if (_la==AS) { { - setState(404); + setState(402); match(AS); } } - setState(407); + setState(405); qualifiedName(); } break; @@ -2712,27 +2706,27 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio _localctx = new AliasedQueryContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(410); + setState(408); match(T__0); - setState(411); + setState(409); queryNoWith(); - setState(412); + setState(410); match(T__1); - setState(417); + setState(415); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { case 1: { - setState(414); + setState(412); _la = _input.LA(1); if (_la==AS) { { - setState(413); + setState(411); match(AS); } } - setState(416); + setState(414); qualifiedName(); } break; @@ -2743,27 +2737,27 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio _localctx = new AliasedRelationContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(419); + setState(417); match(T__0); - setState(420); + setState(418); relation(); - setState(421); + setState(419); match(T__1); - setState(426); + setState(424); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) { case 1: { - setState(423); + setState(421); _la = _input.LA(1); if (_la==AS) { { - setState(422); + setState(420); match(AS); } } - setState(425); + setState(423); qualifiedName(); } break; @@ -2812,7 +2806,7 @@ public final ExpressionContext expression() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(430); + setState(428); booleanExpression(0); } } @@ -3020,7 +3014,7 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc int _alt; enterOuterAlt(_localctx, 1); { - setState(463); + setState(461); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) { case 1: @@ -3029,9 +3023,9 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _ctx = _localctx; _prevctx = _localctx; - setState(433); + setState(431); match(NOT); - setState(434); + setState(432); booleanExpression(8); } break; @@ -3040,13 +3034,13 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new ExistsContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(435); + setState(433); match(EXISTS); - setState(436); + setState(434); match(T__0); - setState(437); + setState(435); query(); - setState(438); + setState(436); match(T__1); } break; @@ -3055,15 +3049,15 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new StringQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(440); + setState(438); match(QUERY); - setState(441); + setState(439); match(T__0); - setState(442); + setState(440); ((StringQueryContext)_localctx).queryString = string(); - setState(443); + setState(441); matchQueryOptions(); - setState(444); + setState(442); match(T__1); } break; @@ -3072,19 +3066,19 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new MatchQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(446); + setState(444); match(MATCH); - setState(447); + setState(445); match(T__0); - setState(448); + setState(446); ((MatchQueryContext)_localctx).singleField = qualifiedName(); - setState(449); + setState(447); match(T__2); - setState(450); + setState(448); ((MatchQueryContext)_localctx).queryString = string(); - setState(451); + setState(449); matchQueryOptions(); - setState(452); + setState(450); match(T__1); } break; @@ -3093,19 +3087,19 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new MultiMatchQueryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(454); + setState(452); match(MATCH); - setState(455); + setState(453); match(T__0); - setState(456); + setState(454); ((MultiMatchQueryContext)_localctx).multiFields = string(); - setState(457); + setState(455); match(T__2); - setState(458); + setState(456); ((MultiMatchQueryContext)_localctx).queryString = string(); - setState(459); + setState(457); matchQueryOptions(); - setState(460); + setState(458); match(T__1); } break; @@ -3114,13 +3108,13 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new BooleanDefaultContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(462); + setState(460); predicated(); } break; } _ctx.stop = _input.LT(-1); - setState(473); + setState(471); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,62,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3128,7 +3122,7 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(471); + setState(469); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) { case 1: @@ -3136,11 +3130,11 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); ((LogicalBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression); - setState(465); + setState(463); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(466); + setState(464); ((LogicalBinaryContext)_localctx).operator = match(AND); - setState(467); + setState(465); ((LogicalBinaryContext)_localctx).right = booleanExpression(3); } break; @@ -3149,18 +3143,18 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc _localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState)); ((LogicalBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression); - setState(468); + setState(466); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(469); + setState(467); ((LogicalBinaryContext)_localctx).operator = match(OR); - setState(470); + setState(468); ((LogicalBinaryContext)_localctx).right = booleanExpression(2); } break; } } } - setState(475); + setState(473); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,62,_ctx); } @@ -3210,19 +3204,19 @@ public final MatchQueryOptionsContext matchQueryOptions() throws RecognitionExce try { enterOuterAlt(_localctx, 1); { - setState(480); + setState(478); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(476); + setState(474); match(T__2); - setState(477); + setState(475); string(); } } - setState(482); + setState(480); _errHandler.sync(this); _la = _input.LA(1); } @@ -3271,14 +3265,14 @@ public final PredicatedContext predicated() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(483); + setState(481); valueExpression(0); - setState(485); + setState(483); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,64,_ctx) ) { case 1: { - setState(484); + setState(482); predicate(); } break; @@ -3348,142 +3342,142 @@ public final PredicateContext predicate() throws RecognitionException { enterRule(_localctx, 50, RULE_predicate); int _la; try { - setState(533); + setState(531); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(488); + setState(486); _la = _input.LA(1); if (_la==NOT) { { - setState(487); + setState(485); match(NOT); } } - setState(490); + setState(488); ((PredicateContext)_localctx).kind = match(BETWEEN); - setState(491); + setState(489); ((PredicateContext)_localctx).lower = valueExpression(0); - setState(492); + setState(490); match(AND); - setState(493); + setState(491); ((PredicateContext)_localctx).upper = valueExpression(0); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(496); + setState(494); _la = _input.LA(1); if (_la==NOT) { { - setState(495); + setState(493); match(NOT); } } - setState(498); + setState(496); ((PredicateContext)_localctx).kind = match(IN); - setState(499); + setState(497); match(T__0); - setState(500); + setState(498); valueExpression(0); - setState(505); + setState(503); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(501); + setState(499); match(T__2); - setState(502); + setState(500); valueExpression(0); } } - setState(507); + setState(505); _errHandler.sync(this); _la = _input.LA(1); } - setState(508); + setState(506); match(T__1); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(511); + setState(509); _la = _input.LA(1); if (_la==NOT) { { - setState(510); + setState(508); match(NOT); } } - setState(513); + setState(511); ((PredicateContext)_localctx).kind = match(IN); - setState(514); + setState(512); match(T__0); - setState(515); + setState(513); query(); - setState(516); + setState(514); match(T__1); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(519); + setState(517); _la = _input.LA(1); if (_la==NOT) { { - setState(518); + setState(516); match(NOT); } } - setState(521); + setState(519); ((PredicateContext)_localctx).kind = match(LIKE); - setState(522); + setState(520); pattern(); } break; case 5: enterOuterAlt(_localctx, 5); { - setState(524); + setState(522); _la = _input.LA(1); if (_la==NOT) { { - setState(523); + setState(521); match(NOT); } } - setState(526); + setState(524); ((PredicateContext)_localctx).kind = match(RLIKE); - setState(527); + setState(525); ((PredicateContext)_localctx).regex = string(); } break; case 6: enterOuterAlt(_localctx, 6); { - setState(528); + setState(526); match(IS); - setState(530); + setState(528); _la = _input.LA(1); if (_la==NOT) { { - setState(529); + setState(527); match(NOT); } } - setState(532); + setState(530); ((PredicateContext)_localctx).kind = match(NULL); } break; @@ -3530,9 +3524,9 @@ public final LikePatternContext likePattern() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(535); + setState(533); match(LIKE); - setState(536); + setState(534); pattern(); } } @@ -3580,14 +3574,14 @@ public final PatternContext pattern() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(538); + setState(536); ((PatternContext)_localctx).value = string(); - setState(540); + setState(538); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) { case 1: { - setState(539); + setState(537); patternEscape(); } break; @@ -3635,25 +3629,25 @@ public final PatternEscapeContext patternEscape() throws RecognitionException { PatternEscapeContext _localctx = new PatternEscapeContext(_ctx, getState()); enterRule(_localctx, 56, RULE_patternEscape); try { - setState(548); + setState(546); switch (_input.LA(1)) { case ESCAPE: enterOuterAlt(_localctx, 1); { - setState(542); + setState(540); match(ESCAPE); - setState(543); + setState(541); ((PatternEscapeContext)_localctx).escape = string(); } break; case ESCAPE_ESC: enterOuterAlt(_localctx, 2); { - setState(544); + setState(542); match(ESCAPE_ESC); - setState(545); + setState(543); ((PatternEscapeContext)_localctx).escape = string(); - setState(546); + setState(544); match(ESC_END); } break; @@ -3798,7 +3792,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti int _alt; enterOuterAlt(_localctx, 1); { - setState(554); + setState(552); switch (_input.LA(1)) { case T__0: case ANALYZE: @@ -3807,7 +3801,6 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti case CATALOGS: case COLUMNS: case CONVERT: - case CURRENT: case CURRENT_DATE: case CURRENT_TIMESTAMP: case DAY: @@ -3867,7 +3860,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _ctx = _localctx; _prevctx = _localctx; - setState(551); + setState(549); primaryExpression(); } break; @@ -3877,7 +3870,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _localctx = new ArithmeticUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(552); + setState(550); ((ArithmeticUnaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { @@ -3885,7 +3878,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti } else { consume(); } - setState(553); + setState(551); valueExpression(4); } break; @@ -3893,7 +3886,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(568); + setState(566); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,77,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { @@ -3901,7 +3894,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(566); + setState(564); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,76,_ctx) ) { case 1: @@ -3909,17 +3902,17 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); ((ArithmeticBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(556); + setState(554); if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(557); + setState(555); ((ArithmeticBinaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); - if ( !(((((_la - 110)) & ~0x3f) == 0 && ((1L << (_la - 110)) & ((1L << (ASTERISK - 110)) | (1L << (SLASH - 110)) | (1L << (PERCENT - 110)))) != 0)) ) { + if ( !(((((_la - 109)) & ~0x3f) == 0 && ((1L << (_la - 109)) & ((1L << (ASTERISK - 109)) | (1L << (SLASH - 109)) | (1L << (PERCENT - 109)))) != 0)) ) { ((ArithmeticBinaryContext)_localctx).operator = (Token)_errHandler.recoverInline(this); } else { consume(); } - setState(558); + setState(556); ((ArithmeticBinaryContext)_localctx).right = valueExpression(4); } break; @@ -3928,9 +3921,9 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState)); ((ArithmeticBinaryContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(559); + setState(557); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(560); + setState(558); ((ArithmeticBinaryContext)_localctx).operator = _input.LT(1); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { @@ -3938,7 +3931,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti } else { consume(); } - setState(561); + setState(559); ((ArithmeticBinaryContext)_localctx).right = valueExpression(3); } break; @@ -3947,18 +3940,18 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti _localctx = new ComparisonContext(new ValueExpressionContext(_parentctx, _parentState)); ((ComparisonContext)_localctx).left = _prevctx; pushNewRecursionContext(_localctx, _startState, RULE_valueExpression); - setState(562); + setState(560); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(563); + setState(561); comparisonOperator(); - setState(564); + setState(562); ((ComparisonContext)_localctx).right = valueExpression(2); } break; } } } - setState(570); + setState(568); _errHandler.sync(this); _alt = getInterpreter().adaptivePredict(_input,77,_ctx); } @@ -4024,25 +4017,6 @@ public T accept(ParseTreeVisitor visitor) { else return visitor.visitChildren(this); } } - public static class CurrentDateFunctionContext extends PrimaryExpressionContext { - public BuiltinDateFunctionContext builtinDateFunction() { - return getRuleContext(BuiltinDateFunctionContext.class,0); - } - public CurrentDateFunctionContext(PrimaryExpressionContext ctx) { copyFrom(ctx); } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).enterCurrentDateFunction(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).exitCurrentDateFunction(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof SqlBaseVisitor ) return ((SqlBaseVisitor)visitor).visitCurrentDateFunction(this); - else return visitor.visitChildren(this); - } - } public static class ConstantDefaultContext extends PrimaryExpressionContext { public ConstantContext constant() { return getRuleContext(ConstantContext.class,0); @@ -4184,14 +4158,14 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce enterRule(_localctx, 60, RULE_primaryExpression); int _la; try { - setState(592); + setState(589); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,79,_ctx) ) { case 1: _localctx = new CastContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(571); + setState(569); castExpression(); } break; @@ -4199,90 +4173,82 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce _localctx = new ExtractContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(572); + setState(570); extractExpression(); } break; case 3: - _localctx = new CurrentDateFunctionContext(_localctx); - enterOuterAlt(_localctx, 3); - { - setState(573); - builtinDateFunction(); - } - break; - case 4: _localctx = new CurrentDateTimeFunctionContext(_localctx); - enterOuterAlt(_localctx, 4); + enterOuterAlt(_localctx, 3); { - setState(574); + setState(571); builtinDateTimeFunction(); } break; - case 5: + case 4: _localctx = new ConstantDefaultContext(_localctx); - enterOuterAlt(_localctx, 5); + enterOuterAlt(_localctx, 4); { - setState(575); + setState(572); constant(); } break; - case 6: + case 5: _localctx = new StarContext(_localctx); - enterOuterAlt(_localctx, 6); + enterOuterAlt(_localctx, 5); { - setState(579); + setState(576); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)) | (1L << (IDENTIFIER - 67)) | (1L << (DIGIT_IDENTIFIER - 67)) | (1L << (QUOTED_IDENTIFIER - 67)) | (1L << (BACKQUOTED_IDENTIFIER - 67)))) != 0)) { { - setState(576); + setState(573); qualifiedName(); - setState(577); + setState(574); match(DOT); } } - setState(581); + setState(578); match(ASTERISK); } break; - case 7: + case 6: _localctx = new FunctionContext(_localctx); - enterOuterAlt(_localctx, 7); + enterOuterAlt(_localctx, 6); { - setState(582); + setState(579); functionExpression(); } break; - case 8: + case 7: _localctx = new SubqueryExpressionContext(_localctx); - enterOuterAlt(_localctx, 8); + enterOuterAlt(_localctx, 7); { - setState(583); + setState(580); match(T__0); - setState(584); + setState(581); query(); - setState(585); + setState(582); match(T__1); } break; - case 9: + case 8: _localctx = new DereferenceContext(_localctx); - enterOuterAlt(_localctx, 9); + enterOuterAlt(_localctx, 8); { - setState(587); + setState(584); qualifiedName(); } break; - case 10: + case 9: _localctx = new ParenthesizedExpressionContext(_localctx); - enterOuterAlt(_localctx, 10); + enterOuterAlt(_localctx, 9); { - setState(588); + setState(585); match(T__0); - setState(589); + setState(586); expression(); - setState(590); + setState(587); match(T__1); } break; @@ -4331,42 +4297,42 @@ public final CastExpressionContext castExpression() throws RecognitionException CastExpressionContext _localctx = new CastExpressionContext(_ctx, getState()); enterRule(_localctx, 62, RULE_castExpression); try { - setState(604); + setState(601); _errHandler.sync(this); switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(594); + setState(591); castTemplate(); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(595); + setState(592); match(FUNCTION_ESC); - setState(596); + setState(593); castTemplate(); - setState(597); + setState(594); match(ESC_END); } break; case 3: enterOuterAlt(_localctx, 3); { - setState(599); + setState(596); convertTemplate(); } break; case 4: enterOuterAlt(_localctx, 4); { - setState(600); + setState(597); match(FUNCTION_ESC); - setState(601); + setState(598); convertTemplate(); - setState(602); + setState(599); match(ESC_END); } break; @@ -4417,17 +4383,17 @@ public final CastTemplateContext castTemplate() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(606); + setState(603); match(CAST); - setState(607); + setState(604); match(T__0); - setState(608); + setState(605); expression(); - setState(609); + setState(606); match(AS); - setState(610); + setState(607); dataType(); - setState(611); + setState(608); match(T__1); } } @@ -4442,64 +4408,10 @@ public final CastTemplateContext castTemplate() throws RecognitionException { return _localctx; } - public static class BuiltinDateFunctionContext extends ParserRuleContext { - public Token name; - public TerminalNode CURRENT_DATE() { return getToken(SqlBaseParser.CURRENT_DATE, 0); } - public BuiltinDateFunctionContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_builtinDateFunction; } - @Override - public void enterRule(ParseTreeListener listener) { - if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).enterBuiltinDateFunction(this); - } - @Override - public void exitRule(ParseTreeListener listener) { - if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).exitBuiltinDateFunction(this); - } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof SqlBaseVisitor ) return ((SqlBaseVisitor)visitor).visitBuiltinDateFunction(this); - else return visitor.visitChildren(this); - } - } - - public final BuiltinDateFunctionContext builtinDateFunction() throws RecognitionException { - BuiltinDateFunctionContext _localctx = new BuiltinDateFunctionContext(_ctx, getState()); - enterRule(_localctx, 66, RULE_builtinDateFunction); - try { - enterOuterAlt(_localctx, 1); - { - setState(613); - ((BuiltinDateFunctionContext)_localctx).name = match(CURRENT_DATE); - setState(616); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) { - case 1: - { - setState(614); - match(T__0); - setState(615); - match(T__1); - } - break; - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - public static class BuiltinDateTimeFunctionContext extends ParserRuleContext { public Token name; public Token precision; + public TerminalNode CURRENT_DATE() { return getToken(SqlBaseParser.CURRENT_DATE, 0); } public TerminalNode CURRENT_TIMESTAMP() { return getToken(SqlBaseParser.CURRENT_TIMESTAMP, 0); } public TerminalNode INTEGER_VALUE() { return getToken(SqlBaseParser.INTEGER_VALUE, 0); } public BuiltinDateTimeFunctionContext(ParserRuleContext parent, int invokingState) { @@ -4523,34 +4435,60 @@ public T accept(ParseTreeVisitor visitor) { public final BuiltinDateTimeFunctionContext builtinDateTimeFunction() throws RecognitionException { BuiltinDateTimeFunctionContext _localctx = new BuiltinDateTimeFunctionContext(_ctx, getState()); - enterRule(_localctx, 68, RULE_builtinDateTimeFunction); + enterRule(_localctx, 66, RULE_builtinDateTimeFunction); int _la; try { - enterOuterAlt(_localctx, 1); - { - setState(618); - ((BuiltinDateTimeFunctionContext)_localctx).name = match(CURRENT_TIMESTAMP); - setState(624); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) { - case 1: + setState(623); + switch (_input.LA(1)) { + case CURRENT_DATE: + enterOuterAlt(_localctx, 1); { - setState(619); - match(T__0); + setState(610); + ((BuiltinDateTimeFunctionContext)_localctx).name = match(CURRENT_DATE); + setState(613); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) { + case 1: + { + setState(611); + match(T__0); + setState(612); + match(T__1); + } + break; + } + } + break; + case CURRENT_TIMESTAMP: + enterOuterAlt(_localctx, 2); + { + setState(615); + ((BuiltinDateTimeFunctionContext)_localctx).name = match(CURRENT_TIMESTAMP); setState(621); - _la = _input.LA(1); - if (_la==INTEGER_VALUE) { + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,83,_ctx) ) { + case 1: { + setState(616); + match(T__0); + setState(618); + _la = _input.LA(1); + if (_la==INTEGER_VALUE) { + { + setState(617); + ((BuiltinDateTimeFunctionContext)_localctx).precision = match(INTEGER_VALUE); + } + } + setState(620); - ((BuiltinDateTimeFunctionContext)_localctx).precision = match(INTEGER_VALUE); + match(T__1); } + break; } - - setState(623); - match(T__1); } break; - } + default: + throw new NoViableAltException(this); } } catch (RecognitionException re) { @@ -4593,21 +4531,21 @@ public T accept(ParseTreeVisitor visitor) { public final ConvertTemplateContext convertTemplate() throws RecognitionException { ConvertTemplateContext _localctx = new ConvertTemplateContext(_ctx, getState()); - enterRule(_localctx, 70, RULE_convertTemplate); + enterRule(_localctx, 68, RULE_convertTemplate); try { enterOuterAlt(_localctx, 1); { - setState(626); + setState(625); match(CONVERT); - setState(627); + setState(626); match(T__0); - setState(628); + setState(627); expression(); - setState(629); + setState(628); match(T__2); - setState(630); + setState(629); dataType(); - setState(631); + setState(630); match(T__1); } } @@ -4649,25 +4587,25 @@ public T accept(ParseTreeVisitor visitor) { public final ExtractExpressionContext extractExpression() throws RecognitionException { ExtractExpressionContext _localctx = new ExtractExpressionContext(_ctx, getState()); - enterRule(_localctx, 72, RULE_extractExpression); + enterRule(_localctx, 70, RULE_extractExpression); try { - setState(638); + setState(637); switch (_input.LA(1)) { case EXTRACT: enterOuterAlt(_localctx, 1); { - setState(633); + setState(632); extractTemplate(); } break; case FUNCTION_ESC: enterOuterAlt(_localctx, 2); { - setState(634); + setState(633); match(FUNCTION_ESC); - setState(635); + setState(634); extractTemplate(); - setState(636); + setState(635); match(ESC_END); } break; @@ -4717,21 +4655,21 @@ public T accept(ParseTreeVisitor visitor) { public final ExtractTemplateContext extractTemplate() throws RecognitionException { ExtractTemplateContext _localctx = new ExtractTemplateContext(_ctx, getState()); - enterRule(_localctx, 74, RULE_extractTemplate); + enterRule(_localctx, 72, RULE_extractTemplate); try { enterOuterAlt(_localctx, 1); { - setState(640); + setState(639); match(EXTRACT); - setState(641); + setState(640); match(T__0); - setState(642); + setState(641); ((ExtractTemplateContext)_localctx).field = identifier(); - setState(643); + setState(642); match(FROM); - setState(644); + setState(643); valueExpression(0); - setState(645); + setState(644); match(T__1); } } @@ -4772,15 +4710,14 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionExpressionContext functionExpression() throws RecognitionException { FunctionExpressionContext _localctx = new FunctionExpressionContext(_ctx, getState()); - enterRule(_localctx, 76, RULE_functionExpression); + enterRule(_localctx, 74, RULE_functionExpression); try { - setState(652); + setState(651); switch (_input.LA(1)) { case ANALYZE: case ANALYZED: case CATALOGS: case COLUMNS: - case CURRENT: case DAY: case DEBUG: case EXECUTABLE: @@ -4821,18 +4758,18 @@ public final FunctionExpressionContext functionExpression() throws RecognitionEx case BACKQUOTED_IDENTIFIER: enterOuterAlt(_localctx, 1); { - setState(647); + setState(646); functionTemplate(); } break; case FUNCTION_ESC: enterOuterAlt(_localctx, 2); { - setState(648); + setState(647); match(FUNCTION_ESC); - setState(649); + setState(648); functionTemplate(); - setState(650); + setState(649); match(ESC_END); } break; @@ -4885,50 +4822,50 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionTemplateContext functionTemplate() throws RecognitionException { FunctionTemplateContext _localctx = new FunctionTemplateContext(_ctx, getState()); - enterRule(_localctx, 78, RULE_functionTemplate); + enterRule(_localctx, 76, RULE_functionTemplate); int _la; try { enterOuterAlt(_localctx, 1); { - setState(654); + setState(653); functionName(); - setState(655); + setState(654); match(T__0); - setState(667); + setState(666); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ALL) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CONVERT) | (1L << CURRENT) | (1L << CURRENT_DATE) | (1L << CURRENT_TIMESTAMP) | (1L << DAY) | (1L << DEBUG) | (1L << DISTINCT) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LEFT) | (1L << LIMIT) | (1L << MAPPED) | (1L << MATCH) | (1L << MINUTE) | (1L << MONTH) | (1L << NOT) | (1L << NULL))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RIGHT - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TRUE - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)) | (1L << (FUNCTION_ESC - 64)) | (1L << (DATE_ESC - 64)) | (1L << (TIME_ESC - 64)) | (1L << (TIMESTAMP_ESC - 64)) | (1L << (GUID_ESC - 64)) | (1L << (PLUS - 64)) | (1L << (MINUS - 64)) | (1L << (ASTERISK - 64)) | (1L << (PARAM - 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)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ALL) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CONVERT) | (1L << CURRENT_DATE) | (1L << CURRENT_TIMESTAMP) | (1L << DAY) | (1L << DEBUG) | (1L << DISTINCT) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LEFT) | (1L << LIMIT) | (1L << MAPPED) | (1L << MATCH) | (1L << MINUTE) | (1L << MONTH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RIGHT - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TRUE - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)) | (1L << (FUNCTION_ESC - 67)) | (1L << (DATE_ESC - 67)) | (1L << (TIME_ESC - 67)) | (1L << (TIMESTAMP_ESC - 67)) | (1L << (GUID_ESC - 67)) | (1L << (PLUS - 67)) | (1L << (MINUS - 67)) | (1L << (ASTERISK - 67)) | (1L << (PARAM - 67)) | (1L << (STRING - 67)) | (1L << (INTEGER_VALUE - 67)) | (1L << (DECIMAL_VALUE - 67)) | (1L << (IDENTIFIER - 67)) | (1L << (DIGIT_IDENTIFIER - 67)) | (1L << (QUOTED_IDENTIFIER - 67)) | (1L << (BACKQUOTED_IDENTIFIER - 67)))) != 0)) { { - setState(657); + setState(656); _la = _input.LA(1); if (_la==ALL || _la==DISTINCT) { { - setState(656); + setState(655); setQuantifier(); } } - setState(659); + setState(658); expression(); - setState(664); + setState(663); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__2) { { { - setState(660); + setState(659); match(T__2); - setState(661); + setState(660); expression(); } } - setState(666); + setState(665); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(669); + setState(668); match(T__1); } } @@ -4970,21 +4907,21 @@ public T accept(ParseTreeVisitor visitor) { public final FunctionNameContext functionName() throws RecognitionException { FunctionNameContext _localctx = new FunctionNameContext(_ctx, getState()); - enterRule(_localctx, 80, RULE_functionName); + enterRule(_localctx, 78, RULE_functionName); try { - setState(674); + setState(673); switch (_input.LA(1)) { case LEFT: enterOuterAlt(_localctx, 1); { - setState(671); + setState(670); match(LEFT); } break; case RIGHT: enterOuterAlt(_localctx, 2); { - setState(672); + setState(671); match(RIGHT); } break; @@ -4992,7 +4929,6 @@ public final FunctionNameContext functionName() throws RecognitionException { case ANALYZED: case CATALOGS: case COLUMNS: - case CURRENT: case DAY: case DEBUG: case EXECUTABLE: @@ -5031,7 +4967,7 @@ public final FunctionNameContext functionName() throws RecognitionException { case BACKQUOTED_IDENTIFIER: enterOuterAlt(_localctx, 3); { - setState(673); + setState(672); identifier(); } break; @@ -5259,16 +5195,16 @@ public T accept(ParseTreeVisitor visitor) { public final ConstantContext constant() throws RecognitionException { ConstantContext _localctx = new ConstantContext(_ctx, getState()); - enterRule(_localctx, 82, RULE_constant); + enterRule(_localctx, 80, RULE_constant); try { int _alt; - setState(702); + setState(701); switch (_input.LA(1)) { case NULL: _localctx = new NullLiteralContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(676); + setState(675); match(NULL); } break; @@ -5276,7 +5212,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new IntervalLiteralContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(677); + setState(676); interval(); } break; @@ -5285,7 +5221,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new NumericLiteralContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(678); + setState(677); number(); } break; @@ -5294,7 +5230,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new BooleanLiteralContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(679); + setState(678); booleanValue(); } break; @@ -5302,7 +5238,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new StringLiteralContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(681); + setState(680); _errHandler.sync(this); _alt = 1; do { @@ -5310,7 +5246,7 @@ public final ConstantContext constant() throws RecognitionException { case 1: { { - setState(680); + setState(679); match(STRING); } } @@ -5318,9 +5254,9 @@ public final ConstantContext constant() throws RecognitionException { default: throw new NoViableAltException(this); } - setState(683); + setState(682); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,90,_ctx); + _alt = getInterpreter().adaptivePredict(_input,91,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); } break; @@ -5328,7 +5264,7 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new ParamLiteralContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(685); + setState(684); match(PARAM); } break; @@ -5336,11 +5272,11 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new DateEscapedLiteralContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(686); + setState(685); match(DATE_ESC); - setState(687); + setState(686); string(); - setState(688); + setState(687); match(ESC_END); } break; @@ -5348,11 +5284,11 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new TimeEscapedLiteralContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(690); + setState(689); match(TIME_ESC); - setState(691); + setState(690); string(); - setState(692); + setState(691); match(ESC_END); } break; @@ -5360,11 +5296,11 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new TimestampEscapedLiteralContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(694); + setState(693); match(TIMESTAMP_ESC); - setState(695); + setState(694); string(); - setState(696); + setState(695); match(ESC_END); } break; @@ -5372,11 +5308,11 @@ public final ConstantContext constant() throws RecognitionException { _localctx = new GuidEscapedLiteralContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(698); + setState(697); match(GUID_ESC); - setState(699); + setState(698); string(); - setState(700); + setState(699); match(ESC_END); } break; @@ -5424,14 +5360,14 @@ public T accept(ParseTreeVisitor visitor) { public final ComparisonOperatorContext comparisonOperator() throws RecognitionException { ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState()); - enterRule(_localctx, 84, RULE_comparisonOperator); + enterRule(_localctx, 82, RULE_comparisonOperator); int _la; try { enterOuterAlt(_localctx, 1); { - setState(704); + setState(703); _la = _input.LA(1); - if ( !(((((_la - 101)) & ~0x3f) == 0 && ((1L << (_la - 101)) & ((1L << (EQ - 101)) | (1L << (NULLEQ - 101)) | (1L << (NEQ - 101)) | (1L << (LT - 101)) | (1L << (LTE - 101)) | (1L << (GT - 101)) | (1L << (GTE - 101)))) != 0)) ) { + if ( !(((((_la - 100)) & ~0x3f) == 0 && ((1L << (_la - 100)) & ((1L << (EQ - 100)) | (1L << (NULLEQ - 100)) | (1L << (NEQ - 100)) | (1L << (LT - 100)) | (1L << (LTE - 100)) | (1L << (GT - 100)) | (1L << (GTE - 100)))) != 0)) ) { _errHandler.recoverInline(this); } else { consume(); @@ -5473,12 +5409,12 @@ public T accept(ParseTreeVisitor visitor) { public final BooleanValueContext booleanValue() throws RecognitionException { BooleanValueContext _localctx = new BooleanValueContext(_ctx, getState()); - enterRule(_localctx, 86, RULE_booleanValue); + enterRule(_localctx, 84, RULE_booleanValue); int _la; try { enterOuterAlt(_localctx, 1); { - setState(706); + setState(705); _la = _input.LA(1); if ( !(_la==FALSE || _la==TRUE) ) { _errHandler.recoverInline(this); @@ -5541,18 +5477,18 @@ public T accept(ParseTreeVisitor visitor) { public final IntervalContext interval() throws RecognitionException { IntervalContext _localctx = new IntervalContext(_ctx, getState()); - enterRule(_localctx, 88, RULE_interval); + enterRule(_localctx, 86, RULE_interval); int _la; try { enterOuterAlt(_localctx, 1); { - setState(708); + setState(707); match(INTERVAL); - setState(710); + setState(709); _la = _input.LA(1); if (_la==PLUS || _la==MINUS) { { - setState(709); + setState(708); ((IntervalContext)_localctx).sign = _input.LT(1); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { @@ -5563,35 +5499,35 @@ public final IntervalContext interval() throws RecognitionException { } } - setState(714); + setState(713); switch (_input.LA(1)) { case INTEGER_VALUE: case DECIMAL_VALUE: { - setState(712); + setState(711); ((IntervalContext)_localctx).valueNumeric = number(); } break; case PARAM: case STRING: { - setState(713); + setState(712); ((IntervalContext)_localctx).valuePattern = string(); } break; default: throw new NoViableAltException(this); } - setState(716); + setState(715); ((IntervalContext)_localctx).leading = intervalField(); - setState(719); + setState(718); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,95,_ctx) ) { case 1: { - setState(717); + setState(716); match(TO); - setState(718); + setState(717); ((IntervalContext)_localctx).trailing = intervalField(); } break; @@ -5643,14 +5579,14 @@ public T accept(ParseTreeVisitor visitor) { public final IntervalFieldContext intervalField() throws RecognitionException { IntervalFieldContext _localctx = new IntervalFieldContext(_ctx, getState()); - enterRule(_localctx, 90, RULE_intervalField); + enterRule(_localctx, 88, RULE_intervalField); int _la; try { enterOuterAlt(_localctx, 1); { - setState(721); + setState(720); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << DAY) | (1L << DAYS) | (1L << HOUR) | (1L << HOURS) | (1L << MINUTE) | (1L << MINUTES) | (1L << MONTH) | (1L << MONTHS))) != 0) || ((((_la - 75)) & ~0x3f) == 0 && ((1L << (_la - 75)) & ((1L << (SECOND - 75)) | (1L << (SECONDS - 75)) | (1L << (YEAR - 75)) | (1L << (YEARS - 75)))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << DAY) | (1L << DAYS) | (1L << HOUR) | (1L << HOURS) | (1L << MINUTE) | (1L << MINUTES) | (1L << MONTH) | (1L << MONTHS))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (SECOND - 74)) | (1L << (SECONDS - 74)) | (1L << (YEAR - 74)) | (1L << (YEARS - 74)))) != 0)) ) { _errHandler.recoverInline(this); } else { consume(); @@ -5701,12 +5637,12 @@ public T accept(ParseTreeVisitor visitor) { public final DataTypeContext dataType() throws RecognitionException { DataTypeContext _localctx = new DataTypeContext(_ctx, getState()); - enterRule(_localctx, 92, RULE_dataType); + enterRule(_localctx, 90, RULE_dataType); try { _localctx = new PrimitiveDataTypeContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(723); + setState(722); identifier(); } } @@ -5753,30 +5689,30 @@ public T accept(ParseTreeVisitor visitor) { public final QualifiedNameContext qualifiedName() throws RecognitionException { QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState()); - enterRule(_localctx, 94, RULE_qualifiedName); + enterRule(_localctx, 92, RULE_qualifiedName); try { int _alt; enterOuterAlt(_localctx, 1); { - setState(730); + setState(729); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,95,_ctx); + _alt = getInterpreter().adaptivePredict(_input,96,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(725); + setState(724); identifier(); - setState(726); + setState(725); match(DOT); } } } - setState(732); + setState(731); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,95,_ctx); + _alt = getInterpreter().adaptivePredict(_input,96,_ctx); } - setState(733); + setState(732); identifier(); } } @@ -5819,15 +5755,15 @@ public T accept(ParseTreeVisitor visitor) { public final IdentifierContext identifier() throws RecognitionException { IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); - enterRule(_localctx, 96, RULE_identifier); + enterRule(_localctx, 94, RULE_identifier); try { - setState(737); + setState(736); switch (_input.LA(1)) { case QUOTED_IDENTIFIER: case BACKQUOTED_IDENTIFIER: enterOuterAlt(_localctx, 1); { - setState(735); + setState(734); quoteIdentifier(); } break; @@ -5835,7 +5771,6 @@ public final IdentifierContext identifier() throws RecognitionException { case ANALYZED: case CATALOGS: case COLUMNS: - case CURRENT: case DAY: case DEBUG: case EXECUTABLE: @@ -5872,7 +5807,7 @@ public final IdentifierContext identifier() throws RecognitionException { case DIGIT_IDENTIFIER: enterOuterAlt(_localctx, 2); { - setState(736); + setState(735); unquoteIdentifier(); } break; @@ -5922,46 +5857,46 @@ public T accept(ParseTreeVisitor visitor) { public final TableIdentifierContext tableIdentifier() throws RecognitionException { TableIdentifierContext _localctx = new TableIdentifierContext(_ctx, getState()); - enterRule(_localctx, 98, RULE_tableIdentifier); + enterRule(_localctx, 96, RULE_tableIdentifier); int _la; try { - setState(751); + setState(750); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,100,_ctx) ) { case 1: enterOuterAlt(_localctx, 1); { - setState(742); + setState(741); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)) | (1L << (IDENTIFIER - 67)) | (1L << (DIGIT_IDENTIFIER - 67)) | (1L << (QUOTED_IDENTIFIER - 67)) | (1L << (BACKQUOTED_IDENTIFIER - 67)))) != 0)) { { - setState(739); + setState(738); ((TableIdentifierContext)_localctx).catalog = identifier(); - setState(740); + setState(739); match(T__3); } } - setState(744); + setState(743); match(TABLE_IDENTIFIER); } break; case 2: enterOuterAlt(_localctx, 2); { - setState(748); + setState(747); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,98,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) { case 1: { - setState(745); + setState(744); ((TableIdentifierContext)_localctx).catalog = identifier(); - setState(746); + setState(745); match(T__3); } break; } - setState(750); + setState(749); ((TableIdentifierContext)_localctx).name = identifier(); } break; @@ -6026,15 +5961,15 @@ public T accept(ParseTreeVisitor visitor) { public final QuoteIdentifierContext quoteIdentifier() throws RecognitionException { QuoteIdentifierContext _localctx = new QuoteIdentifierContext(_ctx, getState()); - enterRule(_localctx, 100, RULE_quoteIdentifier); + enterRule(_localctx, 98, RULE_quoteIdentifier); try { - setState(755); + setState(754); switch (_input.LA(1)) { case QUOTED_IDENTIFIER: _localctx = new QuotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(753); + setState(752); match(QUOTED_IDENTIFIER); } break; @@ -6042,7 +5977,7 @@ public final QuoteIdentifierContext quoteIdentifier() throws RecognitionExceptio _localctx = new BackQuotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(754); + setState(753); match(BACKQUOTED_IDENTIFIER); } break; @@ -6112,15 +6047,15 @@ public T accept(ParseTreeVisitor visitor) { public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionException { UnquoteIdentifierContext _localctx = new UnquoteIdentifierContext(_ctx, getState()); - enterRule(_localctx, 102, RULE_unquoteIdentifier); + enterRule(_localctx, 100, RULE_unquoteIdentifier); try { - setState(760); + setState(759); switch (_input.LA(1)) { case IDENTIFIER: _localctx = new UnquotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(757); + setState(756); match(IDENTIFIER); } break; @@ -6128,7 +6063,6 @@ public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionExce case ANALYZED: case CATALOGS: case COLUMNS: - case CURRENT: case DAY: case DEBUG: case EXECUTABLE: @@ -6164,7 +6098,7 @@ public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionExce _localctx = new UnquotedIdentifierContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(758); + setState(757); nonReserved(); } break; @@ -6172,7 +6106,7 @@ public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionExce _localctx = new DigitIdentifierContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(759); + setState(758); match(DIGIT_IDENTIFIER); } break; @@ -6239,15 +6173,15 @@ public T accept(ParseTreeVisitor visitor) { public final NumberContext number() throws RecognitionException { NumberContext _localctx = new NumberContext(_ctx, getState()); - enterRule(_localctx, 104, RULE_number); + enterRule(_localctx, 102, RULE_number); try { - setState(764); + setState(763); switch (_input.LA(1)) { case DECIMAL_VALUE: _localctx = new DecimalLiteralContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(762); + setState(761); match(DECIMAL_VALUE); } break; @@ -6255,7 +6189,7 @@ public final NumberContext number() throws RecognitionException { _localctx = new IntegerLiteralContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(763); + setState(762); match(INTEGER_VALUE); } break; @@ -6298,12 +6232,12 @@ public T accept(ParseTreeVisitor visitor) { public final StringContext string() throws RecognitionException { StringContext _localctx = new StringContext(_ctx, getState()); - enterRule(_localctx, 106, RULE_string); + enterRule(_localctx, 104, RULE_string); int _la; try { enterOuterAlt(_localctx, 1); { - setState(766); + setState(765); _la = _input.LA(1); if ( !(_la==PARAM || _la==STRING) ) { _errHandler.recoverInline(this); @@ -6328,7 +6262,6 @@ public static class NonReservedContext extends ParserRuleContext { 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 CURRENT() { return getToken(SqlBaseParser.CURRENT, 0); } public TerminalNode DAY() { return getToken(SqlBaseParser.DAY, 0); } public TerminalNode DEBUG() { return getToken(SqlBaseParser.DEBUG, 0); } public TerminalNode EXECUTABLE() { return getToken(SqlBaseParser.EXECUTABLE, 0); } @@ -6382,14 +6315,14 @@ public T accept(ParseTreeVisitor visitor) { public final NonReservedContext nonReserved() throws RecognitionException { NonReservedContext _localctx = new NonReservedContext(_ctx, getState()); - enterRule(_localctx, 108, RULE_nonReserved); + enterRule(_localctx, 106, RULE_nonReserved); int _la; try { enterOuterAlt(_localctx, 1); { - setState(768); + setState(767); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << CURRENT) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (OPTIMIZED - 64)) | (1L << (PARSED - 64)) | (1L << (PHYSICAL - 64)) | (1L << (PLAN - 64)) | (1L << (RLIKE - 64)) | (1L << (QUERY - 64)) | (1L << (SCHEMAS - 64)) | (1L << (SECOND - 64)) | (1L << (SHOW - 64)) | (1L << (SYS - 64)) | (1L << (TABLES - 64)) | (1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (YEAR - 64)))) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DAY) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FIRST) | (1L << FORMAT) | (1L << FULL) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << HOUR) | (1L << INTERVAL) | (1L << LAST) | (1L << LIMIT) | (1L << MAPPED) | (1L << MINUTE) | (1L << MONTH) | (1L << OPTIMIZED))) != 0) || ((((_la - 67)) & ~0x3f) == 0 && ((1L << (_la - 67)) & ((1L << (PARSED - 67)) | (1L << (PHYSICAL - 67)) | (1L << (PLAN - 67)) | (1L << (RLIKE - 67)) | (1L << (QUERY - 67)) | (1L << (SCHEMAS - 67)) | (1L << (SECOND - 67)) | (1L << (SHOW - 67)) | (1L << (SYS - 67)) | (1L << (TABLES - 67)) | (1L << (TEXT - 67)) | (1L << (TYPE - 67)) | (1L << (TYPES - 67)) | (1L << (VERIFY - 67)) | (1L << (YEAR - 67)))) != 0)) ) { _errHandler.recoverInline(this); } else { consume(); @@ -6438,312 +6371,312 @@ private boolean valueExpression_sempred(ValueExpressionContext _localctx, int pr } public static final String _serializedATN = - "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\u0082\u0305\4\2\t"+ + "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3\u0081\u0304\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ - "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3"+ - "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u0080\n\4\f\4\16\4\u0083\13\4\3\4\5"+ - "\4\u0086\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u008f\n\4\f\4\16\4\u0092"+ - "\13\4\3\4\5\4\u0095\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u009c\n\4\3\4\3\4\3\4"+ - "\3\4\3\4\5\4\u00a3\n\4\3\4\3\4\3\4\5\4\u00a8\n\4\3\4\3\4\3\4\5\4\u00ad"+ - "\n\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u00b5\n\4\3\4\3\4\5\4\u00b9\n\4\3\4\3"+ - "\4\3\4\3\4\7\4\u00bf\n\4\f\4\16\4\u00c2\13\4\5\4\u00c4\n\4\3\4\3\4\3\4"+ - "\3\4\5\4\u00ca\n\4\3\4\3\4\3\4\5\4\u00cf\n\4\3\4\5\4\u00d2\n\4\3\4\3\4"+ - "\3\4\5\4\u00d7\n\4\3\4\5\4\u00da\n\4\5\4\u00dc\n\4\3\5\3\5\3\5\3\5\7\5"+ - "\u00e2\n\5\f\5\16\5\u00e5\13\5\5\5\u00e7\n\5\3\5\3\5\3\6\3\6\3\6\3\6\3"+ - "\6\3\6\7\6\u00f1\n\6\f\6\16\6\u00f4\13\6\5\6\u00f6\n\6\3\6\5\6\u00f9\n"+ - "\6\3\7\3\7\3\7\3\7\3\7\5\7\u0100\n\7\3\b\3\b\3\b\3\b\3\b\5\b\u0107\n\b"+ - "\3\t\3\t\5\t\u010b\n\t\3\t\3\t\5\t\u010f\n\t\3\n\3\n\5\n\u0113\n\n\3\n"+ - "\3\n\3\n\7\n\u0118\n\n\f\n\16\n\u011b\13\n\3\n\5\n\u011e\n\n\3\n\3\n\5"+ - "\n\u0122\n\n\3\n\3\n\3\n\5\n\u0127\n\n\3\n\3\n\5\n\u012b\n\n\3\13\3\13"+ - "\3\13\3\13\7\13\u0131\n\13\f\13\16\13\u0134\13\13\3\f\5\f\u0137\n\f\3"+ - "\f\3\f\3\f\7\f\u013c\n\f\f\f\16\f\u013f\13\f\3\r\3\r\3\16\3\16\3\16\3"+ - "\16\7\16\u0147\n\16\f\16\16\16\u014a\13\16\5\16\u014c\n\16\3\16\3\16\5"+ - "\16\u0150\n\16\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21\5\21"+ - "\u015c\n\21\3\21\5\21\u015f\n\21\3\22\3\22\7\22\u0163\n\22\f\22\16\22"+ - "\u0166\13\22\3\23\3\23\3\23\3\23\5\23\u016c\n\23\3\23\3\23\3\23\3\23\3"+ - "\23\5\23\u0173\n\23\3\24\5\24\u0176\n\24\3\24\3\24\5\24\u017a\n\24\3\24"+ - "\3\24\5\24\u017e\n\24\3\24\3\24\5\24\u0182\n\24\5\24\u0184\n\24\3\25\3"+ - "\25\3\25\3\25\3\25\3\25\3\25\7\25\u018d\n\25\f\25\16\25\u0190\13\25\3"+ - "\25\3\25\5\25\u0194\n\25\3\26\3\26\5\26\u0198\n\26\3\26\5\26\u019b\n\26"+ - "\3\26\3\26\3\26\3\26\5\26\u01a1\n\26\3\26\5\26\u01a4\n\26\3\26\3\26\3"+ - "\26\3\26\5\26\u01aa\n\26\3\26\5\26\u01ad\n\26\5\26\u01af\n\26\3\27\3\27"+ - "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+ + "\64\4\65\t\65\4\66\t\66\4\67\t\67\3\2\3\2\3\2\3\3\3\3\3\3\3\4\3\4\3\4"+ + "\3\4\3\4\3\4\3\4\3\4\3\4\7\4~\n\4\f\4\16\4\u0081\13\4\3\4\5\4\u0084\n"+ + "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u008d\n\4\f\4\16\4\u0090\13\4\3\4\5"+ + "\4\u0093\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u009a\n\4\3\4\3\4\3\4\3\4\3\4\5\4"+ + "\u00a1\n\4\3\4\3\4\3\4\5\4\u00a6\n\4\3\4\3\4\3\4\5\4\u00ab\n\4\3\4\3\4"+ + "\3\4\3\4\3\4\3\4\5\4\u00b3\n\4\3\4\3\4\5\4\u00b7\n\4\3\4\3\4\3\4\3\4\7"+ + "\4\u00bd\n\4\f\4\16\4\u00c0\13\4\5\4\u00c2\n\4\3\4\3\4\3\4\3\4\5\4\u00c8"+ + "\n\4\3\4\3\4\3\4\5\4\u00cd\n\4\3\4\5\4\u00d0\n\4\3\4\3\4\3\4\5\4\u00d5"+ + "\n\4\3\4\5\4\u00d8\n\4\5\4\u00da\n\4\3\5\3\5\3\5\3\5\7\5\u00e0\n\5\f\5"+ + "\16\5\u00e3\13\5\5\5\u00e5\n\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\7\6\u00ef"+ + "\n\6\f\6\16\6\u00f2\13\6\5\6\u00f4\n\6\3\6\5\6\u00f7\n\6\3\7\3\7\3\7\3"+ + "\7\3\7\5\7\u00fe\n\7\3\b\3\b\3\b\3\b\3\b\5\b\u0105\n\b\3\t\3\t\5\t\u0109"+ + "\n\t\3\t\3\t\5\t\u010d\n\t\3\n\3\n\5\n\u0111\n\n\3\n\3\n\3\n\7\n\u0116"+ + "\n\n\f\n\16\n\u0119\13\n\3\n\5\n\u011c\n\n\3\n\3\n\5\n\u0120\n\n\3\n\3"+ + "\n\3\n\5\n\u0125\n\n\3\n\3\n\5\n\u0129\n\n\3\13\3\13\3\13\3\13\7\13\u012f"+ + "\n\13\f\13\16\13\u0132\13\13\3\f\5\f\u0135\n\f\3\f\3\f\3\f\7\f\u013a\n"+ + "\f\f\f\16\f\u013d\13\f\3\r\3\r\3\16\3\16\3\16\3\16\7\16\u0145\n\16\f\16"+ + "\16\16\u0148\13\16\5\16\u014a\n\16\3\16\3\16\5\16\u014e\n\16\3\17\3\17"+ + "\3\17\3\17\3\17\3\17\3\20\3\20\3\21\3\21\5\21\u015a\n\21\3\21\5\21\u015d"+ + "\n\21\3\22\3\22\7\22\u0161\n\22\f\22\16\22\u0164\13\22\3\23\3\23\3\23"+ + "\3\23\5\23\u016a\n\23\3\23\3\23\3\23\3\23\3\23\5\23\u0171\n\23\3\24\5"+ + "\24\u0174\n\24\3\24\3\24\5\24\u0178\n\24\3\24\3\24\5\24\u017c\n\24\3\24"+ + "\3\24\5\24\u0180\n\24\5\24\u0182\n\24\3\25\3\25\3\25\3\25\3\25\3\25\3"+ + "\25\7\25\u018b\n\25\f\25\16\25\u018e\13\25\3\25\3\25\5\25\u0192\n\25\3"+ + "\26\3\26\5\26\u0196\n\26\3\26\5\26\u0199\n\26\3\26\3\26\3\26\3\26\5\26"+ + "\u019f\n\26\3\26\5\26\u01a2\n\26\3\26\3\26\3\26\3\26\5\26\u01a8\n\26\3"+ + "\26\5\26\u01ab\n\26\5\26\u01ad\n\26\3\27\3\27\3\30\3\30\3\30\3\30\3\30"+ "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+ - "\3\30\3\30\3\30\5\30\u01d2\n\30\3\30\3\30\3\30\3\30\3\30\3\30\7\30\u01da"+ - "\n\30\f\30\16\30\u01dd\13\30\3\31\3\31\7\31\u01e1\n\31\f\31\16\31\u01e4"+ - "\13\31\3\32\3\32\5\32\u01e8\n\32\3\33\5\33\u01eb\n\33\3\33\3\33\3\33\3"+ - "\33\3\33\3\33\5\33\u01f3\n\33\3\33\3\33\3\33\3\33\3\33\7\33\u01fa\n\33"+ - "\f\33\16\33\u01fd\13\33\3\33\3\33\3\33\5\33\u0202\n\33\3\33\3\33\3\33"+ - "\3\33\3\33\3\33\5\33\u020a\n\33\3\33\3\33\3\33\5\33\u020f\n\33\3\33\3"+ - "\33\3\33\3\33\5\33\u0215\n\33\3\33\5\33\u0218\n\33\3\34\3\34\3\34\3\35"+ - "\3\35\5\35\u021f\n\35\3\36\3\36\3\36\3\36\3\36\3\36\5\36\u0227\n\36\3"+ - "\37\3\37\3\37\3\37\5\37\u022d\n\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37"+ - "\3\37\3\37\3\37\7\37\u0239\n\37\f\37\16\37\u023c\13\37\3 \3 \3 \3 \3 "+ - "\3 \3 \3 \5 \u0246\n \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \5 \u0253\n \3!"+ - "\3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u025f\n!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3"+ - "#\3#\3#\5#\u026b\n#\3$\3$\3$\5$\u0270\n$\3$\5$\u0273\n$\3%\3%\3%\3%\3"+ - "%\3%\3%\3&\3&\3&\3&\3&\5&\u0281\n&\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3"+ - "(\3(\3(\5(\u028f\n(\3)\3)\3)\5)\u0294\n)\3)\3)\3)\7)\u0299\n)\f)\16)\u029c"+ - "\13)\5)\u029e\n)\3)\3)\3*\3*\3*\5*\u02a5\n*\3+\3+\3+\3+\3+\6+\u02ac\n"+ - "+\r+\16+\u02ad\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\5+\u02c1"+ - "\n+\3,\3,\3-\3-\3.\3.\5.\u02c9\n.\3.\3.\5.\u02cd\n.\3.\3.\3.\5.\u02d2"+ - "\n.\3/\3/\3\60\3\60\3\61\3\61\3\61\7\61\u02db\n\61\f\61\16\61\u02de\13"+ - "\61\3\61\3\61\3\62\3\62\5\62\u02e4\n\62\3\63\3\63\3\63\5\63\u02e9\n\63"+ - "\3\63\3\63\3\63\3\63\5\63\u02ef\n\63\3\63\5\63\u02f2\n\63\3\64\3\64\5"+ - "\64\u02f6\n\64\3\65\3\65\3\65\5\65\u02fb\n\65\3\66\3\66\5\66\u02ff\n\66"+ - "\3\67\3\67\38\38\38\2\4.<9\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$"+ - "&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjln\2\22\b\2\7\7\t\t\37\37"+ - "\67\67BBFF\4\2))TT\4\2\t\tBB\4\2&&..\3\2\33\34\3\2no\4\2\7\7ww\4\2\r\r"+ - "\33\33\4\2$$\63\63\4\2\7\7\35\35\3\2pr\3\2gm\4\2##UU\7\2\30\31,-9\u0252\3\2\2\2@\u025e\3\2\2\2B\u0260\3\2\2\2D\u0267\3\2\2\2F"+ - "\u026c\3\2\2\2H\u0274\3\2\2\2J\u0280\3\2\2\2L\u0282\3\2\2\2N\u028e\3\2"+ - "\2\2P\u0290\3\2\2\2R\u02a4\3\2\2\2T\u02c0\3\2\2\2V\u02c2\3\2\2\2X\u02c4"+ - "\3\2\2\2Z\u02c6\3\2\2\2\\\u02d3\3\2\2\2^\u02d5\3\2\2\2`\u02dc\3\2\2\2"+ - "b\u02e3\3\2\2\2d\u02f1\3\2\2\2f\u02f5\3\2\2\2h\u02fa\3\2\2\2j\u02fe\3"+ - "\2\2\2l\u0300\3\2\2\2n\u0302\3\2\2\2pq\5\6\4\2qr\7\2\2\3r\3\3\2\2\2st"+ - "\5,\27\2tu\7\2\2\3u\5\3\2\2\2v\u00dc\5\b\5\2w\u0085\7!\2\2x\u0081\7\3"+ - "\2\2yz\7H\2\2z\u0080\t\2\2\2{|\7%\2\2|\u0080\t\3\2\2}~\7Z\2\2~\u0080\5"+ - "X-\2\177y\3\2\2\2\177{\3\2\2\2\177}\3\2\2\2\u0080\u0083\3\2\2\2\u0081"+ - "\177\3\2\2\2\u0081\u0082\3\2\2\2\u0082\u0084\3\2\2\2\u0083\u0081\3\2\2"+ - "\2\u0084\u0086\7\4\2\2\u0085x\3\2\2\2\u0085\u0086\3\2\2\2\u0086\u0087"+ - "\3\2\2\2\u0087\u00dc\5\6\4\2\u0088\u0094\7\32\2\2\u0089\u0090\7\3\2\2"+ - "\u008a\u008b\7H\2\2\u008b\u008f\t\4\2\2\u008c\u008d\7%\2\2\u008d\u008f"+ - "\t\3\2\2\u008e\u008a\3\2\2\2\u008e\u008c\3\2\2\2\u008f\u0092\3\2\2\2\u0090"+ - "\u008e\3\2\2\2\u0090\u0091\3\2\2\2\u0091\u0093\3\2\2\2\u0092\u0090\3\2"+ - "\2\2\u0093\u0095\7\4\2\2\u0094\u0089\3\2\2\2\u0094\u0095\3\2\2\2\u0095"+ - "\u0096\3\2\2\2\u0096\u00dc\5\6\4\2\u0097\u0098\7P\2\2\u0098\u009b\7S\2"+ - "\2\u0099\u009c\5\66\34\2\u009a\u009c\5d\63\2\u009b\u0099\3\2\2\2\u009b"+ - "\u009a\3\2\2\2\u009b\u009c\3\2\2\2\u009c\u00dc\3\2\2\2\u009d\u009e\7P"+ - "\2\2\u009e\u009f\7\23\2\2\u009f\u00a2\t\5\2\2\u00a0\u00a3\5\66\34\2\u00a1"+ - "\u00a3\5d\63\2\u00a2\u00a0\3\2\2\2\u00a2\u00a1\3\2\2\2\u00a3\u00dc\3\2"+ - "\2\2\u00a4\u00a7\t\6\2\2\u00a5\u00a8\5\66\34\2\u00a6\u00a8\5d\63\2\u00a7"+ - "\u00a5\3\2\2\2\u00a7\u00a6\3\2\2\2\u00a8\u00dc\3\2\2\2\u00a9\u00aa\7P"+ - "\2\2\u00aa\u00ac\7(\2\2\u00ab\u00ad\5\66\34\2\u00ac\u00ab\3\2\2\2\u00ac"+ - "\u00ad\3\2\2\2\u00ad\u00dc\3\2\2\2\u00ae\u00af\7P\2\2\u00af\u00dc\7L\2"+ - "\2\u00b0\u00b1\7Q\2\2\u00b1\u00b4\7S\2\2\u00b2\u00b3\7\21\2\2\u00b3\u00b5"+ - "\5\66\34\2\u00b4\u00b2\3\2\2\2\u00b4\u00b5\3\2\2\2\u00b5\u00b8\3\2\2\2"+ - "\u00b6\u00b9\5\66\34\2\u00b7\u00b9\5d\63\2\u00b8\u00b6\3\2\2\2\u00b8\u00b7"+ - "\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00c3\3\2\2\2\u00ba\u00bb\7W\2\2\u00bb"+ - "\u00c0\5l\67\2\u00bc\u00bd\7\5\2\2\u00bd\u00bf\5l\67\2\u00be\u00bc\3\2"+ - "\2\2\u00bf\u00c2\3\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00c1\3\2\2\2\u00c1"+ - "\u00c4\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c3\u00ba\3\2\2\2\u00c3\u00c4\3\2"+ - "\2\2\u00c4\u00dc\3\2\2\2\u00c5\u00c6\7Q\2\2\u00c6\u00c9\7\23\2\2\u00c7"+ - "\u00c8\7\21\2\2\u00c8\u00ca\5l\67\2\u00c9\u00c7\3\2\2\2\u00c9\u00ca\3"+ - "\2\2\2\u00ca\u00ce\3\2\2\2\u00cb\u00cc\7R\2\2\u00cc\u00cf\5\66\34\2\u00cd"+ - "\u00cf\5d\63\2\u00ce\u00cb\3\2\2\2\u00ce\u00cd\3\2\2\2\u00ce\u00cf\3\2"+ - "\2\2\u00cf\u00d1\3\2\2\2\u00d0\u00d2\5\66\34\2\u00d1\u00d0\3\2\2\2\u00d1"+ - "\u00d2\3\2\2\2\u00d2\u00dc\3\2\2\2\u00d3\u00d4\7Q\2\2\u00d4\u00d9\7X\2"+ - "\2\u00d5\u00d7\t\7\2\2\u00d6\u00d5\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00d8"+ - "\3\2\2\2\u00d8\u00da\5j\66\2\u00d9\u00d6\3\2\2\2\u00d9\u00da\3\2\2\2\u00da"+ - "\u00dc\3\2\2\2\u00dbv\3\2\2\2\u00dbw\3\2\2\2\u00db\u0088\3\2\2\2\u00db"+ - "\u0097\3\2\2\2\u00db\u009d\3\2\2\2\u00db\u00a4\3\2\2\2\u00db\u00a9\3\2"+ - "\2\2\u00db\u00ae\3\2\2\2\u00db\u00b0\3\2\2\2\u00db\u00c5\3\2\2\2\u00db"+ - "\u00d3\3\2\2\2\u00dc\7\3\2\2\2\u00dd\u00de\7\\\2\2\u00de\u00e3\5\34\17"+ - "\2\u00df\u00e0\7\5\2\2\u00e0\u00e2\5\34\17\2\u00e1\u00df\3\2\2\2\u00e2"+ - "\u00e5\3\2\2\2\u00e3\u00e1\3\2\2\2\u00e3\u00e4\3\2\2\2\u00e4\u00e7\3\2"+ - "\2\2\u00e5\u00e3\3\2\2\2\u00e6\u00dd\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7"+ - "\u00e8\3\2\2\2\u00e8\u00e9\5\n\6\2\u00e9\t\3\2\2\2\u00ea\u00f5\5\16\b"+ - "\2\u00eb\u00ec\7D\2\2\u00ec\u00ed\7\17\2\2\u00ed\u00f2\5\20\t\2\u00ee"+ - "\u00ef\7\5\2\2\u00ef\u00f1\5\20\t\2\u00f0\u00ee\3\2\2\2\u00f1\u00f4\3"+ - "\2\2\2\u00f2\u00f0\3\2\2\2\u00f2\u00f3\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4"+ - "\u00f2\3\2\2\2\u00f5\u00eb\3\2\2\2\u00f5\u00f6\3\2\2\2\u00f6\u00f8\3\2"+ - "\2\2\u00f7\u00f9\5\f\7\2\u00f8\u00f7\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9"+ - "\13\3\2\2\2\u00fa\u00fb\7\66\2\2\u00fb\u0100\t\b\2\2\u00fc\u00fd\7a\2"+ - "\2\u00fd\u00fe\t\b\2\2\u00fe\u0100\7f\2\2\u00ff\u00fa\3\2\2\2\u00ff\u00fc"+ - "\3\2\2\2\u0100\r\3\2\2\2\u0101\u0107\5\22\n\2\u0102\u0103\7\3\2\2\u0103"+ - "\u0104\5\n\6\2\u0104\u0105\7\4\2\2\u0105\u0107\3\2\2\2\u0106\u0101\3\2"+ - "\2\2\u0106\u0102\3\2\2\2\u0107\17\3\2\2\2\u0108\u010a\5,\27\2\u0109\u010b"+ - "\t\t\2\2\u010a\u0109\3\2\2\2\u010a\u010b\3\2\2\2\u010b\u010e\3\2\2\2\u010c"+ - "\u010d\7@\2\2\u010d\u010f\t\n\2\2\u010e\u010c\3\2\2\2\u010e\u010f\3\2"+ - "\2\2\u010f\21\3\2\2\2\u0110\u0112\7O\2\2\u0111\u0113\5\36\20\2\u0112\u0111"+ - "\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0114\3\2\2\2\u0114\u0119\5 \21\2\u0115"+ - "\u0116\7\5\2\2\u0116\u0118\5 \21\2\u0117\u0115\3\2\2\2\u0118\u011b\3\2"+ - "\2\2\u0119\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u011d\3\2\2\2\u011b"+ - "\u0119\3\2\2\2\u011c\u011e\5\24\13\2\u011d\u011c\3\2\2\2\u011d\u011e\3"+ - "\2\2\2\u011e\u0121\3\2\2\2\u011f\u0120\7[\2\2\u0120\u0122\5.\30\2\u0121"+ - "\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122\u0126\3\2\2\2\u0123\u0124\7*"+ - "\2\2\u0124\u0125\7\17\2\2\u0125\u0127\5\26\f\2\u0126\u0123\3\2\2\2\u0126"+ - "\u0127\3\2\2\2\u0127\u012a\3\2\2\2\u0128\u0129\7+\2\2\u0129\u012b\5.\30"+ - "\2\u012a\u0128\3\2\2\2\u012a\u012b\3\2\2\2\u012b\23\3\2\2\2\u012c\u012d"+ - "\7&\2\2\u012d\u0132\5\"\22\2\u012e\u012f\7\5\2\2\u012f\u0131\5\"\22\2"+ - "\u0130\u012e\3\2\2\2\u0131\u0134\3\2\2\2\u0132\u0130\3\2\2\2\u0132\u0133"+ - "\3\2\2\2\u0133\25\3\2\2\2\u0134\u0132\3\2\2\2\u0135\u0137\5\36\20\2\u0136"+ - "\u0135\3\2\2\2\u0136\u0137\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u013d\5\30"+ - "\r\2\u0139\u013a\7\5\2\2\u013a\u013c\5\30\r\2\u013b\u0139\3\2\2\2\u013c"+ - "\u013f\3\2\2\2\u013d\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e\27\3\2\2"+ - "\2\u013f\u013d\3\2\2\2\u0140\u0141\5\32\16\2\u0141\31\3\2\2\2\u0142\u014b"+ - "\7\3\2\2\u0143\u0148\5,\27\2\u0144\u0145\7\5\2\2\u0145\u0147\5,\27\2\u0146"+ - "\u0144\3\2\2\2\u0147\u014a\3\2\2\2\u0148\u0146\3\2\2\2\u0148\u0149\3\2"+ - "\2\2\u0149\u014c\3\2\2\2\u014a\u0148\3\2\2\2\u014b\u0143\3\2\2\2\u014b"+ - "\u014c\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u0150\7\4\2\2\u014e\u0150\5,"+ - "\27\2\u014f\u0142\3\2\2\2\u014f\u014e\3\2\2\2\u0150\33\3\2\2\2\u0151\u0152"+ - "\5b\62\2\u0152\u0153\7\f\2\2\u0153\u0154\7\3\2\2\u0154\u0155\5\n\6\2\u0155"+ - "\u0156\7\4\2\2\u0156\35\3\2\2\2\u0157\u0158\t\13\2\2\u0158\37\3\2\2\2"+ - "\u0159\u015e\5,\27\2\u015a\u015c\7\f\2\2\u015b\u015a\3\2\2\2\u015b\u015c"+ - "\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u015f\5b\62\2\u015e\u015b\3\2\2\2\u015e"+ - "\u015f\3\2\2\2\u015f!\3\2\2\2\u0160\u0164\5*\26\2\u0161\u0163\5$\23\2"+ - "\u0162\u0161\3\2\2\2\u0163\u0166\3\2\2\2\u0164\u0162\3\2\2\2\u0164\u0165"+ - "\3\2\2\2\u0165#\3\2\2\2\u0166\u0164\3\2\2\2\u0167\u0168\5&\24\2\u0168"+ - "\u0169\7\62\2\2\u0169\u016b\5*\26\2\u016a\u016c\5(\25\2\u016b\u016a\3"+ - "\2\2\2\u016b\u016c\3\2\2\2\u016c\u0173\3\2\2\2\u016d\u016e\7=\2\2\u016e"+ - "\u016f\5&\24\2\u016f\u0170\7\62\2\2\u0170\u0171\5*\26\2\u0171\u0173\3"+ - "\2\2\2\u0172\u0167\3\2\2\2\u0172\u016d\3\2\2\2\u0173%\3\2\2\2\u0174\u0176"+ - "\7/\2\2\u0175\u0174\3\2\2\2\u0175\u0176\3\2\2\2\u0176\u0184\3\2\2\2\u0177"+ - "\u0179\7\64\2\2\u0178\u017a\7E\2\2\u0179\u0178\3\2\2\2\u0179\u017a\3\2"+ - "\2\2\u017a\u0184\3\2\2\2\u017b\u017d\7I\2\2\u017c\u017e\7E\2\2\u017d\u017c"+ - "\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u0184\3\2\2\2\u017f\u0181\7\'\2\2\u0180"+ - "\u0182\7E\2\2\u0181\u0180\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0184\3\2"+ - "\2\2\u0183\u0175\3\2\2\2\u0183\u0177\3\2\2\2\u0183\u017b\3\2\2\2\u0183"+ - "\u017f\3\2\2\2\u0184\'\3\2\2\2\u0185\u0186\7A\2\2\u0186\u0194\5.\30\2"+ - "\u0187\u0188\7Y\2\2\u0188\u0189\7\3\2\2\u0189\u018e\5b\62\2\u018a\u018b"+ - "\7\5\2\2\u018b\u018d\5b\62\2\u018c\u018a\3\2\2\2\u018d\u0190\3\2\2\2\u018e"+ - "\u018c\3\2\2\2\u018e\u018f\3\2\2\2\u018f\u0191\3\2\2\2\u0190\u018e\3\2"+ - "\2\2\u0191\u0192\7\4\2\2\u0192\u0194\3\2\2\2\u0193\u0185\3\2\2\2\u0193"+ - "\u0187\3\2\2\2\u0194)\3\2\2\2\u0195\u019a\5d\63\2\u0196\u0198\7\f\2\2"+ - "\u0197\u0196\3\2\2\2\u0197\u0198\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019b"+ - "\5`\61\2\u019a\u0197\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u01af\3\2\2\2\u019c"+ - "\u019d\7\3\2\2\u019d\u019e\5\n\6\2\u019e\u01a3\7\4\2\2\u019f\u01a1\7\f"+ - "\2\2\u01a0\u019f\3\2\2\2\u01a0\u01a1\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2"+ - "\u01a4\5`\61\2\u01a3\u01a0\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4\u01af\3\2"+ - "\2\2\u01a5\u01a6\7\3\2\2\u01a6\u01a7\5\"\22\2\u01a7\u01ac\7\4\2\2\u01a8"+ - "\u01aa\7\f\2\2\u01a9\u01a8\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01ab\3\2"+ - "\2\2\u01ab\u01ad\5`\61\2\u01ac\u01a9\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad"+ - "\u01af\3\2\2\2\u01ae\u0195\3\2\2\2\u01ae\u019c\3\2\2\2\u01ae\u01a5\3\2"+ - "\2\2\u01af+\3\2\2\2\u01b0\u01b1\5.\30\2\u01b1-\3\2\2\2\u01b2\u01b3\b\30"+ - "\1\2\u01b3\u01b4\7>\2\2\u01b4\u01d2\5.\30\n\u01b5\u01b6\7 \2\2\u01b6\u01b7"+ - "\7\3\2\2\u01b7\u01b8\5\b\5\2\u01b8\u01b9\7\4\2\2\u01b9\u01d2\3\2\2\2\u01ba"+ - "\u01bb\7K\2\2\u01bb\u01bc\7\3\2\2\u01bc\u01bd\5l\67\2\u01bd\u01be\5\60"+ - "\31\2\u01be\u01bf\7\4\2\2\u01bf\u01d2\3\2\2\2\u01c0\u01c1\78\2\2\u01c1"+ - "\u01c2\7\3\2\2\u01c2\u01c3\5`\61\2\u01c3\u01c4\7\5\2\2\u01c4\u01c5\5l"+ - "\67\2\u01c5\u01c6\5\60\31\2\u01c6\u01c7\7\4\2\2\u01c7\u01d2\3\2\2\2\u01c8"+ - "\u01c9\78\2\2\u01c9\u01ca\7\3\2\2\u01ca\u01cb\5l\67\2\u01cb\u01cc\7\5"+ - "\2\2\u01cc\u01cd\5l\67\2\u01cd\u01ce\5\60\31\2\u01ce\u01cf\7\4\2\2\u01cf"+ - "\u01d2\3\2\2\2\u01d0\u01d2\5\62\32\2\u01d1\u01b2\3\2\2\2\u01d1\u01b5\3"+ - "\2\2\2\u01d1\u01ba\3\2\2\2\u01d1\u01c0\3\2\2\2\u01d1\u01c8\3\2\2\2\u01d1"+ - "\u01d0\3\2\2\2\u01d2\u01db\3\2\2\2\u01d3\u01d4\f\4\2\2\u01d4\u01d5\7\n"+ - "\2\2\u01d5\u01da\5.\30\5\u01d6\u01d7\f\3\2\2\u01d7\u01d8\7C\2\2\u01d8"+ - "\u01da\5.\30\4\u01d9\u01d3\3\2\2\2\u01d9\u01d6\3\2\2\2\u01da\u01dd\3\2"+ - "\2\2\u01db\u01d9\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc/\3\2\2\2\u01dd\u01db"+ - "\3\2\2\2\u01de\u01df\7\5\2\2\u01df\u01e1\5l\67\2\u01e0\u01de\3\2\2\2\u01e1"+ - "\u01e4\3\2\2\2\u01e2\u01e0\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\61\3\2\2"+ - "\2\u01e4\u01e2\3\2\2\2\u01e5\u01e7\5<\37\2\u01e6\u01e8\5\64\33\2\u01e7"+ - "\u01e6\3\2\2\2\u01e7\u01e8\3\2\2\2\u01e8\63\3\2\2\2\u01e9\u01eb\7>\2\2"+ - "\u01ea\u01e9\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed"+ - "\7\16\2\2\u01ed\u01ee\5<\37\2\u01ee\u01ef\7\n\2\2\u01ef\u01f0\5<\37\2"+ - "\u01f0\u0218\3\2\2\2\u01f1\u01f3\7>\2\2\u01f2\u01f1\3\2\2\2\u01f2\u01f3"+ - "\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f5\7.\2\2\u01f5\u01f6\7\3\2\2\u01f6"+ - "\u01fb\5<\37\2\u01f7\u01f8\7\5\2\2\u01f8\u01fa\5<\37\2\u01f9\u01f7\3\2"+ - "\2\2\u01fa\u01fd\3\2\2\2\u01fb\u01f9\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc"+ - "\u01fe\3\2\2\2\u01fd\u01fb\3\2\2\2\u01fe\u01ff\7\4\2\2\u01ff\u0218\3\2"+ - "\2\2\u0200\u0202\7>\2\2\u0201\u0200\3\2\2\2\u0201\u0202\3\2\2\2\u0202"+ - "\u0203\3\2\2\2\u0203\u0204\7.\2\2\u0204\u0205\7\3\2\2\u0205\u0206\5\b"+ - "\5\2\u0206\u0207\7\4\2\2\u0207\u0218\3\2\2\2\u0208\u020a\7>\2\2\u0209"+ - "\u0208\3\2\2\2\u0209\u020a\3\2\2\2\u020a\u020b\3\2\2\2\u020b\u020c\7\65"+ - "\2\2\u020c\u0218\58\35\2\u020d\u020f\7>\2\2\u020e\u020d\3\2\2\2\u020e"+ - "\u020f\3\2\2\2\u020f\u0210\3\2\2\2\u0210\u0211\7J\2\2\u0211\u0218\5l\67"+ - "\2\u0212\u0214\7\61\2\2\u0213\u0215\7>\2\2\u0214\u0213\3\2\2\2\u0214\u0215"+ - "\3\2\2\2\u0215\u0216\3\2\2\2\u0216\u0218\7?\2\2\u0217\u01ea\3\2\2\2\u0217"+ - "\u01f2\3\2\2\2\u0217\u0201\3\2\2\2\u0217\u0209\3\2\2\2\u0217\u020e\3\2"+ - "\2\2\u0217\u0212\3\2\2\2\u0218\65\3\2\2\2\u0219\u021a\7\65\2\2\u021a\u021b"+ - "\58\35\2\u021b\67\3\2\2\2\u021c\u021e\5l\67\2\u021d\u021f\5:\36\2\u021e"+ - "\u021d\3\2\2\2\u021e\u021f\3\2\2\2\u021f9\3\2\2\2\u0220\u0221\7\36\2\2"+ - "\u0221\u0227\5l\67\2\u0222\u0223\7_\2\2\u0223\u0224\5l\67\2\u0224\u0225"+ - "\7f\2\2\u0225\u0227\3\2\2\2\u0226\u0220\3\2\2\2\u0226\u0222\3\2\2\2\u0227"+ - ";\3\2\2\2\u0228\u0229\b\37\1\2\u0229\u022d\5> \2\u022a\u022b\t\7\2\2\u022b"+ - "\u022d\5<\37\6\u022c\u0228\3\2\2\2\u022c\u022a\3\2\2\2\u022d\u023a\3\2"+ - "\2\2\u022e\u022f\f\5\2\2\u022f\u0230\t\f\2\2\u0230\u0239\5<\37\6\u0231"+ - "\u0232\f\4\2\2\u0232\u0233\t\7\2\2\u0233\u0239\5<\37\5\u0234\u0235\f\3"+ - "\2\2\u0235\u0236\5V,\2\u0236\u0237\5<\37\4\u0237\u0239\3\2\2\2\u0238\u022e"+ - "\3\2\2\2\u0238\u0231\3\2\2\2\u0238\u0234\3\2\2\2\u0239\u023c\3\2\2\2\u023a"+ - "\u0238\3\2\2\2\u023a\u023b\3\2\2\2\u023b=\3\2\2\2\u023c\u023a\3\2\2\2"+ - "\u023d\u0253\5@!\2\u023e\u0253\5J&\2\u023f\u0253\5D#\2\u0240\u0253\5F"+ - "$\2\u0241\u0253\5T+\2\u0242\u0243\5`\61\2\u0243\u0244\7t\2\2\u0244\u0246"+ - "\3\2\2\2\u0245\u0242\3\2\2\2\u0245\u0246\3\2\2\2\u0246\u0247\3\2\2\2\u0247"+ - "\u0253\7p\2\2\u0248\u0253\5N(\2\u0249\u024a\7\3\2\2\u024a\u024b\5\b\5"+ - "\2\u024b\u024c\7\4\2\2\u024c\u0253\3\2\2\2\u024d\u0253\5`\61\2\u024e\u024f"+ - "\7\3\2\2\u024f\u0250\5,\27\2\u0250\u0251\7\4\2\2\u0251\u0253\3\2\2\2\u0252"+ - "\u023d\3\2\2\2\u0252\u023e\3\2\2\2\u0252\u023f\3\2\2\2\u0252\u0240\3\2"+ - "\2\2\u0252\u0241\3\2\2\2\u0252\u0245\3\2\2\2\u0252\u0248\3\2\2\2\u0252"+ - "\u0249\3\2\2\2\u0252\u024d\3\2\2\2\u0252\u024e\3\2\2\2\u0253?\3\2\2\2"+ - "\u0254\u025f\5B\"\2\u0255\u0256\7`\2\2\u0256\u0257\5B\"\2\u0257\u0258"+ - "\7f\2\2\u0258\u025f\3\2\2\2\u0259\u025f\5H%\2\u025a\u025b\7`\2\2\u025b"+ - "\u025c\5H%\2\u025c\u025d\7f\2\2\u025d\u025f\3\2\2\2\u025e\u0254\3\2\2"+ - "\2\u025e\u0255\3\2\2\2\u025e\u0259\3\2\2\2\u025e\u025a\3\2\2\2\u025fA"+ - "\3\2\2\2\u0260\u0261\7\20\2\2\u0261\u0262\7\3\2\2\u0262\u0263\5,\27\2"+ - "\u0263\u0264\7\f\2\2\u0264\u0265\5^\60\2\u0265\u0266\7\4\2\2\u0266C\3"+ - "\2\2\2\u0267\u026a\7\26\2\2\u0268\u0269\7\3\2\2\u0269\u026b\7\4\2\2\u026a"+ - "\u0268\3\2\2\2\u026a\u026b\3\2\2\2\u026bE\3\2\2\2\u026c\u0272\7\27\2\2"+ - "\u026d\u026f\7\3\2\2\u026e\u0270\7w\2\2\u026f\u026e\3\2\2\2\u026f\u0270"+ - "\3\2\2\2\u0270\u0271\3\2\2\2\u0271\u0273\7\4\2\2\u0272\u026d\3\2\2\2\u0272"+ - "\u0273\3\2\2\2\u0273G\3\2\2\2\u0274\u0275\7\24\2\2\u0275\u0276\7\3\2\2"+ - "\u0276\u0277\5,\27\2\u0277\u0278\7\5\2\2\u0278\u0279\5^\60\2\u0279\u027a"+ - "\7\4\2\2\u027aI\3\2\2\2\u027b\u0281\5L\'\2\u027c\u027d\7`\2\2\u027d\u027e"+ - "\5L\'\2\u027e\u027f\7f\2\2\u027f\u0281\3\2\2\2\u0280\u027b\3\2\2\2\u0280"+ - "\u027c\3\2\2\2\u0281K\3\2\2\2\u0282\u0283\7\"\2\2\u0283\u0284\7\3\2\2"+ - "\u0284\u0285\5b\62\2\u0285\u0286\7&\2\2\u0286\u0287\5<\37\2\u0287\u0288"+ - "\7\4\2\2\u0288M\3\2\2\2\u0289\u028f\5P)\2\u028a\u028b\7`\2\2\u028b\u028c"+ - "\5P)\2\u028c\u028d\7f\2\2\u028d\u028f\3\2\2\2\u028e\u0289\3\2\2\2\u028e"+ - "\u028a\3\2\2\2\u028fO\3\2\2\2\u0290\u0291\5R*\2\u0291\u029d\7\3\2\2\u0292"+ - "\u0294\5\36\20\2\u0293\u0292\3\2\2\2\u0293\u0294\3\2\2\2\u0294\u0295\3"+ - "\2\2\2\u0295\u029a\5,\27\2\u0296\u0297\7\5\2\2\u0297\u0299\5,\27\2\u0298"+ - "\u0296\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\u0293\3\2\2\2\u029d"+ - "\u029e\3\2\2\2\u029e\u029f\3\2\2\2\u029f\u02a0\7\4\2\2\u02a0Q\3\2\2\2"+ - "\u02a1\u02a5\7\64\2\2\u02a2\u02a5\7I\2\2\u02a3\u02a5\5b\62\2\u02a4\u02a1"+ - "\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a3\3\2\2\2\u02a5S\3\2\2\2\u02a6"+ - "\u02c1\7?\2\2\u02a7\u02c1\5Z.\2\u02a8\u02c1\5j\66\2\u02a9\u02c1\5X-\2"+ - "\u02aa\u02ac\7v\2\2\u02ab\u02aa\3\2\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02ab"+ - "\3\2\2\2\u02ad\u02ae\3\2\2\2\u02ae\u02c1\3\2\2\2\u02af\u02c1\7u\2\2\u02b0"+ - "\u02b1\7b\2\2\u02b1\u02b2\5l\67\2\u02b2\u02b3\7f\2\2\u02b3\u02c1\3\2\2"+ - "\2\u02b4\u02b5\7c\2\2\u02b5\u02b6\5l\67\2\u02b6\u02b7\7f\2\2\u02b7\u02c1"+ - "\3\2\2\2\u02b8\u02b9\7d\2\2\u02b9\u02ba\5l\67\2\u02ba\u02bb\7f\2\2\u02bb"+ - "\u02c1\3\2\2\2\u02bc\u02bd\7e\2\2\u02bd\u02be\5l\67\2\u02be\u02bf\7f\2"+ - "\2\u02bf\u02c1\3\2\2\2\u02c0\u02a6\3\2\2\2\u02c0\u02a7\3\2\2\2\u02c0\u02a8"+ - "\3\2\2\2\u02c0\u02a9\3\2\2\2\u02c0\u02ab\3\2\2\2\u02c0\u02af\3\2\2\2\u02c0"+ - "\u02b0\3\2\2\2\u02c0\u02b4\3\2\2\2\u02c0\u02b8\3\2\2\2\u02c0\u02bc\3\2"+ - "\2\2\u02c1U\3\2\2\2\u02c2\u02c3\t\r\2\2\u02c3W\3\2\2\2\u02c4\u02c5\t\16"+ - "\2\2\u02c5Y\3\2\2\2\u02c6\u02c8\7\60\2\2\u02c7\u02c9\t\7\2\2\u02c8\u02c7"+ - "\3\2\2\2\u02c8\u02c9\3\2\2\2\u02c9\u02cc\3\2\2\2\u02ca\u02cd\5j\66\2\u02cb"+ - "\u02cd\5l\67\2\u02cc\u02ca\3\2\2\2\u02cc\u02cb\3\2\2\2\u02cd\u02ce\3\2"+ - "\2\2\u02ce\u02d1\5\\/\2\u02cf\u02d0\7V\2\2\u02d0\u02d2\5\\/\2\u02d1\u02cf"+ - "\3\2\2\2\u02d1\u02d2\3\2\2\2\u02d2[\3\2\2\2\u02d3\u02d4\t\17\2\2\u02d4"+ - "]\3\2\2\2\u02d5\u02d6\5b\62\2\u02d6_\3\2\2\2\u02d7\u02d8\5b\62\2\u02d8"+ - "\u02d9\7t\2\2\u02d9\u02db\3\2\2\2\u02da\u02d7\3\2\2\2\u02db\u02de\3\2"+ - "\2\2\u02dc\u02da\3\2\2\2\u02dc\u02dd\3\2\2\2\u02dd\u02df\3\2\2\2\u02de"+ - "\u02dc\3\2\2\2\u02df\u02e0\5b\62\2\u02e0a\3\2\2\2\u02e1\u02e4\5f\64\2"+ - "\u02e2\u02e4\5h\65\2\u02e3\u02e1\3\2\2\2\u02e3\u02e2\3\2\2\2\u02e4c\3"+ - "\2\2\2\u02e5\u02e6\5b\62\2\u02e6\u02e7\7\6\2\2\u02e7\u02e9\3\2\2\2\u02e8"+ - "\u02e5\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9\u02ea\3\2\2\2\u02ea\u02f2\7{"+ - "\2\2\u02eb\u02ec\5b\62\2\u02ec\u02ed\7\6\2\2\u02ed\u02ef\3\2\2\2\u02ee"+ - "\u02eb\3\2\2\2\u02ee\u02ef\3\2\2\2\u02ef\u02f0\3\2\2\2\u02f0\u02f2\5b"+ - "\62\2\u02f1\u02e8\3\2\2\2\u02f1\u02ee\3\2\2\2\u02f2e\3\2\2\2\u02f3\u02f6"+ - "\7|\2\2\u02f4\u02f6\7}\2\2\u02f5\u02f3\3\2\2\2\u02f5\u02f4\3\2\2\2\u02f6"+ - "g\3\2\2\2\u02f7\u02fb\7y\2\2\u02f8\u02fb\5n8\2\u02f9\u02fb\7z\2\2\u02fa"+ - "\u02f7\3\2\2\2\u02fa\u02f8\3\2\2\2\u02fa\u02f9\3\2\2\2\u02fbi\3\2\2\2"+ - "\u02fc\u02ff\7x\2\2\u02fd\u02ff\7w\2\2\u02fe\u02fc\3\2\2\2\u02fe\u02fd"+ - "\3\2\2\2\u02ffk\3\2\2\2\u0300\u0301\t\20\2\2\u0301m\3\2\2\2\u0302\u0303"+ - "\t\21\2\2\u0303o\3\2\2\2i\177\u0081\u0085\u008e\u0090\u0094\u009b\u00a2"+ - "\u00a7\u00ac\u00b4\u00b8\u00c0\u00c3\u00c9\u00ce\u00d1\u00d6\u00d9\u00db"+ - "\u00e3\u00e6\u00f2\u00f5\u00f8\u00ff\u0106\u010a\u010e\u0112\u0119\u011d"+ - "\u0121\u0126\u012a\u0132\u0136\u013d\u0148\u014b\u014f\u015b\u015e\u0164"+ - "\u016b\u0172\u0175\u0179\u017d\u0181\u0183\u018e\u0193\u0197\u019a\u01a0"+ - "\u01a3\u01a9\u01ac\u01ae\u01d1\u01d9\u01db\u01e2\u01e7\u01ea\u01f2\u01fb"+ - "\u0201\u0209\u020e\u0214\u0217\u021e\u0226\u022c\u0238\u023a\u0245\u0252"+ - "\u025e\u026a\u026f\u0272\u0280\u028e\u0293\u029a\u029d\u02a4\u02ad\u02c0"+ - "\u02c8\u02cc\u02d1\u02dc\u02e3\u02e8\u02ee\u02f1\u02f5\u02fa\u02fe"; + "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u01d0"+ + "\n\30\3\30\3\30\3\30\3\30\3\30\3\30\7\30\u01d8\n\30\f\30\16\30\u01db\13"+ + "\30\3\31\3\31\7\31\u01df\n\31\f\31\16\31\u01e2\13\31\3\32\3\32\5\32\u01e6"+ + "\n\32\3\33\5\33\u01e9\n\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u01f1\n"+ + "\33\3\33\3\33\3\33\3\33\3\33\7\33\u01f8\n\33\f\33\16\33\u01fb\13\33\3"+ + "\33\3\33\3\33\5\33\u0200\n\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u0208"+ + "\n\33\3\33\3\33\3\33\5\33\u020d\n\33\3\33\3\33\3\33\3\33\5\33\u0213\n"+ + "\33\3\33\5\33\u0216\n\33\3\34\3\34\3\34\3\35\3\35\5\35\u021d\n\35\3\36"+ + "\3\36\3\36\3\36\3\36\3\36\5\36\u0225\n\36\3\37\3\37\3\37\3\37\5\37\u022b"+ + "\n\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\7\37\u0237\n\37"+ + "\f\37\16\37\u023a\13\37\3 \3 \3 \3 \3 \3 \3 \5 \u0243\n \3 \3 \3 \3 \3"+ + " \3 \3 \3 \3 \3 \3 \5 \u0250\n \3!\3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u025c"+ + "\n!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\5#\u0268\n#\3#\3#\3#\5#\u026d"+ + "\n#\3#\5#\u0270\n#\5#\u0272\n#\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\5%"+ + "\u0280\n%\3&\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\5\'\u028e\n\'\3(\3"+ + "(\3(\5(\u0293\n(\3(\3(\3(\7(\u0298\n(\f(\16(\u029b\13(\5(\u029d\n(\3("+ + "\3(\3)\3)\3)\5)\u02a4\n)\3*\3*\3*\3*\3*\6*\u02ab\n*\r*\16*\u02ac\3*\3"+ + "*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\3*\5*\u02c0\n*\3+\3+\3,\3"+ + ",\3-\3-\5-\u02c8\n-\3-\3-\5-\u02cc\n-\3-\3-\3-\5-\u02d1\n-\3.\3.\3/\3"+ + "/\3\60\3\60\3\60\7\60\u02da\n\60\f\60\16\60\u02dd\13\60\3\60\3\60\3\61"+ + "\3\61\5\61\u02e3\n\61\3\62\3\62\3\62\5\62\u02e8\n\62\3\62\3\62\3\62\3"+ + "\62\5\62\u02ee\n\62\3\62\5\62\u02f1\n\62\3\63\3\63\5\63\u02f5\n\63\3\64"+ + "\3\64\3\64\5\64\u02fa\n\64\3\65\3\65\5\65\u02fe\n\65\3\66\3\66\3\67\3"+ + "\67\3\67\2\4.<8\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62"+ + "\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjl\2\22\b\2\7\7\t\t\36\36\66\66AAEE\4"+ + "\2((SS\4\2\t\tAA\4\2%%--\3\2\32\33\3\2mn\4\2\7\7vv\4\2\r\r\32\32\4\2#"+ + "#\62\62\4\2\7\7\34\34\3\2oq\3\2fl\4\2\"\"TT\7\2\27\30+,8;LM\\]\3\2tu\30"+ + "\2\b\t\22\23\27\27\31\31\36\36 #$&(++//\62\62\65\6688::AAEGILOPRSVWY"+ + "Y\\\\\u0361\2n\3\2\2\2\4q\3\2\2\2\6\u00d9\3\2\2\2\b\u00e4\3\2\2\2\n\u00e8"+ + "\3\2\2\2\f\u00fd\3\2\2\2\16\u0104\3\2\2\2\20\u0106\3\2\2\2\22\u010e\3"+ + "\2\2\2\24\u012a\3\2\2\2\26\u0134\3\2\2\2\30\u013e\3\2\2\2\32\u014d\3\2"+ + "\2\2\34\u014f\3\2\2\2\36\u0155\3\2\2\2 \u0157\3\2\2\2\"\u015e\3\2\2\2"+ + "$\u0170\3\2\2\2&\u0181\3\2\2\2(\u0191\3\2\2\2*\u01ac\3\2\2\2,\u01ae\3"+ + "\2\2\2.\u01cf\3\2\2\2\60\u01e0\3\2\2\2\62\u01e3\3\2\2\2\64\u0215\3\2\2"+ + "\2\66\u0217\3\2\2\28\u021a\3\2\2\2:\u0224\3\2\2\2<\u022a\3\2\2\2>\u024f"+ + "\3\2\2\2@\u025b\3\2\2\2B\u025d\3\2\2\2D\u0271\3\2\2\2F\u0273\3\2\2\2H"+ + "\u027f\3\2\2\2J\u0281\3\2\2\2L\u028d\3\2\2\2N\u028f\3\2\2\2P\u02a3\3\2"+ + "\2\2R\u02bf\3\2\2\2T\u02c1\3\2\2\2V\u02c3\3\2\2\2X\u02c5\3\2\2\2Z\u02d2"+ + "\3\2\2\2\\\u02d4\3\2\2\2^\u02db\3\2\2\2`\u02e2\3\2\2\2b\u02f0\3\2\2\2"+ + "d\u02f4\3\2\2\2f\u02f9\3\2\2\2h\u02fd\3\2\2\2j\u02ff\3\2\2\2l\u0301\3"+ + "\2\2\2no\5\6\4\2op\7\2\2\3p\3\3\2\2\2qr\5,\27\2rs\7\2\2\3s\5\3\2\2\2t"+ + "\u00da\5\b\5\2u\u0083\7 \2\2v\177\7\3\2\2wx\7G\2\2x~\t\2\2\2yz\7$\2\2"+ + "z~\t\3\2\2{|\7Y\2\2|~\5V,\2}w\3\2\2\2}y\3\2\2\2}{\3\2\2\2~\u0081\3\2\2"+ + "\2\177}\3\2\2\2\177\u0080\3\2\2\2\u0080\u0082\3\2\2\2\u0081\177\3\2\2"+ + "\2\u0082\u0084\7\4\2\2\u0083v\3\2\2\2\u0083\u0084\3\2\2\2\u0084\u0085"+ + "\3\2\2\2\u0085\u00da\5\6\4\2\u0086\u0092\7\31\2\2\u0087\u008e\7\3\2\2"+ + "\u0088\u0089\7G\2\2\u0089\u008d\t\4\2\2\u008a\u008b\7$\2\2\u008b\u008d"+ + "\t\3\2\2\u008c\u0088\3\2\2\2\u008c\u008a\3\2\2\2\u008d\u0090\3\2\2\2\u008e"+ + "\u008c\3\2\2\2\u008e\u008f\3\2\2\2\u008f\u0091\3\2\2\2\u0090\u008e\3\2"+ + "\2\2\u0091\u0093\7\4\2\2\u0092\u0087\3\2\2\2\u0092\u0093\3\2\2\2\u0093"+ + "\u0094\3\2\2\2\u0094\u00da\5\6\4\2\u0095\u0096\7O\2\2\u0096\u0099\7R\2"+ + "\2\u0097\u009a\5\66\34\2\u0098\u009a\5b\62\2\u0099\u0097\3\2\2\2\u0099"+ + "\u0098\3\2\2\2\u0099\u009a\3\2\2\2\u009a\u00da\3\2\2\2\u009b\u009c\7O"+ + "\2\2\u009c\u009d\7\23\2\2\u009d\u00a0\t\5\2\2\u009e\u00a1\5\66\34\2\u009f"+ + "\u00a1\5b\62\2\u00a0\u009e\3\2\2\2\u00a0\u009f\3\2\2\2\u00a1\u00da\3\2"+ + "\2\2\u00a2\u00a5\t\6\2\2\u00a3\u00a6\5\66\34\2\u00a4\u00a6\5b\62\2\u00a5"+ + "\u00a3\3\2\2\2\u00a5\u00a4\3\2\2\2\u00a6\u00da\3\2\2\2\u00a7\u00a8\7O"+ + "\2\2\u00a8\u00aa\7\'\2\2\u00a9\u00ab\5\66\34\2\u00aa\u00a9\3\2\2\2\u00aa"+ + "\u00ab\3\2\2\2\u00ab\u00da\3\2\2\2\u00ac\u00ad\7O\2\2\u00ad\u00da\7K\2"+ + "\2\u00ae\u00af\7P\2\2\u00af\u00b2\7R\2\2\u00b0\u00b1\7\21\2\2\u00b1\u00b3"+ + "\5\66\34\2\u00b2\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\u00b6\3\2\2\2"+ + "\u00b4\u00b7\5\66\34\2\u00b5\u00b7\5b\62\2\u00b6\u00b4\3\2\2\2\u00b6\u00b5"+ + "\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00c1\3\2\2\2\u00b8\u00b9\7V\2\2\u00b9"+ + "\u00be\5j\66\2\u00ba\u00bb\7\5\2\2\u00bb\u00bd\5j\66\2\u00bc\u00ba\3\2"+ + "\2\2\u00bd\u00c0\3\2\2\2\u00be\u00bc\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf"+ + "\u00c2\3\2\2\2\u00c0\u00be\3\2\2\2\u00c1\u00b8\3\2\2\2\u00c1\u00c2\3\2"+ + "\2\2\u00c2\u00da\3\2\2\2\u00c3\u00c4\7P\2\2\u00c4\u00c7\7\23\2\2\u00c5"+ + "\u00c6\7\21\2\2\u00c6\u00c8\5j\66\2\u00c7\u00c5\3\2\2\2\u00c7\u00c8\3"+ + "\2\2\2\u00c8\u00cc\3\2\2\2\u00c9\u00ca\7Q\2\2\u00ca\u00cd\5\66\34\2\u00cb"+ + "\u00cd\5b\62\2\u00cc\u00c9\3\2\2\2\u00cc\u00cb\3\2\2\2\u00cc\u00cd\3\2"+ + "\2\2\u00cd\u00cf\3\2\2\2\u00ce\u00d0\5\66\34\2\u00cf\u00ce\3\2\2\2\u00cf"+ + "\u00d0\3\2\2\2\u00d0\u00da\3\2\2\2\u00d1\u00d2\7P\2\2\u00d2\u00d7\7W\2"+ + "\2\u00d3\u00d5\t\7\2\2\u00d4\u00d3\3\2\2\2\u00d4\u00d5\3\2\2\2\u00d5\u00d6"+ + "\3\2\2\2\u00d6\u00d8\5h\65\2\u00d7\u00d4\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8"+ + "\u00da\3\2\2\2\u00d9t\3\2\2\2\u00d9u\3\2\2\2\u00d9\u0086\3\2\2\2\u00d9"+ + "\u0095\3\2\2\2\u00d9\u009b\3\2\2\2\u00d9\u00a2\3\2\2\2\u00d9\u00a7\3\2"+ + "\2\2\u00d9\u00ac\3\2\2\2\u00d9\u00ae\3\2\2\2\u00d9\u00c3\3\2\2\2\u00d9"+ + "\u00d1\3\2\2\2\u00da\7\3\2\2\2\u00db\u00dc\7[\2\2\u00dc\u00e1\5\34\17"+ + "\2\u00dd\u00de\7\5\2\2\u00de\u00e0\5\34\17\2\u00df\u00dd\3\2\2\2\u00e0"+ + "\u00e3\3\2\2\2\u00e1\u00df\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2\u00e5\3\2"+ + "\2\2\u00e3\u00e1\3\2\2\2\u00e4\u00db\3\2\2\2\u00e4\u00e5\3\2\2\2\u00e5"+ + "\u00e6\3\2\2\2\u00e6\u00e7\5\n\6\2\u00e7\t\3\2\2\2\u00e8\u00f3\5\16\b"+ + "\2\u00e9\u00ea\7C\2\2\u00ea\u00eb\7\17\2\2\u00eb\u00f0\5\20\t\2\u00ec"+ + "\u00ed\7\5\2\2\u00ed\u00ef\5\20\t\2\u00ee\u00ec\3\2\2\2\u00ef\u00f2\3"+ + "\2\2\2\u00f0\u00ee\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1\u00f4\3\2\2\2\u00f2"+ + "\u00f0\3\2\2\2\u00f3\u00e9\3\2\2\2\u00f3\u00f4\3\2\2\2\u00f4\u00f6\3\2"+ + "\2\2\u00f5\u00f7\5\f\7\2\u00f6\u00f5\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7"+ + "\13\3\2\2\2\u00f8\u00f9\7\65\2\2\u00f9\u00fe\t\b\2\2\u00fa\u00fb\7`\2"+ + "\2\u00fb\u00fc\t\b\2\2\u00fc\u00fe\7e\2\2\u00fd\u00f8\3\2\2\2\u00fd\u00fa"+ + "\3\2\2\2\u00fe\r\3\2\2\2\u00ff\u0105\5\22\n\2\u0100\u0101\7\3\2\2\u0101"+ + "\u0102\5\n\6\2\u0102\u0103\7\4\2\2\u0103\u0105\3\2\2\2\u0104\u00ff\3\2"+ + "\2\2\u0104\u0100\3\2\2\2\u0105\17\3\2\2\2\u0106\u0108\5,\27\2\u0107\u0109"+ + "\t\t\2\2\u0108\u0107\3\2\2\2\u0108\u0109\3\2\2\2\u0109\u010c\3\2\2\2\u010a"+ + "\u010b\7?\2\2\u010b\u010d\t\n\2\2\u010c\u010a\3\2\2\2\u010c\u010d\3\2"+ + "\2\2\u010d\21\3\2\2\2\u010e\u0110\7N\2\2\u010f\u0111\5\36\20\2\u0110\u010f"+ + "\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0112\3\2\2\2\u0112\u0117\5 \21\2\u0113"+ + "\u0114\7\5\2\2\u0114\u0116\5 \21\2\u0115\u0113\3\2\2\2\u0116\u0119\3\2"+ + "\2\2\u0117\u0115\3\2\2\2\u0117\u0118\3\2\2\2\u0118\u011b\3\2\2\2\u0119"+ + "\u0117\3\2\2\2\u011a\u011c\5\24\13\2\u011b\u011a\3\2\2\2\u011b\u011c\3"+ + "\2\2\2\u011c\u011f\3\2\2\2\u011d\u011e\7Z\2\2\u011e\u0120\5.\30\2\u011f"+ + "\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120\u0124\3\2\2\2\u0121\u0122\7)"+ + "\2\2\u0122\u0123\7\17\2\2\u0123\u0125\5\26\f\2\u0124\u0121\3\2\2\2\u0124"+ + "\u0125\3\2\2\2\u0125\u0128\3\2\2\2\u0126\u0127\7*\2\2\u0127\u0129\5.\30"+ + "\2\u0128\u0126\3\2\2\2\u0128\u0129\3\2\2\2\u0129\23\3\2\2\2\u012a\u012b"+ + "\7%\2\2\u012b\u0130\5\"\22\2\u012c\u012d\7\5\2\2\u012d\u012f\5\"\22\2"+ + "\u012e\u012c\3\2\2\2\u012f\u0132\3\2\2\2\u0130\u012e\3\2\2\2\u0130\u0131"+ + "\3\2\2\2\u0131\25\3\2\2\2\u0132\u0130\3\2\2\2\u0133\u0135\5\36\20\2\u0134"+ + "\u0133\3\2\2\2\u0134\u0135\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u013b\5\30"+ + "\r\2\u0137\u0138\7\5\2\2\u0138\u013a\5\30\r\2\u0139\u0137\3\2\2\2\u013a"+ + "\u013d\3\2\2\2\u013b\u0139\3\2\2\2\u013b\u013c\3\2\2\2\u013c\27\3\2\2"+ + "\2\u013d\u013b\3\2\2\2\u013e\u013f\5\32\16\2\u013f\31\3\2\2\2\u0140\u0149"+ + "\7\3\2\2\u0141\u0146\5,\27\2\u0142\u0143\7\5\2\2\u0143\u0145\5,\27\2\u0144"+ + "\u0142\3\2\2\2\u0145\u0148\3\2\2\2\u0146\u0144\3\2\2\2\u0146\u0147\3\2"+ + "\2\2\u0147\u014a\3\2\2\2\u0148\u0146\3\2\2\2\u0149\u0141\3\2\2\2\u0149"+ + "\u014a\3\2\2\2\u014a\u014b\3\2\2\2\u014b\u014e\7\4\2\2\u014c\u014e\5,"+ + "\27\2\u014d\u0140\3\2\2\2\u014d\u014c\3\2\2\2\u014e\33\3\2\2\2\u014f\u0150"+ + "\5`\61\2\u0150\u0151\7\f\2\2\u0151\u0152\7\3\2\2\u0152\u0153\5\n\6\2\u0153"+ + "\u0154\7\4\2\2\u0154\35\3\2\2\2\u0155\u0156\t\13\2\2\u0156\37\3\2\2\2"+ + "\u0157\u015c\5,\27\2\u0158\u015a\7\f\2\2\u0159\u0158\3\2\2\2\u0159\u015a"+ + "\3\2\2\2\u015a\u015b\3\2\2\2\u015b\u015d\5`\61\2\u015c\u0159\3\2\2\2\u015c"+ + "\u015d\3\2\2\2\u015d!\3\2\2\2\u015e\u0162\5*\26\2\u015f\u0161\5$\23\2"+ + "\u0160\u015f\3\2\2\2\u0161\u0164\3\2\2\2\u0162\u0160\3\2\2\2\u0162\u0163"+ + "\3\2\2\2\u0163#\3\2\2\2\u0164\u0162\3\2\2\2\u0165\u0166\5&\24\2\u0166"+ + "\u0167\7\61\2\2\u0167\u0169\5*\26\2\u0168\u016a\5(\25\2\u0169\u0168\3"+ + "\2\2\2\u0169\u016a\3\2\2\2\u016a\u0171\3\2\2\2\u016b\u016c\7<\2\2\u016c"+ + "\u016d\5&\24\2\u016d\u016e\7\61\2\2\u016e\u016f\5*\26\2\u016f\u0171\3"+ + "\2\2\2\u0170\u0165\3\2\2\2\u0170\u016b\3\2\2\2\u0171%\3\2\2\2\u0172\u0174"+ + "\7.\2\2\u0173\u0172\3\2\2\2\u0173\u0174\3\2\2\2\u0174\u0182\3\2\2\2\u0175"+ + "\u0177\7\63\2\2\u0176\u0178\7D\2\2\u0177\u0176\3\2\2\2\u0177\u0178\3\2"+ + "\2\2\u0178\u0182\3\2\2\2\u0179\u017b\7H\2\2\u017a\u017c\7D\2\2\u017b\u017a"+ + "\3\2\2\2\u017b\u017c\3\2\2\2\u017c\u0182\3\2\2\2\u017d\u017f\7&\2\2\u017e"+ + "\u0180\7D\2\2\u017f\u017e\3\2\2\2\u017f\u0180\3\2\2\2\u0180\u0182\3\2"+ + "\2\2\u0181\u0173\3\2\2\2\u0181\u0175\3\2\2\2\u0181\u0179\3\2\2\2\u0181"+ + "\u017d\3\2\2\2\u0182\'\3\2\2\2\u0183\u0184\7@\2\2\u0184\u0192\5.\30\2"+ + "\u0185\u0186\7X\2\2\u0186\u0187\7\3\2\2\u0187\u018c\5`\61\2\u0188\u0189"+ + "\7\5\2\2\u0189\u018b\5`\61\2\u018a\u0188\3\2\2\2\u018b\u018e\3\2\2\2\u018c"+ + "\u018a\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018f\3\2\2\2\u018e\u018c\3\2"+ + "\2\2\u018f\u0190\7\4\2\2\u0190\u0192\3\2\2\2\u0191\u0183\3\2\2\2\u0191"+ + "\u0185\3\2\2\2\u0192)\3\2\2\2\u0193\u0198\5b\62\2\u0194\u0196\7\f\2\2"+ + "\u0195\u0194\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0197\3\2\2\2\u0197\u0199"+ + "\5^\60\2\u0198\u0195\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u01ad\3\2\2\2\u019a"+ + "\u019b\7\3\2\2\u019b\u019c\5\n\6\2\u019c\u01a1\7\4\2\2\u019d\u019f\7\f"+ + "\2\2\u019e\u019d\3\2\2\2\u019e\u019f\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0"+ + "\u01a2\5^\60\2\u01a1\u019e\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01ad\3\2"+ + "\2\2\u01a3\u01a4\7\3\2\2\u01a4\u01a5\5\"\22\2\u01a5\u01aa\7\4\2\2\u01a6"+ + "\u01a8\7\f\2\2\u01a7\u01a6\3\2\2\2\u01a7\u01a8\3\2\2\2\u01a8\u01a9\3\2"+ + "\2\2\u01a9\u01ab\5^\60\2\u01aa\u01a7\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab"+ + "\u01ad\3\2\2\2\u01ac\u0193\3\2\2\2\u01ac\u019a\3\2\2\2\u01ac\u01a3\3\2"+ + "\2\2\u01ad+\3\2\2\2\u01ae\u01af\5.\30\2\u01af-\3\2\2\2\u01b0\u01b1\b\30"+ + "\1\2\u01b1\u01b2\7=\2\2\u01b2\u01d0\5.\30\n\u01b3\u01b4\7\37\2\2\u01b4"+ + "\u01b5\7\3\2\2\u01b5\u01b6\5\b\5\2\u01b6\u01b7\7\4\2\2\u01b7\u01d0\3\2"+ + "\2\2\u01b8\u01b9\7J\2\2\u01b9\u01ba\7\3\2\2\u01ba\u01bb\5j\66\2\u01bb"+ + "\u01bc\5\60\31\2\u01bc\u01bd\7\4\2\2\u01bd\u01d0\3\2\2\2\u01be\u01bf\7"+ + "\67\2\2\u01bf\u01c0\7\3\2\2\u01c0\u01c1\5^\60\2\u01c1\u01c2\7\5\2\2\u01c2"+ + "\u01c3\5j\66\2\u01c3\u01c4\5\60\31\2\u01c4\u01c5\7\4\2\2\u01c5\u01d0\3"+ + "\2\2\2\u01c6\u01c7\7\67\2\2\u01c7\u01c8\7\3\2\2\u01c8\u01c9\5j\66\2\u01c9"+ + "\u01ca\7\5\2\2\u01ca\u01cb\5j\66\2\u01cb\u01cc\5\60\31\2\u01cc\u01cd\7"+ + "\4\2\2\u01cd\u01d0\3\2\2\2\u01ce\u01d0\5\62\32\2\u01cf\u01b0\3\2\2\2\u01cf"+ + "\u01b3\3\2\2\2\u01cf\u01b8\3\2\2\2\u01cf\u01be\3\2\2\2\u01cf\u01c6\3\2"+ + "\2\2\u01cf\u01ce\3\2\2\2\u01d0\u01d9\3\2\2\2\u01d1\u01d2\f\4\2\2\u01d2"+ + "\u01d3\7\n\2\2\u01d3\u01d8\5.\30\5\u01d4\u01d5\f\3\2\2\u01d5\u01d6\7B"+ + "\2\2\u01d6\u01d8\5.\30\4\u01d7\u01d1\3\2\2\2\u01d7\u01d4\3\2\2\2\u01d8"+ + "\u01db\3\2\2\2\u01d9\u01d7\3\2\2\2\u01d9\u01da\3\2\2\2\u01da/\3\2\2\2"+ + "\u01db\u01d9\3\2\2\2\u01dc\u01dd\7\5\2\2\u01dd\u01df\5j\66\2\u01de\u01dc"+ + "\3\2\2\2\u01df\u01e2\3\2\2\2\u01e0\u01de\3\2\2\2\u01e0\u01e1\3\2\2\2\u01e1"+ + "\61\3\2\2\2\u01e2\u01e0\3\2\2\2\u01e3\u01e5\5<\37\2\u01e4\u01e6\5\64\33"+ + "\2\u01e5\u01e4\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6\63\3\2\2\2\u01e7\u01e9"+ + "\7=\2\2\u01e8\u01e7\3\2\2\2\u01e8\u01e9\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea"+ + "\u01eb\7\16\2\2\u01eb\u01ec\5<\37\2\u01ec\u01ed\7\n\2\2\u01ed\u01ee\5"+ + "<\37\2\u01ee\u0216\3\2\2\2\u01ef\u01f1\7=\2\2\u01f0\u01ef\3\2\2\2\u01f0"+ + "\u01f1\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\7-\2\2\u01f3\u01f4\7\3"+ + "\2\2\u01f4\u01f9\5<\37\2\u01f5\u01f6\7\5\2\2\u01f6\u01f8\5<\37\2\u01f7"+ + "\u01f5\3\2\2\2\u01f8\u01fb\3\2\2\2\u01f9\u01f7\3\2\2\2\u01f9\u01fa\3\2"+ + "\2\2\u01fa\u01fc\3\2\2\2\u01fb\u01f9\3\2\2\2\u01fc\u01fd\7\4\2\2\u01fd"+ + "\u0216\3\2\2\2\u01fe\u0200\7=\2\2\u01ff\u01fe\3\2\2\2\u01ff\u0200\3\2"+ + "\2\2\u0200\u0201\3\2\2\2\u0201\u0202\7-\2\2\u0202\u0203\7\3\2\2\u0203"+ + "\u0204\5\b\5\2\u0204\u0205\7\4\2\2\u0205\u0216\3\2\2\2\u0206\u0208\7="+ + "\2\2\u0207\u0206\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u0209\3\2\2\2\u0209"+ + "\u020a\7\64\2\2\u020a\u0216\58\35\2\u020b\u020d\7=\2\2\u020c\u020b\3\2"+ + "\2\2\u020c\u020d\3\2\2\2\u020d\u020e\3\2\2\2\u020e\u020f\7I\2\2\u020f"+ + "\u0216\5j\66\2\u0210\u0212\7\60\2\2\u0211\u0213\7=\2\2\u0212\u0211\3\2"+ + "\2\2\u0212\u0213\3\2\2\2\u0213\u0214\3\2\2\2\u0214\u0216\7>\2\2\u0215"+ + "\u01e8\3\2\2\2\u0215\u01f0\3\2\2\2\u0215\u01ff\3\2\2\2\u0215\u0207\3\2"+ + "\2\2\u0215\u020c\3\2\2\2\u0215\u0210\3\2\2\2\u0216\65\3\2\2\2\u0217\u0218"+ + "\7\64\2\2\u0218\u0219\58\35\2\u0219\67\3\2\2\2\u021a\u021c\5j\66\2\u021b"+ + "\u021d\5:\36\2\u021c\u021b\3\2\2\2\u021c\u021d\3\2\2\2\u021d9\3\2\2\2"+ + "\u021e\u021f\7\35\2\2\u021f\u0225\5j\66\2\u0220\u0221\7^\2\2\u0221\u0222"+ + "\5j\66\2\u0222\u0223\7e\2\2\u0223\u0225\3\2\2\2\u0224\u021e\3\2\2\2\u0224"+ + "\u0220\3\2\2\2\u0225;\3\2\2\2\u0226\u0227\b\37\1\2\u0227\u022b\5> \2\u0228"+ + "\u0229\t\7\2\2\u0229\u022b\5<\37\6\u022a\u0226\3\2\2\2\u022a\u0228\3\2"+ + "\2\2\u022b\u0238\3\2\2\2\u022c\u022d\f\5\2\2\u022d\u022e\t\f\2\2\u022e"+ + "\u0237\5<\37\6\u022f\u0230\f\4\2\2\u0230\u0231\t\7\2\2\u0231\u0237\5<"+ + "\37\5\u0232\u0233\f\3\2\2\u0233\u0234\5T+\2\u0234\u0235\5<\37\4\u0235"+ + "\u0237\3\2\2\2\u0236\u022c\3\2\2\2\u0236\u022f\3\2\2\2\u0236\u0232\3\2"+ + "\2\2\u0237\u023a\3\2\2\2\u0238\u0236\3\2\2\2\u0238\u0239\3\2\2\2\u0239"+ + "=\3\2\2\2\u023a\u0238\3\2\2\2\u023b\u0250\5@!\2\u023c\u0250\5H%\2\u023d"+ + "\u0250\5D#\2\u023e\u0250\5R*\2\u023f\u0240\5^\60\2\u0240\u0241\7s\2\2"+ + "\u0241\u0243\3\2\2\2\u0242\u023f\3\2\2\2\u0242\u0243\3\2\2\2\u0243\u0244"+ + "\3\2\2\2\u0244\u0250\7o\2\2\u0245\u0250\5L\'\2\u0246\u0247\7\3\2\2\u0247"+ + "\u0248\5\b\5\2\u0248\u0249\7\4\2\2\u0249\u0250\3\2\2\2\u024a\u0250\5^"+ + "\60\2\u024b\u024c\7\3\2\2\u024c\u024d\5,\27\2\u024d\u024e\7\4\2\2\u024e"+ + "\u0250\3\2\2\2\u024f\u023b\3\2\2\2\u024f\u023c\3\2\2\2\u024f\u023d\3\2"+ + "\2\2\u024f\u023e\3\2\2\2\u024f\u0242\3\2\2\2\u024f\u0245\3\2\2\2\u024f"+ + "\u0246\3\2\2\2\u024f\u024a\3\2\2\2\u024f\u024b\3\2\2\2\u0250?\3\2\2\2"+ + "\u0251\u025c\5B\"\2\u0252\u0253\7_\2\2\u0253\u0254\5B\"\2\u0254\u0255"+ + "\7e\2\2\u0255\u025c\3\2\2\2\u0256\u025c\5F$\2\u0257\u0258\7_\2\2\u0258"+ + "\u0259\5F$\2\u0259\u025a\7e\2\2\u025a\u025c\3\2\2\2\u025b\u0251\3\2\2"+ + "\2\u025b\u0252\3\2\2\2\u025b\u0256\3\2\2\2\u025b\u0257\3\2\2\2\u025cA"+ + "\3\2\2\2\u025d\u025e\7\20\2\2\u025e\u025f\7\3\2\2\u025f\u0260\5,\27\2"+ + "\u0260\u0261\7\f\2\2\u0261\u0262\5\\/\2\u0262\u0263\7\4\2\2\u0263C\3\2"+ + "\2\2\u0264\u0267\7\25\2\2\u0265\u0266\7\3\2\2\u0266\u0268\7\4\2\2\u0267"+ + "\u0265\3\2\2\2\u0267\u0268\3\2\2\2\u0268\u0272\3\2\2\2\u0269\u026f\7\26"+ + "\2\2\u026a\u026c\7\3\2\2\u026b\u026d\7v\2\2\u026c\u026b\3\2\2\2\u026c"+ + "\u026d\3\2\2\2\u026d\u026e\3\2\2\2\u026e\u0270\7\4\2\2\u026f\u026a\3\2"+ + "\2\2\u026f\u0270\3\2\2\2\u0270\u0272\3\2\2\2\u0271\u0264\3\2\2\2\u0271"+ + "\u0269\3\2\2\2\u0272E\3\2\2\2\u0273\u0274\7\24\2\2\u0274\u0275\7\3\2\2"+ + "\u0275\u0276\5,\27\2\u0276\u0277\7\5\2\2\u0277\u0278\5\\/\2\u0278\u0279"+ + "\7\4\2\2\u0279G\3\2\2\2\u027a\u0280\5J&\2\u027b\u027c\7_\2\2\u027c\u027d"+ + "\5J&\2\u027d\u027e\7e\2\2\u027e\u0280\3\2\2\2\u027f\u027a\3\2\2\2\u027f"+ + "\u027b\3\2\2\2\u0280I\3\2\2\2\u0281\u0282\7!\2\2\u0282\u0283\7\3\2\2\u0283"+ + "\u0284\5`\61\2\u0284\u0285\7%\2\2\u0285\u0286\5<\37\2\u0286\u0287\7\4"+ + "\2\2\u0287K\3\2\2\2\u0288\u028e\5N(\2\u0289\u028a\7_\2\2\u028a\u028b\5"+ + "N(\2\u028b\u028c\7e\2\2\u028c\u028e\3\2\2\2\u028d\u0288\3\2\2\2\u028d"+ + "\u0289\3\2\2\2\u028eM\3\2\2\2\u028f\u0290\5P)\2\u0290\u029c\7\3\2\2\u0291"+ + "\u0293\5\36\20\2\u0292\u0291\3\2\2\2\u0292\u0293\3\2\2\2\u0293\u0294\3"+ + "\2\2\2\u0294\u0299\5,\27\2\u0295\u0296\7\5\2\2\u0296\u0298\5,\27\2\u0297"+ + "\u0295\3\2\2\2\u0298\u029b\3\2\2\2\u0299\u0297\3\2\2\2\u0299\u029a\3\2"+ + "\2\2\u029a\u029d\3\2\2\2\u029b\u0299\3\2\2\2\u029c\u0292\3\2\2\2\u029c"+ + "\u029d\3\2\2\2\u029d\u029e\3\2\2\2\u029e\u029f\7\4\2\2\u029fO\3\2\2\2"+ + "\u02a0\u02a4\7\63\2\2\u02a1\u02a4\7H\2\2\u02a2\u02a4\5`\61\2\u02a3\u02a0"+ + "\3\2\2\2\u02a3\u02a1\3\2\2\2\u02a3\u02a2\3\2\2\2\u02a4Q\3\2\2\2\u02a5"+ + "\u02c0\7>\2\2\u02a6\u02c0\5X-\2\u02a7\u02c0\5h\65\2\u02a8\u02c0\5V,\2"+ + "\u02a9\u02ab\7u\2\2\u02aa\u02a9\3\2\2\2\u02ab\u02ac\3\2\2\2\u02ac\u02aa"+ + "\3\2\2\2\u02ac\u02ad\3\2\2\2\u02ad\u02c0\3\2\2\2\u02ae\u02c0\7t\2\2\u02af"+ + "\u02b0\7a\2\2\u02b0\u02b1\5j\66\2\u02b1\u02b2\7e\2\2\u02b2\u02c0\3\2\2"+ + "\2\u02b3\u02b4\7b\2\2\u02b4\u02b5\5j\66\2\u02b5\u02b6\7e\2\2\u02b6\u02c0"+ + "\3\2\2\2\u02b7\u02b8\7c\2\2\u02b8\u02b9\5j\66\2\u02b9\u02ba\7e\2\2\u02ba"+ + "\u02c0\3\2\2\2\u02bb\u02bc\7d\2\2\u02bc\u02bd\5j\66\2\u02bd\u02be\7e\2"+ + "\2\u02be\u02c0\3\2\2\2\u02bf\u02a5\3\2\2\2\u02bf\u02a6\3\2\2\2\u02bf\u02a7"+ + "\3\2\2\2\u02bf\u02a8\3\2\2\2\u02bf\u02aa\3\2\2\2\u02bf\u02ae\3\2\2\2\u02bf"+ + "\u02af\3\2\2\2\u02bf\u02b3\3\2\2\2\u02bf\u02b7\3\2\2\2\u02bf\u02bb\3\2"+ + "\2\2\u02c0S\3\2\2\2\u02c1\u02c2\t\r\2\2\u02c2U\3\2\2\2\u02c3\u02c4\t\16"+ + "\2\2\u02c4W\3\2\2\2\u02c5\u02c7\7/\2\2\u02c6\u02c8\t\7\2\2\u02c7\u02c6"+ + "\3\2\2\2\u02c7\u02c8\3\2\2\2\u02c8\u02cb\3\2\2\2\u02c9\u02cc\5h\65\2\u02ca"+ + "\u02cc\5j\66\2\u02cb\u02c9\3\2\2\2\u02cb\u02ca\3\2\2\2\u02cc\u02cd\3\2"+ + "\2\2\u02cd\u02d0\5Z.\2\u02ce\u02cf\7U\2\2\u02cf\u02d1\5Z.\2\u02d0\u02ce"+ + "\3\2\2\2\u02d0\u02d1\3\2\2\2\u02d1Y\3\2\2\2\u02d2\u02d3\t\17\2\2\u02d3"+ + "[\3\2\2\2\u02d4\u02d5\5`\61\2\u02d5]\3\2\2\2\u02d6\u02d7\5`\61\2\u02d7"+ + "\u02d8\7s\2\2\u02d8\u02da\3\2\2\2\u02d9\u02d6\3\2\2\2\u02da\u02dd\3\2"+ + "\2\2\u02db\u02d9\3\2\2\2\u02db\u02dc\3\2\2\2\u02dc\u02de\3\2\2\2\u02dd"+ + "\u02db\3\2\2\2\u02de\u02df\5`\61\2\u02df_\3\2\2\2\u02e0\u02e3\5d\63\2"+ + "\u02e1\u02e3\5f\64\2\u02e2\u02e0\3\2\2\2\u02e2\u02e1\3\2\2\2\u02e3a\3"+ + "\2\2\2\u02e4\u02e5\5`\61\2\u02e5\u02e6\7\6\2\2\u02e6\u02e8\3\2\2\2\u02e7"+ + "\u02e4\3\2\2\2\u02e7\u02e8\3\2\2\2\u02e8\u02e9\3\2\2\2\u02e9\u02f1\7z"+ + "\2\2\u02ea\u02eb\5`\61\2\u02eb\u02ec\7\6\2\2\u02ec\u02ee\3\2\2\2\u02ed"+ + "\u02ea\3\2\2\2\u02ed\u02ee\3\2\2\2\u02ee\u02ef\3\2\2\2\u02ef\u02f1\5`"+ + "\61\2\u02f0\u02e7\3\2\2\2\u02f0\u02ed\3\2\2\2\u02f1c\3\2\2\2\u02f2\u02f5"+ + "\7{\2\2\u02f3\u02f5\7|\2\2\u02f4\u02f2\3\2\2\2\u02f4\u02f3\3\2\2\2\u02f5"+ + "e\3\2\2\2\u02f6\u02fa\7x\2\2\u02f7\u02fa\5l\67\2\u02f8\u02fa\7y\2\2\u02f9"+ + "\u02f6\3\2\2\2\u02f9\u02f7\3\2\2\2\u02f9\u02f8\3\2\2\2\u02fag\3\2\2\2"+ + "\u02fb\u02fe\7w\2\2\u02fc\u02fe\7v\2\2\u02fd\u02fb\3\2\2\2\u02fd\u02fc"+ + "\3\2\2\2\u02fei\3\2\2\2\u02ff\u0300\t\20\2\2\u0300k\3\2\2\2\u0301\u0302"+ + "\t\21\2\2\u0302m\3\2\2\2j}\177\u0083\u008c\u008e\u0092\u0099\u00a0\u00a5"+ + "\u00aa\u00b2\u00b6\u00be\u00c1\u00c7\u00cc\u00cf\u00d4\u00d7\u00d9\u00e1"+ + "\u00e4\u00f0\u00f3\u00f6\u00fd\u0104\u0108\u010c\u0110\u0117\u011b\u011f"+ + "\u0124\u0128\u0130\u0134\u013b\u0146\u0149\u014d\u0159\u015c\u0162\u0169"+ + "\u0170\u0173\u0177\u017b\u017f\u0181\u018c\u0191\u0195\u0198\u019e\u01a1"+ + "\u01a7\u01aa\u01ac\u01cf\u01d7\u01d9\u01e0\u01e5\u01e8\u01f0\u01f9\u01ff"+ + "\u0207\u020c\u0212\u0215\u021c\u0224\u022a\u0236\u0238\u0242\u024f\u025b"+ + "\u0267\u026c\u026f\u0271\u027f\u028d\u0292\u0299\u029c\u02a3\u02ac\u02bf"+ + "\u02c7\u02cb\u02d0\u02db\u02e2\u02e7\u02ed\u02f0\u02f4\u02f9\u02fd"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java index b8ecc574ad599..ed64045191be0 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/parser/SqlBaseVisitor.java @@ -358,13 +358,6 @@ interface SqlBaseVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitExtract(SqlBaseParser.ExtractContext ctx); - /** - * Visit a parse tree produced by the {@code currentDateFunction} - * labeled alternative in {@link SqlBaseParser#primaryExpression}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCurrentDateFunction(SqlBaseParser.CurrentDateFunctionContext ctx); /** * Visit a parse tree produced by the {@code currentDateTimeFunction} * labeled alternative in {@link SqlBaseParser#primaryExpression}. @@ -426,12 +419,6 @@ interface SqlBaseVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitCastTemplate(SqlBaseParser.CastTemplateContext ctx); - /** - * Visit a parse tree produced by {@link SqlBaseParser#builtinDateFunction}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitBuiltinDateFunction(SqlBaseParser.BuiltinDateFunctionContext ctx); /** * Visit a parse tree produced by {@link SqlBaseParser#builtinDateTimeFunction}. * @param ctx the parse tree From 66a53356d0d5c8ec784715a18f4ed8c8f1a73fcd Mon Sep 17 00:00:00 2001 From: Marios Trivyzas Date: Sun, 3 Feb 2019 15:58:41 +0200 Subject: [PATCH 3/5] Address comments --- .../qa/src/main/resources/datetime.sql-spec | 4 +- .../scalar/ConfigurationFunction.java | 2 +- .../function/scalar/datetime/CurrentDate.java | 40 +----------- .../scalar/datetime/CurrentDateTime.java | 51 ++++----------- .../scalar/datetime/CurrentFunction.java | 49 ++++++++++++++ .../scalar/datetime/CurrentDateTests.java | 46 +++++++++++++ .../scalar/datetime/CurrentDateTimeTests.java | 64 +++++++++++++++---- .../xpack/sql/tree/NodeSubclassTests.java | 7 +- 8 files changed, 166 insertions(+), 97 deletions(-) create mode 100644 x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentFunction.java create mode 100644 x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTests.java diff --git a/x-pack/plugin/sql/qa/src/main/resources/datetime.sql-spec b/x-pack/plugin/sql/qa/src/main/resources/datetime.sql-spec index fc6b65269fea3..1c21e9a7e6f9a 100644 --- a/x-pack/plugin/sql/qa/src/main/resources/datetime.sql-spec +++ b/x-pack/plugin/sql/qa/src/main/resources/datetime.sql-spec @@ -121,10 +121,10 @@ currentTimestampYear SELECT YEAR(CURRENT_TIMESTAMP()) AS result; orderByCurrentTimestamp -SELECT first_name FROM test_emp ORDER BY NOW(), first_name LIMIT 5; +SELECT first_name FROM test_emp ORDER BY NOW(), first_name NULLS LAST LIMIT 5; groupByCurrentTimestamp -SELECT MAX(salary) FROM test_emp GROUP BY NOW(); +SELECT MAX(salary) AS max FROM test_emp GROUP BY NOW(); // // H2 uses the local timezone instead of the specified one diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/ConfigurationFunction.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/ConfigurationFunction.java index a24fba1b13569..dc49d2a950a63 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/ConfigurationFunction.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/ConfigurationFunction.java @@ -32,7 +32,7 @@ public Expression replaceChildren(List newChildren) { throw new UnsupportedOperationException("this node doesn't have any children"); } - protected Configuration configuration() { + public Configuration configuration() { return configuration; } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java index eb82fe759e153..03b5567e9266c 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDate.java @@ -6,56 +6,20 @@ package org.elasticsearch.xpack.sql.expression.function.scalar.datetime; -import org.elasticsearch.xpack.sql.expression.function.scalar.ConfigurationFunction; import org.elasticsearch.xpack.sql.session.Configuration; import org.elasticsearch.xpack.sql.tree.NodeInfo; import org.elasticsearch.xpack.sql.tree.Source; import org.elasticsearch.xpack.sql.type.DataType; import org.elasticsearch.xpack.sql.util.DateUtils; -import java.time.ZonedDateTime; -import java.util.Objects; - -public class CurrentDate extends ConfigurationFunction { - - private final ZonedDateTime date; +public class CurrentDate extends CurrentFunction { public CurrentDate(Source source, Configuration configuration) { - super(source, configuration, DataType.DATE); - ZonedDateTime zdt = configuration().now(); - if (zdt == null) { - this.date = null; - } else { - this.date = DateUtils.asDateOnly(configuration().now()); - } - } - - @Override - public Object fold() { - return date; + super(source, configuration, DateUtils.asDateOnly(configuration.now()), DataType.DATE); } @Override protected NodeInfo info() { return NodeInfo.create(this, CurrentDate::new, configuration()); } - - @Override - public int hashCode() { - return Objects.hash(date); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (obj == null || getClass() != obj.getClass()) { - return false; - } - - CurrentDate other = (CurrentDate) obj; - return Objects.equals(date, other.date); - } } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTime.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTime.java index 82556795b5961..509344aac3137 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTime.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTime.java @@ -7,29 +7,24 @@ package org.elasticsearch.xpack.sql.expression.function.scalar.datetime; import org.elasticsearch.xpack.sql.expression.Expression; -import org.elasticsearch.xpack.sql.expression.function.scalar.ConfigurationFunction; import org.elasticsearch.xpack.sql.session.Configuration; -import org.elasticsearch.xpack.sql.tree.Source; import org.elasticsearch.xpack.sql.tree.NodeInfo; +import org.elasticsearch.xpack.sql.tree.Source; import org.elasticsearch.xpack.sql.type.DataType; import java.time.ZonedDateTime; -import java.util.Objects; -public class CurrentDateTime extends ConfigurationFunction { +public class CurrentDateTime extends CurrentFunction { + private final Expression precision; - private final ZonedDateTime dateTime; public CurrentDateTime(Source source, Expression precision, Configuration configuration) { - super(source, configuration, DataType.DATETIME); + super(source, configuration, nanoPrecision(configuration.now(), precision), DataType.DATETIME); this.precision = precision; - int p = precision != null ? ((Number) precision.fold()).intValue() : 0; - this.dateTime = nanoPrecision(configuration().now(), p); } - @Override - public Object fold() { - return dateTime; + Expression precision() { + return precision; } @Override @@ -37,33 +32,13 @@ protected NodeInfo info() { return NodeInfo.create(this, CurrentDateTime::new, precision, configuration()); } - @Override - public int hashCode() { - return Objects.hash(dateTime); - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - - if (obj == null || getClass() != obj.getClass()) { - return false; - } - - CurrentDateTime other = (CurrentDateTime) obj; - return Objects.equals(dateTime, other.dateTime); - } - - static ZonedDateTime nanoPrecision(ZonedDateTime zdt, int precision) { - if (zdt != null) { - int nano = zdt.getNano(); - if (precision >= 0 && precision < 10) { - // remove the remainder - nano = nano - nano % (int) Math.pow(10, (9 - precision)); - return zdt.withNano(nano); - } + static ZonedDateTime nanoPrecision(ZonedDateTime zdt, Expression precisionExpression) { + int precision = precisionExpression != null ? ((Number) precisionExpression.fold()).intValue() : 0; + int nano = zdt.getNano(); + if (precision >= 0 && precision < 10) { + // remove the remainder + nano = nano - nano % (int) Math.pow(10, (9 - precision)); + return zdt.withNano(nano); } return zdt; } diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentFunction.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentFunction.java new file mode 100644 index 0000000000000..3aae08903afa5 --- /dev/null +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentFunction.java @@ -0,0 +1,49 @@ +/* + * 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.expression.function.scalar.datetime; + +import org.elasticsearch.xpack.sql.expression.function.scalar.ConfigurationFunction; +import org.elasticsearch.xpack.sql.session.Configuration; +import org.elasticsearch.xpack.sql.tree.Source; +import org.elasticsearch.xpack.sql.type.DataType; + +import java.time.ZonedDateTime; +import java.util.Objects; + +abstract class CurrentFunction extends ConfigurationFunction { + + private final ZonedDateTime date; + + CurrentFunction(Source source, Configuration configuration, ZonedDateTime date, DataType dataType) { + super(source, configuration, dataType); + this.date = date; + } + + @Override + public Object fold() { + return date; + } + + @Override + public int hashCode() { + return Objects.hash(date); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null || getClass() != obj.getClass()) { + return false; + } + + CurrentFunction other = (CurrentFunction) obj; + return Objects.equals(date, other.date); + } +} diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTests.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTests.java new file mode 100644 index 0000000000000..7d818e46957fb --- /dev/null +++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTests.java @@ -0,0 +1,46 @@ +/* + * 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.expression.function.scalar.datetime; + +import org.elasticsearch.xpack.sql.expression.Expression; +import org.elasticsearch.xpack.sql.proto.Mode; +import org.elasticsearch.xpack.sql.proto.Protocol; +import org.elasticsearch.xpack.sql.session.Configuration; +import org.elasticsearch.xpack.sql.tree.AbstractNodeTestCase; +import org.elasticsearch.xpack.sql.tree.Source; + +public class CurrentDateTests extends AbstractNodeTestCase { + + public static CurrentDate randomCurrentDate() { + return new CurrentDate(Source.EMPTY, new Configuration(randomZone(), Protocol.FETCH_SIZE, + Protocol.REQUEST_TIMEOUT, Protocol.PAGE_TIMEOUT, null, Mode.PLAIN, null, null)); + } + + @Override + protected CurrentDate randomInstance() { + return randomCurrentDate(); + } + + @Override + protected CurrentDate copy(CurrentDate instance) { + return new CurrentDate(instance.source(), instance.configuration()); + } + + @Override + protected CurrentDate mutate(CurrentDate instance) { + return new CurrentDate(instance.source(), new Configuration(randomZone(), Protocol.FETCH_SIZE, + Protocol.REQUEST_TIMEOUT, Protocol.PAGE_TIMEOUT, null, Mode.PLAIN, null, null)); + } + + @Override + public void testTransform() { + } + + @Override + public void testReplaceChildren() { + } +} diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTimeTests.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTimeTests.java index c5cdb06724bf8..6f88ba3f783ef 100644 --- a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTimeTests.java +++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTimeTests.java @@ -6,23 +6,61 @@ package org.elasticsearch.xpack.sql.expression.function.scalar.datetime; -import org.elasticsearch.test.ESTestCase; +import org.elasticsearch.xpack.sql.expression.Expression; +import org.elasticsearch.xpack.sql.expression.Literal; +import org.elasticsearch.xpack.sql.proto.Mode; +import org.elasticsearch.xpack.sql.proto.Protocol; +import org.elasticsearch.xpack.sql.session.Configuration; +import org.elasticsearch.xpack.sql.tree.AbstractNodeTestCase; import java.time.ZonedDateTime; -public class CurrentDateTimeTests extends ESTestCase { +import static org.elasticsearch.xpack.sql.tree.Source.EMPTY; - public void testNanoPrecision() throws Exception { +public class CurrentDateTimeTests extends AbstractNodeTestCase { + + public static CurrentDateTime randomCurrentDateTime() { + return new CurrentDateTime(EMPTY, Literal.of(EMPTY, randomInt(10)), + new Configuration(randomZone(), Protocol.FETCH_SIZE, + Protocol.REQUEST_TIMEOUT, Protocol.PAGE_TIMEOUT, null, Mode.PLAIN, null, null)); + } + + @Override + protected CurrentDateTime randomInstance() { + return randomCurrentDateTime(); + } + + @Override + protected CurrentDateTime copy(CurrentDateTime instance) { + return new CurrentDateTime(instance.source(), instance.precision(), instance.configuration()); + } + + @Override + protected CurrentDateTime mutate(CurrentDateTime instance) { + return new CurrentDateTime(instance.source(), Literal.of(EMPTY, randomInt(10)), + new Configuration(randomZone(), Protocol.FETCH_SIZE, + Protocol.REQUEST_TIMEOUT, Protocol.PAGE_TIMEOUT, null, Mode.PLAIN, null, null)); + } + + @Override + public void testTransform() { + } + + @Override + public void testReplaceChildren() { + } + + public void testNanoPrecision() { ZonedDateTime zdt = ZonedDateTime.parse("2018-01-23T12:34:45.123456789Z"); - assertEquals(000_000_000, CurrentDateTime.nanoPrecision(zdt, 0).getNano()); - assertEquals(100_000_000, CurrentDateTime.nanoPrecision(zdt, 1).getNano()); - assertEquals(120_000_000, CurrentDateTime.nanoPrecision(zdt, 2).getNano()); - assertEquals(123_000_000, CurrentDateTime.nanoPrecision(zdt, 3).getNano()); - assertEquals(123_400_000, CurrentDateTime.nanoPrecision(zdt, 4).getNano()); - assertEquals(123_450_000, CurrentDateTime.nanoPrecision(zdt, 5).getNano()); - assertEquals(123_456_000, CurrentDateTime.nanoPrecision(zdt, 6).getNano()); - assertEquals(123_456_700, CurrentDateTime.nanoPrecision(zdt, 7).getNano()); - assertEquals(123_456_780, CurrentDateTime.nanoPrecision(zdt, 8).getNano()); - assertEquals(123_456_789, CurrentDateTime.nanoPrecision(zdt, 9).getNano()); + assertEquals(000_000_000, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 0)).getNano()); + assertEquals(100_000_000, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 1)).getNano()); + assertEquals(120_000_000, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 2)).getNano()); + assertEquals(123_000_000, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 3)).getNano()); + assertEquals(123_400_000, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 4)).getNano()); + assertEquals(123_450_000, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 5)).getNano()); + assertEquals(123_456_000, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 6)).getNano()); + assertEquals(123_456_700, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 7)).getNano()); + assertEquals(123_456_780, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 8)).getNano()); + assertEquals(123_456_789, CurrentDateTime.nanoPrecision(zdt, Literal.of(EMPTY, 9)).getNano()); } } diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/tree/NodeSubclassTests.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/tree/NodeSubclassTests.java index 03f1a032cdab2..f11519f0f973f 100644 --- a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/tree/NodeSubclassTests.java +++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/tree/NodeSubclassTests.java @@ -92,8 +92,7 @@ */ public class NodeSubclassTests> extends ESTestCase { - - private static final List> CLASSES_WITH_MIN_TWO_CHILDREN = Arrays.> asList(IfNull.class, In.class, InPipe.class, + private static final List> CLASSES_WITH_MIN_TWO_CHILDREN = Arrays.asList(IfNull.class, In.class, InPipe.class, Percentile.class, Percentiles.class, PercentileRanks.class); private final Class subclass; @@ -138,9 +137,7 @@ public void testTransform() throws Exception { Type changedArgType = argTypes[changedArgOffset]; Object changedArgValue = randomValueOtherThan(nodeCtorArgs[changedArgOffset], () -> makeArg(changedArgType)); - B transformed = node.transformNodeProps(prop -> { - return Objects.equals(prop, originalArgValue) ? changedArgValue : prop; - }, Object.class); + B transformed = node.transformNodeProps(prop -> Objects.equals(prop, originalArgValue) ? changedArgValue : prop, Object.class); if (node.children().contains(originalArgValue) || node.children().equals(originalArgValue)) { if (node.children().equals(emptyList()) && originalArgValue.equals(emptyList())) { From f5e234770a19b8ee9a0c31c835fbd99eae257b93 Mon Sep 17 00:00:00 2001 From: Marios Trivyzas Date: Tue, 5 Feb 2019 10:39:47 +0200 Subject: [PATCH 4/5] address comment --- .../expression/function/scalar/datetime/CurrentDateTime.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTime.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTime.java index 509344aac3137..8224ef090b78c 100644 --- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTime.java +++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTime.java @@ -7,6 +7,7 @@ package org.elasticsearch.xpack.sql.expression.function.scalar.datetime; import org.elasticsearch.xpack.sql.expression.Expression; +import org.elasticsearch.xpack.sql.expression.Foldables; import org.elasticsearch.xpack.sql.session.Configuration; import org.elasticsearch.xpack.sql.tree.NodeInfo; import org.elasticsearch.xpack.sql.tree.Source; @@ -33,7 +34,7 @@ protected NodeInfo info() { } static ZonedDateTime nanoPrecision(ZonedDateTime zdt, Expression precisionExpression) { - int precision = precisionExpression != null ? ((Number) precisionExpression.fold()).intValue() : 0; + int precision = precisionExpression != null ? Foldables.intValueOf(precisionExpression) : 0; int nano = zdt.getNano(); if (precision >= 0 && precision < 10) { // remove the remainder From 480ccd6c4ad86b038383651c115e23e44c558882 Mon Sep 17 00:00:00 2001 From: Marios Trivyzas Date: Tue, 5 Feb 2019 15:56:31 +0200 Subject: [PATCH 5/5] Fix code after merge --- .../expression/function/scalar/datetime/CurrentDateTests.java | 4 ++-- .../function/scalar/datetime/CurrentDateTimeTests.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTests.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTests.java index 7d818e46957fb..5eaa9ccd6c268 100644 --- a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTests.java +++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/function/scalar/datetime/CurrentDateTests.java @@ -17,7 +17,7 @@ public class CurrentDateTests extends AbstractNodeTestCase