From 31c59e01265536e5f06d567f1bf8dfc2c3f55781 Mon Sep 17 00:00:00 2001
From: Marios Trivyzas
Date: Tue, 18 Sep 2018 18:14:48 +0200
Subject: [PATCH 1/2] SQL: Fix issue with options for QUERY() and MATCH().
Previously multiple comma separated lists of options where not
recognized correctly which resulted in only the last of them
to be taked into account, e.g.:
For the following query:
SELECT * FROM test WHERE QUERY('search', 'default_field=foo', 'default_operator=and')"
only the `default_operator=and` was finally passed to the ES query.
Fixes: #32602
---
x-pack/plugin/sql/src/main/antlr/SqlBase.g4 | 10 +-
.../predicate/fulltext/FullTextUtils.java | 12 +-
.../xpack/sql/parser/ExpressionBuilder.java | 19 +-
.../xpack/sql/parser/SqlBaseBaseListener.java | 12 +
.../xpack/sql/parser/SqlBaseBaseVisitor.java | 7 +
.../xpack/sql/parser/SqlBaseListener.java | 10 +
.../xpack/sql/parser/SqlBaseParser.java | 1721 +++++++++--------
.../xpack/sql/parser/SqlBaseVisitor.java | 6 +
.../xpack/sql/parser/SqlParserTests.java | 46 +-
.../sql/src/main/resources/fulltext.csv-spec | 21 +
10 files changed, 996 insertions(+), 868 deletions(-)
diff --git a/x-pack/plugin/sql/src/main/antlr/SqlBase.g4 b/x-pack/plugin/sql/src/main/antlr/SqlBase.g4
index 396cc70920aeb..ca6fdece28153 100644
--- a/x-pack/plugin/sql/src/main/antlr/SqlBase.g4
+++ b/x-pack/plugin/sql/src/main/antlr/SqlBase.g4
@@ -163,14 +163,18 @@ expression
booleanExpression
: NOT booleanExpression #logicalNot
| EXISTS '(' query ')' #exists
- | QUERY '(' queryString=string (',' options=string)* ')' #stringQuery
- | MATCH '(' singleField=qualifiedName ',' queryString=string (',' options=string)* ')' #matchQuery
- | MATCH '(' multiFields=string ',' queryString=string (',' options=string)* ')' #multiMatchQuery
+ | QUERY '(' queryString=string matchQueryOptions ')' #stringQuery
+ | MATCH '(' singleField=qualifiedName ',' queryString=string matchQueryOptions ')' #matchQuery
+ | MATCH '(' multiFields=string ',' queryString=string matchQueryOptions ')' #multiMatchQuery
| predicated #booleanDefault
| left=booleanExpression operator=AND right=booleanExpression #logicalBinary
| left=booleanExpression operator=OR right=booleanExpression #logicalBinary
;
+matchQueryOptions
+ : (',' string)*
+ ;
+
// workaround for:
// https://github.com/antlr/antlr4/issues/780
// https://github.com/antlr/antlr4/issues/781
diff --git a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/predicate/fulltext/FullTextUtils.java b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/predicate/fulltext/FullTextUtils.java
index f22f46cad2b03..bb57c7a154930 100644
--- a/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/predicate/fulltext/FullTextUtils.java
+++ b/x-pack/plugin/sql/src/main/java/org/elasticsearch/xpack/sql/expression/predicate/fulltext/FullTextUtils.java
@@ -5,16 +5,16 @@
*/
package org.elasticsearch.xpack.sql.expression.predicate.fulltext;
-import java.util.LinkedHashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
import org.elasticsearch.common.Strings;
import org.elasticsearch.xpack.sql.expression.predicate.fulltext.FullTextPredicate.Operator;
import org.elasticsearch.xpack.sql.parser.ParsingException;
import org.elasticsearch.xpack.sql.tree.Location;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
import static java.util.Collections.emptyMap;
abstract class FullTextUtils {
@@ -26,7 +26,7 @@ static Map parseSettings(String options, Location location) {
return emptyMap();
}
String[] list = Strings.delimitedListToStringArray(options, DELIMITER);
- Map op = new LinkedHashMap(list.length);
+ Map op = new LinkedHashMap<>(list.length);
for (String entry : list) {
String[] split = splitInTwo(entry, "=");
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 2719d39bbecb2..539713f3285b5 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
@@ -67,6 +67,7 @@
import org.elasticsearch.xpack.sql.parser.SqlBaseParser.LogicalBinaryContext;
import org.elasticsearch.xpack.sql.parser.SqlBaseParser.LogicalNotContext;
import org.elasticsearch.xpack.sql.parser.SqlBaseParser.MatchQueryContext;
+import org.elasticsearch.xpack.sql.parser.SqlBaseParser.MatchQueryOptionsContext;
import org.elasticsearch.xpack.sql.parser.SqlBaseParser.MultiMatchQueryContext;
import org.elasticsearch.xpack.sql.parser.SqlBaseParser.NullLiteralContext;
import org.elasticsearch.xpack.sql.parser.SqlBaseParser.OrderByContext;
@@ -99,6 +100,7 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.StringJoiner;
import static java.util.Collections.singletonList;
import static org.elasticsearch.xpack.sql.type.DataTypeConversion.conversionFor;
@@ -324,18 +326,27 @@ public Object visitArithmeticBinary(ArithmeticBinaryContext ctx) {
//
@Override
public Object visitStringQuery(StringQueryContext ctx) {
- return new StringQueryPredicate(source(ctx), string(ctx.queryString), string(ctx.options));
+ return new StringQueryPredicate(source(ctx), string(ctx.queryString), getQueryOptions(ctx.matchQueryOptions()));
}
@Override
public Object visitMatchQuery(MatchQueryContext ctx) {
return new MatchQueryPredicate(source(ctx), new UnresolvedAttribute(source(ctx.singleField),
- visitQualifiedName(ctx.singleField)), string(ctx.queryString), string(ctx.options));
+ visitQualifiedName(ctx.singleField)), string(ctx.queryString), getQueryOptions(ctx.matchQueryOptions()));
}
@Override
public Object visitMultiMatchQuery(MultiMatchQueryContext ctx) {
- return new MultiMatchQueryPredicate(source(ctx), string(ctx.multiFields), string(ctx.queryString), string(ctx.options));
+ return new MultiMatchQueryPredicate(source(ctx), string(ctx.multiFields), string(ctx.queryString),
+ getQueryOptions(ctx.matchQueryOptions()));
+ }
+
+ private String getQueryOptions(MatchQueryOptionsContext optionsCtx) {
+ StringJoiner sj = new StringJoiner(";");
+ for (StringContext sc: optionsCtx.string()) {
+ sj.add(string(sc));
+ }
+ return sj.toString();
}
@Override
@@ -676,4 +687,4 @@ public Literal visitGuidEscapedLiteral(GuidEscapedLiteralContext ctx) {
return new Literal(source(ctx), string, DataType.KEYWORD);
}
-}
\ No newline at end of file
+}
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 8f261c0d3d001..d3c025d240c16 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
@@ -527,6 +527,18 @@ class SqlBaseBaseListener implements SqlBaseListener {
* The default implementation does nothing.
*/
@Override public void exitLogicalBinary(SqlBaseParser.LogicalBinaryContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterMatchQueryOptions(SqlBaseParser.MatchQueryOptionsContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitMatchQueryOptions(SqlBaseParser.MatchQueryOptionsContext 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 837e5057c36d5..8e7603947e799 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
@@ -312,6 +312,13 @@ class SqlBaseBaseVisitor extends AbstractParseTreeVisitor implements SqlBa
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitLogicalBinary(SqlBaseParser.LogicalBinaryContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitMatchQueryOptions(SqlBaseParser.MatchQueryOptionsContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
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 82c2ac90e7782..1c7364a970d8c 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
@@ -489,6 +489,16 @@ interface SqlBaseListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitLogicalBinary(SqlBaseParser.LogicalBinaryContext ctx);
+ /**
+ * Enter a parse tree produced by {@link SqlBaseParser#matchQueryOptions}.
+ * @param ctx the parse tree
+ */
+ void enterMatchQueryOptions(SqlBaseParser.MatchQueryOptionsContext ctx);
+ /**
+ * Exit a parse tree produced by {@link SqlBaseParser#matchQueryOptions}.
+ * @param ctx the parse tree
+ */
+ void exitMatchQueryOptions(SqlBaseParser.MatchQueryOptionsContext ctx);
/**
* Enter a parse tree produced by {@link SqlBaseParser#predicated}.
* @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 164eacd402bf7..246de0cf1a9fe 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
@@ -40,27 +40,27 @@ class SqlBaseParser extends Parser {
RULE_groupingElement = 11, RULE_groupingExpressions = 12, RULE_namedQuery = 13,
RULE_setQuantifier = 14, RULE_selectItem = 15, RULE_relation = 16, RULE_joinRelation = 17,
RULE_joinType = 18, RULE_joinCriteria = 19, RULE_relationPrimary = 20,
- RULE_expression = 21, RULE_booleanExpression = 22, RULE_predicated = 23,
- RULE_predicate = 24, RULE_likePattern = 25, RULE_pattern = 26, RULE_patternEscape = 27,
- RULE_valueExpression = 28, RULE_primaryExpression = 29, RULE_castExpression = 30,
- RULE_castTemplate = 31, RULE_extractExpression = 32, RULE_extractTemplate = 33,
- RULE_functionExpression = 34, RULE_functionTemplate = 35, RULE_functionName = 36,
- RULE_constant = 37, RULE_comparisonOperator = 38, RULE_booleanValue = 39,
- RULE_dataType = 40, RULE_qualifiedName = 41, RULE_identifier = 42, RULE_tableIdentifier = 43,
- RULE_quoteIdentifier = 44, RULE_unquoteIdentifier = 45, RULE_number = 46,
- RULE_string = 47, RULE_nonReserved = 48;
+ 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_extractExpression = 33,
+ RULE_extractTemplate = 34, RULE_functionExpression = 35, RULE_functionTemplate = 36,
+ RULE_functionName = 37, RULE_constant = 38, RULE_comparisonOperator = 39,
+ RULE_booleanValue = 40, RULE_dataType = 41, RULE_qualifiedName = 42, RULE_identifier = 43,
+ RULE_tableIdentifier = 44, RULE_quoteIdentifier = 45, RULE_unquoteIdentifier = 46,
+ RULE_number = 47, RULE_string = 48, RULE_nonReserved = 49;
public static final String[] ruleNames = {
"singleStatement", "singleExpression", "statement", "query", "queryNoWith",
"limitClause", "queryTerm", "orderBy", "querySpecification", "fromClause",
"groupBy", "groupingElement", "groupingExpressions", "namedQuery", "setQuantifier",
"selectItem", "relation", "joinRelation", "joinType", "joinCriteria",
- "relationPrimary", "expression", "booleanExpression", "predicated", "predicate",
- "likePattern", "pattern", "patternEscape", "valueExpression", "primaryExpression",
- "castExpression", "castTemplate", "extractExpression", "extractTemplate",
- "functionExpression", "functionTemplate", "functionName", "constant",
- "comparisonOperator", "booleanValue", "dataType", "qualifiedName", "identifier",
- "tableIdentifier", "quoteIdentifier", "unquoteIdentifier", "number", "string",
- "nonReserved"
+ "relationPrimary", "expression", "booleanExpression", "matchQueryOptions",
+ "predicated", "predicate", "likePattern", "pattern", "patternEscape",
+ "valueExpression", "primaryExpression", "castExpression", "castTemplate",
+ "extractExpression", "extractTemplate", "functionExpression", "functionTemplate",
+ "functionName", "constant", "comparisonOperator", "booleanValue", "dataType",
+ "qualifiedName", "identifier", "tableIdentifier", "quoteIdentifier", "unquoteIdentifier",
+ "number", "string", "nonReserved"
};
private static final String[] _LITERAL_NAMES = {
@@ -174,9 +174,9 @@ public final SingleStatementContext singleStatement() throws RecognitionExceptio
try {
enterOuterAlt(_localctx, 1);
{
- setState(98);
+ setState(100);
statement();
- setState(99);
+ setState(101);
match(EOF);
}
}
@@ -221,9 +221,9 @@ public final SingleExpressionContext singleExpression() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(101);
+ setState(103);
expression();
- setState(102);
+ setState(104);
match(EOF);
}
}
@@ -617,14 +617,14 @@ public final StatementContext statement() throws RecognitionException {
enterRule(_localctx, 4, RULE_statement);
int _la;
try {
- setState(204);
+ setState(206);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) {
case 1:
_localctx = new StatementDefaultContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(104);
+ setState(106);
query();
}
break;
@@ -632,27 +632,27 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new ExplainContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(105);
+ setState(107);
match(EXPLAIN);
- setState(119);
+ setState(121);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,2,_ctx) ) {
case 1:
{
- setState(106);
+ setState(108);
match(T__0);
- setState(115);
+ setState(117);
_errHandler.sync(this);
_la = _input.LA(1);
while (((((_la - 28)) & ~0x3f) == 0 && ((1L << (_la - 28)) & ((1L << (FORMAT - 28)) | (1L << (PLAN - 28)) | (1L << (VERIFY - 28)))) != 0)) {
{
- setState(113);
+ setState(115);
switch (_input.LA(1)) {
case PLAN:
{
- setState(107);
+ setState(109);
match(PLAN);
- setState(108);
+ setState(110);
((ExplainContext)_localctx).type = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ALL) | (1L << ANALYZED) | (1L << EXECUTABLE) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED))) != 0)) ) {
@@ -664,9 +664,9 @@ public final StatementContext statement() throws RecognitionException {
break;
case FORMAT:
{
- setState(109);
+ setState(111);
match(FORMAT);
- setState(110);
+ setState(112);
((ExplainContext)_localctx).format = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==GRAPHVIZ || _la==TEXT) ) {
@@ -678,9 +678,9 @@ public final StatementContext statement() throws RecognitionException {
break;
case VERIFY:
{
- setState(111);
+ setState(113);
match(VERIFY);
- setState(112);
+ setState(114);
((ExplainContext)_localctx).verify = booleanValue();
}
break;
@@ -688,16 +688,16 @@ public final StatementContext statement() throws RecognitionException {
throw new NoViableAltException(this);
}
}
- setState(117);
+ setState(119);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(118);
+ setState(120);
match(T__1);
}
break;
}
- setState(121);
+ setState(123);
statement();
}
break;
@@ -705,27 +705,27 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new DebugContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(122);
+ setState(124);
match(DEBUG);
- setState(134);
+ setState(136);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) {
case 1:
{
- setState(123);
+ setState(125);
match(T__0);
- setState(130);
+ setState(132);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==FORMAT || _la==PLAN) {
{
- setState(128);
+ setState(130);
switch (_input.LA(1)) {
case PLAN:
{
- setState(124);
+ setState(126);
match(PLAN);
- setState(125);
+ setState(127);
((DebugContext)_localctx).type = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==ANALYZED || _la==OPTIMIZED) ) {
@@ -737,9 +737,9 @@ public final StatementContext statement() throws RecognitionException {
break;
case FORMAT:
{
- setState(126);
+ setState(128);
match(FORMAT);
- setState(127);
+ setState(129);
((DebugContext)_localctx).format = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==GRAPHVIZ || _la==TEXT) ) {
@@ -753,16 +753,16 @@ public final StatementContext statement() throws RecognitionException {
throw new NoViableAltException(this);
}
}
- setState(132);
+ setState(134);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(133);
+ setState(135);
match(T__1);
}
break;
}
- setState(136);
+ setState(138);
statement();
}
break;
@@ -770,15 +770,15 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new ShowTablesContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(137);
+ setState(139);
match(SHOW);
- setState(138);
+ setState(140);
match(TABLES);
- setState(141);
+ setState(143);
switch (_input.LA(1)) {
case LIKE:
{
- setState(139);
+ setState(141);
((ShowTablesContext)_localctx).tableLike = likePattern();
}
break;
@@ -813,7 +813,7 @@ public final StatementContext statement() throws RecognitionException {
case QUOTED_IDENTIFIER:
case BACKQUOTED_IDENTIFIER:
{
- setState(140);
+ setState(142);
((ShowTablesContext)_localctx).tableIdent = tableIdentifier();
}
break;
@@ -828,22 +828,22 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new ShowColumnsContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(143);
+ setState(145);
match(SHOW);
- setState(144);
+ setState(146);
match(COLUMNS);
- setState(145);
+ setState(147);
_la = _input.LA(1);
if ( !(_la==FROM || _la==IN) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(148);
+ setState(150);
switch (_input.LA(1)) {
case LIKE:
{
- setState(146);
+ setState(148);
((ShowColumnsContext)_localctx).tableLike = likePattern();
}
break;
@@ -878,7 +878,7 @@ public final StatementContext statement() throws RecognitionException {
case QUOTED_IDENTIFIER:
case BACKQUOTED_IDENTIFIER:
{
- setState(147);
+ setState(149);
((ShowColumnsContext)_localctx).tableIdent = tableIdentifier();
}
break;
@@ -891,18 +891,18 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new ShowColumnsContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(150);
+ setState(152);
_la = _input.LA(1);
if ( !(_la==DESC || _la==DESCRIBE) ) {
_errHandler.recoverInline(this);
} else {
consume();
}
- setState(153);
+ setState(155);
switch (_input.LA(1)) {
case LIKE:
{
- setState(151);
+ setState(153);
((ShowColumnsContext)_localctx).tableLike = likePattern();
}
break;
@@ -937,7 +937,7 @@ public final StatementContext statement() throws RecognitionException {
case QUOTED_IDENTIFIER:
case BACKQUOTED_IDENTIFIER:
{
- setState(152);
+ setState(154);
((ShowColumnsContext)_localctx).tableIdent = tableIdentifier();
}
break;
@@ -950,15 +950,15 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new ShowFunctionsContext(_localctx);
enterOuterAlt(_localctx, 7);
{
- setState(155);
+ setState(157);
match(SHOW);
- setState(156);
- match(FUNCTIONS);
setState(158);
+ match(FUNCTIONS);
+ setState(160);
_la = _input.LA(1);
if (_la==LIKE) {
{
- setState(157);
+ setState(159);
likePattern();
}
}
@@ -969,9 +969,9 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new ShowSchemasContext(_localctx);
enterOuterAlt(_localctx, 8);
{
- setState(160);
+ setState(162);
match(SHOW);
- setState(161);
+ setState(163);
match(SCHEMAS);
}
break;
@@ -979,9 +979,9 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new SysCatalogsContext(_localctx);
enterOuterAlt(_localctx, 9);
{
- setState(162);
+ setState(164);
match(SYS);
- setState(163);
+ setState(165);
match(CATALOGS);
}
break;
@@ -989,58 +989,58 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new SysTablesContext(_localctx);
enterOuterAlt(_localctx, 10);
{
- setState(164);
+ setState(166);
match(SYS);
- setState(165);
+ setState(167);
match(TABLES);
- setState(168);
+ setState(170);
_la = _input.LA(1);
if (_la==CATALOG) {
{
- setState(166);
+ setState(168);
match(CATALOG);
- setState(167);
+ setState(169);
((SysTablesContext)_localctx).clusterLike = likePattern();
}
}
- setState(172);
+ setState(174);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
case 1:
{
- setState(170);
+ setState(172);
((SysTablesContext)_localctx).tableLike = likePattern();
}
break;
case 2:
{
- setState(171);
+ setState(173);
((SysTablesContext)_localctx).tableIdent = tableIdentifier();
}
break;
}
- setState(183);
+ setState(185);
_la = _input.LA(1);
if (_la==TYPE) {
{
- setState(174);
+ setState(176);
match(TYPE);
- setState(175);
+ setState(177);
string();
- setState(180);
+ setState(182);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(176);
+ setState(178);
match(T__2);
- setState(177);
+ setState(179);
string();
}
}
- setState(182);
+ setState(184);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1053,28 +1053,28 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new SysColumnsContext(_localctx);
enterOuterAlt(_localctx, 11);
{
- setState(185);
+ setState(187);
match(SYS);
- setState(186);
+ setState(188);
match(COLUMNS);
- setState(189);
+ setState(191);
_la = _input.LA(1);
if (_la==CATALOG) {
{
- setState(187);
+ setState(189);
match(CATALOG);
- setState(188);
+ setState(190);
((SysColumnsContext)_localctx).cluster = string();
}
}
- setState(194);
+ setState(196);
switch (_input.LA(1)) {
case TABLE:
{
- setState(191);
+ setState(193);
match(TABLE);
- setState(192);
+ setState(194);
((SysColumnsContext)_localctx).tableLike = likePattern();
}
break;
@@ -1109,7 +1109,7 @@ public final StatementContext statement() throws RecognitionException {
case QUOTED_IDENTIFIER:
case BACKQUOTED_IDENTIFIER:
{
- setState(193);
+ setState(195);
((SysColumnsContext)_localctx).tableIdent = tableIdentifier();
}
break;
@@ -1119,11 +1119,11 @@ public final StatementContext statement() throws RecognitionException {
default:
throw new NoViableAltException(this);
}
- setState(197);
+ setState(199);
_la = _input.LA(1);
if (_la==LIKE) {
{
- setState(196);
+ setState(198);
((SysColumnsContext)_localctx).columnPattern = likePattern();
}
}
@@ -1134,9 +1134,9 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new SysTypesContext(_localctx);
enterOuterAlt(_localctx, 12);
{
- setState(199);
+ setState(201);
match(SYS);
- setState(200);
+ setState(202);
match(TYPES);
}
break;
@@ -1144,11 +1144,11 @@ public final StatementContext statement() throws RecognitionException {
_localctx = new SysTableTypesContext(_localctx);
enterOuterAlt(_localctx, 13);
{
- setState(201);
+ setState(203);
match(SYS);
- setState(202);
+ setState(204);
match(TABLE);
- setState(203);
+ setState(205);
match(TYPES);
}
break;
@@ -1202,34 +1202,34 @@ public final QueryContext query() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(215);
+ setState(217);
_la = _input.LA(1);
if (_la==WITH) {
{
- setState(206);
+ setState(208);
match(WITH);
- setState(207);
+ setState(209);
namedQuery();
- setState(212);
+ setState(214);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(208);
+ setState(210);
match(T__2);
- setState(209);
+ setState(211);
namedQuery();
}
}
- setState(214);
+ setState(216);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(217);
+ setState(219);
queryNoWith();
}
}
@@ -1285,42 +1285,42 @@ public final QueryNoWithContext queryNoWith() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(219);
+ setState(221);
queryTerm();
- setState(230);
+ setState(232);
_la = _input.LA(1);
if (_la==ORDER) {
{
- setState(220);
+ setState(222);
match(ORDER);
- setState(221);
+ setState(223);
match(BY);
- setState(222);
+ setState(224);
orderBy();
- setState(227);
+ setState(229);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(223);
+ setState(225);
match(T__2);
- setState(224);
+ setState(226);
orderBy();
}
}
- setState(229);
+ setState(231);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(233);
+ setState(235);
_la = _input.LA(1);
if (_la==LIMIT || _la==LIMIT_ESC) {
{
- setState(232);
+ setState(234);
limitClause();
}
}
@@ -1369,14 +1369,14 @@ public final LimitClauseContext limitClause() throws RecognitionException {
enterRule(_localctx, 10, RULE_limitClause);
int _la;
try {
- setState(240);
+ setState(242);
switch (_input.LA(1)) {
case LIMIT:
enterOuterAlt(_localctx, 1);
{
- setState(235);
+ setState(237);
match(LIMIT);
- setState(236);
+ setState(238);
((LimitClauseContext)_localctx).limit = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==ALL || _la==INTEGER_VALUE) ) {
@@ -1389,9 +1389,9 @@ public final LimitClauseContext limitClause() throws RecognitionException {
case LIMIT_ESC:
enterOuterAlt(_localctx, 2);
{
- setState(237);
+ setState(239);
match(LIMIT_ESC);
- setState(238);
+ setState(240);
((LimitClauseContext)_localctx).limit = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==ALL || _la==INTEGER_VALUE) ) {
@@ -1399,7 +1399,7 @@ public final LimitClauseContext limitClause() throws RecognitionException {
} else {
consume();
}
- setState(239);
+ setState(241);
match(ESC_END);
}
break;
@@ -1472,13 +1472,13 @@ public final QueryTermContext queryTerm() throws RecognitionException {
QueryTermContext _localctx = new QueryTermContext(_ctx, getState());
enterRule(_localctx, 12, RULE_queryTerm);
try {
- setState(247);
+ setState(249);
switch (_input.LA(1)) {
case SELECT:
_localctx = new QueryPrimaryDefaultContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(242);
+ setState(244);
querySpecification();
}
break;
@@ -1486,11 +1486,11 @@ public final QueryTermContext queryTerm() throws RecognitionException {
_localctx = new SubqueryContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(243);
+ setState(245);
match(T__0);
- setState(244);
+ setState(246);
queryNoWith();
- setState(245);
+ setState(247);
match(T__1);
}
break;
@@ -1542,13 +1542,13 @@ public final OrderByContext orderBy() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(249);
- expression();
setState(251);
+ expression();
+ setState(253);
_la = _input.LA(1);
if (_la==ASC || _la==DESC) {
{
- setState(250);
+ setState(252);
((OrderByContext)_localctx).ordering = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==ASC || _la==DESC) ) {
@@ -1627,75 +1627,75 @@ public final QuerySpecificationContext querySpecification() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(253);
- match(SELECT);
setState(255);
+ match(SELECT);
+ setState(257);
_la = _input.LA(1);
if (_la==ALL || _la==DISTINCT) {
{
- setState(254);
+ setState(256);
setQuantifier();
}
}
- setState(257);
+ setState(259);
selectItem();
- setState(262);
+ setState(264);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(258);
+ setState(260);
match(T__2);
- setState(259);
+ setState(261);
selectItem();
}
}
- setState(264);
+ setState(266);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(266);
+ setState(268);
_la = _input.LA(1);
if (_la==FROM) {
{
- setState(265);
+ setState(267);
fromClause();
}
}
- setState(270);
+ setState(272);
_la = _input.LA(1);
if (_la==WHERE) {
{
- setState(268);
+ setState(270);
match(WHERE);
- setState(269);
+ setState(271);
((QuerySpecificationContext)_localctx).where = booleanExpression(0);
}
}
- setState(275);
+ setState(277);
_la = _input.LA(1);
if (_la==GROUP) {
{
- setState(272);
+ setState(274);
match(GROUP);
- setState(273);
+ setState(275);
match(BY);
- setState(274);
+ setState(276);
groupBy();
}
}
- setState(279);
+ setState(281);
_la = _input.LA(1);
if (_la==HAVING) {
{
- setState(277);
+ setState(279);
match(HAVING);
- setState(278);
+ setState(280);
((QuerySpecificationContext)_localctx).having = booleanExpression(0);
}
}
@@ -1747,23 +1747,23 @@ public final FromClauseContext fromClause() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(281);
+ setState(283);
match(FROM);
- setState(282);
+ setState(284);
relation();
- setState(287);
+ setState(289);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(283);
+ setState(285);
match(T__2);
- setState(284);
+ setState(286);
relation();
}
}
- setState(289);
+ setState(291);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1816,30 +1816,30 @@ public final GroupByContext groupBy() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(291);
+ setState(293);
_la = _input.LA(1);
if (_la==ALL || _la==DISTINCT) {
{
- setState(290);
+ setState(292);
setQuantifier();
}
}
- setState(293);
+ setState(295);
groupingElement();
- setState(298);
+ setState(300);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(294);
+ setState(296);
match(T__2);
- setState(295);
+ setState(297);
groupingElement();
}
}
- setState(300);
+ setState(302);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1894,7 +1894,7 @@ public final GroupingElementContext groupingElement() throws RecognitionExceptio
_localctx = new SingleGroupingSetContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(301);
+ setState(303);
groupingExpressions();
}
}
@@ -1940,47 +1940,47 @@ public final GroupingExpressionsContext groupingExpressions() throws Recognition
enterRule(_localctx, 24, RULE_groupingExpressions);
int _la;
try {
- setState(316);
+ setState(318);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(303);
+ setState(305);
match(T__0);
- setState(312);
+ setState(314);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << ANALYZE) | (1L << ANALYZED) | (1L << CAST) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << LEFT) | (1L << MAPPED) | (1L << MATCH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RIGHT) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TEXT - 64)) | (1L << (TRUE - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 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(304);
+ setState(306);
expression();
- setState(309);
+ setState(311);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(305);
+ setState(307);
match(T__2);
- setState(306);
+ setState(308);
expression();
}
}
- setState(311);
+ setState(313);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(314);
+ setState(316);
match(T__1);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(315);
+ setState(317);
expression();
}
break;
@@ -2031,15 +2031,15 @@ public final NamedQueryContext namedQuery() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(318);
+ setState(320);
((NamedQueryContext)_localctx).name = identifier();
- setState(319);
+ setState(321);
match(AS);
- setState(320);
+ setState(322);
match(T__0);
- setState(321);
+ setState(323);
queryNoWith();
- setState(322);
+ setState(324);
match(T__1);
}
}
@@ -2083,7 +2083,7 @@ public final SetQuantifierContext setQuantifier() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(324);
+ setState(326);
_la = _input.LA(1);
if ( !(_la==ALL || _la==DISTINCT) ) {
_errHandler.recoverInline(this);
@@ -2146,22 +2146,22 @@ public final SelectItemContext selectItem() throws RecognitionException {
_localctx = new SelectExpressionContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(326);
+ setState(328);
expression();
- setState(331);
+ setState(333);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) {
{
- setState(328);
+ setState(330);
_la = _input.LA(1);
if (_la==AS) {
{
- setState(327);
+ setState(329);
match(AS);
}
}
- setState(330);
+ setState(332);
identifier();
}
}
@@ -2215,19 +2215,19 @@ public final RelationContext relation() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(333);
+ setState(335);
relationPrimary();
- setState(337);
+ setState(339);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FULL) | (1L << INNER) | (1L << JOIN) | (1L << LEFT) | (1L << NATURAL) | (1L << RIGHT))) != 0)) {
{
{
- setState(334);
+ setState(336);
joinRelation();
}
}
- setState(339);
+ setState(341);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2281,7 +2281,7 @@ public final JoinRelationContext joinRelation() throws RecognitionException {
enterRule(_localctx, 34, RULE_joinRelation);
int _la;
try {
- setState(351);
+ setState(353);
switch (_input.LA(1)) {
case FULL:
case INNER:
@@ -2291,18 +2291,18 @@ public final JoinRelationContext joinRelation() throws RecognitionException {
enterOuterAlt(_localctx, 1);
{
{
- setState(340);
+ setState(342);
joinType();
}
- setState(341);
+ setState(343);
match(JOIN);
- setState(342);
- ((JoinRelationContext)_localctx).right = relationPrimary();
setState(344);
+ ((JoinRelationContext)_localctx).right = relationPrimary();
+ setState(346);
_la = _input.LA(1);
if (_la==ON || _la==USING) {
{
- setState(343);
+ setState(345);
joinCriteria();
}
}
@@ -2312,13 +2312,13 @@ public final JoinRelationContext joinRelation() throws RecognitionException {
case NATURAL:
enterOuterAlt(_localctx, 2);
{
- setState(346);
+ setState(348);
match(NATURAL);
- setState(347);
+ setState(349);
joinType();
- setState(348);
+ setState(350);
match(JOIN);
- setState(349);
+ setState(351);
((JoinRelationContext)_localctx).right = relationPrimary();
}
break;
@@ -2367,17 +2367,17 @@ public final JoinTypeContext joinType() throws RecognitionException {
enterRule(_localctx, 36, RULE_joinType);
int _la;
try {
- setState(368);
+ setState(370);
switch (_input.LA(1)) {
case INNER:
case JOIN:
enterOuterAlt(_localctx, 1);
{
- setState(354);
+ setState(356);
_la = _input.LA(1);
if (_la==INNER) {
{
- setState(353);
+ setState(355);
match(INNER);
}
}
@@ -2387,13 +2387,13 @@ public final JoinTypeContext joinType() throws RecognitionException {
case LEFT:
enterOuterAlt(_localctx, 2);
{
- setState(356);
- match(LEFT);
setState(358);
+ match(LEFT);
+ setState(360);
_la = _input.LA(1);
if (_la==OUTER) {
{
- setState(357);
+ setState(359);
match(OUTER);
}
}
@@ -2403,13 +2403,13 @@ public final JoinTypeContext joinType() throws RecognitionException {
case RIGHT:
enterOuterAlt(_localctx, 3);
{
- setState(360);
- match(RIGHT);
setState(362);
+ match(RIGHT);
+ setState(364);
_la = _input.LA(1);
if (_la==OUTER) {
{
- setState(361);
+ setState(363);
match(OUTER);
}
}
@@ -2419,13 +2419,13 @@ public final JoinTypeContext joinType() throws RecognitionException {
case FULL:
enterOuterAlt(_localctx, 4);
{
- setState(364);
- match(FULL);
setState(366);
+ match(FULL);
+ setState(368);
_la = _input.LA(1);
if (_la==OUTER) {
{
- setState(365);
+ setState(367);
match(OUTER);
}
}
@@ -2483,43 +2483,43 @@ public final JoinCriteriaContext joinCriteria() throws RecognitionException {
enterRule(_localctx, 38, RULE_joinCriteria);
int _la;
try {
- setState(384);
+ setState(386);
switch (_input.LA(1)) {
case ON:
enterOuterAlt(_localctx, 1);
{
- setState(370);
+ setState(372);
match(ON);
- setState(371);
+ setState(373);
booleanExpression(0);
}
break;
case USING:
enterOuterAlt(_localctx, 2);
{
- setState(372);
+ setState(374);
match(USING);
- setState(373);
+ setState(375);
match(T__0);
- setState(374);
+ setState(376);
identifier();
- setState(379);
+ setState(381);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(375);
+ setState(377);
match(T__2);
- setState(376);
+ setState(378);
identifier();
}
}
- setState(381);
+ setState(383);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(382);
+ setState(384);
match(T__1);
}
break;
@@ -2624,29 +2624,29 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio
enterRule(_localctx, 40, RULE_relationPrimary);
int _la;
try {
- setState(411);
+ setState(413);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) {
case 1:
_localctx = new TableNameContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(386);
+ setState(388);
tableIdentifier();
- setState(391);
+ setState(393);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) {
{
- setState(388);
+ setState(390);
_la = _input.LA(1);
if (_la==AS) {
{
- setState(387);
+ setState(389);
match(AS);
}
}
- setState(390);
+ setState(392);
qualifiedName();
}
}
@@ -2657,26 +2657,26 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio
_localctx = new AliasedQueryContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(393);
+ setState(395);
match(T__0);
- setState(394);
+ setState(396);
queryNoWith();
- setState(395);
+ setState(397);
match(T__1);
- setState(400);
+ setState(402);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) {
{
- setState(397);
+ setState(399);
_la = _input.LA(1);
if (_la==AS) {
{
- setState(396);
+ setState(398);
match(AS);
}
}
- setState(399);
+ setState(401);
qualifiedName();
}
}
@@ -2687,26 +2687,26 @@ public final RelationPrimaryContext relationPrimary() throws RecognitionExceptio
_localctx = new AliasedRelationContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(402);
+ setState(404);
match(T__0);
- setState(403);
+ setState(405);
relation();
- setState(404);
+ setState(406);
match(T__1);
- setState(409);
+ setState(411);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << AS) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) {
{
- setState(406);
+ setState(408);
_la = _input.LA(1);
if (_la==AS) {
{
- setState(405);
+ setState(407);
match(AS);
}
}
- setState(408);
+ setState(410);
qualifiedName();
}
}
@@ -2755,7 +2755,7 @@ public final ExpressionContext expression() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(413);
+ setState(415);
booleanExpression(0);
}
}
@@ -2803,13 +2803,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
}
public static class StringQueryContext extends BooleanExpressionContext {
public StringContext queryString;
- public StringContext options;
public TerminalNode QUERY() { return getToken(SqlBaseParser.QUERY, 0); }
- public List string() {
- return getRuleContexts(StringContext.class);
+ public MatchQueryOptionsContext matchQueryOptions() {
+ return getRuleContext(MatchQueryOptionsContext.class,0);
}
- public StringContext string(int i) {
- return getRuleContext(StringContext.class,i);
+ public StringContext string() {
+ return getRuleContext(StringContext.class,0);
}
public StringQueryContext(BooleanExpressionContext ctx) { copyFrom(ctx); }
@Override
@@ -2868,8 +2867,10 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public static class MultiMatchQueryContext extends BooleanExpressionContext {
public StringContext multiFields;
public StringContext queryString;
- public StringContext options;
public TerminalNode MATCH() { return getToken(SqlBaseParser.MATCH, 0); }
+ public MatchQueryOptionsContext matchQueryOptions() {
+ return getRuleContext(MatchQueryOptionsContext.class,0);
+ }
public List string() {
return getRuleContexts(StringContext.class);
}
@@ -2894,16 +2895,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public static class MatchQueryContext extends BooleanExpressionContext {
public QualifiedNameContext singleField;
public StringContext queryString;
- public StringContext options;
public TerminalNode MATCH() { return getToken(SqlBaseParser.MATCH, 0); }
+ public MatchQueryOptionsContext matchQueryOptions() {
+ return getRuleContext(MatchQueryOptionsContext.class,0);
+ }
public QualifiedNameContext qualifiedName() {
return getRuleContext(QualifiedNameContext.class,0);
}
- public List string() {
- return getRuleContexts(StringContext.class);
- }
- public StringContext string(int i) {
- return getRuleContext(StringContext.class,i);
+ public StringContext string() {
+ return getRuleContext(StringContext.class,0);
}
public MatchQueryContext(BooleanExpressionContext ctx) { copyFrom(ctx); }
@Override
@@ -2959,23 +2959,22 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc
BooleanExpressionContext _prevctx = _localctx;
int _startState = 44;
enterRecursionRule(_localctx, 44, RULE_booleanExpression, _p);
- int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(464);
+ setState(448);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,60,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) {
case 1:
{
_localctx = new LogicalNotContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(416);
+ setState(418);
match(NOT);
- setState(417);
+ setState(419);
booleanExpression(8);
}
break;
@@ -2984,13 +2983,13 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc
_localctx = new ExistsContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(418);
+ setState(420);
match(EXISTS);
- setState(419);
+ setState(421);
match(T__0);
- setState(420);
+ setState(422);
query();
- setState(421);
+ setState(423);
match(T__1);
}
break;
@@ -2999,29 +2998,15 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc
_localctx = new StringQueryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(423);
+ setState(425);
match(QUERY);
- setState(424);
+ setState(426);
match(T__0);
- setState(425);
+ setState(427);
((StringQueryContext)_localctx).queryString = string();
- setState(430);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==T__2) {
- {
- {
- setState(426);
- match(T__2);
- setState(427);
- ((StringQueryContext)_localctx).options = string();
- }
- }
- setState(432);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- setState(433);
+ setState(428);
+ matchQueryOptions();
+ setState(429);
match(T__1);
}
break;
@@ -3030,33 +3015,19 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc
_localctx = new MatchQueryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(435);
+ setState(431);
match(MATCH);
- setState(436);
+ setState(432);
match(T__0);
- setState(437);
+ setState(433);
((MatchQueryContext)_localctx).singleField = qualifiedName();
- setState(438);
+ setState(434);
match(T__2);
- setState(439);
+ setState(435);
((MatchQueryContext)_localctx).queryString = string();
- setState(444);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==T__2) {
- {
- {
- setState(440);
- match(T__2);
- setState(441);
- ((MatchQueryContext)_localctx).options = string();
- }
- }
- setState(446);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- setState(447);
+ setState(436);
+ matchQueryOptions();
+ setState(437);
match(T__1);
}
break;
@@ -3065,33 +3036,19 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc
_localctx = new MultiMatchQueryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(449);
+ setState(439);
match(MATCH);
- setState(450);
+ setState(440);
match(T__0);
- setState(451);
+ setState(441);
((MultiMatchQueryContext)_localctx).multiFields = string();
- setState(452);
+ setState(442);
match(T__2);
- setState(453);
+ setState(443);
((MultiMatchQueryContext)_localctx).queryString = string();
- setState(458);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==T__2) {
- {
- {
- setState(454);
- match(T__2);
- setState(455);
- ((MultiMatchQueryContext)_localctx).options = string();
- }
- }
- setState(460);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- setState(461);
+ setState(444);
+ matchQueryOptions();
+ setState(445);
match(T__1);
}
break;
@@ -3100,33 +3057,33 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc
_localctx = new BooleanDefaultContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(463);
+ setState(447);
predicated();
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(474);
+ setState(458);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,62,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,59,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(472);
+ setState(456);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,58,_ctx) ) {
case 1:
{
_localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState));
((LogicalBinaryContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression);
- setState(466);
+ setState(450);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(467);
+ setState(451);
((LogicalBinaryContext)_localctx).operator = match(AND);
- setState(468);
+ setState(452);
((LogicalBinaryContext)_localctx).right = booleanExpression(3);
}
break;
@@ -3135,20 +3092,20 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc
_localctx = new LogicalBinaryContext(new BooleanExpressionContext(_parentctx, _parentState));
((LogicalBinaryContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_booleanExpression);
- setState(469);
+ setState(453);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(470);
+ setState(454);
((LogicalBinaryContext)_localctx).operator = match(OR);
- setState(471);
+ setState(455);
((LogicalBinaryContext)_localctx).right = booleanExpression(2);
}
break;
}
}
}
- setState(476);
+ setState(460);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,62,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,59,_ctx);
}
}
}
@@ -3163,6 +3120,68 @@ private BooleanExpressionContext booleanExpression(int _p) throws RecognitionExc
return _localctx;
}
+ public static class MatchQueryOptionsContext extends ParserRuleContext {
+ public List string() {
+ return getRuleContexts(StringContext.class);
+ }
+ public StringContext string(int i) {
+ return getRuleContext(StringContext.class,i);
+ }
+ public MatchQueryOptionsContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_matchQueryOptions; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).enterMatchQueryOptions(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof SqlBaseListener ) ((SqlBaseListener)listener).exitMatchQueryOptions(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof SqlBaseVisitor ) return ((SqlBaseVisitor extends T>)visitor).visitMatchQueryOptions(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final MatchQueryOptionsContext matchQueryOptions() throws RecognitionException {
+ MatchQueryOptionsContext _localctx = new MatchQueryOptionsContext(_ctx, getState());
+ enterRule(_localctx, 46, RULE_matchQueryOptions);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(465);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==T__2) {
+ {
+ {
+ setState(461);
+ match(T__2);
+ setState(462);
+ string();
+ }
+ }
+ setState(467);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class PredicatedContext extends ParserRuleContext {
public ValueExpressionContext valueExpression() {
return getRuleContext(ValueExpressionContext.class,0);
@@ -3191,18 +3210,18 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PredicatedContext predicated() throws RecognitionException {
PredicatedContext _localctx = new PredicatedContext(_ctx, getState());
- enterRule(_localctx, 46, RULE_predicated);
+ enterRule(_localctx, 48, RULE_predicated);
try {
enterOuterAlt(_localctx, 1);
{
- setState(477);
+ setState(468);
valueExpression(0);
- setState(479);
+ setState(470);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) {
case 1:
{
- setState(478);
+ setState(469);
predicate();
}
break;
@@ -3275,145 +3294,145 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PredicateContext predicate() throws RecognitionException {
PredicateContext _localctx = new PredicateContext(_ctx, getState());
- enterRule(_localctx, 48, RULE_predicate);
+ enterRule(_localctx, 50, RULE_predicate);
int _la;
try {
- setState(527);
+ setState(518);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,71,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,69,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(482);
+ setState(473);
_la = _input.LA(1);
if (_la==NOT) {
{
- setState(481);
+ setState(472);
match(NOT);
}
}
- setState(484);
+ setState(475);
((PredicateContext)_localctx).kind = match(BETWEEN);
- setState(485);
+ setState(476);
((PredicateContext)_localctx).lower = valueExpression(0);
- setState(486);
+ setState(477);
match(AND);
- setState(487);
+ setState(478);
((PredicateContext)_localctx).upper = valueExpression(0);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(490);
+ setState(481);
_la = _input.LA(1);
if (_la==NOT) {
{
- setState(489);
+ setState(480);
match(NOT);
}
}
- setState(492);
+ setState(483);
((PredicateContext)_localctx).kind = match(IN);
- setState(493);
+ setState(484);
match(T__0);
- setState(494);
+ setState(485);
expression();
- setState(499);
+ setState(490);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(495);
+ setState(486);
match(T__2);
- setState(496);
+ setState(487);
expression();
}
}
- setState(501);
+ setState(492);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(502);
+ setState(493);
match(T__1);
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(505);
+ setState(496);
_la = _input.LA(1);
if (_la==NOT) {
{
- setState(504);
+ setState(495);
match(NOT);
}
}
- setState(507);
+ setState(498);
((PredicateContext)_localctx).kind = match(IN);
- setState(508);
+ setState(499);
match(T__0);
- setState(509);
+ setState(500);
query();
- setState(510);
+ setState(501);
match(T__1);
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(513);
+ setState(504);
_la = _input.LA(1);
if (_la==NOT) {
{
- setState(512);
+ setState(503);
match(NOT);
}
}
- setState(515);
+ setState(506);
((PredicateContext)_localctx).kind = match(LIKE);
- setState(516);
+ setState(507);
pattern();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(518);
+ setState(509);
_la = _input.LA(1);
if (_la==NOT) {
{
- setState(517);
+ setState(508);
match(NOT);
}
}
- setState(520);
+ setState(511);
((PredicateContext)_localctx).kind = match(RLIKE);
- setState(521);
+ setState(512);
((PredicateContext)_localctx).regex = string();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(522);
+ setState(513);
match(IS);
- setState(524);
+ setState(515);
_la = _input.LA(1);
if (_la==NOT) {
{
- setState(523);
+ setState(514);
match(NOT);
}
}
- setState(526);
+ setState(517);
((PredicateContext)_localctx).kind = match(NULL);
}
break;
@@ -3456,13 +3475,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LikePatternContext likePattern() throws RecognitionException {
LikePatternContext _localctx = new LikePatternContext(_ctx, getState());
- enterRule(_localctx, 50, RULE_likePattern);
+ enterRule(_localctx, 52, RULE_likePattern);
try {
enterOuterAlt(_localctx, 1);
{
- setState(529);
+ setState(520);
match(LIKE);
- setState(530);
+ setState(521);
pattern();
}
}
@@ -3506,18 +3525,18 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PatternContext pattern() throws RecognitionException {
PatternContext _localctx = new PatternContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_pattern);
+ enterRule(_localctx, 54, RULE_pattern);
try {
enterOuterAlt(_localctx, 1);
{
- setState(532);
+ setState(523);
((PatternContext)_localctx).value = string();
- setState(534);
+ setState(525);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) {
case 1:
{
- setState(533);
+ setState(524);
patternEscape();
}
break;
@@ -3563,27 +3582,27 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PatternEscapeContext patternEscape() throws RecognitionException {
PatternEscapeContext _localctx = new PatternEscapeContext(_ctx, getState());
- enterRule(_localctx, 54, RULE_patternEscape);
+ enterRule(_localctx, 56, RULE_patternEscape);
try {
- setState(542);
+ setState(533);
switch (_input.LA(1)) {
case ESCAPE:
enterOuterAlt(_localctx, 1);
{
- setState(536);
+ setState(527);
match(ESCAPE);
- setState(537);
+ setState(528);
((PatternEscapeContext)_localctx).escape = string();
}
break;
case ESCAPE_ESC:
enterOuterAlt(_localctx, 2);
{
- setState(538);
+ setState(529);
match(ESCAPE_ESC);
- setState(539);
+ setState(530);
((PatternEscapeContext)_localctx).escape = string();
- setState(540);
+ setState(531);
match(ESC_END);
}
break;
@@ -3721,23 +3740,23 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti
int _parentState = getState();
ValueExpressionContext _localctx = new ValueExpressionContext(_ctx, _parentState);
ValueExpressionContext _prevctx = _localctx;
- int _startState = 56;
- enterRecursionRule(_localctx, 56, RULE_valueExpression, _p);
+ int _startState = 58;
+ enterRecursionRule(_localctx, 58, RULE_valueExpression, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(548);
+ setState(539);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,74,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,72,_ctx) ) {
case 1:
{
_localctx = new ValueExpressionDefaultContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(545);
+ setState(536);
primaryExpression();
}
break;
@@ -3746,7 +3765,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti
_localctx = new ArithmeticUnaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(546);
+ setState(537);
((ArithmeticUnaryContext)_localctx).operator = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==PLUS || _la==MINUS) ) {
@@ -3754,31 +3773,31 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti
} else {
consume();
}
- setState(547);
+ setState(538);
valueExpression(4);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(562);
+ setState(553);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,76,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,74,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(560);
+ setState(551);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) {
case 1:
{
_localctx = new ArithmeticBinaryContext(new ValueExpressionContext(_parentctx, _parentState));
((ArithmeticBinaryContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_valueExpression);
- setState(550);
+ setState(541);
if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
- setState(551);
+ setState(542);
((ArithmeticBinaryContext)_localctx).operator = _input.LT(1);
_la = _input.LA(1);
if ( !(((((_la - 88)) & ~0x3f) == 0 && ((1L << (_la - 88)) & ((1L << (ASTERISK - 88)) | (1L << (SLASH - 88)) | (1L << (PERCENT - 88)))) != 0)) ) {
@@ -3786,7 +3805,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti
} else {
consume();
}
- setState(552);
+ setState(543);
((ArithmeticBinaryContext)_localctx).right = valueExpression(4);
}
break;
@@ -3795,9 +3814,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(553);
+ setState(544);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
- setState(554);
+ setState(545);
((ArithmeticBinaryContext)_localctx).operator = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==PLUS || _la==MINUS) ) {
@@ -3805,7 +3824,7 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti
} else {
consume();
}
- setState(555);
+ setState(546);
((ArithmeticBinaryContext)_localctx).right = valueExpression(3);
}
break;
@@ -3814,20 +3833,20 @@ private ValueExpressionContext valueExpression(int _p) throws RecognitionExcepti
_localctx = new ComparisonContext(new ValueExpressionContext(_parentctx, _parentState));
((ComparisonContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_valueExpression);
- setState(556);
+ setState(547);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(557);
+ setState(548);
comparisonOperator();
- setState(558);
+ setState(549);
((ComparisonContext)_localctx).right = valueExpression(2);
}
break;
}
}
}
- setState(564);
+ setState(555);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,76,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,74,_ctx);
}
}
}
@@ -4029,17 +4048,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final PrimaryExpressionContext primaryExpression() throws RecognitionException {
PrimaryExpressionContext _localctx = new PrimaryExpressionContext(_ctx, getState());
- enterRule(_localctx, 58, RULE_primaryExpression);
+ enterRule(_localctx, 60, RULE_primaryExpression);
int _la;
try {
- setState(586);
+ setState(577);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,76,_ctx) ) {
case 1:
_localctx = new CastContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(565);
+ setState(556);
castExpression();
}
break;
@@ -4047,7 +4066,7 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new ExtractContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(566);
+ setState(557);
extractExpression();
}
break;
@@ -4055,7 +4074,7 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new ConstantDefaultContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(567);
+ setState(558);
constant();
}
break;
@@ -4063,7 +4082,7 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new StarContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(568);
+ setState(559);
match(ASTERISK);
}
break;
@@ -4071,18 +4090,18 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new StarContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(572);
+ setState(563);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) {
{
- setState(569);
+ setState(560);
qualifiedName();
- setState(570);
+ setState(561);
match(DOT);
}
}
- setState(574);
+ setState(565);
match(ASTERISK);
}
break;
@@ -4090,7 +4109,7 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new FunctionContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(575);
+ setState(566);
functionExpression();
}
break;
@@ -4098,11 +4117,11 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new SubqueryExpressionContext(_localctx);
enterOuterAlt(_localctx, 7);
{
- setState(576);
+ setState(567);
match(T__0);
- setState(577);
+ setState(568);
query();
- setState(578);
+ setState(569);
match(T__1);
}
break;
@@ -4110,7 +4129,7 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new ColumnReferenceContext(_localctx);
enterOuterAlt(_localctx, 8);
{
- setState(580);
+ setState(571);
identifier();
}
break;
@@ -4118,7 +4137,7 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new DereferenceContext(_localctx);
enterOuterAlt(_localctx, 9);
{
- setState(581);
+ setState(572);
qualifiedName();
}
break;
@@ -4126,11 +4145,11 @@ public final PrimaryExpressionContext primaryExpression() throws RecognitionExce
_localctx = new ParenthesizedExpressionContext(_localctx);
enterOuterAlt(_localctx, 10);
{
- setState(582);
+ setState(573);
match(T__0);
- setState(583);
+ setState(574);
expression();
- setState(584);
+ setState(575);
match(T__1);
}
break;
@@ -4174,25 +4193,25 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final CastExpressionContext castExpression() throws RecognitionException {
CastExpressionContext _localctx = new CastExpressionContext(_ctx, getState());
- enterRule(_localctx, 60, RULE_castExpression);
+ enterRule(_localctx, 62, RULE_castExpression);
try {
- setState(593);
+ setState(584);
switch (_input.LA(1)) {
case CAST:
enterOuterAlt(_localctx, 1);
{
- setState(588);
+ setState(579);
castTemplate();
}
break;
case FUNCTION_ESC:
enterOuterAlt(_localctx, 2);
{
- setState(589);
+ setState(580);
match(FUNCTION_ESC);
- setState(590);
+ setState(581);
castTemplate();
- setState(591);
+ setState(582);
match(ESC_END);
}
break;
@@ -4241,21 +4260,21 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final CastTemplateContext castTemplate() throws RecognitionException {
CastTemplateContext _localctx = new CastTemplateContext(_ctx, getState());
- enterRule(_localctx, 62, RULE_castTemplate);
+ enterRule(_localctx, 64, RULE_castTemplate);
try {
enterOuterAlt(_localctx, 1);
{
- setState(595);
+ setState(586);
match(CAST);
- setState(596);
+ setState(587);
match(T__0);
- setState(597);
+ setState(588);
expression();
- setState(598);
+ setState(589);
match(AS);
- setState(599);
+ setState(590);
dataType();
- setState(600);
+ setState(591);
match(T__1);
}
}
@@ -4297,25 +4316,25 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ExtractExpressionContext extractExpression() throws RecognitionException {
ExtractExpressionContext _localctx = new ExtractExpressionContext(_ctx, getState());
- enterRule(_localctx, 64, RULE_extractExpression);
+ enterRule(_localctx, 66, RULE_extractExpression);
try {
- setState(607);
+ setState(598);
switch (_input.LA(1)) {
case EXTRACT:
enterOuterAlt(_localctx, 1);
{
- setState(602);
+ setState(593);
extractTemplate();
}
break;
case FUNCTION_ESC:
enterOuterAlt(_localctx, 2);
{
- setState(603);
+ setState(594);
match(FUNCTION_ESC);
- setState(604);
+ setState(595);
extractTemplate();
- setState(605);
+ setState(596);
match(ESC_END);
}
break;
@@ -4365,21 +4384,21 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ExtractTemplateContext extractTemplate() throws RecognitionException {
ExtractTemplateContext _localctx = new ExtractTemplateContext(_ctx, getState());
- enterRule(_localctx, 66, RULE_extractTemplate);
+ enterRule(_localctx, 68, RULE_extractTemplate);
try {
enterOuterAlt(_localctx, 1);
{
- setState(609);
+ setState(600);
match(EXTRACT);
- setState(610);
+ setState(601);
match(T__0);
- setState(611);
+ setState(602);
((ExtractTemplateContext)_localctx).field = identifier();
- setState(612);
+ setState(603);
match(FROM);
- setState(613);
+ setState(604);
valueExpression(0);
- setState(614);
+ setState(605);
match(T__1);
}
}
@@ -4420,9 +4439,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FunctionExpressionContext functionExpression() throws RecognitionException {
FunctionExpressionContext _localctx = new FunctionExpressionContext(_ctx, getState());
- enterRule(_localctx, 68, RULE_functionExpression);
+ enterRule(_localctx, 70, RULE_functionExpression);
try {
- setState(621);
+ setState(612);
switch (_input.LA(1)) {
case ANALYZE:
case ANALYZED:
@@ -4457,18 +4476,18 @@ public final FunctionExpressionContext functionExpression() throws RecognitionEx
case BACKQUOTED_IDENTIFIER:
enterOuterAlt(_localctx, 1);
{
- setState(616);
+ setState(607);
functionTemplate();
}
break;
case FUNCTION_ESC:
enterOuterAlt(_localctx, 2);
{
- setState(617);
+ setState(608);
match(FUNCTION_ESC);
- setState(618);
+ setState(609);
functionTemplate();
- setState(619);
+ setState(610);
match(ESC_END);
}
break;
@@ -4521,50 +4540,50 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FunctionTemplateContext functionTemplate() throws RecognitionException {
FunctionTemplateContext _localctx = new FunctionTemplateContext(_ctx, getState());
- enterRule(_localctx, 70, RULE_functionTemplate);
+ enterRule(_localctx, 72, RULE_functionTemplate);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(623);
+ setState(614);
functionName();
- setState(624);
+ setState(615);
match(T__0);
- setState(636);
+ setState(627);
_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 << DEBUG) | (1L << DISTINCT) | (1L << EXECUTABLE) | (1L << EXISTS) | (1L << EXPLAIN) | (1L << EXTRACT) | (1L << FALSE) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << LEFT) | (1L << MAPPED) | (1L << MATCH) | (1L << NOT) | (1L << NULL) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RIGHT) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TEXT - 64)) | (1L << (TRUE - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 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(626);
+ setState(617);
_la = _input.LA(1);
if (_la==ALL || _la==DISTINCT) {
{
- setState(625);
+ setState(616);
setQuantifier();
}
}
- setState(628);
+ setState(619);
expression();
- setState(633);
+ setState(624);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==T__2) {
{
{
- setState(629);
+ setState(620);
match(T__2);
- setState(630);
+ setState(621);
expression();
}
}
- setState(635);
+ setState(626);
_errHandler.sync(this);
_la = _input.LA(1);
}
}
}
- setState(638);
+ setState(629);
match(T__1);
}
}
@@ -4606,21 +4625,21 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final FunctionNameContext functionName() throws RecognitionException {
FunctionNameContext _localctx = new FunctionNameContext(_ctx, getState());
- enterRule(_localctx, 72, RULE_functionName);
+ enterRule(_localctx, 74, RULE_functionName);
try {
- setState(643);
+ setState(634);
switch (_input.LA(1)) {
case LEFT:
enterOuterAlt(_localctx, 1);
{
- setState(640);
+ setState(631);
match(LEFT);
}
break;
case RIGHT:
enterOuterAlt(_localctx, 2);
{
- setState(641);
+ setState(632);
match(RIGHT);
}
break;
@@ -4655,7 +4674,7 @@ public final FunctionNameContext functionName() throws RecognitionException {
case BACKQUOTED_IDENTIFIER:
enterOuterAlt(_localctx, 3);
{
- setState(642);
+ setState(633);
identifier();
}
break;
@@ -4864,16 +4883,16 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ConstantContext constant() throws RecognitionException {
ConstantContext _localctx = new ConstantContext(_ctx, getState());
- enterRule(_localctx, 74, RULE_constant);
+ enterRule(_localctx, 76, RULE_constant);
try {
int _alt;
- setState(670);
+ setState(661);
switch (_input.LA(1)) {
case NULL:
_localctx = new NullLiteralContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(645);
+ setState(636);
match(NULL);
}
break;
@@ -4884,7 +4903,7 @@ public final ConstantContext constant() throws RecognitionException {
_localctx = new NumericLiteralContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(646);
+ setState(637);
number();
}
break;
@@ -4893,7 +4912,7 @@ public final ConstantContext constant() throws RecognitionException {
_localctx = new BooleanLiteralContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(647);
+ setState(638);
booleanValue();
}
break;
@@ -4901,7 +4920,7 @@ public final ConstantContext constant() throws RecognitionException {
_localctx = new StringLiteralContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(649);
+ setState(640);
_errHandler.sync(this);
_alt = 1;
do {
@@ -4909,7 +4928,7 @@ public final ConstantContext constant() throws RecognitionException {
case 1:
{
{
- setState(648);
+ setState(639);
match(STRING);
}
}
@@ -4917,9 +4936,9 @@ public final ConstantContext constant() throws RecognitionException {
default:
throw new NoViableAltException(this);
}
- setState(651);
+ setState(642);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,86,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,84,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
}
break;
@@ -4927,7 +4946,7 @@ public final ConstantContext constant() throws RecognitionException {
_localctx = new ParamLiteralContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(653);
+ setState(644);
match(PARAM);
}
break;
@@ -4935,11 +4954,11 @@ public final ConstantContext constant() throws RecognitionException {
_localctx = new DateEscapedLiteralContext(_localctx);
enterOuterAlt(_localctx, 6);
{
- setState(654);
+ setState(645);
match(DATE_ESC);
- setState(655);
+ setState(646);
string();
- setState(656);
+ setState(647);
match(ESC_END);
}
break;
@@ -4947,11 +4966,11 @@ public final ConstantContext constant() throws RecognitionException {
_localctx = new TimeEscapedLiteralContext(_localctx);
enterOuterAlt(_localctx, 7);
{
- setState(658);
+ setState(649);
match(TIME_ESC);
- setState(659);
+ setState(650);
string();
- setState(660);
+ setState(651);
match(ESC_END);
}
break;
@@ -4959,11 +4978,11 @@ public final ConstantContext constant() throws RecognitionException {
_localctx = new TimestampEscapedLiteralContext(_localctx);
enterOuterAlt(_localctx, 8);
{
- setState(662);
+ setState(653);
match(TIMESTAMP_ESC);
- setState(663);
+ setState(654);
string();
- setState(664);
+ setState(655);
match(ESC_END);
}
break;
@@ -4971,11 +4990,11 @@ public final ConstantContext constant() throws RecognitionException {
_localctx = new GuidEscapedLiteralContext(_localctx);
enterOuterAlt(_localctx, 9);
{
- setState(666);
+ setState(657);
match(GUID_ESC);
- setState(667);
+ setState(658);
string();
- setState(668);
+ setState(659);
match(ESC_END);
}
break;
@@ -5022,12 +5041,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ComparisonOperatorContext comparisonOperator() throws RecognitionException {
ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState());
- enterRule(_localctx, 76, RULE_comparisonOperator);
+ enterRule(_localctx, 78, RULE_comparisonOperator);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(672);
+ setState(663);
_la = _input.LA(1);
if ( !(((((_la - 80)) & ~0x3f) == 0 && ((1L << (_la - 80)) & ((1L << (EQ - 80)) | (1L << (NEQ - 80)) | (1L << (LT - 80)) | (1L << (LTE - 80)) | (1L << (GT - 80)) | (1L << (GTE - 80)))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -5071,12 +5090,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BooleanValueContext booleanValue() throws RecognitionException {
BooleanValueContext _localctx = new BooleanValueContext(_ctx, getState());
- enterRule(_localctx, 78, RULE_booleanValue);
+ enterRule(_localctx, 80, RULE_booleanValue);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(674);
+ setState(665);
_la = _input.LA(1);
if ( !(_la==FALSE || _la==TRUE) ) {
_errHandler.recoverInline(this);
@@ -5129,12 +5148,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final DataTypeContext dataType() throws RecognitionException {
DataTypeContext _localctx = new DataTypeContext(_ctx, getState());
- enterRule(_localctx, 80, RULE_dataType);
+ enterRule(_localctx, 82, RULE_dataType);
try {
_localctx = new PrimitiveDataTypeContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(676);
+ setState(667);
identifier();
}
}
@@ -5181,30 +5200,30 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final QualifiedNameContext qualifiedName() throws RecognitionException {
QualifiedNameContext _localctx = new QualifiedNameContext(_ctx, getState());
- enterRule(_localctx, 82, RULE_qualifiedName);
+ enterRule(_localctx, 84, RULE_qualifiedName);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(683);
+ setState(674);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,88,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,86,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
{
{
- setState(678);
+ setState(669);
identifier();
- setState(679);
+ setState(670);
match(DOT);
}
}
}
- setState(685);
+ setState(676);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,88,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,86,_ctx);
}
- setState(686);
+ setState(677);
identifier();
}
}
@@ -5247,15 +5266,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final IdentifierContext identifier() throws RecognitionException {
IdentifierContext _localctx = new IdentifierContext(_ctx, getState());
- enterRule(_localctx, 84, RULE_identifier);
+ enterRule(_localctx, 86, RULE_identifier);
try {
- setState(690);
+ setState(681);
switch (_input.LA(1)) {
case QUOTED_IDENTIFIER:
case BACKQUOTED_IDENTIFIER:
enterOuterAlt(_localctx, 1);
{
- setState(688);
+ setState(679);
quoteIdentifier();
}
break;
@@ -5288,7 +5307,7 @@ public final IdentifierContext identifier() throws RecognitionException {
case DIGIT_IDENTIFIER:
enterOuterAlt(_localctx, 2);
{
- setState(689);
+ setState(680);
unquoteIdentifier();
}
break;
@@ -5338,46 +5357,46 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TableIdentifierContext tableIdentifier() throws RecognitionException {
TableIdentifierContext _localctx = new TableIdentifierContext(_ctx, getState());
- enterRule(_localctx, 86, RULE_tableIdentifier);
+ enterRule(_localctx, 88, RULE_tableIdentifier);
int _la;
try {
- setState(704);
+ setState(695);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,90,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(695);
+ setState(686);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ANALYZE) | (1L << ANALYZED) | (1L << CATALOGS) | (1L << COLUMNS) | (1L << DEBUG) | (1L << EXECUTABLE) | (1L << EXPLAIN) | (1L << FORMAT) | (1L << FUNCTIONS) | (1L << GRAPHVIZ) | (1L << MAPPED) | (1L << OPTIMIZED) | (1L << PARSED) | (1L << PHYSICAL) | (1L << PLAN) | (1L << RLIKE) | (1L << QUERY) | (1L << SCHEMAS) | (1L << SHOW) | (1L << SYS) | (1L << TABLES))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (TEXT - 64)) | (1L << (TYPE - 64)) | (1L << (TYPES - 64)) | (1L << (VERIFY - 64)) | (1L << (IDENTIFIER - 64)) | (1L << (DIGIT_IDENTIFIER - 64)) | (1L << (QUOTED_IDENTIFIER - 64)) | (1L << (BACKQUOTED_IDENTIFIER - 64)))) != 0)) {
{
- setState(692);
+ setState(683);
((TableIdentifierContext)_localctx).catalog = identifier();
- setState(693);
+ setState(684);
match(T__3);
}
}
- setState(697);
+ setState(688);
match(TABLE_IDENTIFIER);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(701);
+ setState(692);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,91,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,89,_ctx) ) {
case 1:
{
- setState(698);
+ setState(689);
((TableIdentifierContext)_localctx).catalog = identifier();
- setState(699);
+ setState(690);
match(T__3);
}
break;
}
- setState(703);
+ setState(694);
((TableIdentifierContext)_localctx).name = identifier();
}
break;
@@ -5442,15 +5461,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final QuoteIdentifierContext quoteIdentifier() throws RecognitionException {
QuoteIdentifierContext _localctx = new QuoteIdentifierContext(_ctx, getState());
- enterRule(_localctx, 88, RULE_quoteIdentifier);
+ enterRule(_localctx, 90, RULE_quoteIdentifier);
try {
- setState(708);
+ setState(699);
switch (_input.LA(1)) {
case QUOTED_IDENTIFIER:
_localctx = new QuotedIdentifierContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(706);
+ setState(697);
match(QUOTED_IDENTIFIER);
}
break;
@@ -5458,7 +5477,7 @@ public final QuoteIdentifierContext quoteIdentifier() throws RecognitionExceptio
_localctx = new BackQuotedIdentifierContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(707);
+ setState(698);
match(BACKQUOTED_IDENTIFIER);
}
break;
@@ -5528,15 +5547,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionException {
UnquoteIdentifierContext _localctx = new UnquoteIdentifierContext(_ctx, getState());
- enterRule(_localctx, 90, RULE_unquoteIdentifier);
+ enterRule(_localctx, 92, RULE_unquoteIdentifier);
try {
- setState(713);
+ setState(704);
switch (_input.LA(1)) {
case IDENTIFIER:
_localctx = new UnquotedIdentifierContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(710);
+ setState(701);
match(IDENTIFIER);
}
break;
@@ -5568,7 +5587,7 @@ public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionExce
_localctx = new UnquotedIdentifierContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(711);
+ setState(702);
nonReserved();
}
break;
@@ -5576,7 +5595,7 @@ public final UnquoteIdentifierContext unquoteIdentifier() throws RecognitionExce
_localctx = new DigitIdentifierContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(712);
+ setState(703);
match(DIGIT_IDENTIFIER);
}
break;
@@ -5647,21 +5666,21 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final NumberContext number() throws RecognitionException {
NumberContext _localctx = new NumberContext(_ctx, getState());
- enterRule(_localctx, 92, RULE_number);
+ enterRule(_localctx, 94, RULE_number);
int _la;
try {
- setState(723);
+ setState(714);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,95,_ctx) ) {
case 1:
_localctx = new DecimalLiteralContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(716);
+ setState(707);
_la = _input.LA(1);
if (_la==PLUS || _la==MINUS) {
{
- setState(715);
+ setState(706);
_la = _input.LA(1);
if ( !(_la==PLUS || _la==MINUS) ) {
_errHandler.recoverInline(this);
@@ -5671,7 +5690,7 @@ public final NumberContext number() throws RecognitionException {
}
}
- setState(718);
+ setState(709);
match(DECIMAL_VALUE);
}
break;
@@ -5679,11 +5698,11 @@ public final NumberContext number() throws RecognitionException {
_localctx = new IntegerLiteralContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(720);
+ setState(711);
_la = _input.LA(1);
if (_la==PLUS || _la==MINUS) {
{
- setState(719);
+ setState(710);
_la = _input.LA(1);
if ( !(_la==PLUS || _la==MINUS) ) {
_errHandler.recoverInline(this);
@@ -5693,7 +5712,7 @@ public final NumberContext number() throws RecognitionException {
}
}
- setState(722);
+ setState(713);
match(INTEGER_VALUE);
}
break;
@@ -5734,12 +5753,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final StringContext string() throws RecognitionException {
StringContext _localctx = new StringContext(_ctx, getState());
- enterRule(_localctx, 94, RULE_string);
+ enterRule(_localctx, 96, RULE_string);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(725);
+ setState(716);
_la = _input.LA(1);
if ( !(_la==PARAM || _la==STRING) ) {
_errHandler.recoverInline(this);
@@ -5806,12 +5825,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final NonReservedContext nonReserved() throws RecognitionException {
NonReservedContext _localctx = new NonReservedContext(_ctx, getState());
- enterRule(_localctx, 96, RULE_nonReserved);
+ enterRule(_localctx, 98, RULE_nonReserved);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(727);
+ setState(718);
_la = _input.LA(1);
if ( !(((((_la - 6)) & ~0x3f) == 0 && ((1L << (_la - 6)) & ((1L << (ANALYZE - 6)) | (1L << (ANALYZED - 6)) | (1L << (CATALOGS - 6)) | (1L << (COLUMNS - 6)) | (1L << (DEBUG - 6)) | (1L << (EXECUTABLE - 6)) | (1L << (EXPLAIN - 6)) | (1L << (FORMAT - 6)) | (1L << (FUNCTIONS - 6)) | (1L << (GRAPHVIZ - 6)) | (1L << (MAPPED - 6)) | (1L << (OPTIMIZED - 6)) | (1L << (PARSED - 6)) | (1L << (PHYSICAL - 6)) | (1L << (PLAN - 6)) | (1L << (RLIKE - 6)) | (1L << (QUERY - 6)) | (1L << (SCHEMAS - 6)) | (1L << (SHOW - 6)) | (1L << (SYS - 6)) | (1L << (TABLES - 6)) | (1L << (TEXT - 6)) | (1L << (TYPE - 6)) | (1L << (TYPES - 6)) | (1L << (VERIFY - 6)))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -5835,7 +5854,7 @@ public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
case 22:
return booleanExpression_sempred((BooleanExpressionContext)_localctx, predIndex);
- case 28:
+ case 29:
return valueExpression_sempred((ValueExpressionContext)_localctx, predIndex);
}
return true;
@@ -5862,296 +5881,290 @@ private boolean valueExpression_sempred(ValueExpressionContext _localctx, int pr
}
public static final String _serializedATN =
- "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3l\u02dc\4\2\t\2\4"+
+ "\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\3l\u02d3\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\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\4t\n\4\f\4\16\4w\13\4\3\4"+
- "\5\4z\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u0083\n\4\f\4\16\4\u0086\13"+
- "\4\3\4\5\4\u0089\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u0090\n\4\3\4\3\4\3\4\3\4"+
- "\3\4\5\4\u0097\n\4\3\4\3\4\3\4\5\4\u009c\n\4\3\4\3\4\3\4\5\4\u00a1\n\4"+
- "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u00ab\n\4\3\4\3\4\5\4\u00af\n\4\3"+
- "\4\3\4\3\4\3\4\7\4\u00b5\n\4\f\4\16\4\u00b8\13\4\5\4\u00ba\n\4\3\4\3\4"+
- "\3\4\3\4\5\4\u00c0\n\4\3\4\3\4\3\4\5\4\u00c5\n\4\3\4\5\4\u00c8\n\4\3\4"+
- "\3\4\3\4\3\4\3\4\5\4\u00cf\n\4\3\5\3\5\3\5\3\5\7\5\u00d5\n\5\f\5\16\5"+
- "\u00d8\13\5\5\5\u00da\n\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\7\6\u00e4\n"+
- "\6\f\6\16\6\u00e7\13\6\5\6\u00e9\n\6\3\6\5\6\u00ec\n\6\3\7\3\7\3\7\3\7"+
- "\3\7\5\7\u00f3\n\7\3\b\3\b\3\b\3\b\3\b\5\b\u00fa\n\b\3\t\3\t\5\t\u00fe"+
- "\n\t\3\n\3\n\5\n\u0102\n\n\3\n\3\n\3\n\7\n\u0107\n\n\f\n\16\n\u010a\13"+
- "\n\3\n\5\n\u010d\n\n\3\n\3\n\5\n\u0111\n\n\3\n\3\n\3\n\5\n\u0116\n\n\3"+
- "\n\3\n\5\n\u011a\n\n\3\13\3\13\3\13\3\13\7\13\u0120\n\13\f\13\16\13\u0123"+
- "\13\13\3\f\5\f\u0126\n\f\3\f\3\f\3\f\7\f\u012b\n\f\f\f\16\f\u012e\13\f"+
- "\3\r\3\r\3\16\3\16\3\16\3\16\7\16\u0136\n\16\f\16\16\16\u0139\13\16\5"+
- "\16\u013b\n\16\3\16\3\16\5\16\u013f\n\16\3\17\3\17\3\17\3\17\3\17\3\17"+
- "\3\20\3\20\3\21\3\21\5\21\u014b\n\21\3\21\5\21\u014e\n\21\3\22\3\22\7"+
- "\22\u0152\n\22\f\22\16\22\u0155\13\22\3\23\3\23\3\23\3\23\5\23\u015b\n"+
- "\23\3\23\3\23\3\23\3\23\3\23\5\23\u0162\n\23\3\24\5\24\u0165\n\24\3\24"+
- "\3\24\5\24\u0169\n\24\3\24\3\24\5\24\u016d\n\24\3\24\3\24\5\24\u0171\n"+
- "\24\5\24\u0173\n\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u017c\n\25"+
- "\f\25\16\25\u017f\13\25\3\25\3\25\5\25\u0183\n\25\3\26\3\26\5\26\u0187"+
- "\n\26\3\26\5\26\u018a\n\26\3\26\3\26\3\26\3\26\5\26\u0190\n\26\3\26\5"+
- "\26\u0193\n\26\3\26\3\26\3\26\3\26\5\26\u0199\n\26\3\26\5\26\u019c\n\26"+
- "\5\26\u019e\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\7\30\u01af\n\30\f\30\16\30\u01b2\13\30\3\30\3\30"+
- "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\7\30\u01bd\n\30\f\30\16\30\u01c0\13"+
- "\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\7\30\u01cb\n\30\f\30"+
- "\16\30\u01ce\13\30\3\30\3\30\3\30\5\30\u01d3\n\30\3\30\3\30\3\30\3\30"+
- "\3\30\3\30\7\30\u01db\n\30\f\30\16\30\u01de\13\30\3\31\3\31\5\31\u01e2"+
- "\n\31\3\32\5\32\u01e5\n\32\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u01ed\n"+
- "\32\3\32\3\32\3\32\3\32\3\32\7\32\u01f4\n\32\f\32\16\32\u01f7\13\32\3"+
- "\32\3\32\3\32\5\32\u01fc\n\32\3\32\3\32\3\32\3\32\3\32\3\32\5\32\u0204"+
- "\n\32\3\32\3\32\3\32\5\32\u0209\n\32\3\32\3\32\3\32\3\32\5\32\u020f\n"+
- "\32\3\32\5\32\u0212\n\32\3\33\3\33\3\33\3\34\3\34\5\34\u0219\n\34\3\35"+
- "\3\35\3\35\3\35\3\35\3\35\5\35\u0221\n\35\3\36\3\36\3\36\3\36\5\36\u0227"+
- "\n\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\3\36\7\36\u0233\n\36"+
- "\f\36\16\36\u0236\13\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u023f"+
- "\n\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37"+
- "\u024d\n\37\3 \3 \3 \3 \3 \5 \u0254\n \3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3"+
- "\"\3\"\3\"\5\"\u0262\n\"\3#\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\5$\u0270"+
- "\n$\3%\3%\3%\5%\u0275\n%\3%\3%\3%\7%\u027a\n%\f%\16%\u027d\13%\5%\u027f"+
- "\n%\3%\3%\3&\3&\3&\5&\u0286\n&\3\'\3\'\3\'\3\'\6\'\u028c\n\'\r\'\16\'"+
- "\u028d\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'\3\'"+
- "\3\'\5\'\u02a1\n\'\3(\3(\3)\3)\3*\3*\3+\3+\3+\7+\u02ac\n+\f+\16+\u02af"+
- "\13+\3+\3+\3,\3,\5,\u02b5\n,\3-\3-\3-\5-\u02ba\n-\3-\3-\3-\3-\5-\u02c0"+
- "\n-\3-\5-\u02c3\n-\3.\3.\5.\u02c7\n.\3/\3/\3/\5/\u02cc\n/\3\60\5\60\u02cf"+
- "\n\60\3\60\3\60\5\60\u02d3\n\60\3\60\5\60\u02d6\n\60\3\61\3\61\3\62\3"+
- "\62\3\62\2\4.:\63\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62"+
- "\64\668:<>@BDFHJLNPRTVXZ\\^`b\2\20\b\2\7\7\t\t\31\31,,\62\62\66\66\4\2"+
- "\"\"BB\4\2\t\t\62\62\4\2\37\37%%\3\2\25\26\4\2\7\7aa\4\2\r\r\25\25\4\2"+
- "\7\7\27\27\3\2XY\3\2Z\\\3\2RW\4\2\35\35CC\3\2_`\20\2\b\t\22\24\31\31\33"+
- "\33\36\36!\",,\62\62\668:<>?ABDEGG\u0338\2d\3\2\2\2\4g\3\2\2\2\6\u00ce"+
- "\3\2\2\2\b\u00d9\3\2\2\2\n\u00dd\3\2\2\2\f\u00f2\3\2\2\2\16\u00f9\3\2"+
- "\2\2\20\u00fb\3\2\2\2\22\u00ff\3\2\2\2\24\u011b\3\2\2\2\26\u0125\3\2\2"+
- "\2\30\u012f\3\2\2\2\32\u013e\3\2\2\2\34\u0140\3\2\2\2\36\u0146\3\2\2\2"+
- " \u0148\3\2\2\2\"\u014f\3\2\2\2$\u0161\3\2\2\2&\u0172\3\2\2\2(\u0182\3"+
- "\2\2\2*\u019d\3\2\2\2,\u019f\3\2\2\2.\u01d2\3\2\2\2\60\u01df\3\2\2\2\62"+
- "\u0211\3\2\2\2\64\u0213\3\2\2\2\66\u0216\3\2\2\28\u0220\3\2\2\2:\u0226"+
- "\3\2\2\2<\u024c\3\2\2\2>\u0253\3\2\2\2@\u0255\3\2\2\2B\u0261\3\2\2\2D"+
- "\u0263\3\2\2\2F\u026f\3\2\2\2H\u0271\3\2\2\2J\u0285\3\2\2\2L\u02a0\3\2"+
- "\2\2N\u02a2\3\2\2\2P\u02a4\3\2\2\2R\u02a6\3\2\2\2T\u02ad\3\2\2\2V\u02b4"+
- "\3\2\2\2X\u02c2\3\2\2\2Z\u02c6\3\2\2\2\\\u02cb\3\2\2\2^\u02d5\3\2\2\2"+
- "`\u02d7\3\2\2\2b\u02d9\3\2\2\2de\5\6\4\2ef\7\2\2\3f\3\3\2\2\2gh\5,\27"+
- "\2hi\7\2\2\3i\5\3\2\2\2j\u00cf\5\b\5\2ky\7\33\2\2lu\7\3\2\2mn\78\2\2n"+
- "t\t\2\2\2op\7\36\2\2pt\t\3\2\2qr\7G\2\2rt\5P)\2sm\3\2\2\2so\3\2\2\2sq"+
- "\3\2\2\2tw\3\2\2\2us\3\2\2\2uv\3\2\2\2vx\3\2\2\2wu\3\2\2\2xz\7\4\2\2y"+
- "l\3\2\2\2yz\3\2\2\2z{\3\2\2\2{\u00cf\5\6\4\2|\u0088\7\24\2\2}\u0084\7"+
- "\3\2\2~\177\78\2\2\177\u0083\t\4\2\2\u0080\u0081\7\36\2\2\u0081\u0083"+
- "\t\3\2\2\u0082~\3\2\2\2\u0082\u0080\3\2\2\2\u0083\u0086\3\2\2\2\u0084"+
- "\u0082\3\2\2\2\u0084\u0085\3\2\2\2\u0085\u0087\3\2\2\2\u0086\u0084\3\2"+
- "\2\2\u0087\u0089\7\4\2\2\u0088}\3\2\2\2\u0088\u0089\3\2\2\2\u0089\u008a"+
- "\3\2\2\2\u008a\u00cf\5\6\4\2\u008b\u008c\7>\2\2\u008c\u008f\7A\2\2\u008d"+
- "\u0090\5\64\33\2\u008e\u0090\5X-\2\u008f\u008d\3\2\2\2\u008f\u008e\3\2"+
- "\2\2\u008f\u0090\3\2\2\2\u0090\u00cf\3\2\2\2\u0091\u0092\7>\2\2\u0092"+
- "\u0093\7\23\2\2\u0093\u0096\t\5\2\2\u0094\u0097\5\64\33\2\u0095\u0097"+
- "\5X-\2\u0096\u0094\3\2\2\2\u0096\u0095\3\2\2\2\u0097\u00cf\3\2\2\2\u0098"+
- "\u009b\t\6\2\2\u0099\u009c\5\64\33\2\u009a\u009c\5X-\2\u009b\u0099\3\2"+
- "\2\2\u009b\u009a\3\2\2\2\u009c\u00cf\3\2\2\2\u009d\u009e\7>\2\2\u009e"+
- "\u00a0\7!\2\2\u009f\u00a1\5\64\33\2\u00a0\u009f\3\2\2\2\u00a0\u00a1\3"+
- "\2\2\2\u00a1\u00cf\3\2\2\2\u00a2\u00a3\7>\2\2\u00a3\u00cf\7<\2\2\u00a4"+
- "\u00a5\7?\2\2\u00a5\u00cf\7\22\2\2\u00a6\u00a7\7?\2\2\u00a7\u00aa\7A\2"+
- "\2\u00a8\u00a9\7\21\2\2\u00a9\u00ab\5\64\33\2\u00aa\u00a8\3\2\2\2\u00aa"+
- "\u00ab\3\2\2\2\u00ab\u00ae\3\2\2\2\u00ac\u00af\5\64\33\2\u00ad\u00af\5"+
- "X-\2\u00ae\u00ac\3\2\2\2\u00ae\u00ad\3\2\2\2\u00ae\u00af\3\2\2\2\u00af"+
- "\u00b9\3\2\2\2\u00b0\u00b1\7D\2\2\u00b1\u00b6\5`\61\2\u00b2\u00b3\7\5"+
- "\2\2\u00b3\u00b5\5`\61\2\u00b4\u00b2\3\2\2\2\u00b5\u00b8\3\2\2\2\u00b6"+
- "\u00b4\3\2\2\2\u00b6\u00b7\3\2\2\2\u00b7\u00ba\3\2\2\2\u00b8\u00b6\3\2"+
- "\2\2\u00b9\u00b0\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\u00cf\3\2\2\2\u00bb"+
- "\u00bc\7?\2\2\u00bc\u00bf\7\23\2\2\u00bd\u00be\7\21\2\2\u00be\u00c0\5"+
- "`\61\2\u00bf\u00bd\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c4\3\2\2\2\u00c1"+
- "\u00c2\7@\2\2\u00c2\u00c5\5\64\33\2\u00c3\u00c5\5X-\2\u00c4\u00c1\3\2"+
- "\2\2\u00c4\u00c3\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\u00c7\3\2\2\2\u00c6"+
- "\u00c8\5\64\33\2\u00c7\u00c6\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00cf\3"+
- "\2\2\2\u00c9\u00ca\7?\2\2\u00ca\u00cf\7E\2\2\u00cb\u00cc\7?\2\2\u00cc"+
- "\u00cd\7@\2\2\u00cd\u00cf\7E\2\2\u00cej\3\2\2\2\u00cek\3\2\2\2\u00ce|"+
- "\3\2\2\2\u00ce\u008b\3\2\2\2\u00ce\u0091\3\2\2\2\u00ce\u0098\3\2\2\2\u00ce"+
- "\u009d\3\2\2\2\u00ce\u00a2\3\2\2\2\u00ce\u00a4\3\2\2\2\u00ce\u00a6\3\2"+
- "\2\2\u00ce\u00bb\3\2\2\2\u00ce\u00c9\3\2\2\2\u00ce\u00cb\3\2\2\2\u00cf"+
- "\7\3\2\2\2\u00d0\u00d1\7I\2\2\u00d1\u00d6\5\34\17\2\u00d2\u00d3\7\5\2"+
- "\2\u00d3\u00d5\5\34\17\2\u00d4\u00d2\3\2\2\2\u00d5\u00d8\3\2\2\2\u00d6"+
- "\u00d4\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00da\3\2\2\2\u00d8\u00d6\3\2"+
- "\2\2\u00d9\u00d0\3\2\2\2\u00d9\u00da\3\2\2\2\u00da\u00db\3\2\2\2\u00db"+
- "\u00dc\5\n\6\2\u00dc\t\3\2\2\2\u00dd\u00e8\5\16\b\2\u00de\u00df\7\64\2"+
- "\2\u00df\u00e0\7\17\2\2\u00e0\u00e5\5\20\t\2\u00e1\u00e2\7\5\2\2\u00e2"+
- "\u00e4\5\20\t\2\u00e3\u00e1\3\2\2\2\u00e4\u00e7\3\2\2\2\u00e5\u00e3\3"+
- "\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e9\3\2\2\2\u00e7\u00e5\3\2\2\2\u00e8"+
- "\u00de\3\2\2\2\u00e8\u00e9\3\2\2\2\u00e9\u00eb\3\2\2\2\u00ea\u00ec\5\f"+
- "\7\2\u00eb\u00ea\3\2\2\2\u00eb\u00ec\3\2\2\2\u00ec\13\3\2\2\2\u00ed\u00ee"+
- "\7+\2\2\u00ee\u00f3\t\7\2\2\u00ef\u00f0\7L\2\2\u00f0\u00f1\t\7\2\2\u00f1"+
- "\u00f3\7Q\2\2\u00f2\u00ed\3\2\2\2\u00f2\u00ef\3\2\2\2\u00f3\r\3\2\2\2"+
- "\u00f4\u00fa\5\22\n\2\u00f5\u00f6\7\3\2\2\u00f6\u00f7\5\n\6\2\u00f7\u00f8"+
- "\7\4\2\2\u00f8\u00fa\3\2\2\2\u00f9\u00f4\3\2\2\2\u00f9\u00f5\3\2\2\2\u00fa"+
- "\17\3\2\2\2\u00fb\u00fd\5,\27\2\u00fc\u00fe\t\b\2\2\u00fd\u00fc\3\2\2"+
- "\2\u00fd\u00fe\3\2\2\2\u00fe\21\3\2\2\2\u00ff\u0101\7=\2\2\u0100\u0102"+
- "\5\36\20\2\u0101\u0100\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0103\3\2\2\2"+
- "\u0103\u0108\5 \21\2\u0104\u0105\7\5\2\2\u0105\u0107\5 \21\2\u0106\u0104"+
- "\3\2\2\2\u0107\u010a\3\2\2\2\u0108\u0106\3\2\2\2\u0108\u0109\3\2\2\2\u0109"+
- "\u010c\3\2\2\2\u010a\u0108\3\2\2\2\u010b\u010d\5\24\13\2\u010c\u010b\3"+
- "\2\2\2\u010c\u010d\3\2\2\2\u010d\u0110\3\2\2\2\u010e\u010f\7H\2\2\u010f"+
- "\u0111\5.\30\2\u0110\u010e\3\2\2\2\u0110\u0111\3\2\2\2\u0111\u0115\3\2"+
- "\2\2\u0112\u0113\7#\2\2\u0113\u0114\7\17\2\2\u0114\u0116\5\26\f\2\u0115"+
- "\u0112\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0119\3\2\2\2\u0117\u0118\7$"+
- "\2\2\u0118\u011a\5.\30\2\u0119\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a"+
- "\23\3\2\2\2\u011b\u011c\7\37\2\2\u011c\u0121\5\"\22\2\u011d\u011e\7\5"+
- "\2\2\u011e\u0120\5\"\22\2\u011f\u011d\3\2\2\2\u0120\u0123\3\2\2\2\u0121"+
- "\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122\25\3\2\2\2\u0123\u0121\3\2\2"+
- "\2\u0124\u0126\5\36\20\2\u0125\u0124\3\2\2\2\u0125\u0126\3\2\2\2\u0126"+
- "\u0127\3\2\2\2\u0127\u012c\5\30\r\2\u0128\u0129\7\5\2\2\u0129\u012b\5"+
- "\30\r\2\u012a\u0128\3\2\2\2\u012b\u012e\3\2\2\2\u012c\u012a\3\2\2\2\u012c"+
- "\u012d\3\2\2\2\u012d\27\3\2\2\2\u012e\u012c\3\2\2\2\u012f\u0130\5\32\16"+
- "\2\u0130\31\3\2\2\2\u0131\u013a\7\3\2\2\u0132\u0137\5,\27\2\u0133\u0134"+
- "\7\5\2\2\u0134\u0136\5,\27\2\u0135\u0133\3\2\2\2\u0136\u0139\3\2\2\2\u0137"+
- "\u0135\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u013b\3\2\2\2\u0139\u0137\3\2"+
- "\2\2\u013a\u0132\3\2\2\2\u013a\u013b\3\2\2\2\u013b\u013c\3\2\2\2\u013c"+
- "\u013f\7\4\2\2\u013d\u013f\5,\27\2\u013e\u0131\3\2\2\2\u013e\u013d\3\2"+
- "\2\2\u013f\33\3\2\2\2\u0140\u0141\5V,\2\u0141\u0142\7\f\2\2\u0142\u0143"+
- "\7\3\2\2\u0143\u0144\5\n\6\2\u0144\u0145\7\4\2\2\u0145\35\3\2\2\2\u0146"+
- "\u0147\t\t\2\2\u0147\37\3\2\2\2\u0148\u014d\5,\27\2\u0149\u014b\7\f\2"+
- "\2\u014a\u0149\3\2\2\2\u014a\u014b\3\2\2\2\u014b\u014c\3\2\2\2\u014c\u014e"+
- "\5V,\2\u014d\u014a\3\2\2\2\u014d\u014e\3\2\2\2\u014e!\3\2\2\2\u014f\u0153"+
- "\5*\26\2\u0150\u0152\5$\23\2\u0151\u0150\3\2\2\2\u0152\u0155\3\2\2\2\u0153"+
- "\u0151\3\2\2\2\u0153\u0154\3\2\2\2\u0154#\3\2\2\2\u0155\u0153\3\2\2\2"+
- "\u0156\u0157\5&\24\2\u0157\u0158\7(\2\2\u0158\u015a\5*\26\2\u0159\u015b"+
- "\5(\25\2\u015a\u0159\3\2\2\2\u015a\u015b\3\2\2\2\u015b\u0162\3\2\2\2\u015c"+
- "\u015d\7.\2\2\u015d\u015e\5&\24\2\u015e\u015f\7(\2\2\u015f\u0160\5*\26"+
- "\2\u0160\u0162\3\2\2\2\u0161\u0156\3\2\2\2\u0161\u015c\3\2\2\2\u0162%"+
- "\3\2\2\2\u0163\u0165\7&\2\2\u0164\u0163\3\2\2\2\u0164\u0165\3\2\2\2\u0165"+
- "\u0173\3\2\2\2\u0166\u0168\7)\2\2\u0167\u0169\7\65\2\2\u0168\u0167\3\2"+
- "\2\2\u0168\u0169\3\2\2\2\u0169\u0173\3\2\2\2\u016a\u016c\79\2\2\u016b"+
- "\u016d\7\65\2\2\u016c\u016b\3\2\2\2\u016c\u016d\3\2\2\2\u016d\u0173\3"+
- "\2\2\2\u016e\u0170\7 \2\2\u016f\u0171\7\65\2\2\u0170\u016f\3\2\2\2\u0170"+
- "\u0171\3\2\2\2\u0171\u0173\3\2\2\2\u0172\u0164\3\2\2\2\u0172\u0166\3\2"+
- "\2\2\u0172\u016a\3\2\2\2\u0172\u016e\3\2\2\2\u0173\'\3\2\2\2\u0174\u0175"+
- "\7\61\2\2\u0175\u0183\5.\30\2\u0176\u0177\7F\2\2\u0177\u0178\7\3\2\2\u0178"+
- "\u017d\5V,\2\u0179\u017a\7\5\2\2\u017a\u017c\5V,\2\u017b\u0179\3\2\2\2"+
- "\u017c\u017f\3\2\2\2\u017d\u017b\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u0180"+
- "\3\2\2\2\u017f\u017d\3\2\2\2\u0180\u0181\7\4\2\2\u0181\u0183\3\2\2\2\u0182"+
- "\u0174\3\2\2\2\u0182\u0176\3\2\2\2\u0183)\3\2\2\2\u0184\u0189\5X-\2\u0185"+
- "\u0187\7\f\2\2\u0186\u0185\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u0188\3\2"+
- "\2\2\u0188\u018a\5T+\2\u0189\u0186\3\2\2\2\u0189\u018a\3\2\2\2\u018a\u019e"+
- "\3\2\2\2\u018b\u018c\7\3\2\2\u018c\u018d\5\n\6\2\u018d\u0192\7\4\2\2\u018e"+
- "\u0190\7\f\2\2\u018f\u018e\3\2\2\2\u018f\u0190\3\2\2\2\u0190\u0191\3\2"+
- "\2\2\u0191\u0193\5T+\2\u0192\u018f\3\2\2\2\u0192\u0193\3\2\2\2\u0193\u019e"+
- "\3\2\2\2\u0194\u0195\7\3\2\2\u0195\u0196\5\"\22\2\u0196\u019b\7\4\2\2"+
- "\u0197\u0199\7\f\2\2\u0198\u0197\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019a"+
- "\3\2\2\2\u019a\u019c\5T+\2\u019b\u0198\3\2\2\2\u019b\u019c\3\2\2\2\u019c"+
- "\u019e\3\2\2\2\u019d\u0184\3\2\2\2\u019d\u018b\3\2\2\2\u019d\u0194\3\2"+
- "\2\2\u019e+\3\2\2\2\u019f\u01a0\5.\30\2\u01a0-\3\2\2\2\u01a1\u01a2\b\30"+
- "\1\2\u01a2\u01a3\7/\2\2\u01a3\u01d3\5.\30\n\u01a4\u01a5\7\32\2\2\u01a5"+
- "\u01a6\7\3\2\2\u01a6\u01a7\5\b\5\2\u01a7\u01a8\7\4\2\2\u01a8\u01d3\3\2"+
- "\2\2\u01a9\u01aa\7;\2\2\u01aa\u01ab\7\3\2\2\u01ab\u01b0\5`\61\2\u01ac"+
- "\u01ad\7\5\2\2\u01ad\u01af\5`\61\2\u01ae\u01ac\3\2\2\2\u01af\u01b2\3\2"+
- "\2\2\u01b0\u01ae\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1\u01b3\3\2\2\2\u01b2"+
- "\u01b0\3\2\2\2\u01b3\u01b4\7\4\2\2\u01b4\u01d3\3\2\2\2\u01b5\u01b6\7-"+
- "\2\2\u01b6\u01b7\7\3\2\2\u01b7\u01b8\5T+\2\u01b8\u01b9\7\5\2\2\u01b9\u01be"+
- "\5`\61\2\u01ba\u01bb\7\5\2\2\u01bb\u01bd\5`\61\2\u01bc\u01ba\3\2\2\2\u01bd"+
- "\u01c0\3\2\2\2\u01be\u01bc\3\2\2\2\u01be\u01bf\3\2\2\2\u01bf\u01c1\3\2"+
- "\2\2\u01c0\u01be\3\2\2\2\u01c1\u01c2\7\4\2\2\u01c2\u01d3\3\2\2\2\u01c3"+
- "\u01c4\7-\2\2\u01c4\u01c5\7\3\2\2\u01c5\u01c6\5`\61\2\u01c6\u01c7\7\5"+
- "\2\2\u01c7\u01cc\5`\61\2\u01c8\u01c9\7\5\2\2\u01c9\u01cb\5`\61\2\u01ca"+
- "\u01c8\3\2\2\2\u01cb\u01ce\3\2\2\2\u01cc\u01ca\3\2\2\2\u01cc\u01cd\3\2"+
- "\2\2\u01cd\u01cf\3\2\2\2\u01ce\u01cc\3\2\2\2\u01cf\u01d0\7\4\2\2\u01d0"+
- "\u01d3\3\2\2\2\u01d1\u01d3\5\60\31\2\u01d2\u01a1\3\2\2\2\u01d2\u01a4\3"+
- "\2\2\2\u01d2\u01a9\3\2\2\2\u01d2\u01b5\3\2\2\2\u01d2\u01c3\3\2\2\2\u01d2"+
- "\u01d1\3\2\2\2\u01d3\u01dc\3\2\2\2\u01d4\u01d5\f\4\2\2\u01d5\u01d6\7\n"+
- "\2\2\u01d6\u01db\5.\30\5\u01d7\u01d8\f\3\2\2\u01d8\u01d9\7\63\2\2\u01d9"+
- "\u01db\5.\30\4\u01da\u01d4\3\2\2\2\u01da\u01d7\3\2\2\2\u01db\u01de\3\2"+
- "\2\2\u01dc\u01da\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd/\3\2\2\2\u01de\u01dc"+
- "\3\2\2\2\u01df\u01e1\5:\36\2\u01e0\u01e2\5\62\32\2\u01e1\u01e0\3\2\2\2"+
- "\u01e1\u01e2\3\2\2\2\u01e2\61\3\2\2\2\u01e3\u01e5\7/\2\2\u01e4\u01e3\3"+
- "\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e6\3\2\2\2\u01e6\u01e7\7\16\2\2\u01e7"+
- "\u01e8\5:\36\2\u01e8\u01e9\7\n\2\2\u01e9\u01ea\5:\36\2\u01ea\u0212\3\2"+
- "\2\2\u01eb\u01ed\7/\2\2\u01ec\u01eb\3\2\2\2\u01ec\u01ed\3\2\2\2\u01ed"+
- "\u01ee\3\2\2\2\u01ee\u01ef\7%\2\2\u01ef\u01f0\7\3\2\2\u01f0\u01f5\5,\27"+
- "\2\u01f1\u01f2\7\5\2\2\u01f2\u01f4\5,\27\2\u01f3\u01f1\3\2\2\2\u01f4\u01f7"+
- "\3\2\2\2\u01f5\u01f3\3\2\2\2\u01f5\u01f6\3\2\2\2\u01f6\u01f8\3\2\2\2\u01f7"+
- "\u01f5\3\2\2\2\u01f8\u01f9\7\4\2\2\u01f9\u0212\3\2\2\2\u01fa\u01fc\7/"+
- "\2\2\u01fb\u01fa\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc\u01fd\3\2\2\2\u01fd"+
- "\u01fe\7%\2\2\u01fe\u01ff\7\3\2\2\u01ff\u0200\5\b\5\2\u0200\u0201\7\4"+
- "\2\2\u0201\u0212\3\2\2\2\u0202\u0204\7/\2\2\u0203\u0202\3\2\2\2\u0203"+
- "\u0204\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u0206\7*\2\2\u0206\u0212\5\66"+
- "\34\2\u0207\u0209\7/\2\2\u0208\u0207\3\2\2\2\u0208\u0209\3\2\2\2\u0209"+
- "\u020a\3\2\2\2\u020a\u020b\7:\2\2\u020b\u0212\5`\61\2\u020c\u020e\7\'"+
- "\2\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\u0212\7\60\2\2\u0211\u01e4\3\2\2\2\u0211\u01ec\3"+
- "\2\2\2\u0211\u01fb\3\2\2\2\u0211\u0203\3\2\2\2\u0211\u0208\3\2\2\2\u0211"+
- "\u020c\3\2\2\2\u0212\63\3\2\2\2\u0213\u0214\7*\2\2\u0214\u0215\5\66\34"+
- "\2\u0215\65\3\2\2\2\u0216\u0218\5`\61\2\u0217\u0219\58\35\2\u0218\u0217"+
- "\3\2\2\2\u0218\u0219\3\2\2\2\u0219\67\3\2\2\2\u021a\u021b\7\30\2\2\u021b"+
- "\u0221\5`\61\2\u021c\u021d\7J\2\2\u021d\u021e\5`\61\2\u021e\u021f\7Q\2"+
- "\2\u021f\u0221\3\2\2\2\u0220\u021a\3\2\2\2\u0220\u021c\3\2\2\2\u02219"+
- "\3\2\2\2\u0222\u0223\b\36\1\2\u0223\u0227\5<\37\2\u0224\u0225\t\n\2\2"+
- "\u0225\u0227\5:\36\6\u0226\u0222\3\2\2\2\u0226\u0224\3\2\2\2\u0227\u0234"+
- "\3\2\2\2\u0228\u0229\f\5\2\2\u0229\u022a\t\13\2\2\u022a\u0233\5:\36\6"+
- "\u022b\u022c\f\4\2\2\u022c\u022d\t\n\2\2\u022d\u0233\5:\36\5\u022e\u022f"+
- "\f\3\2\2\u022f\u0230\5N(\2\u0230\u0231\5:\36\4\u0231\u0233\3\2\2\2\u0232"+
- "\u0228\3\2\2\2\u0232\u022b\3\2\2\2\u0232\u022e\3\2\2\2\u0233\u0236\3\2"+
- "\2\2\u0234\u0232\3\2\2\2\u0234\u0235\3\2\2\2\u0235;\3\2\2\2\u0236\u0234"+
- "\3\2\2\2\u0237\u024d\5> \2\u0238\u024d\5B\"\2\u0239\u024d\5L\'\2\u023a"+
- "\u024d\7Z\2\2\u023b\u023c\5T+\2\u023c\u023d\7^\2\2\u023d\u023f\3\2\2\2"+
- "\u023e\u023b\3\2\2\2\u023e\u023f\3\2\2\2\u023f\u0240\3\2\2\2\u0240\u024d"+
- "\7Z\2\2\u0241\u024d\5F$\2\u0242\u0243\7\3\2\2\u0243\u0244\5\b\5\2\u0244"+
- "\u0245\7\4\2\2\u0245\u024d\3\2\2\2\u0246\u024d\5V,\2\u0247\u024d\5T+\2"+
- "\u0248\u0249\7\3\2\2\u0249\u024a\5,\27\2\u024a\u024b\7\4\2\2\u024b\u024d"+
- "\3\2\2\2\u024c\u0237\3\2\2\2\u024c\u0238\3\2\2\2\u024c\u0239\3\2\2\2\u024c"+
- "\u023a\3\2\2\2\u024c\u023e\3\2\2\2\u024c\u0241\3\2\2\2\u024c\u0242\3\2"+
- "\2\2\u024c\u0246\3\2\2\2\u024c\u0247\3\2\2\2\u024c\u0248\3\2\2\2\u024d"+
- "=\3\2\2\2\u024e\u0254\5@!\2\u024f\u0250\7K\2\2\u0250\u0251\5@!\2\u0251"+
- "\u0252\7Q\2\2\u0252\u0254\3\2\2\2\u0253\u024e\3\2\2\2\u0253\u024f\3\2"+
- "\2\2\u0254?\3\2\2\2\u0255\u0256\7\20\2\2\u0256\u0257\7\3\2\2\u0257\u0258"+
- "\5,\27\2\u0258\u0259\7\f\2\2\u0259\u025a\5R*\2\u025a\u025b\7\4\2\2\u025b"+
- "A\3\2\2\2\u025c\u0262\5D#\2\u025d\u025e\7K\2\2\u025e\u025f\5D#\2\u025f"+
- "\u0260\7Q\2\2\u0260\u0262\3\2\2\2\u0261\u025c\3\2\2\2\u0261\u025d\3\2"+
- "\2\2\u0262C\3\2\2\2\u0263\u0264\7\34\2\2\u0264\u0265\7\3\2\2\u0265\u0266"+
- "\5V,\2\u0266\u0267\7\37\2\2\u0267\u0268\5:\36\2\u0268\u0269\7\4\2\2\u0269"+
- "E\3\2\2\2\u026a\u0270\5H%\2\u026b\u026c\7K\2\2\u026c\u026d\5H%\2\u026d"+
- "\u026e\7Q\2\2\u026e\u0270\3\2\2\2\u026f\u026a\3\2\2\2\u026f\u026b\3\2"+
- "\2\2\u0270G\3\2\2\2\u0271\u0272\5J&\2\u0272\u027e\7\3\2\2\u0273\u0275"+
- "\5\36\20\2\u0274\u0273\3\2\2\2\u0274\u0275\3\2\2\2\u0275\u0276\3\2\2\2"+
- "\u0276\u027b\5,\27\2\u0277\u0278\7\5\2\2\u0278\u027a\5,\27\2\u0279\u0277"+
- "\3\2\2\2\u027a\u027d\3\2\2\2\u027b\u0279\3\2\2\2\u027b\u027c\3\2\2\2\u027c"+
- "\u027f\3\2\2\2\u027d\u027b\3\2\2\2\u027e\u0274\3\2\2\2\u027e\u027f\3\2"+
- "\2\2\u027f\u0280\3\2\2\2\u0280\u0281\7\4\2\2\u0281I\3\2\2\2\u0282\u0286"+
- "\7)\2\2\u0283\u0286\79\2\2\u0284\u0286\5V,\2\u0285\u0282\3\2\2\2\u0285"+
- "\u0283\3\2\2\2\u0285\u0284\3\2\2\2\u0286K\3\2\2\2\u0287\u02a1\7\60\2\2"+
- "\u0288\u02a1\5^\60\2\u0289\u02a1\5P)\2\u028a\u028c\7`\2\2\u028b\u028a"+
- "\3\2\2\2\u028c\u028d\3\2\2\2\u028d\u028b\3\2\2\2\u028d\u028e\3\2\2\2\u028e"+
- "\u02a1\3\2\2\2\u028f\u02a1\7_\2\2\u0290\u0291\7M\2\2\u0291\u0292\5`\61"+
- "\2\u0292\u0293\7Q\2\2\u0293\u02a1\3\2\2\2\u0294\u0295\7N\2\2\u0295\u0296"+
- "\5`\61\2\u0296\u0297\7Q\2\2\u0297\u02a1\3\2\2\2\u0298\u0299\7O\2\2\u0299"+
- "\u029a\5`\61\2\u029a\u029b\7Q\2\2\u029b\u02a1\3\2\2\2\u029c\u029d\7P\2"+
- "\2\u029d\u029e\5`\61\2\u029e\u029f\7Q\2\2\u029f\u02a1\3\2\2\2\u02a0\u0287"+
- "\3\2\2\2\u02a0\u0288\3\2\2\2\u02a0\u0289\3\2\2\2\u02a0\u028b\3\2\2\2\u02a0"+
- "\u028f\3\2\2\2\u02a0\u0290\3\2\2\2\u02a0\u0294\3\2\2\2\u02a0\u0298\3\2"+
- "\2\2\u02a0\u029c\3\2\2\2\u02a1M\3\2\2\2\u02a2\u02a3\t\f\2\2\u02a3O\3\2"+
- "\2\2\u02a4\u02a5\t\r\2\2\u02a5Q\3\2\2\2\u02a6\u02a7\5V,\2\u02a7S\3\2\2"+
- "\2\u02a8\u02a9\5V,\2\u02a9\u02aa\7^\2\2\u02aa\u02ac\3\2\2\2\u02ab\u02a8"+
- "\3\2\2\2\u02ac\u02af\3\2\2\2\u02ad\u02ab\3\2\2\2\u02ad\u02ae\3\2\2\2\u02ae"+
- "\u02b0\3\2\2\2\u02af\u02ad\3\2\2\2\u02b0\u02b1\5V,\2\u02b1U\3\2\2\2\u02b2"+
- "\u02b5\5Z.\2\u02b3\u02b5\5\\/\2\u02b4\u02b2\3\2\2\2\u02b4\u02b3\3\2\2"+
- "\2\u02b5W\3\2\2\2\u02b6\u02b7\5V,\2\u02b7\u02b8\7\6\2\2\u02b8\u02ba\3"+
- "\2\2\2\u02b9\u02b6\3\2\2\2\u02b9\u02ba\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bb"+
- "\u02c3\7e\2\2\u02bc\u02bd\5V,\2\u02bd\u02be\7\6\2\2\u02be\u02c0\3\2\2"+
- "\2\u02bf\u02bc\3\2\2\2\u02bf\u02c0\3\2\2\2\u02c0\u02c1\3\2\2\2\u02c1\u02c3"+
- "\5V,\2\u02c2\u02b9\3\2\2\2\u02c2\u02bf\3\2\2\2\u02c3Y\3\2\2\2\u02c4\u02c7"+
- "\7f\2\2\u02c5\u02c7\7g\2\2\u02c6\u02c4\3\2\2\2\u02c6\u02c5\3\2\2\2\u02c7"+
- "[\3\2\2\2\u02c8\u02cc\7c\2\2\u02c9\u02cc\5b\62\2\u02ca\u02cc\7d\2\2\u02cb"+
- "\u02c8\3\2\2\2\u02cb\u02c9\3\2\2\2\u02cb\u02ca\3\2\2\2\u02cc]\3\2\2\2"+
- "\u02cd\u02cf\t\n\2\2\u02ce\u02cd\3\2\2\2\u02ce\u02cf\3\2\2\2\u02cf\u02d0"+
- "\3\2\2\2\u02d0\u02d6\7b\2\2\u02d1\u02d3\t\n\2\2\u02d2\u02d1\3\2\2\2\u02d2"+
- "\u02d3\3\2\2\2\u02d3\u02d4\3\2\2\2\u02d4\u02d6\7a\2\2\u02d5\u02ce\3\2"+
- "\2\2\u02d5\u02d2\3\2\2\2\u02d6_\3\2\2\2\u02d7\u02d8\t\16\2\2\u02d8a\3"+
- "\2\2\2\u02d9\u02da\t\17\2\2\u02dac\3\2\2\2dsuy\u0082\u0084\u0088\u008f"+
- "\u0096\u009b\u00a0\u00aa\u00ae\u00b6\u00b9\u00bf\u00c4\u00c7\u00ce\u00d6"+
- "\u00d9\u00e5\u00e8\u00eb\u00f2\u00f9\u00fd\u0101\u0108\u010c\u0110\u0115"+
- "\u0119\u0121\u0125\u012c\u0137\u013a\u013e\u014a\u014d\u0153\u015a\u0161"+
- "\u0164\u0168\u016c\u0170\u0172\u017d\u0182\u0186\u0189\u018f\u0192\u0198"+
- "\u019b\u019d\u01b0\u01be\u01cc\u01d2\u01da\u01dc\u01e1\u01e4\u01ec\u01f5"+
- "\u01fb\u0203\u0208\u020e\u0211\u0218\u0220\u0226\u0232\u0234\u023e\u024c"+
- "\u0253\u0261\u026f\u0274\u027b\u027e\u0285\u028d\u02a0\u02ad\u02b4\u02b9"+
- "\u02bf\u02c2\u02c6\u02cb\u02ce\u02d2\u02d5";
+ ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\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\4v\n\4\f\4\16\4"+
+ "y\13\4\3\4\5\4|\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u0085\n\4\f\4\16\4"+
+ "\u0088\13\4\3\4\5\4\u008b\n\4\3\4\3\4\3\4\3\4\3\4\5\4\u0092\n\4\3\4\3"+
+ "\4\3\4\3\4\3\4\5\4\u0099\n\4\3\4\3\4\3\4\5\4\u009e\n\4\3\4\3\4\3\4\5\4"+
+ "\u00a3\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\5\4\u00ad\n\4\3\4\3\4\5\4\u00b1"+
+ "\n\4\3\4\3\4\3\4\3\4\7\4\u00b7\n\4\f\4\16\4\u00ba\13\4\5\4\u00bc\n\4\3"+
+ "\4\3\4\3\4\3\4\5\4\u00c2\n\4\3\4\3\4\3\4\5\4\u00c7\n\4\3\4\5\4\u00ca\n"+
+ "\4\3\4\3\4\3\4\3\4\3\4\5\4\u00d1\n\4\3\5\3\5\3\5\3\5\7\5\u00d7\n\5\f\5"+
+ "\16\5\u00da\13\5\5\5\u00dc\n\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\6\7\6\u00e6"+
+ "\n\6\f\6\16\6\u00e9\13\6\5\6\u00eb\n\6\3\6\5\6\u00ee\n\6\3\7\3\7\3\7\3"+
+ "\7\3\7\5\7\u00f5\n\7\3\b\3\b\3\b\3\b\3\b\5\b\u00fc\n\b\3\t\3\t\5\t\u0100"+
+ "\n\t\3\n\3\n\5\n\u0104\n\n\3\n\3\n\3\n\7\n\u0109\n\n\f\n\16\n\u010c\13"+
+ "\n\3\n\5\n\u010f\n\n\3\n\3\n\5\n\u0113\n\n\3\n\3\n\3\n\5\n\u0118\n\n\3"+
+ "\n\3\n\5\n\u011c\n\n\3\13\3\13\3\13\3\13\7\13\u0122\n\13\f\13\16\13\u0125"+
+ "\13\13\3\f\5\f\u0128\n\f\3\f\3\f\3\f\7\f\u012d\n\f\f\f\16\f\u0130\13\f"+
+ "\3\r\3\r\3\16\3\16\3\16\3\16\7\16\u0138\n\16\f\16\16\16\u013b\13\16\5"+
+ "\16\u013d\n\16\3\16\3\16\5\16\u0141\n\16\3\17\3\17\3\17\3\17\3\17\3\17"+
+ "\3\20\3\20\3\21\3\21\5\21\u014d\n\21\3\21\5\21\u0150\n\21\3\22\3\22\7"+
+ "\22\u0154\n\22\f\22\16\22\u0157\13\22\3\23\3\23\3\23\3\23\5\23\u015d\n"+
+ "\23\3\23\3\23\3\23\3\23\3\23\5\23\u0164\n\23\3\24\5\24\u0167\n\24\3\24"+
+ "\3\24\5\24\u016b\n\24\3\24\3\24\5\24\u016f\n\24\3\24\3\24\5\24\u0173\n"+
+ "\24\5\24\u0175\n\24\3\25\3\25\3\25\3\25\3\25\3\25\3\25\7\25\u017e\n\25"+
+ "\f\25\16\25\u0181\13\25\3\25\3\25\5\25\u0185\n\25\3\26\3\26\5\26\u0189"+
+ "\n\26\3\26\5\26\u018c\n\26\3\26\3\26\3\26\3\26\5\26\u0192\n\26\3\26\5"+
+ "\26\u0195\n\26\3\26\3\26\3\26\3\26\5\26\u019b\n\26\3\26\5\26\u019e\n\26"+
+ "\5\26\u01a0\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\5\30\u01c3\n\30\3\30\3\30\3\30"+
+ "\3\30\3\30\3\30\7\30\u01cb\n\30\f\30\16\30\u01ce\13\30\3\31\3\31\7\31"+
+ "\u01d2\n\31\f\31\16\31\u01d5\13\31\3\32\3\32\5\32\u01d9\n\32\3\33\5\33"+
+ "\u01dc\n\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u01e4\n\33\3\33\3\33\3"+
+ "\33\3\33\3\33\7\33\u01eb\n\33\f\33\16\33\u01ee\13\33\3\33\3\33\3\33\5"+
+ "\33\u01f3\n\33\3\33\3\33\3\33\3\33\3\33\3\33\5\33\u01fb\n\33\3\33\3\33"+
+ "\3\33\5\33\u0200\n\33\3\33\3\33\3\33\3\33\5\33\u0206\n\33\3\33\5\33\u0209"+
+ "\n\33\3\34\3\34\3\34\3\35\3\35\5\35\u0210\n\35\3\36\3\36\3\36\3\36\3\36"+
+ "\3\36\5\36\u0218\n\36\3\37\3\37\3\37\3\37\5\37\u021e\n\37\3\37\3\37\3"+
+ "\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\7\37\u022a\n\37\f\37\16\37\u022d"+
+ "\13\37\3 \3 \3 \3 \3 \3 \3 \5 \u0236\n \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 "+
+ "\3 \3 \5 \u0244\n \3!\3!\3!\3!\3!\5!\u024b\n!\3\"\3\"\3\"\3\"\3\"\3\""+
+ "\3\"\3#\3#\3#\3#\3#\5#\u0259\n#\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\5"+
+ "%\u0267\n%\3&\3&\3&\5&\u026c\n&\3&\3&\3&\7&\u0271\n&\f&\16&\u0274\13&"+
+ "\5&\u0276\n&\3&\3&\3\'\3\'\3\'\5\'\u027d\n\'\3(\3(\3(\3(\6(\u0283\n(\r"+
+ "(\16(\u0284\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\3(\5(\u0298"+
+ "\n(\3)\3)\3*\3*\3+\3+\3,\3,\3,\7,\u02a3\n,\f,\16,\u02a6\13,\3,\3,\3-\3"+
+ "-\5-\u02ac\n-\3.\3.\3.\5.\u02b1\n.\3.\3.\3.\3.\5.\u02b7\n.\3.\5.\u02ba"+
+ "\n.\3/\3/\5/\u02be\n/\3\60\3\60\3\60\5\60\u02c3\n\60\3\61\5\61\u02c6\n"+
+ "\61\3\61\3\61\5\61\u02ca\n\61\3\61\5\61\u02cd\n\61\3\62\3\62\3\63\3\63"+
+ "\3\63\2\4.<\64\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64"+
+ "\668:<>@BDFHJLNPRTVXZ\\^`bd\2\20\b\2\7\7\t\t\31\31,,\62\62\66\66\4\2\""+
+ "\"BB\4\2\t\t\62\62\4\2\37\37%%\3\2\25\26\4\2\7\7aa\4\2\r\r\25\25\4\2\7"+
+ "\7\27\27\3\2XY\3\2Z\\\3\2RW\4\2\35\35CC\3\2_`\20\2\b\t\22\24\31\31\33"+
+ "\33\36\36!\",,\62\62\668:<>?ABDEGG\u032c\2f\3\2\2\2\4i\3\2\2\2\6\u00d0"+
+ "\3\2\2\2\b\u00db\3\2\2\2\n\u00df\3\2\2\2\f\u00f4\3\2\2\2\16\u00fb\3\2"+
+ "\2\2\20\u00fd\3\2\2\2\22\u0101\3\2\2\2\24\u011d\3\2\2\2\26\u0127\3\2\2"+
+ "\2\30\u0131\3\2\2\2\32\u0140\3\2\2\2\34\u0142\3\2\2\2\36\u0148\3\2\2\2"+
+ " \u014a\3\2\2\2\"\u0151\3\2\2\2$\u0163\3\2\2\2&\u0174\3\2\2\2(\u0184\3"+
+ "\2\2\2*\u019f\3\2\2\2,\u01a1\3\2\2\2.\u01c2\3\2\2\2\60\u01d3\3\2\2\2\62"+
+ "\u01d6\3\2\2\2\64\u0208\3\2\2\2\66\u020a\3\2\2\28\u020d\3\2\2\2:\u0217"+
+ "\3\2\2\2<\u021d\3\2\2\2>\u0243\3\2\2\2@\u024a\3\2\2\2B\u024c\3\2\2\2D"+
+ "\u0258\3\2\2\2F\u025a\3\2\2\2H\u0266\3\2\2\2J\u0268\3\2\2\2L\u027c\3\2"+
+ "\2\2N\u0297\3\2\2\2P\u0299\3\2\2\2R\u029b\3\2\2\2T\u029d\3\2\2\2V\u02a4"+
+ "\3\2\2\2X\u02ab\3\2\2\2Z\u02b9\3\2\2\2\\\u02bd\3\2\2\2^\u02c2\3\2\2\2"+
+ "`\u02cc\3\2\2\2b\u02ce\3\2\2\2d\u02d0\3\2\2\2fg\5\6\4\2gh\7\2\2\3h\3\3"+
+ "\2\2\2ij\5,\27\2jk\7\2\2\3k\5\3\2\2\2l\u00d1\5\b\5\2m{\7\33\2\2nw\7\3"+
+ "\2\2op\78\2\2pv\t\2\2\2qr\7\36\2\2rv\t\3\2\2st\7G\2\2tv\5R*\2uo\3\2\2"+
+ "\2uq\3\2\2\2us\3\2\2\2vy\3\2\2\2wu\3\2\2\2wx\3\2\2\2xz\3\2\2\2yw\3\2\2"+
+ "\2z|\7\4\2\2{n\3\2\2\2{|\3\2\2\2|}\3\2\2\2}\u00d1\5\6\4\2~\u008a\7\24"+
+ "\2\2\177\u0086\7\3\2\2\u0080\u0081\78\2\2\u0081\u0085\t\4\2\2\u0082\u0083"+
+ "\7\36\2\2\u0083\u0085\t\3\2\2\u0084\u0080\3\2\2\2\u0084\u0082\3\2\2\2"+
+ "\u0085\u0088\3\2\2\2\u0086\u0084\3\2\2\2\u0086\u0087\3\2\2\2\u0087\u0089"+
+ "\3\2\2\2\u0088\u0086\3\2\2\2\u0089\u008b\7\4\2\2\u008a\177\3\2\2\2\u008a"+
+ "\u008b\3\2\2\2\u008b\u008c\3\2\2\2\u008c\u00d1\5\6\4\2\u008d\u008e\7>"+
+ "\2\2\u008e\u0091\7A\2\2\u008f\u0092\5\66\34\2\u0090\u0092\5Z.\2\u0091"+
+ "\u008f\3\2\2\2\u0091\u0090\3\2\2\2\u0091\u0092\3\2\2\2\u0092\u00d1\3\2"+
+ "\2\2\u0093\u0094\7>\2\2\u0094\u0095\7\23\2\2\u0095\u0098\t\5\2\2\u0096"+
+ "\u0099\5\66\34\2\u0097\u0099\5Z.\2\u0098\u0096\3\2\2\2\u0098\u0097\3\2"+
+ "\2\2\u0099\u00d1\3\2\2\2\u009a\u009d\t\6\2\2\u009b\u009e\5\66\34\2\u009c"+
+ "\u009e\5Z.\2\u009d\u009b\3\2\2\2\u009d\u009c\3\2\2\2\u009e\u00d1\3\2\2"+
+ "\2\u009f\u00a0\7>\2\2\u00a0\u00a2\7!\2\2\u00a1\u00a3\5\66\34\2\u00a2\u00a1"+
+ "\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3\u00d1\3\2\2\2\u00a4\u00a5\7>\2\2\u00a5"+
+ "\u00d1\7<\2\2\u00a6\u00a7\7?\2\2\u00a7\u00d1\7\22\2\2\u00a8\u00a9\7?\2"+
+ "\2\u00a9\u00ac\7A\2\2\u00aa\u00ab\7\21\2\2\u00ab\u00ad\5\66\34\2\u00ac"+
+ "\u00aa\3\2\2\2\u00ac\u00ad\3\2\2\2\u00ad\u00b0\3\2\2\2\u00ae\u00b1\5\66"+
+ "\34\2\u00af\u00b1\5Z.\2\u00b0\u00ae\3\2\2\2\u00b0\u00af\3\2\2\2\u00b0"+
+ "\u00b1\3\2\2\2\u00b1\u00bb\3\2\2\2\u00b2\u00b3\7D\2\2\u00b3\u00b8\5b\62"+
+ "\2\u00b4\u00b5\7\5\2\2\u00b5\u00b7\5b\62\2\u00b6\u00b4\3\2\2\2\u00b7\u00ba"+
+ "\3\2\2\2\u00b8\u00b6\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9\u00bc\3\2\2\2\u00ba"+
+ "\u00b8\3\2\2\2\u00bb\u00b2\3\2\2\2\u00bb\u00bc\3\2\2\2\u00bc\u00d1\3\2"+
+ "\2\2\u00bd\u00be\7?\2\2\u00be\u00c1\7\23\2\2\u00bf\u00c0\7\21\2\2\u00c0"+
+ "\u00c2\5b\62\2\u00c1\u00bf\3\2\2\2\u00c1\u00c2\3\2\2\2\u00c2\u00c6\3\2"+
+ "\2\2\u00c3\u00c4\7@\2\2\u00c4\u00c7\5\66\34\2\u00c5\u00c7\5Z.\2\u00c6"+
+ "\u00c3\3\2\2\2\u00c6\u00c5\3\2\2\2\u00c6\u00c7\3\2\2\2\u00c7\u00c9\3\2"+
+ "\2\2\u00c8\u00ca\5\66\34\2\u00c9\u00c8\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca"+
+ "\u00d1\3\2\2\2\u00cb\u00cc\7?\2\2\u00cc\u00d1\7E\2\2\u00cd\u00ce\7?\2"+
+ "\2\u00ce\u00cf\7@\2\2\u00cf\u00d1\7E\2\2\u00d0l\3\2\2\2\u00d0m\3\2\2\2"+
+ "\u00d0~\3\2\2\2\u00d0\u008d\3\2\2\2\u00d0\u0093\3\2\2\2\u00d0\u009a\3"+
+ "\2\2\2\u00d0\u009f\3\2\2\2\u00d0\u00a4\3\2\2\2\u00d0\u00a6\3\2\2\2\u00d0"+
+ "\u00a8\3\2\2\2\u00d0\u00bd\3\2\2\2\u00d0\u00cb\3\2\2\2\u00d0\u00cd\3\2"+
+ "\2\2\u00d1\7\3\2\2\2\u00d2\u00d3\7I\2\2\u00d3\u00d8\5\34\17\2\u00d4\u00d5"+
+ "\7\5\2\2\u00d5\u00d7\5\34\17\2\u00d6\u00d4\3\2\2\2\u00d7\u00da\3\2\2\2"+
+ "\u00d8\u00d6\3\2\2\2\u00d8\u00d9\3\2\2\2\u00d9\u00dc\3\2\2\2\u00da\u00d8"+
+ "\3\2\2\2\u00db\u00d2\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd"+
+ "\u00de\5\n\6\2\u00de\t\3\2\2\2\u00df\u00ea\5\16\b\2\u00e0\u00e1\7\64\2"+
+ "\2\u00e1\u00e2\7\17\2\2\u00e2\u00e7\5\20\t\2\u00e3\u00e4\7\5\2\2\u00e4"+
+ "\u00e6\5\20\t\2\u00e5\u00e3\3\2\2\2\u00e6\u00e9\3\2\2\2\u00e7\u00e5\3"+
+ "\2\2\2\u00e7\u00e8\3\2\2\2\u00e8\u00eb\3\2\2\2\u00e9\u00e7\3\2\2\2\u00ea"+
+ "\u00e0\3\2\2\2\u00ea\u00eb\3\2\2\2\u00eb\u00ed\3\2\2\2\u00ec\u00ee\5\f"+
+ "\7\2\u00ed\u00ec\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\13\3\2\2\2\u00ef\u00f0"+
+ "\7+\2\2\u00f0\u00f5\t\7\2\2\u00f1\u00f2\7L\2\2\u00f2\u00f3\t\7\2\2\u00f3"+
+ "\u00f5\7Q\2\2\u00f4\u00ef\3\2\2\2\u00f4\u00f1\3\2\2\2\u00f5\r\3\2\2\2"+
+ "\u00f6\u00fc\5\22\n\2\u00f7\u00f8\7\3\2\2\u00f8\u00f9\5\n\6\2\u00f9\u00fa"+
+ "\7\4\2\2\u00fa\u00fc\3\2\2\2\u00fb\u00f6\3\2\2\2\u00fb\u00f7\3\2\2\2\u00fc"+
+ "\17\3\2\2\2\u00fd\u00ff\5,\27\2\u00fe\u0100\t\b\2\2\u00ff\u00fe\3\2\2"+
+ "\2\u00ff\u0100\3\2\2\2\u0100\21\3\2\2\2\u0101\u0103\7=\2\2\u0102\u0104"+
+ "\5\36\20\2\u0103\u0102\3\2\2\2\u0103\u0104\3\2\2\2\u0104\u0105\3\2\2\2"+
+ "\u0105\u010a\5 \21\2\u0106\u0107\7\5\2\2\u0107\u0109\5 \21\2\u0108\u0106"+
+ "\3\2\2\2\u0109\u010c\3\2\2\2\u010a\u0108\3\2\2\2\u010a\u010b\3\2\2\2\u010b"+
+ "\u010e\3\2\2\2\u010c\u010a\3\2\2\2\u010d\u010f\5\24\13\2\u010e\u010d\3"+
+ "\2\2\2\u010e\u010f\3\2\2\2\u010f\u0112\3\2\2\2\u0110\u0111\7H\2\2\u0111"+
+ "\u0113\5.\30\2\u0112\u0110\3\2\2\2\u0112\u0113\3\2\2\2\u0113\u0117\3\2"+
+ "\2\2\u0114\u0115\7#\2\2\u0115\u0116\7\17\2\2\u0116\u0118\5\26\f\2\u0117"+
+ "\u0114\3\2\2\2\u0117\u0118\3\2\2\2\u0118\u011b\3\2\2\2\u0119\u011a\7$"+
+ "\2\2\u011a\u011c\5.\30\2\u011b\u0119\3\2\2\2\u011b\u011c\3\2\2\2\u011c"+
+ "\23\3\2\2\2\u011d\u011e\7\37\2\2\u011e\u0123\5\"\22\2\u011f\u0120\7\5"+
+ "\2\2\u0120\u0122\5\"\22\2\u0121\u011f\3\2\2\2\u0122\u0125\3\2\2\2\u0123"+
+ "\u0121\3\2\2\2\u0123\u0124\3\2\2\2\u0124\25\3\2\2\2\u0125\u0123\3\2\2"+
+ "\2\u0126\u0128\5\36\20\2\u0127\u0126\3\2\2\2\u0127\u0128\3\2\2\2\u0128"+
+ "\u0129\3\2\2\2\u0129\u012e\5\30\r\2\u012a\u012b\7\5\2\2\u012b\u012d\5"+
+ "\30\r\2\u012c\u012a\3\2\2\2\u012d\u0130\3\2\2\2\u012e\u012c\3\2\2\2\u012e"+
+ "\u012f\3\2\2\2\u012f\27\3\2\2\2\u0130\u012e\3\2\2\2\u0131\u0132\5\32\16"+
+ "\2\u0132\31\3\2\2\2\u0133\u013c\7\3\2\2\u0134\u0139\5,\27\2\u0135\u0136"+
+ "\7\5\2\2\u0136\u0138\5,\27\2\u0137\u0135\3\2\2\2\u0138\u013b\3\2\2\2\u0139"+
+ "\u0137\3\2\2\2\u0139\u013a\3\2\2\2\u013a\u013d\3\2\2\2\u013b\u0139\3\2"+
+ "\2\2\u013c\u0134\3\2\2\2\u013c\u013d\3\2\2\2\u013d\u013e\3\2\2\2\u013e"+
+ "\u0141\7\4\2\2\u013f\u0141\5,\27\2\u0140\u0133\3\2\2\2\u0140\u013f\3\2"+
+ "\2\2\u0141\33\3\2\2\2\u0142\u0143\5X-\2\u0143\u0144\7\f\2\2\u0144\u0145"+
+ "\7\3\2\2\u0145\u0146\5\n\6\2\u0146\u0147\7\4\2\2\u0147\35\3\2\2\2\u0148"+
+ "\u0149\t\t\2\2\u0149\37\3\2\2\2\u014a\u014f\5,\27\2\u014b\u014d\7\f\2"+
+ "\2\u014c\u014b\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u0150"+
+ "\5X-\2\u014f\u014c\3\2\2\2\u014f\u0150\3\2\2\2\u0150!\3\2\2\2\u0151\u0155"+
+ "\5*\26\2\u0152\u0154\5$\23\2\u0153\u0152\3\2\2\2\u0154\u0157\3\2\2\2\u0155"+
+ "\u0153\3\2\2\2\u0155\u0156\3\2\2\2\u0156#\3\2\2\2\u0157\u0155\3\2\2\2"+
+ "\u0158\u0159\5&\24\2\u0159\u015a\7(\2\2\u015a\u015c\5*\26\2\u015b\u015d"+
+ "\5(\25\2\u015c\u015b\3\2\2\2\u015c\u015d\3\2\2\2\u015d\u0164\3\2\2\2\u015e"+
+ "\u015f\7.\2\2\u015f\u0160\5&\24\2\u0160\u0161\7(\2\2\u0161\u0162\5*\26"+
+ "\2\u0162\u0164\3\2\2\2\u0163\u0158\3\2\2\2\u0163\u015e\3\2\2\2\u0164%"+
+ "\3\2\2\2\u0165\u0167\7&\2\2\u0166\u0165\3\2\2\2\u0166\u0167\3\2\2\2\u0167"+
+ "\u0175\3\2\2\2\u0168\u016a\7)\2\2\u0169\u016b\7\65\2\2\u016a\u0169\3\2"+
+ "\2\2\u016a\u016b\3\2\2\2\u016b\u0175\3\2\2\2\u016c\u016e\79\2\2\u016d"+
+ "\u016f\7\65\2\2\u016e\u016d\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0175\3"+
+ "\2\2\2\u0170\u0172\7 \2\2\u0171\u0173\7\65\2\2\u0172\u0171\3\2\2\2\u0172"+
+ "\u0173\3\2\2\2\u0173\u0175\3\2\2\2\u0174\u0166\3\2\2\2\u0174\u0168\3\2"+
+ "\2\2\u0174\u016c\3\2\2\2\u0174\u0170\3\2\2\2\u0175\'\3\2\2\2\u0176\u0177"+
+ "\7\61\2\2\u0177\u0185\5.\30\2\u0178\u0179\7F\2\2\u0179\u017a\7\3\2\2\u017a"+
+ "\u017f\5X-\2\u017b\u017c\7\5\2\2\u017c\u017e\5X-\2\u017d\u017b\3\2\2\2"+
+ "\u017e\u0181\3\2\2\2\u017f\u017d\3\2\2\2\u017f\u0180\3\2\2\2\u0180\u0182"+
+ "\3\2\2\2\u0181\u017f\3\2\2\2\u0182\u0183\7\4\2\2\u0183\u0185\3\2\2\2\u0184"+
+ "\u0176\3\2\2\2\u0184\u0178\3\2\2\2\u0185)\3\2\2\2\u0186\u018b\5Z.\2\u0187"+
+ "\u0189\7\f\2\2\u0188\u0187\3\2\2\2\u0188\u0189\3\2\2\2\u0189\u018a\3\2"+
+ "\2\2\u018a\u018c\5V,\2\u018b\u0188\3\2\2\2\u018b\u018c\3\2\2\2\u018c\u01a0"+
+ "\3\2\2\2\u018d\u018e\7\3\2\2\u018e\u018f\5\n\6\2\u018f\u0194\7\4\2\2\u0190"+
+ "\u0192\7\f\2\2\u0191\u0190\3\2\2\2\u0191\u0192\3\2\2\2\u0192\u0193\3\2"+
+ "\2\2\u0193\u0195\5V,\2\u0194\u0191\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u01a0"+
+ "\3\2\2\2\u0196\u0197\7\3\2\2\u0197\u0198\5\"\22\2\u0198\u019d\7\4\2\2"+
+ "\u0199\u019b\7\f\2\2\u019a\u0199\3\2\2\2\u019a\u019b\3\2\2\2\u019b\u019c"+
+ "\3\2\2\2\u019c\u019e\5V,\2\u019d\u019a\3\2\2\2\u019d\u019e\3\2\2\2\u019e"+
+ "\u01a0\3\2\2\2\u019f\u0186\3\2\2\2\u019f\u018d\3\2\2\2\u019f\u0196\3\2"+
+ "\2\2\u01a0+\3\2\2\2\u01a1\u01a2\5.\30\2\u01a2-\3\2\2\2\u01a3\u01a4\b\30"+
+ "\1\2\u01a4\u01a5\7/\2\2\u01a5\u01c3\5.\30\n\u01a6\u01a7\7\32\2\2\u01a7"+
+ "\u01a8\7\3\2\2\u01a8\u01a9\5\b\5\2\u01a9\u01aa\7\4\2\2\u01aa\u01c3\3\2"+
+ "\2\2\u01ab\u01ac\7;\2\2\u01ac\u01ad\7\3\2\2\u01ad\u01ae\5b\62\2\u01ae"+
+ "\u01af\5\60\31\2\u01af\u01b0\7\4\2\2\u01b0\u01c3\3\2\2\2\u01b1\u01b2\7"+
+ "-\2\2\u01b2\u01b3\7\3\2\2\u01b3\u01b4\5V,\2\u01b4\u01b5\7\5\2\2\u01b5"+
+ "\u01b6\5b\62\2\u01b6\u01b7\5\60\31\2\u01b7\u01b8\7\4\2\2\u01b8\u01c3\3"+
+ "\2\2\2\u01b9\u01ba\7-\2\2\u01ba\u01bb\7\3\2\2\u01bb\u01bc\5b\62\2\u01bc"+
+ "\u01bd\7\5\2\2\u01bd\u01be\5b\62\2\u01be\u01bf\5\60\31\2\u01bf\u01c0\7"+
+ "\4\2\2\u01c0\u01c3\3\2\2\2\u01c1\u01c3\5\62\32\2\u01c2\u01a3\3\2\2\2\u01c2"+
+ "\u01a6\3\2\2\2\u01c2\u01ab\3\2\2\2\u01c2\u01b1\3\2\2\2\u01c2\u01b9\3\2"+
+ "\2\2\u01c2\u01c1\3\2\2\2\u01c3\u01cc\3\2\2\2\u01c4\u01c5\f\4\2\2\u01c5"+
+ "\u01c6\7\n\2\2\u01c6\u01cb\5.\30\5\u01c7\u01c8\f\3\2\2\u01c8\u01c9\7\63"+
+ "\2\2\u01c9\u01cb\5.\30\4\u01ca\u01c4\3\2\2\2\u01ca\u01c7\3\2\2\2\u01cb"+
+ "\u01ce\3\2\2\2\u01cc\u01ca\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd/\3\2\2\2"+
+ "\u01ce\u01cc\3\2\2\2\u01cf\u01d0\7\5\2\2\u01d0\u01d2\5b\62\2\u01d1\u01cf"+
+ "\3\2\2\2\u01d2\u01d5\3\2\2\2\u01d3\u01d1\3\2\2\2\u01d3\u01d4\3\2\2\2\u01d4"+
+ "\61\3\2\2\2\u01d5\u01d3\3\2\2\2\u01d6\u01d8\5<\37\2\u01d7\u01d9\5\64\33"+
+ "\2\u01d8\u01d7\3\2\2\2\u01d8\u01d9\3\2\2\2\u01d9\63\3\2\2\2\u01da\u01dc"+
+ "\7/\2\2\u01db\u01da\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd"+
+ "\u01de\7\16\2\2\u01de\u01df\5<\37\2\u01df\u01e0\7\n\2\2\u01e0\u01e1\5"+
+ "<\37\2\u01e1\u0209\3\2\2\2\u01e2\u01e4\7/\2\2\u01e3\u01e2\3\2\2\2\u01e3"+
+ "\u01e4\3\2\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e6\7%\2\2\u01e6\u01e7\7\3"+
+ "\2\2\u01e7\u01ec\5,\27\2\u01e8\u01e9\7\5\2\2\u01e9\u01eb\5,\27\2\u01ea"+
+ "\u01e8\3\2\2\2\u01eb\u01ee\3\2\2\2\u01ec\u01ea\3\2\2\2\u01ec\u01ed\3\2"+
+ "\2\2\u01ed\u01ef\3\2\2\2\u01ee\u01ec\3\2\2\2\u01ef\u01f0\7\4\2\2\u01f0"+
+ "\u0209\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"+
+ "\u01f7\5\b\5\2\u01f7\u01f8\7\4\2\2\u01f8\u0209\3\2\2\2\u01f9\u01fb\7/"+
+ "\2\2\u01fa\u01f9\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc"+
+ "\u01fd\7*\2\2\u01fd\u0209\58\35\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\u0209"+
+ "\5b\62\2\u0203\u0205\7\'\2\2\u0204\u0206\7/\2\2\u0205\u0204\3\2\2\2\u0205"+
+ "\u0206\3\2\2\2\u0206\u0207\3\2\2\2\u0207\u0209\7\60\2\2\u0208\u01db\3"+
+ "\2\2\2\u0208\u01e3\3\2\2\2\u0208\u01f2\3\2\2\2\u0208\u01fa\3\2\2\2\u0208"+
+ "\u01ff\3\2\2\2\u0208\u0203\3\2\2\2\u0209\65\3\2\2\2\u020a\u020b\7*\2\2"+
+ "\u020b\u020c\58\35\2\u020c\67\3\2\2\2\u020d\u020f\5b\62\2\u020e\u0210"+
+ "\5:\36\2\u020f\u020e\3\2\2\2\u020f\u0210\3\2\2\2\u02109\3\2\2\2\u0211"+
+ "\u0212\7\30\2\2\u0212\u0218\5b\62\2\u0213\u0214\7J\2\2\u0214\u0215\5b"+
+ "\62\2\u0215\u0216\7Q\2\2\u0216\u0218\3\2\2\2\u0217\u0211\3\2\2\2\u0217"+
+ "\u0213\3\2\2\2\u0218;\3\2\2\2\u0219\u021a\b\37\1\2\u021a\u021e\5> \2\u021b"+
+ "\u021c\t\n\2\2\u021c\u021e\5<\37\6\u021d\u0219\3\2\2\2\u021d\u021b\3\2"+
+ "\2\2\u021e\u022b\3\2\2\2\u021f\u0220\f\5\2\2\u0220\u0221\t\13\2\2\u0221"+
+ "\u022a\5<\37\6\u0222\u0223\f\4\2\2\u0223\u0224\t\n\2\2\u0224\u022a\5<"+
+ "\37\5\u0225\u0226\f\3\2\2\u0226\u0227\5P)\2\u0227\u0228\5<\37\4\u0228"+
+ "\u022a\3\2\2\2\u0229\u021f\3\2\2\2\u0229\u0222\3\2\2\2\u0229\u0225\3\2"+
+ "\2\2\u022a\u022d\3\2\2\2\u022b\u0229\3\2\2\2\u022b\u022c\3\2\2\2\u022c"+
+ "=\3\2\2\2\u022d\u022b\3\2\2\2\u022e\u0244\5@!\2\u022f\u0244\5D#\2\u0230"+
+ "\u0244\5N(\2\u0231\u0244\7Z\2\2\u0232\u0233\5V,\2\u0233\u0234\7^\2\2\u0234"+
+ "\u0236\3\2\2\2\u0235\u0232\3\2\2\2\u0235\u0236\3\2\2\2\u0236\u0237\3\2"+
+ "\2\2\u0237\u0244\7Z\2\2\u0238\u0244\5H%\2\u0239\u023a\7\3\2\2\u023a\u023b"+
+ "\5\b\5\2\u023b\u023c\7\4\2\2\u023c\u0244\3\2\2\2\u023d\u0244\5X-\2\u023e"+
+ "\u0244\5V,\2\u023f\u0240\7\3\2\2\u0240\u0241\5,\27\2\u0241\u0242\7\4\2"+
+ "\2\u0242\u0244\3\2\2\2\u0243\u022e\3\2\2\2\u0243\u022f\3\2\2\2\u0243\u0230"+
+ "\3\2\2\2\u0243\u0231\3\2\2\2\u0243\u0235\3\2\2\2\u0243\u0238\3\2\2\2\u0243"+
+ "\u0239\3\2\2\2\u0243\u023d\3\2\2\2\u0243\u023e\3\2\2\2\u0243\u023f\3\2"+
+ "\2\2\u0244?\3\2\2\2\u0245\u024b\5B\"\2\u0246\u0247\7K\2\2\u0247\u0248"+
+ "\5B\"\2\u0248\u0249\7Q\2\2\u0249\u024b\3\2\2\2\u024a\u0245\3\2\2\2\u024a"+
+ "\u0246\3\2\2\2\u024bA\3\2\2\2\u024c\u024d\7\20\2\2\u024d\u024e\7\3\2\2"+
+ "\u024e\u024f\5,\27\2\u024f\u0250\7\f\2\2\u0250\u0251\5T+\2\u0251\u0252"+
+ "\7\4\2\2\u0252C\3\2\2\2\u0253\u0259\5F$\2\u0254\u0255\7K\2\2\u0255\u0256"+
+ "\5F$\2\u0256\u0257\7Q\2\2\u0257\u0259\3\2\2\2\u0258\u0253\3\2\2\2\u0258"+
+ "\u0254\3\2\2\2\u0259E\3\2\2\2\u025a\u025b\7\34\2\2\u025b\u025c\7\3\2\2"+
+ "\u025c\u025d\5X-\2\u025d\u025e\7\37\2\2\u025e\u025f\5<\37\2\u025f\u0260"+
+ "\7\4\2\2\u0260G\3\2\2\2\u0261\u0267\5J&\2\u0262\u0263\7K\2\2\u0263\u0264"+
+ "\5J&\2\u0264\u0265\7Q\2\2\u0265\u0267\3\2\2\2\u0266\u0261\3\2\2\2\u0266"+
+ "\u0262\3\2\2\2\u0267I\3\2\2\2\u0268\u0269\5L\'\2\u0269\u0275\7\3\2\2\u026a"+
+ "\u026c\5\36\20\2\u026b\u026a\3\2\2\2\u026b\u026c\3\2\2\2\u026c\u026d\3"+
+ "\2\2\2\u026d\u0272\5,\27\2\u026e\u026f\7\5\2\2\u026f\u0271\5,\27\2\u0270"+
+ "\u026e\3\2\2\2\u0271\u0274\3\2\2\2\u0272\u0270\3\2\2\2\u0272\u0273\3\2"+
+ "\2\2\u0273\u0276\3\2\2\2\u0274\u0272\3\2\2\2\u0275\u026b\3\2\2\2\u0275"+
+ "\u0276\3\2\2\2\u0276\u0277\3\2\2\2\u0277\u0278\7\4\2\2\u0278K\3\2\2\2"+
+ "\u0279\u027d\7)\2\2\u027a\u027d\79\2\2\u027b\u027d\5X-\2\u027c\u0279\3"+
+ "\2\2\2\u027c\u027a\3\2\2\2\u027c\u027b\3\2\2\2\u027dM\3\2\2\2\u027e\u0298"+
+ "\7\60\2\2\u027f\u0298\5`\61\2\u0280\u0298\5R*\2\u0281\u0283\7`\2\2\u0282"+
+ "\u0281\3\2\2\2\u0283\u0284\3\2\2\2\u0284\u0282\3\2\2\2\u0284\u0285\3\2"+
+ "\2\2\u0285\u0298\3\2\2\2\u0286\u0298\7_\2\2\u0287\u0288\7M\2\2\u0288\u0289"+
+ "\5b\62\2\u0289\u028a\7Q\2\2\u028a\u0298\3\2\2\2\u028b\u028c\7N\2\2\u028c"+
+ "\u028d\5b\62\2\u028d\u028e\7Q\2\2\u028e\u0298\3\2\2\2\u028f\u0290\7O\2"+
+ "\2\u0290\u0291\5b\62\2\u0291\u0292\7Q\2\2\u0292\u0298\3\2\2\2\u0293\u0294"+
+ "\7P\2\2\u0294\u0295\5b\62\2\u0295\u0296\7Q\2\2\u0296\u0298\3\2\2\2\u0297"+
+ "\u027e\3\2\2\2\u0297\u027f\3\2\2\2\u0297\u0280\3\2\2\2\u0297\u0282\3\2"+
+ "\2\2\u0297\u0286\3\2\2\2\u0297\u0287\3\2\2\2\u0297\u028b\3\2\2\2\u0297"+
+ "\u028f\3\2\2\2\u0297\u0293\3\2\2\2\u0298O\3\2\2\2\u0299\u029a\t\f\2\2"+
+ "\u029aQ\3\2\2\2\u029b\u029c\t\r\2\2\u029cS\3\2\2\2\u029d\u029e\5X-\2\u029e"+
+ "U\3\2\2\2\u029f\u02a0\5X-\2\u02a0\u02a1\7^\2\2\u02a1\u02a3\3\2\2\2\u02a2"+
+ "\u029f\3\2\2\2\u02a3\u02a6\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a5\3\2"+
+ "\2\2\u02a5\u02a7\3\2\2\2\u02a6\u02a4\3\2\2\2\u02a7\u02a8\5X-\2\u02a8W"+
+ "\3\2\2\2\u02a9\u02ac\5\\/\2\u02aa\u02ac\5^\60\2\u02ab\u02a9\3\2\2\2\u02ab"+
+ "\u02aa\3\2\2\2\u02acY\3\2\2\2\u02ad\u02ae\5X-\2\u02ae\u02af\7\6\2\2\u02af"+
+ "\u02b1\3\2\2\2\u02b0\u02ad\3\2\2\2\u02b0\u02b1\3\2\2\2\u02b1\u02b2\3\2"+
+ "\2\2\u02b2\u02ba\7e\2\2\u02b3\u02b4\5X-\2\u02b4\u02b5\7\6\2\2\u02b5\u02b7"+
+ "\3\2\2\2\u02b6\u02b3\3\2\2\2\u02b6\u02b7\3\2\2\2\u02b7\u02b8\3\2\2\2\u02b8"+
+ "\u02ba\5X-\2\u02b9\u02b0\3\2\2\2\u02b9\u02b6\3\2\2\2\u02ba[\3\2\2\2\u02bb"+
+ "\u02be\7f\2\2\u02bc\u02be\7g\2\2\u02bd\u02bb\3\2\2\2\u02bd\u02bc\3\2\2"+
+ "\2\u02be]\3\2\2\2\u02bf\u02c3\7c\2\2\u02c0\u02c3\5d\63\2\u02c1\u02c3\7"+
+ "d\2\2\u02c2\u02bf\3\2\2\2\u02c2\u02c0\3\2\2\2\u02c2\u02c1\3\2\2\2\u02c3"+
+ "_\3\2\2\2\u02c4\u02c6\t\n\2\2\u02c5\u02c4\3\2\2\2\u02c5\u02c6\3\2\2\2"+
+ "\u02c6\u02c7\3\2\2\2\u02c7\u02cd\7b\2\2\u02c8\u02ca\t\n\2\2\u02c9\u02c8"+
+ "\3\2\2\2\u02c9\u02ca\3\2\2\2\u02ca\u02cb\3\2\2\2\u02cb\u02cd\7a\2\2\u02cc"+
+ "\u02c5\3\2\2\2\u02cc\u02c9\3\2\2\2\u02cda\3\2\2\2\u02ce\u02cf\t\16\2\2"+
+ "\u02cfc\3\2\2\2\u02d0\u02d1\t\17\2\2\u02d1e\3\2\2\2buw{\u0084\u0086\u008a"+
+ "\u0091\u0098\u009d\u00a2\u00ac\u00b0\u00b8\u00bb\u00c1\u00c6\u00c9\u00d0"+
+ "\u00d8\u00db\u00e7\u00ea\u00ed\u00f4\u00fb\u00ff\u0103\u010a\u010e\u0112"+
+ "\u0117\u011b\u0123\u0127\u012e\u0139\u013c\u0140\u014c\u014f\u0155\u015c"+
+ "\u0163\u0166\u016a\u016e\u0172\u0174\u017f\u0184\u0188\u018b\u0191\u0194"+
+ "\u019a\u019d\u019f\u01c2\u01ca\u01cc\u01d3\u01d8\u01db\u01e3\u01ec\u01f2"+
+ "\u01fa\u01ff\u0205\u0208\u020f\u0217\u021d\u0229\u022b\u0235\u0243\u024a"+
+ "\u0258\u0266\u026b\u0272\u0275\u027c\u0284\u0297\u02a4\u02ab\u02b0\u02b6"+
+ "\u02b9\u02bd\u02c2\u02c5\u02c9\u02cc";
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 2c28b18cdf2ee..3b1b730e81bb7 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
@@ -294,6 +294,12 @@ interface SqlBaseVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitLogicalBinary(SqlBaseParser.LogicalBinaryContext ctx);
+ /**
+ * Visit a parse tree produced by {@link SqlBaseParser#matchQueryOptions}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitMatchQueryOptions(SqlBaseParser.MatchQueryOptionsContext ctx);
/**
* Visit a parse tree produced by {@link SqlBaseParser#predicated}.
* @param ctx the parse tree
diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/parser/SqlParserTests.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/parser/SqlParserTests.java
index de9c6c56da099..3e7e562e599d0 100644
--- a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/parser/SqlParserTests.java
+++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/parser/SqlParserTests.java
@@ -11,6 +11,10 @@
import org.elasticsearch.xpack.sql.expression.UnresolvedAttribute;
import org.elasticsearch.xpack.sql.expression.UnresolvedStar;
import org.elasticsearch.xpack.sql.expression.function.UnresolvedFunction;
+import org.elasticsearch.xpack.sql.expression.predicate.fulltext.MatchQueryPredicate;
+import org.elasticsearch.xpack.sql.expression.predicate.fulltext.MultiMatchQueryPredicate;
+import org.elasticsearch.xpack.sql.expression.predicate.fulltext.StringQueryPredicate;
+import org.elasticsearch.xpack.sql.plan.logical.Filter;
import org.elasticsearch.xpack.sql.plan.logical.LogicalPlan;
import org.elasticsearch.xpack.sql.plan.logical.OrderBy;
import org.elasticsearch.xpack.sql.plan.logical.Project;
@@ -19,6 +23,7 @@
import java.util.List;
import static java.util.stream.Collectors.toList;
+import static org.hamcrest.Matchers.hasEntry;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.instanceOf;
@@ -92,6 +97,45 @@ public void testOrderByTwo() {
assertEquals("baz", a.name());
}
+ public void testStringQuery() {
+ LogicalPlan plan =
+ parseStatement("SELECT * FROM FOO WHERE " +
+ "QUERY('foo', 'default_field=last_name;lenient=true', 'fuzzy_rewrite=scoring_boolean')");
+
+ StringQueryPredicate sqp = (StringQueryPredicate) ((Filter) plan.children().get(0).children().get(0)).condition();
+ assertEquals("foo", sqp.query());
+ assertEquals(3, sqp.optionMap().size());
+ assertThat(sqp.optionMap(), hasEntry("default_field", "last_name"));
+ assertThat(sqp.optionMap(), hasEntry("lenient", "true"));
+ assertThat(sqp.optionMap(), hasEntry("fuzzy_rewrite", "scoring_boolean"));
+ }
+
+ public void testMatchQuery() {
+ LogicalPlan plan = parseStatement("SELECT * FROM FOO WHERE " +
+ "MATCH(first_name, 'foo', 'operator=AND;lenient=true', 'fuzzy_rewrite=scoring_boolean')");
+
+ MatchQueryPredicate mqp = (MatchQueryPredicate) ((Filter) plan.children().get(0).children().get(0)).condition();
+ assertEquals("foo", mqp.query());
+ assertEquals("?first_name", mqp.field().toString());
+ assertEquals(3, mqp.optionMap().size());
+ assertThat(mqp.optionMap(), hasEntry("operator", "AND"));
+ assertThat(mqp.optionMap(), hasEntry("lenient", "true"));
+ assertThat(mqp.optionMap(), hasEntry("fuzzy_rewrite", "scoring_boolean"));
+ }
+
+ public void testMultiMatchQuery() {
+ LogicalPlan plan = parseStatement("SELECT * FROM FOO WHERE " +
+ "MATCH('first_name,last_name', 'foo', 'operator=AND;type=best_fields', 'fuzzy_rewrite=scoring_boolean')");
+
+ MultiMatchQueryPredicate mmqp = (MultiMatchQueryPredicate) ((Filter) plan.children().get(0).children().get(0)).condition();
+ assertEquals("foo", mmqp.query());
+ assertEquals("first_name,last_name", mmqp.fieldString());
+ assertEquals(3, mmqp.optionMap().size());
+ assertThat(mmqp.optionMap(), hasEntry("operator", "AND"));
+ assertThat(mmqp.optionMap(), hasEntry("type", "best_fields"));
+ assertThat(mmqp.optionMap(), hasEntry("fuzzy_rewrite", "scoring_boolean"));
+ }
+
private LogicalPlan parseStatement(String sql) {
return new SqlParser().createStatement(sql);
}
@@ -132,4 +176,4 @@ private String stringForDirection(Order.OrderDirection dir) {
String dirStr = dir.toString();
return randomBoolean() && dirStr.equals("ASC") ? "" : " " + dirStr;
}
-}
\ No newline at end of file
+}
diff --git a/x-pack/qa/sql/src/main/resources/fulltext.csv-spec b/x-pack/qa/sql/src/main/resources/fulltext.csv-spec
index 5c032917ff153..93493ffdc2acb 100644
--- a/x-pack/qa/sql/src/main/resources/fulltext.csv-spec
+++ b/x-pack/qa/sql/src/main/resources/fulltext.csv-spec
@@ -23,6 +23,13 @@ SELECT emp_no, first_name, gender, last_name FROM test_emp WHERE QUERY('Man*', '
10096 |Jayson |M |Mandell
;
+simpleQueryOptionsInMultipleCommaSeparatedStrings
+SELECT emp_no, first_name, gender, last_name FROM test_emp WHERE QUERY('Man*', 'default_field=last_name;lenient=true', 'fuzzy_rewrite=scoring_boolean') LIMIT 5;
+
+ emp_no:i | first_name:s | gender:s | last_name:s
+10096 |Jayson |M |Mandell
+;
+
matchQuery
SELECT emp_no, first_name, gender, last_name FROM test_emp WHERE MATCH(first_name, 'Erez');
@@ -37,6 +44,13 @@ SELECT emp_no, first_name, gender, last_name FROM test_emp WHERE MATCH(first_nam
10076 |Erez |F |Ritzmann
;
+matchQueryWithOptionsInMultipleCommaSeparatedStrings
+SELECT emp_no, first_name, gender, last_name FROM test_emp WHERE MATCH(first_name, 'Erez', 'lenient=true;cutoff_frequency=2','fuzzy_rewrite=scoring_boolean;minimum_should_match=1','operator=AND', 'max_expansions=30;prefix_length=1;analyzer=english;auto_generate_synonyms_phrase_query=true;fuzzy_transpositions=true');
+
+ emp_no:i | first_name:s | gender:s | last_name:s
+10076 |Erez |F |Ritzmann
+;
+
multiMatchQuery
SELECT emp_no, first_name, gender, last_name FROM test_emp WHERE MATCH('first_name,last_name', 'Morton', 'type=best_fields;operator=OR');
@@ -51,6 +65,13 @@ SELECT emp_no, first_name, gender, last_name FROM test_emp WHERE MATCH('first_na
10095 |Hilari |M |Morton
;
+multiMatchQueryWithInMultipleCommaSeparatedStrings
+SELECT emp_no, first_name, gender, last_name FROM test_emp WHERE MATCH('first_name,last_name', 'Morton', 'slop=1;lenient=true', 'cutoff_frequency=2','tie_breaker=0.1;use_dis_max=true;fuzzy_rewrite=scoring_boolean','minimum_should_match=1;operator=AND;max_expansions=30;prefix_length=1;analyzer=english;type=best_fields;auto_generate_synonyms_phrase_query=true;fuzzy_transpositions=true');
+
+ emp_no:i | first_name:s | gender:s | last_name:s
+10095 |Hilari |M |Morton
+;
+
score
SELECT emp_no, first_name, SCORE() FROM test_emp WHERE MATCH(first_name, 'Erez') ORDER BY SCORE();
From 32075e6787b68a573e546bdf8a58dbb2884fdb14 Mon Sep 17 00:00:00 2001
From: Marios Trivyzas
Date: Tue, 18 Sep 2018 19:27:23 +0200
Subject: [PATCH 2/2] Added unit tests
---
.../fulltext/FullTextUtilsTests.java | 41 +++++++++++++++++++
1 file changed, 41 insertions(+)
create mode 100644 x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/predicate/fulltext/FullTextUtilsTests.java
diff --git a/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/predicate/fulltext/FullTextUtilsTests.java b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/predicate/fulltext/FullTextUtilsTests.java
new file mode 100644
index 0000000000000..7dd08e9c34cef
--- /dev/null
+++ b/x-pack/plugin/sql/src/test/java/org/elasticsearch/xpack/sql/expression/predicate/fulltext/FullTextUtilsTests.java
@@ -0,0 +1,41 @@
+/*
+ * 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.predicate.fulltext;
+
+import org.elasticsearch.test.ESTestCase;
+import org.elasticsearch.xpack.sql.parser.ParsingException;
+import org.elasticsearch.xpack.sql.tree.Location;
+
+import java.util.Map;
+
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.is;
+
+public class FullTextUtilsTests extends ESTestCase {
+
+ public void testColonDelimited() {
+ Map options = FullTextUtils.parseSettings("k1=v1;k2=v2", new Location(1, 1));
+ assertThat(options.size(), is(2));
+ assertThat(options, hasEntry("k1", "v1"));
+ assertThat(options, hasEntry("k2", "v2"));
+ }
+
+ public void testColonDelimitedErrorString() {
+ ParsingException e = expectThrows(ParsingException.class,
+ () -> FullTextUtils.parseSettings("k1=v1;k2v2", new Location(1, 1)));
+ assertThat(e.getMessage(), is("line 1:3: Cannot parse entry k2v2 in options k1=v1;k2v2"));
+ assertThat(e.getLineNumber(), is(1));
+ assertThat(e.getColumnNumber(), is(3));
+ }
+
+ public void testColonDelimitedErrorDuplicate() {
+ ParsingException e = expectThrows(ParsingException.class,
+ () -> FullTextUtils.parseSettings("k1=v1;k1=v2", new Location(1, 1)));
+ assertThat(e.getMessage(), is("line 1:3: Duplicate option k1=v2 detected in options k1=v1;k1=v2"));
+ assertThat(e.getLineNumber(), is(1));
+ assertThat(e.getColumnNumber(), is(3));
+ }
+}