diff --git a/custom-connector-example/src/main/java/com/amazonaws/appflow/custom/connector/example/query/SalesForceQueryFilterExpressionVisitor.java b/custom-connector-example/src/main/java/com/amazonaws/appflow/custom/connector/example/query/SalesForceQueryFilterExpressionVisitor.java
index 741568c..3329a95 100644
--- a/custom-connector-example/src/main/java/com/amazonaws/appflow/custom/connector/example/query/SalesForceQueryFilterExpressionVisitor.java
+++ b/custom-connector-example/src/main/java/com/amazonaws/appflow/custom/connector/example/query/SalesForceQueryFilterExpressionVisitor.java
@@ -23,8 +23,9 @@
import com.amazonaws.appflow.custom.connector.model.metadata.FieldDefinition;
import com.amazonaws.appflow.custom.connector.queryfilter.antlr.CustomConnectorQueryFilterParser;
import com.amazonaws.appflow.custom.connector.queryfilter.antlr.CustomConnectorQueryFilterParserBaseVisitor;
+import org.antlr.v4.runtime.RuleContext;
import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
import java.time.Instant;
import java.time.LocalDate;
@@ -50,6 +51,7 @@ public class SalesForceQueryFilterExpressionVisitor extends CustomConnectorQuery
// helps build the WHERE-clause for Salesforce SOQL
private final StringBuilder queryBuilder = new StringBuilder();
+ private final StringBuilder orderByBuilder = new StringBuilder();
private final StringBuilder limitBuilder = new StringBuilder();
// Caller will provide the entity definition for the queried entity. This holds field level metadata for the entity.
@@ -297,11 +299,27 @@ public StringBuilder visitCountValueExpression(final CustomConnectorQueryFilterP
return limitBuilder.append(ctx.getText()).append(SPACE);
}
+ @Override
+ public StringBuilder visitOrderByExpression(final CustomConnectorQueryFilterParser.OrderByExpressionContext ctx) {
+ if (ctx.identifier().size() > 0) {
+ List orderByIdentifiers = ctx.identifier();
+ String identifiers = orderByIdentifiers.stream().map(RuleContext::getText).collect(Collectors.joining(","));
+ orderByBuilder.append(identifiers).append(SPACE);
+ orderByBuilder.append(ctx.right.getText()).append(SPACE);
+ }
+
+ // Only visit the left expression instead of visiting all children
+ if (ctx.left != null) {
+ visit(ctx.left);
+ }
+ return orderByBuilder;
+ }
+
/**
* Returns the final query expression built for Salesforce. Separated into (where, limit) clauses.
*/
- public Pair getResult() {
- return Pair.of(queryBuilder.toString().trim(), limitBuilder.toString().trim());
+ public Triple getResult() {
+ return Triple.of(queryBuilder.toString().trim(), orderByBuilder.toString().trim(), limitBuilder.toString().trim());
}
@FunctionalInterface
diff --git a/custom-connector-example/src/main/java/com/amazonaws/appflow/custom/connector/example/query/SalesforceQueryBuilder.java b/custom-connector-example/src/main/java/com/amazonaws/appflow/custom/connector/example/query/SalesforceQueryBuilder.java
index 5be682a..10b95c9 100644
--- a/custom-connector-example/src/main/java/com/amazonaws/appflow/custom/connector/example/query/SalesforceQueryBuilder.java
+++ b/custom-connector-example/src/main/java/com/amazonaws/appflow/custom/connector/example/query/SalesforceQueryBuilder.java
@@ -30,7 +30,7 @@
import org.antlr.v4.runtime.tree.ParseTree;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
import org.apache.logging.log4j.util.Strings;
import java.util.ArrayList;
@@ -51,6 +51,7 @@ private SalesforceQueryBuilder() {
private static final String FROM_CLAUSE = "from";
private static final String SELECT_CLAUSE = "select";
private static final String LIMIT_CLAUSE = "limit";
+ private static final String ORDER_BY_CLAUSE = "order by";
public static String buildQuery(final QueryObject queryObject) {
@@ -66,12 +67,17 @@ public static String buildQuery(final QueryObject queryObject) {
// QueryData allows data filtering based on filter expression.
if (Strings.isNotBlank(queryObject.filterExpression())) {
// adding filter expression in the query
- Pair whereAndLimitClauses = translateFilterExpression(queryObject.filterExpression(), queryObject.entityDefinition());
- String whereClause = whereAndLimitClauses.getLeft();
- String limitClause = whereAndLimitClauses.getRight();
+ Triple
+ queryClauses = translateFilterExpression(queryObject.filterExpression(), queryObject.entityDefinition());
+ String whereClause = queryClauses.getLeft();
+ String orderByClause = queryClauses.getMiddle();
+ String limitClause = queryClauses.getRight();
if (StringUtils.isNotBlank(whereClause)) {
clauses.add(String.format(CLAUSE_STRING_FORMAT, WHERE_CLAUSE, whereClause));
}
+ if (StringUtils.isNotBlank(orderByClause)) {
+ clauses.add(String.format(CLAUSE_STRING_FORMAT, ORDER_BY_CLAUSE, orderByClause));
+ }
if (StringUtils.isNotBlank(limitClause)) {
clauses.add(String.format(CLAUSE_STRING_FORMAT, LIMIT_CLAUSE, limitClause));
}
@@ -141,7 +147,7 @@ private static String addSingleQuotes(final String string) {
return '\'' + string + '\'';
}
- private static Pair translateFilterExpression(final String filterExpression, final EntityDefinition entityDefinition) {
+ private static Triple translateFilterExpression(final String filterExpression, final EntityDefinition entityDefinition) {
if (StringUtils.isNotBlank(filterExpression)) {
ParseTree parseTree = CustomConnectorParseTreeBuilder.parse(filterExpression);
SalesForceQueryFilterExpressionVisitor salesForceQueryFilterExpressionVisitor = new SalesForceQueryFilterExpressionVisitor(entityDefinition);
@@ -151,6 +157,6 @@ private static Pair translateFilterExpression(final String filte
return salesForceQueryFilterExpressionVisitor.getResult();
}
// no filter expression is defined
- return Pair.of(StringUtils.EMPTY, StringUtils.EMPTY);
+ return Triple.of(StringUtils.EMPTY, StringUtils.EMPTY, StringUtils.EMPTY);
}
}
diff --git a/custom-connector-example/src/test/java/com/amazonaws/appflow/custom/connector/example/query/SalesForceQueryFilterExpressionVisitorTest.java b/custom-connector-example/src/test/java/com/amazonaws/appflow/custom/connector/example/query/SalesForceQueryFilterExpressionVisitorTest.java
index 6b786cc..9cc51cc 100644
--- a/custom-connector-example/src/test/java/com/amazonaws/appflow/custom/connector/example/query/SalesForceQueryFilterExpressionVisitorTest.java
+++ b/custom-connector-example/src/test/java/com/amazonaws/appflow/custom/connector/example/query/SalesForceQueryFilterExpressionVisitorTest.java
@@ -25,7 +25,7 @@
import com.amazonaws.appflow.custom.connector.model.metadata.ImmutableEntityDefinition;
import com.amazonaws.appflow.custom.connector.model.metadata.ImmutableFieldDefinition;
import com.amazonaws.appflow.custom.connector.queryfilter.CustomConnectorParseTreeBuilder;
-import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.lang3.tuple.Triple;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.params.ParameterizedTest;
@@ -56,35 +56,41 @@ void setupTestCase() {
void testConversionFromFilterExpressionToSalesforceQuery(
final String filterExpression,
final String expectedWhereExpression,
+ final String expectedOrderByExpression,
final String expectedLimitExpression) {
salesForceQueryFilterExpressionVisitor.visit(CustomConnectorParseTreeBuilder.parse(filterExpression));
- Pair result = salesForceQueryFilterExpressionVisitor.getResult();
+ Triple result = salesForceQueryFilterExpressionVisitor.getResult();
Assertions.assertEquals(expectedWhereExpression, result.getLeft());
+ Assertions.assertEquals(expectedOrderByExpression, result.getMiddle());
Assertions.assertEquals(expectedLimitExpression, result.getRight());
}
private static Stream getTestFilterExpression() {
return Stream.of(
- Arguments.of("Name = \"TestAccountName\"", "Name = 'TestAccountName'", ""),
- Arguments.of("Name = \"TestAccountName\" limit 100", "Name = 'TestAccountName'", "100"),
+ Arguments.of("Name = \"TestAccountName\"", "Name = 'TestAccountName'", "", ""),
+ Arguments.of("Name = \"TestAccountName\" limit 100", "Name = 'TestAccountName'", "", "100"),
+ Arguments.of("Name = \"TestAccountName\" order by Name asc", "Name = 'TestAccountName'", "Name asc", ""),
+ Arguments.of("Name = \"TestAccountName\" order by Name, OS asc", "Name = 'TestAccountName'", "Name,OS asc", ""),
+ Arguments.of("Name = \"TestAccountName\" order by Name, OS asc limit 100", "Name = 'TestAccountName'", "Name,OS asc", "100"),
+ Arguments.of("order by Name, OS asc", "", "Name,OS asc", ""),
Arguments.of("Id != '0016g00001cyrfiAAA' AND AccountNumber = 40",
- "Id != '0016g00001cyrfiAAA' AND AccountNumber = 40", ""),
+ "Id != '0016g00001cyrfiAAA' AND AccountNumber = 40", "", ""),
Arguments.of("CreatedDate > 2021-04-20T10:30:35Z AND AccountNumber = 40",
- "CreatedDate > 2021-04-20T10:30:35Z AND AccountNumber = 40", ""),
+ "CreatedDate > 2021-04-20T10:30:35Z AND AccountNumber = 40", "", ""),
Arguments.of("CreatedDate between 2021-04-20T10:30:35Z and 2021-04-25T10:30:35Z",
- "CreatedDate > 2021-04-20T10:30:35.000+0000 and CreatedDate < 2021-04-25T10:30:35.000+0000", ""),
+ "CreatedDate > 2021-04-20T10:30:35.000+0000 and CreatedDate < 2021-04-25T10:30:35.000+0000", "", ""),
Arguments.of("Id in (5, 7, 9, 10)",
- "Id IN ('5','7','9','10')", ""),
+ "Id IN ('5','7','9','10')", "", ""),
Arguments.of("Name = \"TestAccountName\" and Id in (5, 7, 9, 10) and AccountNumber > 100",
- "Name = 'TestAccountName' and Id IN ('5','7','9','10') and AccountNumber > 100", ""),
+ "Name = 'TestAccountName' and Id IN ('5','7','9','10') and AccountNumber > 100", "", ""),
Arguments.of(
"(AccountNumber > 100 and ((CreatedDate < 2021-04-20T12:30:45Z and CreatedDate > 2021-04-21T15:45:49.234Z) and Name contains \"TestAccountName\"))",
"AccountNumber > 100 and CreatedDate < 2021-04-20T12:30:45Z and CreatedDate > " +
- "2021-04-21T15:45:49.234Z and Name LIKE '%TestAccountName%'", ""),
+ "2021-04-21T15:45:49.234Z and Name LIKE '%TestAccountName%'", "", ""),
Arguments.of(
"(AccountNumber > 100 and ((CreatedDate < 2021-04-20T12:30:45Z and CreatedDate > 2021-04-21T15:45:49.234Z) and Name contains \"TestAccountName\")) limit 100",
"AccountNumber > 100 and CreatedDate < 2021-04-20T12:30:45Z and CreatedDate > " +
- "2021-04-21T15:45:49.234Z and Name LIKE '%TestAccountName%'", "100"));
+ "2021-04-21T15:45:49.234Z and Name LIKE '%TestAccountName%'", "", "100"));
}
/**
diff --git a/custom-connector-queryfilter/src/main/configuration/grammar/CustomConnectorQueryFilterLexer.g4 b/custom-connector-queryfilter/src/main/configuration/grammar/CustomConnectorQueryFilterLexer.g4
index f250e72..cedf33b 100644
--- a/custom-connector-queryfilter/src/main/configuration/grammar/CustomConnectorQueryFilterLexer.g4
+++ b/custom-connector-queryfilter/src/main/configuration/grammar/CustomConnectorQueryFilterLexer.g4
@@ -24,13 +24,16 @@ RPAREN : ')' ;
NULL : 'null';
IN : 'IN' | 'in';
LIMIT : 'LIMIT' | 'limit';
+ORDERBY : 'ORDER BY' | 'order by';
+ASC : 'ASC' | 'asc';
+DESC : 'DESC' | 'desc';
COMMA : ',';
// represents identifier string in filter expression.
IDENTIFIER : [a-zA-Z][A-Za-z0-9_.-]*;
// represents a positive non-zero integer
-POS_INTEGER: [1-9][0-9]+
+POS_INTEGER: [1-9]+[0-9]*
;
// represents decimal values like 5.0 or -5.0 etc
diff --git a/custom-connector-queryfilter/src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4 b/custom-connector-queryfilter/src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4
index deda1e8..9c0bcc5 100644
--- a/custom-connector-queryfilter/src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4
+++ b/custom-connector-queryfilter/src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4
@@ -9,12 +9,19 @@ options { tokenVocab=CustomConnectorQueryFilterLexer; }
// 'queryfilter' is the root node for the filter expression
queryfilter
: expression EOF
-| limitexpression EOF
+| orderbyexpr EOF
+| limitexpr EOF
;
-limitexpression
-: op=limit right=count #limitExpression
-| left=expression op=limit right=count #limitExpression // SQL 'LIMIT xyz' operator
+limitexpr
+: op=limit right=count #limitExpression
+| left=expression op=limit right=count #limitExpression
+| orderbyexpr op=limit right=count #limitExpression // SQL 'LIMIT xyz' operator
+;
+
+orderbyexpr
+: op=orderby identifier (COMMA identifier)* right=order #orderByExpression
+| left=expression op=orderby identifier (COMMA identifier)* right=order #orderByExpression // SQL 'ORDER BY xyz, abc ASC|DESC' operator
;
expression
@@ -84,6 +91,12 @@ in
limit
:LIMIT ;
+orderby
+:ORDERBY ;
+
+order
+:ASC | DESC;
+
// Following is to support different String formats in the value expression
string
: SINGLE_STRING
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.interp b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.interp
index 67c814a..b590559 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.interp
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.interp
@@ -18,6 +18,9 @@ null
'null'
null
null
+null
+null
+null
','
null
null
@@ -50,6 +53,9 @@ RPAREN
NULL
IN
LIMIT
+ORDERBY
+ASC
+DESC
COMMA
IDENTIFIER
POS_INTEGER
@@ -81,6 +87,9 @@ RPAREN
NULL
IN
LIMIT
+ORDERBY
+ASC
+DESC
COMMA
IDENTIFIER
POS_INTEGER
@@ -103,4 +112,4 @@ mode names:
DEFAULT_MODE
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 31, 309, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 72, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 78, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 86, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 100, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 117, 10, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 150, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 166, 10, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 181, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 193, 10, 19, 3, 20, 3, 20, 3, 21, 3, 21, 7, 21, 199, 10, 21, 12, 21, 14, 21, 202, 11, 21, 3, 22, 3, 22, 6, 22, 206, 10, 22, 13, 22, 14, 22, 207, 3, 23, 5, 23, 211, 10, 23, 3, 23, 6, 23, 214, 10, 23, 13, 23, 14, 23, 215, 3, 23, 3, 23, 6, 23, 220, 10, 23, 13, 23, 14, 23, 221, 5, 23, 224, 10, 23, 3, 24, 3, 24, 3, 24, 6, 24, 229, 10, 24, 13, 24, 14, 24, 230, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 6, 25, 238, 10, 25, 13, 25, 14, 25, 239, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 29, 6, 29, 254, 10, 29, 13, 29, 14, 29, 255, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 269, 10, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 5, 30, 280, 10, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 5, 32, 292, 10, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 6, 32, 302, 10, 32, 13, 32, 14, 32, 303, 5, 32, 306, 10, 32, 3, 32, 3, 32, 2, 2, 33, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 2, 57, 29, 59, 30, 61, 31, 63, 2, 3, 2, 14, 4, 2, 67, 92, 99, 124, 7, 2, 47, 48, 50, 59, 67, 92, 97, 97, 99, 124, 3, 2, 51, 59, 3, 2, 50, 59, 3, 2, 41, 41, 3, 2, 36, 36, 8, 2, 36, 36, 41, 41, 94, 94, 112, 112, 116, 116, 118, 118, 5, 2, 11, 12, 14, 15, 34, 34, 3, 2, 50, 52, 3, 2, 50, 51, 3, 2, 50, 54, 3, 2, 50, 55, 2, 336, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 3, 71, 3, 2, 2, 2, 5, 77, 3, 2, 2, 2, 7, 85, 3, 2, 2, 2, 9, 99, 3, 2, 2, 2, 11, 116, 3, 2, 2, 2, 13, 118, 3, 2, 2, 2, 15, 120, 3, 2, 2, 2, 17, 123, 3, 2, 2, 2, 19, 125, 3, 2, 2, 2, 21, 128, 3, 2, 2, 2, 23, 130, 3, 2, 2, 2, 25, 149, 3, 2, 2, 2, 27, 165, 3, 2, 2, 2, 29, 167, 3, 2, 2, 2, 31, 169, 3, 2, 2, 2, 33, 171, 3, 2, 2, 2, 35, 180, 3, 2, 2, 2, 37, 192, 3, 2, 2, 2, 39, 194, 3, 2, 2, 2, 41, 196, 3, 2, 2, 2, 43, 203, 3, 2, 2, 2, 45, 210, 3, 2, 2, 2, 47, 225, 3, 2, 2, 2, 49, 234, 3, 2, 2, 2, 51, 243, 3, 2, 2, 2, 53, 246, 3, 2, 2, 2, 55, 249, 3, 2, 2, 2, 57, 253, 3, 2, 2, 2, 59, 259, 3, 2, 2, 2, 61, 281, 3, 2, 2, 2, 63, 291, 3, 2, 2, 2, 65, 66, 7, 67, 2, 2, 66, 67, 7, 80, 2, 2, 67, 72, 7, 70, 2, 2, 68, 69, 7, 99, 2, 2, 69, 70, 7, 112, 2, 2, 70, 72, 7, 102, 2, 2, 71, 65, 3, 2, 2, 2, 71, 68, 3, 2, 2, 2, 72, 4, 3, 2, 2, 2, 73, 74, 7, 81, 2, 2, 74, 78, 7, 84, 2, 2, 75, 76, 7, 113, 2, 2, 76, 78, 7, 116, 2, 2, 77, 73, 3, 2, 2, 2, 77, 75, 3, 2, 2, 2, 78, 6, 3, 2, 2, 2, 79, 80, 7, 80, 2, 2, 80, 81, 7, 81, 2, 2, 81, 86, 7, 86, 2, 2, 82, 83, 7, 112, 2, 2, 83, 84, 7, 113, 2, 2, 84, 86, 7, 118, 2, 2, 85, 79, 3, 2, 2, 2, 85, 82, 3, 2, 2, 2, 86, 8, 3, 2, 2, 2, 87, 88, 7, 86, 2, 2, 88, 89, 7, 84, 2, 2, 89, 90, 7, 87, 2, 2, 90, 100, 7, 71, 2, 2, 91, 92, 7, 86, 2, 2, 92, 93, 7, 116, 2, 2, 93, 94, 7, 119, 2, 2, 94, 100, 7, 103, 2, 2, 95, 96, 7, 118, 2, 2, 96, 97, 7, 116, 2, 2, 97, 98, 7, 119, 2, 2, 98, 100, 7, 103, 2, 2, 99, 87, 3, 2, 2, 2, 99, 91, 3, 2, 2, 2, 99, 95, 3, 2, 2, 2, 100, 10, 3, 2, 2, 2, 101, 102, 7, 72, 2, 2, 102, 103, 7, 67, 2, 2, 103, 104, 7, 78, 2, 2, 104, 105, 7, 85, 2, 2, 105, 117, 7, 71, 2, 2, 106, 107, 7, 72, 2, 2, 107, 108, 7, 99, 2, 2, 108, 109, 7, 110, 2, 2, 109, 110, 7, 117, 2, 2, 110, 117, 7, 103, 2, 2, 111, 112, 7, 104, 2, 2, 112, 113, 7, 99, 2, 2, 113, 114, 7, 110, 2, 2, 114, 115, 7, 117, 2, 2, 115, 117, 7, 103, 2, 2, 116, 101, 3, 2, 2, 2, 116, 106, 3, 2, 2, 2, 116, 111, 3, 2, 2, 2, 117, 12, 3, 2, 2, 2, 118, 119, 7, 64, 2, 2, 119, 14, 3, 2, 2, 2, 120, 121, 7, 64, 2, 2, 121, 122, 7, 63, 2, 2, 122, 16, 3, 2, 2, 2, 123, 124, 7, 62, 2, 2, 124, 18, 3, 2, 2, 2, 125, 126, 7, 62, 2, 2, 126, 127, 7, 63, 2, 2, 127, 20, 3, 2, 2, 2, 128, 129, 7, 63, 2, 2, 129, 22, 3, 2, 2, 2, 130, 131, 7, 35, 2, 2, 131, 132, 7, 63, 2, 2, 132, 24, 3, 2, 2, 2, 133, 134, 7, 69, 2, 2, 134, 135, 7, 81, 2, 2, 135, 136, 7, 80, 2, 2, 136, 137, 7, 86, 2, 2, 137, 138, 7, 67, 2, 2, 138, 139, 7, 75, 2, 2, 139, 140, 7, 80, 2, 2, 140, 150, 7, 85, 2, 2, 141, 142, 7, 101, 2, 2, 142, 143, 7, 113, 2, 2, 143, 144, 7, 112, 2, 2, 144, 145, 7, 118, 2, 2, 145, 146, 7, 99, 2, 2, 146, 147, 7, 107, 2, 2, 147, 148, 7, 112, 2, 2, 148, 150, 7, 117, 2, 2, 149, 133, 3, 2, 2, 2, 149, 141, 3, 2, 2, 2, 150, 26, 3, 2, 2, 2, 151, 152, 7, 68, 2, 2, 152, 153, 7, 71, 2, 2, 153, 154, 7, 86, 2, 2, 154, 155, 7, 89, 2, 2, 155, 156, 7, 71, 2, 2, 156, 157, 7, 71, 2, 2, 157, 166, 7, 80, 2, 2, 158, 159, 7, 100, 2, 2, 159, 160, 7, 103, 2, 2, 160, 161, 7, 118, 2, 2, 161, 162, 7, 121, 2, 2, 162, 163, 7, 103, 2, 2, 163, 164, 7, 103, 2, 2, 164, 166, 7, 112, 2, 2, 165, 151, 3, 2, 2, 2, 165, 158, 3, 2, 2, 2, 166, 28, 3, 2, 2, 2, 167, 168, 7, 42, 2, 2, 168, 30, 3, 2, 2, 2, 169, 170, 7, 43, 2, 2, 170, 32, 3, 2, 2, 2, 171, 172, 7, 112, 2, 2, 172, 173, 7, 119, 2, 2, 173, 174, 7, 110, 2, 2, 174, 175, 7, 110, 2, 2, 175, 34, 3, 2, 2, 2, 176, 177, 7, 75, 2, 2, 177, 181, 7, 80, 2, 2, 178, 179, 7, 107, 2, 2, 179, 181, 7, 112, 2, 2, 180, 176, 3, 2, 2, 2, 180, 178, 3, 2, 2, 2, 181, 36, 3, 2, 2, 2, 182, 183, 7, 78, 2, 2, 183, 184, 7, 75, 2, 2, 184, 185, 7, 79, 2, 2, 185, 186, 7, 75, 2, 2, 186, 193, 7, 86, 2, 2, 187, 188, 7, 110, 2, 2, 188, 189, 7, 107, 2, 2, 189, 190, 7, 111, 2, 2, 190, 191, 7, 107, 2, 2, 191, 193, 7, 118, 2, 2, 192, 182, 3, 2, 2, 2, 192, 187, 3, 2, 2, 2, 193, 38, 3, 2, 2, 2, 194, 195, 7, 46, 2, 2, 195, 40, 3, 2, 2, 2, 196, 200, 9, 2, 2, 2, 197, 199, 9, 3, 2, 2, 198, 197, 3, 2, 2, 2, 199, 202, 3, 2, 2, 2, 200, 198, 3, 2, 2, 2, 200, 201, 3, 2, 2, 2, 201, 42, 3, 2, 2, 2, 202, 200, 3, 2, 2, 2, 203, 205, 9, 4, 2, 2, 204, 206, 9, 5, 2, 2, 205, 204, 3, 2, 2, 2, 206, 207, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 44, 3, 2, 2, 2, 209, 211, 7, 47, 2, 2, 210, 209, 3, 2, 2, 2, 210, 211, 3, 2, 2, 2, 211, 213, 3, 2, 2, 2, 212, 214, 9, 5, 2, 2, 213, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 216, 3, 2, 2, 2, 216, 223, 3, 2, 2, 2, 217, 219, 7, 48, 2, 2, 218, 220, 9, 5, 2, 2, 219, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 219, 3, 2, 2, 2, 221, 222, 3, 2, 2, 2, 222, 224, 3, 2, 2, 2, 223, 217, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 46, 3, 2, 2, 2, 225, 228, 7, 41, 2, 2, 226, 229, 10, 6, 2, 2, 227, 229, 5, 55, 28, 2, 228, 226, 3, 2, 2, 2, 228, 227, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 3, 2, 2, 2, 232, 233, 7, 41, 2, 2, 233, 48, 3, 2, 2, 2, 234, 237, 7, 36, 2, 2, 235, 238, 10, 7, 2, 2, 236, 238, 5, 55, 28, 2, 237, 235, 3, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 239, 3, 2, 2, 2, 239, 237, 3, 2, 2, 2, 239, 240, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 242, 7, 36, 2, 2, 242, 50, 3, 2, 2, 2, 243, 244, 7, 41, 2, 2, 244, 245, 7, 41, 2, 2, 245, 52, 3, 2, 2, 2, 246, 247, 7, 36, 2, 2, 247, 248, 7, 36, 2, 2, 248, 54, 3, 2, 2, 2, 249, 250, 7, 94, 2, 2, 250, 251, 9, 8, 2, 2, 251, 56, 3, 2, 2, 2, 252, 254, 9, 9, 2, 2, 253, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 257, 3, 2, 2, 2, 257, 258, 8, 29, 2, 2, 258, 58, 3, 2, 2, 2, 259, 260, 9, 5, 2, 2, 260, 261, 9, 5, 2, 2, 261, 262, 9, 5, 2, 2, 262, 263, 9, 5, 2, 2, 263, 268, 7, 47, 2, 2, 264, 265, 7, 50, 2, 2, 265, 269, 9, 4, 2, 2, 266, 267, 7, 51, 2, 2, 267, 269, 9, 10, 2, 2, 268, 264, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 279, 7, 47, 2, 2, 271, 272, 7, 50, 2, 2, 272, 280, 9, 5, 2, 2, 273, 274, 7, 51, 2, 2, 274, 280, 9, 5, 2, 2, 275, 276, 7, 52, 2, 2, 276, 280, 9, 5, 2, 2, 277, 278, 7, 53, 2, 2, 278, 280, 9, 11, 2, 2, 279, 271, 3, 2, 2, 2, 279, 273, 3, 2, 2, 2, 279, 275, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 60, 3, 2, 2, 2, 281, 282, 5, 59, 30, 2, 282, 283, 7, 86, 2, 2, 283, 284, 5, 63, 32, 2, 284, 62, 3, 2, 2, 2, 285, 286, 7, 50, 2, 2, 286, 292, 9, 5, 2, 2, 287, 288, 7, 51, 2, 2, 288, 292, 9, 5, 2, 2, 289, 290, 7, 52, 2, 2, 290, 292, 9, 12, 2, 2, 291, 285, 3, 2, 2, 2, 291, 287, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 293, 3, 2, 2, 2, 293, 294, 7, 60, 2, 2, 294, 295, 9, 13, 2, 2, 295, 296, 9, 5, 2, 2, 296, 297, 7, 60, 2, 2, 297, 298, 9, 13, 2, 2, 298, 305, 9, 5, 2, 2, 299, 301, 7, 48, 2, 2, 300, 302, 9, 5, 2, 2, 301, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 306, 3, 2, 2, 2, 305, 299, 3, 2, 2, 2, 305, 306, 3, 2, 2, 2, 306, 307, 3, 2, 2, 2, 307, 308, 7, 92, 2, 2, 308, 64, 3, 2, 2, 2, 28, 2, 71, 77, 85, 99, 116, 149, 165, 180, 192, 200, 207, 210, 215, 221, 223, 228, 230, 237, 239, 255, 268, 279, 291, 303, 305, 3, 8, 2, 2]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 34, 356, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 78, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 84, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 5, 4, 92, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 106, 10, 5, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 3, 6, 5, 6, 123, 10, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 156, 10, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 172, 10, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 187, 10, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 199, 10, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 217, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 225, 10, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 5, 22, 235, 10, 22, 3, 23, 3, 23, 3, 24, 3, 24, 7, 24, 241, 10, 24, 12, 24, 14, 24, 244, 11, 24, 3, 25, 6, 25, 247, 10, 25, 13, 25, 14, 25, 248, 3, 25, 7, 25, 252, 10, 25, 12, 25, 14, 25, 255, 11, 25, 3, 26, 5, 26, 258, 10, 26, 3, 26, 6, 26, 261, 10, 26, 13, 26, 14, 26, 262, 3, 26, 3, 26, 6, 26, 267, 10, 26, 13, 26, 14, 26, 268, 5, 26, 271, 10, 26, 3, 27, 3, 27, 3, 27, 6, 27, 276, 10, 27, 13, 27, 14, 27, 277, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 6, 28, 285, 10, 28, 13, 28, 14, 28, 286, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 6, 32, 301, 10, 32, 13, 32, 14, 32, 302, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 316, 10, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 327, 10, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 5, 35, 339, 10, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 6, 35, 349, 10, 35, 13, 35, 14, 35, 350, 5, 35, 353, 10, 35, 3, 35, 3, 35, 2, 2, 36, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 2, 63, 32, 65, 33, 67, 34, 69, 2, 3, 2, 14, 4, 2, 67, 92, 99, 124, 7, 2, 47, 48, 50, 59, 67, 92, 97, 97, 99, 124, 3, 2, 51, 59, 3, 2, 50, 59, 3, 2, 41, 41, 3, 2, 36, 36, 8, 2, 36, 36, 41, 41, 94, 94, 112, 112, 116, 116, 118, 118, 5, 2, 11, 12, 14, 15, 34, 34, 3, 2, 50, 52, 3, 2, 50, 51, 3, 2, 50, 54, 3, 2, 50, 55, 2, 387, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 3, 77, 3, 2, 2, 2, 5, 83, 3, 2, 2, 2, 7, 91, 3, 2, 2, 2, 9, 105, 3, 2, 2, 2, 11, 122, 3, 2, 2, 2, 13, 124, 3, 2, 2, 2, 15, 126, 3, 2, 2, 2, 17, 129, 3, 2, 2, 2, 19, 131, 3, 2, 2, 2, 21, 134, 3, 2, 2, 2, 23, 136, 3, 2, 2, 2, 25, 155, 3, 2, 2, 2, 27, 171, 3, 2, 2, 2, 29, 173, 3, 2, 2, 2, 31, 175, 3, 2, 2, 2, 33, 177, 3, 2, 2, 2, 35, 186, 3, 2, 2, 2, 37, 198, 3, 2, 2, 2, 39, 216, 3, 2, 2, 2, 41, 224, 3, 2, 2, 2, 43, 234, 3, 2, 2, 2, 45, 236, 3, 2, 2, 2, 47, 238, 3, 2, 2, 2, 49, 246, 3, 2, 2, 2, 51, 257, 3, 2, 2, 2, 53, 272, 3, 2, 2, 2, 55, 281, 3, 2, 2, 2, 57, 290, 3, 2, 2, 2, 59, 293, 3, 2, 2, 2, 61, 296, 3, 2, 2, 2, 63, 300, 3, 2, 2, 2, 65, 306, 3, 2, 2, 2, 67, 328, 3, 2, 2, 2, 69, 338, 3, 2, 2, 2, 71, 72, 7, 67, 2, 2, 72, 73, 7, 80, 2, 2, 73, 78, 7, 70, 2, 2, 74, 75, 7, 99, 2, 2, 75, 76, 7, 112, 2, 2, 76, 78, 7, 102, 2, 2, 77, 71, 3, 2, 2, 2, 77, 74, 3, 2, 2, 2, 78, 4, 3, 2, 2, 2, 79, 80, 7, 81, 2, 2, 80, 84, 7, 84, 2, 2, 81, 82, 7, 113, 2, 2, 82, 84, 7, 116, 2, 2, 83, 79, 3, 2, 2, 2, 83, 81, 3, 2, 2, 2, 84, 6, 3, 2, 2, 2, 85, 86, 7, 80, 2, 2, 86, 87, 7, 81, 2, 2, 87, 92, 7, 86, 2, 2, 88, 89, 7, 112, 2, 2, 89, 90, 7, 113, 2, 2, 90, 92, 7, 118, 2, 2, 91, 85, 3, 2, 2, 2, 91, 88, 3, 2, 2, 2, 92, 8, 3, 2, 2, 2, 93, 94, 7, 86, 2, 2, 94, 95, 7, 84, 2, 2, 95, 96, 7, 87, 2, 2, 96, 106, 7, 71, 2, 2, 97, 98, 7, 86, 2, 2, 98, 99, 7, 116, 2, 2, 99, 100, 7, 119, 2, 2, 100, 106, 7, 103, 2, 2, 101, 102, 7, 118, 2, 2, 102, 103, 7, 116, 2, 2, 103, 104, 7, 119, 2, 2, 104, 106, 7, 103, 2, 2, 105, 93, 3, 2, 2, 2, 105, 97, 3, 2, 2, 2, 105, 101, 3, 2, 2, 2, 106, 10, 3, 2, 2, 2, 107, 108, 7, 72, 2, 2, 108, 109, 7, 67, 2, 2, 109, 110, 7, 78, 2, 2, 110, 111, 7, 85, 2, 2, 111, 123, 7, 71, 2, 2, 112, 113, 7, 72, 2, 2, 113, 114, 7, 99, 2, 2, 114, 115, 7, 110, 2, 2, 115, 116, 7, 117, 2, 2, 116, 123, 7, 103, 2, 2, 117, 118, 7, 104, 2, 2, 118, 119, 7, 99, 2, 2, 119, 120, 7, 110, 2, 2, 120, 121, 7, 117, 2, 2, 121, 123, 7, 103, 2, 2, 122, 107, 3, 2, 2, 2, 122, 112, 3, 2, 2, 2, 122, 117, 3, 2, 2, 2, 123, 12, 3, 2, 2, 2, 124, 125, 7, 64, 2, 2, 125, 14, 3, 2, 2, 2, 126, 127, 7, 64, 2, 2, 127, 128, 7, 63, 2, 2, 128, 16, 3, 2, 2, 2, 129, 130, 7, 62, 2, 2, 130, 18, 3, 2, 2, 2, 131, 132, 7, 62, 2, 2, 132, 133, 7, 63, 2, 2, 133, 20, 3, 2, 2, 2, 134, 135, 7, 63, 2, 2, 135, 22, 3, 2, 2, 2, 136, 137, 7, 35, 2, 2, 137, 138, 7, 63, 2, 2, 138, 24, 3, 2, 2, 2, 139, 140, 7, 69, 2, 2, 140, 141, 7, 81, 2, 2, 141, 142, 7, 80, 2, 2, 142, 143, 7, 86, 2, 2, 143, 144, 7, 67, 2, 2, 144, 145, 7, 75, 2, 2, 145, 146, 7, 80, 2, 2, 146, 156, 7, 85, 2, 2, 147, 148, 7, 101, 2, 2, 148, 149, 7, 113, 2, 2, 149, 150, 7, 112, 2, 2, 150, 151, 7, 118, 2, 2, 151, 152, 7, 99, 2, 2, 152, 153, 7, 107, 2, 2, 153, 154, 7, 112, 2, 2, 154, 156, 7, 117, 2, 2, 155, 139, 3, 2, 2, 2, 155, 147, 3, 2, 2, 2, 156, 26, 3, 2, 2, 2, 157, 158, 7, 68, 2, 2, 158, 159, 7, 71, 2, 2, 159, 160, 7, 86, 2, 2, 160, 161, 7, 89, 2, 2, 161, 162, 7, 71, 2, 2, 162, 163, 7, 71, 2, 2, 163, 172, 7, 80, 2, 2, 164, 165, 7, 100, 2, 2, 165, 166, 7, 103, 2, 2, 166, 167, 7, 118, 2, 2, 167, 168, 7, 121, 2, 2, 168, 169, 7, 103, 2, 2, 169, 170, 7, 103, 2, 2, 170, 172, 7, 112, 2, 2, 171, 157, 3, 2, 2, 2, 171, 164, 3, 2, 2, 2, 172, 28, 3, 2, 2, 2, 173, 174, 7, 42, 2, 2, 174, 30, 3, 2, 2, 2, 175, 176, 7, 43, 2, 2, 176, 32, 3, 2, 2, 2, 177, 178, 7, 112, 2, 2, 178, 179, 7, 119, 2, 2, 179, 180, 7, 110, 2, 2, 180, 181, 7, 110, 2, 2, 181, 34, 3, 2, 2, 2, 182, 183, 7, 75, 2, 2, 183, 187, 7, 80, 2, 2, 184, 185, 7, 107, 2, 2, 185, 187, 7, 112, 2, 2, 186, 182, 3, 2, 2, 2, 186, 184, 3, 2, 2, 2, 187, 36, 3, 2, 2, 2, 188, 189, 7, 78, 2, 2, 189, 190, 7, 75, 2, 2, 190, 191, 7, 79, 2, 2, 191, 192, 7, 75, 2, 2, 192, 199, 7, 86, 2, 2, 193, 194, 7, 110, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 111, 2, 2, 196, 197, 7, 107, 2, 2, 197, 199, 7, 118, 2, 2, 198, 188, 3, 2, 2, 2, 198, 193, 3, 2, 2, 2, 199, 38, 3, 2, 2, 2, 200, 201, 7, 81, 2, 2, 201, 202, 7, 84, 2, 2, 202, 203, 7, 70, 2, 2, 203, 204, 7, 71, 2, 2, 204, 205, 7, 84, 2, 2, 205, 206, 7, 34, 2, 2, 206, 207, 7, 68, 2, 2, 207, 217, 7, 91, 2, 2, 208, 209, 7, 113, 2, 2, 209, 210, 7, 116, 2, 2, 210, 211, 7, 102, 2, 2, 211, 212, 7, 103, 2, 2, 212, 213, 7, 116, 2, 2, 213, 214, 7, 34, 2, 2, 214, 215, 7, 100, 2, 2, 215, 217, 7, 123, 2, 2, 216, 200, 3, 2, 2, 2, 216, 208, 3, 2, 2, 2, 217, 40, 3, 2, 2, 2, 218, 219, 7, 67, 2, 2, 219, 220, 7, 85, 2, 2, 220, 225, 7, 69, 2, 2, 221, 222, 7, 99, 2, 2, 222, 223, 7, 117, 2, 2, 223, 225, 7, 101, 2, 2, 224, 218, 3, 2, 2, 2, 224, 221, 3, 2, 2, 2, 225, 42, 3, 2, 2, 2, 226, 227, 7, 70, 2, 2, 227, 228, 7, 71, 2, 2, 228, 229, 7, 85, 2, 2, 229, 235, 7, 69, 2, 2, 230, 231, 7, 102, 2, 2, 231, 232, 7, 103, 2, 2, 232, 233, 7, 117, 2, 2, 233, 235, 7, 101, 2, 2, 234, 226, 3, 2, 2, 2, 234, 230, 3, 2, 2, 2, 235, 44, 3, 2, 2, 2, 236, 237, 7, 46, 2, 2, 237, 46, 3, 2, 2, 2, 238, 242, 9, 2, 2, 2, 239, 241, 9, 3, 2, 2, 240, 239, 3, 2, 2, 2, 241, 244, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 242, 243, 3, 2, 2, 2, 243, 48, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 245, 247, 9, 4, 2, 2, 246, 245, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 249, 3, 2, 2, 2, 249, 253, 3, 2, 2, 2, 250, 252, 9, 5, 2, 2, 251, 250, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 50, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 258, 7, 47, 2, 2, 257, 256, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 260, 3, 2, 2, 2, 259, 261, 9, 5, 2, 2, 260, 259, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 260, 3, 2, 2, 2, 262, 263, 3, 2, 2, 2, 263, 270, 3, 2, 2, 2, 264, 266, 7, 48, 2, 2, 265, 267, 9, 5, 2, 2, 266, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 271, 3, 2, 2, 2, 270, 264, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 52, 3, 2, 2, 2, 272, 275, 7, 41, 2, 2, 273, 276, 10, 6, 2, 2, 274, 276, 5, 61, 31, 2, 275, 273, 3, 2, 2, 2, 275, 274, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 3, 2, 2, 2, 279, 280, 7, 41, 2, 2, 280, 54, 3, 2, 2, 2, 281, 284, 7, 36, 2, 2, 282, 285, 10, 7, 2, 2, 283, 285, 5, 61, 31, 2, 284, 282, 3, 2, 2, 2, 284, 283, 3, 2, 2, 2, 285, 286, 3, 2, 2, 2, 286, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 289, 7, 36, 2, 2, 289, 56, 3, 2, 2, 2, 290, 291, 7, 41, 2, 2, 291, 292, 7, 41, 2, 2, 292, 58, 3, 2, 2, 2, 293, 294, 7, 36, 2, 2, 294, 295, 7, 36, 2, 2, 295, 60, 3, 2, 2, 2, 296, 297, 7, 94, 2, 2, 297, 298, 9, 8, 2, 2, 298, 62, 3, 2, 2, 2, 299, 301, 9, 9, 2, 2, 300, 299, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 300, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 305, 8, 32, 2, 2, 305, 64, 3, 2, 2, 2, 306, 307, 9, 5, 2, 2, 307, 308, 9, 5, 2, 2, 308, 309, 9, 5, 2, 2, 309, 310, 9, 5, 2, 2, 310, 315, 7, 47, 2, 2, 311, 312, 7, 50, 2, 2, 312, 316, 9, 4, 2, 2, 313, 314, 7, 51, 2, 2, 314, 316, 9, 10, 2, 2, 315, 311, 3, 2, 2, 2, 315, 313, 3, 2, 2, 2, 316, 317, 3, 2, 2, 2, 317, 326, 7, 47, 2, 2, 318, 319, 7, 50, 2, 2, 319, 327, 9, 5, 2, 2, 320, 321, 7, 51, 2, 2, 321, 327, 9, 5, 2, 2, 322, 323, 7, 52, 2, 2, 323, 327, 9, 5, 2, 2, 324, 325, 7, 53, 2, 2, 325, 327, 9, 11, 2, 2, 326, 318, 3, 2, 2, 2, 326, 320, 3, 2, 2, 2, 326, 322, 3, 2, 2, 2, 326, 324, 3, 2, 2, 2, 327, 66, 3, 2, 2, 2, 328, 329, 5, 65, 33, 2, 329, 330, 7, 86, 2, 2, 330, 331, 5, 69, 35, 2, 331, 68, 3, 2, 2, 2, 332, 333, 7, 50, 2, 2, 333, 339, 9, 5, 2, 2, 334, 335, 7, 51, 2, 2, 335, 339, 9, 5, 2, 2, 336, 337, 7, 52, 2, 2, 337, 339, 9, 12, 2, 2, 338, 332, 3, 2, 2, 2, 338, 334, 3, 2, 2, 2, 338, 336, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 341, 7, 60, 2, 2, 341, 342, 9, 13, 2, 2, 342, 343, 9, 5, 2, 2, 343, 344, 7, 60, 2, 2, 344, 345, 9, 13, 2, 2, 345, 352, 9, 5, 2, 2, 346, 348, 7, 48, 2, 2, 347, 349, 9, 5, 2, 2, 348, 347, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 348, 3, 2, 2, 2, 350, 351, 3, 2, 2, 2, 351, 353, 3, 2, 2, 2, 352, 346, 3, 2, 2, 2, 352, 353, 3, 2, 2, 2, 353, 354, 3, 2, 2, 2, 354, 355, 7, 92, 2, 2, 355, 70, 3, 2, 2, 2, 32, 2, 77, 83, 91, 105, 122, 155, 171, 186, 198, 216, 224, 234, 242, 248, 253, 257, 262, 268, 270, 275, 277, 284, 286, 302, 315, 326, 338, 350, 352, 3, 8, 2, 2]
\ No newline at end of file
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.java b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.java
index 651ac4e..295746b 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.java
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.java
@@ -39,9 +39,10 @@ public class CustomConnectorQueryFilterLexer extends Lexer {
new PredictionContextCache();
public static final int
AND=1, OR=2, NOT=3, TRUE=4, FALSE=5, GT=6, GE=7, LT=8, LE=9, EQ=10, NE=11,
- LIKE=12, BETWEEN=13, LPAREN=14, RPAREN=15, NULL=16, IN=17, LIMIT=18, COMMA=19,
- IDENTIFIER=20, POS_INTEGER=21, DECIMAL=22, SINGLE_STRING=23, DOUBLE_STRING=24,
- EMPTY_SINGLE_STRING=25, EMPTY_DOUBLE_STRING=26, WS=27, DATE=28, DATETIME=29;
+ LIKE=12, BETWEEN=13, LPAREN=14, RPAREN=15, NULL=16, IN=17, LIMIT=18, ORDERBY=19,
+ ASC=20, DESC=21, COMMA=22, IDENTIFIER=23, POS_INTEGER=24, DECIMAL=25,
+ SINGLE_STRING=26, DOUBLE_STRING=27, EMPTY_SINGLE_STRING=28, EMPTY_DOUBLE_STRING=29,
+ WS=30, DATE=31, DATETIME=32;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -53,10 +54,10 @@ public class CustomConnectorQueryFilterLexer extends Lexer {
private static String[] makeRuleNames() {
return new String[] {
"AND", "OR", "NOT", "TRUE", "FALSE", "GT", "GE", "LT", "LE", "EQ", "NE",
- "LIKE", "BETWEEN", "LPAREN", "RPAREN", "NULL", "IN", "LIMIT", "COMMA",
- "IDENTIFIER", "POS_INTEGER", "DECIMAL", "SINGLE_STRING", "DOUBLE_STRING",
- "EMPTY_SINGLE_STRING", "EMPTY_DOUBLE_STRING", "STR_ESC", "WS", "DATE",
- "DATETIME", "TIME"
+ "LIKE", "BETWEEN", "LPAREN", "RPAREN", "NULL", "IN", "LIMIT", "ORDERBY",
+ "ASC", "DESC", "COMMA", "IDENTIFIER", "POS_INTEGER", "DECIMAL", "SINGLE_STRING",
+ "DOUBLE_STRING", "EMPTY_SINGLE_STRING", "EMPTY_DOUBLE_STRING", "STR_ESC",
+ "WS", "DATE", "DATETIME", "TIME"
};
}
public static final String[] ruleNames = makeRuleNames();
@@ -64,16 +65,18 @@ private static String[] makeRuleNames() {
private static String[] makeLiteralNames() {
return new String[] {
null, null, null, null, null, null, "'>'", "'>='", "'<'", "'<='", "'='",
- "'!='", null, null, "'('", "')'", "'null'", null, null, "','"
+ "'!='", null, null, "'('", "')'", "'null'", null, null, null, null, null,
+ "','"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, "AND", "OR", "NOT", "TRUE", "FALSE", "GT", "GE", "LT", "LE", "EQ",
- "NE", "LIKE", "BETWEEN", "LPAREN", "RPAREN", "NULL", "IN", "LIMIT", "COMMA",
- "IDENTIFIER", "POS_INTEGER", "DECIMAL", "SINGLE_STRING", "DOUBLE_STRING",
- "EMPTY_SINGLE_STRING", "EMPTY_DOUBLE_STRING", "WS", "DATE", "DATETIME"
+ "NE", "LIKE", "BETWEEN", "LPAREN", "RPAREN", "NULL", "IN", "LIMIT", "ORDERBY",
+ "ASC", "DESC", "COMMA", "IDENTIFIER", "POS_INTEGER", "DECIMAL", "SINGLE_STRING",
+ "DOUBLE_STRING", "EMPTY_SINGLE_STRING", "EMPTY_DOUBLE_STRING", "WS",
+ "DATE", "DATETIME"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -135,112 +138,129 @@ public CustomConnectorQueryFilterLexer(CharStream input) {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\37\u0135\b\1\4\2"+
- "\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+
- "\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
- "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
- "\t\31\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"+
- " \3\2\3\2\3\2\3\2\3\2\3\2\5\2H\n\2\3\3\3\3\3\3\3\3\5\3N\n\3\3\4\3\4\3"+
- "\4\3\4\3\4\3\4\5\4V\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3"+
- "\5\5\5d\n\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3"+
- "\6\5\6u\n\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\13\3\13\3\f\3\f"+
- "\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\5"+
- "\r\u0096\n\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3"+
- "\16\3\16\3\16\5\16\u00a6\n\16\3\17\3\17\3\20\3\20\3\21\3\21\3\21\3\21"+
- "\3\21\3\22\3\22\3\22\3\22\5\22\u00b5\n\22\3\23\3\23\3\23\3\23\3\23\3\23"+
- "\3\23\3\23\3\23\3\23\5\23\u00c1\n\23\3\24\3\24\3\25\3\25\7\25\u00c7\n"+
- "\25\f\25\16\25\u00ca\13\25\3\26\3\26\6\26\u00ce\n\26\r\26\16\26\u00cf"+
- "\3\27\5\27\u00d3\n\27\3\27\6\27\u00d6\n\27\r\27\16\27\u00d7\3\27\3\27"+
- "\6\27\u00dc\n\27\r\27\16\27\u00dd\5\27\u00e0\n\27\3\30\3\30\3\30\6\30"+
- "\u00e5\n\30\r\30\16\30\u00e6\3\30\3\30\3\31\3\31\3\31\6\31\u00ee\n\31"+
- "\r\31\16\31\u00ef\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\33\3\34\3\34\3"+
- "\34\3\35\6\35\u00fe\n\35\r\35\16\35\u00ff\3\35\3\35\3\36\3\36\3\36\3\36"+
- "\3\36\3\36\3\36\3\36\3\36\5\36\u010d\n\36\3\36\3\36\3\36\3\36\3\36\3\36"+
- "\3\36\3\36\3\36\5\36\u0118\n\36\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 "+
- "\5 \u0124\n \3 \3 \3 \3 \3 \3 \3 \3 \6 \u012e\n \r \16 \u012f\5 \u0132"+
- "\n \3 \3 \2\2!\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16"+
- "\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34"+
- "\67\29\35;\36=\37?\2\3\2\16\4\2C\\c|\7\2/\60\62;C\\aac|\3\2\63;\3\2\62"+
- ";\3\2))\3\2$$\b\2$$))^^ppttvv\5\2\13\f\16\17\"\"\3\2\62\64\3\2\62\63\3"+
- "\2\62\66\3\2\62\67\2\u0150\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2"+
- "\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2"+
- "\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3"+
- "\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2"+
- "\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\29\3"+
- "\2\2\2\2;\3\2\2\2\2=\3\2\2\2\3G\3\2\2\2\5M\3\2\2\2\7U\3\2\2\2\tc\3\2\2"+
- "\2\13t\3\2\2\2\rv\3\2\2\2\17x\3\2\2\2\21{\3\2\2\2\23}\3\2\2\2\25\u0080"+
- "\3\2\2\2\27\u0082\3\2\2\2\31\u0095\3\2\2\2\33\u00a5\3\2\2\2\35\u00a7\3"+
- "\2\2\2\37\u00a9\3\2\2\2!\u00ab\3\2\2\2#\u00b4\3\2\2\2%\u00c0\3\2\2\2\'"+
- "\u00c2\3\2\2\2)\u00c4\3\2\2\2+\u00cb\3\2\2\2-\u00d2\3\2\2\2/\u00e1\3\2"+
- "\2\2\61\u00ea\3\2\2\2\63\u00f3\3\2\2\2\65\u00f6\3\2\2\2\67\u00f9\3\2\2"+
- "\29\u00fd\3\2\2\2;\u0103\3\2\2\2=\u0119\3\2\2\2?\u0123\3\2\2\2AB\7C\2"+
- "\2BC\7P\2\2CH\7F\2\2DE\7c\2\2EF\7p\2\2FH\7f\2\2GA\3\2\2\2GD\3\2\2\2H\4"+
- "\3\2\2\2IJ\7Q\2\2JN\7T\2\2KL\7q\2\2LN\7t\2\2MI\3\2\2\2MK\3\2\2\2N\6\3"+
- "\2\2\2OP\7P\2\2PQ\7Q\2\2QV\7V\2\2RS\7p\2\2ST\7q\2\2TV\7v\2\2UO\3\2\2\2"+
- "UR\3\2\2\2V\b\3\2\2\2WX\7V\2\2XY\7T\2\2YZ\7W\2\2Zd\7G\2\2[\\\7V\2\2\\"+
- "]\7t\2\2]^\7w\2\2^d\7g\2\2_`\7v\2\2`a\7t\2\2ab\7w\2\2bd\7g\2\2cW\3\2\2"+
- "\2c[\3\2\2\2c_\3\2\2\2d\n\3\2\2\2ef\7H\2\2fg\7C\2\2gh\7N\2\2hi\7U\2\2"+
- "iu\7G\2\2jk\7H\2\2kl\7c\2\2lm\7n\2\2mn\7u\2\2nu\7g\2\2op\7h\2\2pq\7c\2"+
- "\2qr\7n\2\2rs\7u\2\2su\7g\2\2te\3\2\2\2tj\3\2\2\2to\3\2\2\2u\f\3\2\2\2"+
- "vw\7@\2\2w\16\3\2\2\2xy\7@\2\2yz\7?\2\2z\20\3\2\2\2{|\7>\2\2|\22\3\2\2"+
- "\2}~\7>\2\2~\177\7?\2\2\177\24\3\2\2\2\u0080\u0081\7?\2\2\u0081\26\3\2"+
- "\2\2\u0082\u0083\7#\2\2\u0083\u0084\7?\2\2\u0084\30\3\2\2\2\u0085\u0086"+
- "\7E\2\2\u0086\u0087\7Q\2\2\u0087\u0088\7P\2\2\u0088\u0089\7V\2\2\u0089"+
- "\u008a\7C\2\2\u008a\u008b\7K\2\2\u008b\u008c\7P\2\2\u008c\u0096\7U\2\2"+
- "\u008d\u008e\7e\2\2\u008e\u008f\7q\2\2\u008f\u0090\7p\2\2\u0090\u0091"+
- "\7v\2\2\u0091\u0092\7c\2\2\u0092\u0093\7k\2\2\u0093\u0094\7p\2\2\u0094"+
- "\u0096\7u\2\2\u0095\u0085\3\2\2\2\u0095\u008d\3\2\2\2\u0096\32\3\2\2\2"+
- "\u0097\u0098\7D\2\2\u0098\u0099\7G\2\2\u0099\u009a\7V\2\2\u009a\u009b"+
- "\7Y\2\2\u009b\u009c\7G\2\2\u009c\u009d\7G\2\2\u009d\u00a6\7P\2\2\u009e"+
- "\u009f\7d\2\2\u009f\u00a0\7g\2\2\u00a0\u00a1\7v\2\2\u00a1\u00a2\7y\2\2"+
- "\u00a2\u00a3\7g\2\2\u00a3\u00a4\7g\2\2\u00a4\u00a6\7p\2\2\u00a5\u0097"+
- "\3\2\2\2\u00a5\u009e\3\2\2\2\u00a6\34\3\2\2\2\u00a7\u00a8\7*\2\2\u00a8"+
- "\36\3\2\2\2\u00a9\u00aa\7+\2\2\u00aa \3\2\2\2\u00ab\u00ac\7p\2\2\u00ac"+
- "\u00ad\7w\2\2\u00ad\u00ae\7n\2\2\u00ae\u00af\7n\2\2\u00af\"\3\2\2\2\u00b0"+
- "\u00b1\7K\2\2\u00b1\u00b5\7P\2\2\u00b2\u00b3\7k\2\2\u00b3\u00b5\7p\2\2"+
- "\u00b4\u00b0\3\2\2\2\u00b4\u00b2\3\2\2\2\u00b5$\3\2\2\2\u00b6\u00b7\7"+
- "N\2\2\u00b7\u00b8\7K\2\2\u00b8\u00b9\7O\2\2\u00b9\u00ba\7K\2\2\u00ba\u00c1"+
- "\7V\2\2\u00bb\u00bc\7n\2\2\u00bc\u00bd\7k\2\2\u00bd\u00be\7o\2\2\u00be"+
- "\u00bf\7k\2\2\u00bf\u00c1\7v\2\2\u00c0\u00b6\3\2\2\2\u00c0\u00bb\3\2\2"+
- "\2\u00c1&\3\2\2\2\u00c2\u00c3\7.\2\2\u00c3(\3\2\2\2\u00c4\u00c8\t\2\2"+
- "\2\u00c5\u00c7\t\3\2\2\u00c6\u00c5\3\2\2\2\u00c7\u00ca\3\2\2\2\u00c8\u00c6"+
- "\3\2\2\2\u00c8\u00c9\3\2\2\2\u00c9*\3\2\2\2\u00ca\u00c8\3\2\2\2\u00cb"+
- "\u00cd\t\4\2\2\u00cc\u00ce\t\5\2\2\u00cd\u00cc\3\2\2\2\u00ce\u00cf\3\2"+
- "\2\2\u00cf\u00cd\3\2\2\2\u00cf\u00d0\3\2\2\2\u00d0,\3\2\2\2\u00d1\u00d3"+
- "\7/\2\2\u00d2\u00d1\3\2\2\2\u00d2\u00d3\3\2\2\2\u00d3\u00d5\3\2\2\2\u00d4"+
- "\u00d6\t\5\2\2\u00d5\u00d4\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00d5\3\2"+
- "\2\2\u00d7\u00d8\3\2\2\2\u00d8\u00df\3\2\2\2\u00d9\u00db\7\60\2\2\u00da"+
- "\u00dc\t\5\2\2\u00db\u00da\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00db\3\2"+
- "\2\2\u00dd\u00de\3\2\2\2\u00de\u00e0\3\2\2\2\u00df\u00d9\3\2\2\2\u00df"+
- "\u00e0\3\2\2\2\u00e0.\3\2\2\2\u00e1\u00e4\7)\2\2\u00e2\u00e5\n\6\2\2\u00e3"+
- "\u00e5\5\67\34\2\u00e4\u00e2\3\2\2\2\u00e4\u00e3\3\2\2\2\u00e5\u00e6\3"+
- "\2\2\2\u00e6\u00e4\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7\u00e8\3\2\2\2\u00e8"+
- "\u00e9\7)\2\2\u00e9\60\3\2\2\2\u00ea\u00ed\7$\2\2\u00eb\u00ee\n\7\2\2"+
- "\u00ec\u00ee\5\67\34\2\u00ed\u00eb\3\2\2\2\u00ed\u00ec\3\2\2\2\u00ee\u00ef"+
- "\3\2\2\2\u00ef\u00ed\3\2\2\2\u00ef\u00f0\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1"+
- "\u00f2\7$\2\2\u00f2\62\3\2\2\2\u00f3\u00f4\7)\2\2\u00f4\u00f5\7)\2\2\u00f5"+
- "\64\3\2\2\2\u00f6\u00f7\7$\2\2\u00f7\u00f8\7$\2\2\u00f8\66\3\2\2\2\u00f9"+
- "\u00fa\7^\2\2\u00fa\u00fb\t\b\2\2\u00fb8\3\2\2\2\u00fc\u00fe\t\t\2\2\u00fd"+
- "\u00fc\3\2\2\2\u00fe\u00ff\3\2\2\2\u00ff\u00fd\3\2\2\2\u00ff\u0100\3\2"+
- "\2\2\u0100\u0101\3\2\2\2\u0101\u0102\b\35\2\2\u0102:\3\2\2\2\u0103\u0104"+
- "\t\5\2\2\u0104\u0105\t\5\2\2\u0105\u0106\t\5\2\2\u0106\u0107\t\5\2\2\u0107"+
- "\u010c\7/\2\2\u0108\u0109\7\62\2\2\u0109\u010d\t\4\2\2\u010a\u010b\7\63"+
- "\2\2\u010b\u010d\t\n\2\2\u010c\u0108\3\2\2\2\u010c\u010a\3\2\2\2\u010d"+
- "\u010e\3\2\2\2\u010e\u0117\7/\2\2\u010f\u0110\7\62\2\2\u0110\u0118\t\5"+
- "\2\2\u0111\u0112\7\63\2\2\u0112\u0118\t\5\2\2\u0113\u0114\7\64\2\2\u0114"+
- "\u0118\t\5\2\2\u0115\u0116\7\65\2\2\u0116\u0118\t\13\2\2\u0117\u010f\3"+
- "\2\2\2\u0117\u0111\3\2\2\2\u0117\u0113\3\2\2\2\u0117\u0115\3\2\2\2\u0118"+
- "<\3\2\2\2\u0119\u011a\5;\36\2\u011a\u011b\7V\2\2\u011b\u011c\5? \2\u011c"+
- ">\3\2\2\2\u011d\u011e\7\62\2\2\u011e\u0124\t\5\2\2\u011f\u0120\7\63\2"+
- "\2\u0120\u0124\t\5\2\2\u0121\u0122\7\64\2\2\u0122\u0124\t\f\2\2\u0123"+
- "\u011d\3\2\2\2\u0123\u011f\3\2\2\2\u0123\u0121\3\2\2\2\u0124\u0125\3\2"+
- "\2\2\u0125\u0126\7<\2\2\u0126\u0127\t\r\2\2\u0127\u0128\t\5\2\2\u0128"+
- "\u0129\7<\2\2\u0129\u012a\t\r\2\2\u012a\u0131\t\5\2\2\u012b\u012d\7\60"+
- "\2\2\u012c\u012e\t\5\2\2\u012d\u012c\3\2\2\2\u012e\u012f\3\2\2\2\u012f"+
- "\u012d\3\2\2\2\u012f\u0130\3\2\2\2\u0130\u0132\3\2\2\2\u0131\u012b\3\2"+
- "\2\2\u0131\u0132\3\2\2\2\u0132\u0133\3\2\2\2\u0133\u0134\7\\\2\2\u0134"+
- "@\3\2\2\2\34\2GMUct\u0095\u00a5\u00b4\u00c0\u00c8\u00cf\u00d2\u00d7\u00dd"+
- "\u00df\u00e4\u00e6\u00ed\u00ef\u00ff\u010c\u0117\u0123\u012f\u0131\3\b"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\"\u0164\b\1\4\2\t"+
+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
+ "\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#\3\2\3\2\3\2\3\2\3\2\3\2\5\2N\n\2\3\3\3\3\3\3\3\3\5\3"+
+ "T\n\3\3\4\3\4\3\4\3\4\3\4\3\4\5\4\\\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3"+
+ "\5\3\5\3\5\3\5\3\5\5\5j\n\5\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3\6\3"+
+ "\6\3\6\3\6\3\6\3\6\5\6{\n\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3"+
+ "\13\3\13\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3\r\3"+
+ "\r\3\r\3\r\3\r\5\r\u009c\n\r\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3"+
+ "\16\3\16\3\16\3\16\3\16\3\16\5\16\u00ac\n\16\3\17\3\17\3\20\3\20\3\21"+
+ "\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\5\22\u00bb\n\22\3\23\3\23\3\23"+
+ "\3\23\3\23\3\23\3\23\3\23\3\23\3\23\5\23\u00c7\n\23\3\24\3\24\3\24\3\24"+
+ "\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u00d9"+
+ "\n\24\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u00e1\n\25\3\26\3\26\3\26\3\26"+
+ "\3\26\3\26\3\26\3\26\5\26\u00eb\n\26\3\27\3\27\3\30\3\30\7\30\u00f1\n"+
+ "\30\f\30\16\30\u00f4\13\30\3\31\6\31\u00f7\n\31\r\31\16\31\u00f8\3\31"+
+ "\7\31\u00fc\n\31\f\31\16\31\u00ff\13\31\3\32\5\32\u0102\n\32\3\32\6\32"+
+ "\u0105\n\32\r\32\16\32\u0106\3\32\3\32\6\32\u010b\n\32\r\32\16\32\u010c"+
+ "\5\32\u010f\n\32\3\33\3\33\3\33\6\33\u0114\n\33\r\33\16\33\u0115\3\33"+
+ "\3\33\3\34\3\34\3\34\6\34\u011d\n\34\r\34\16\34\u011e\3\34\3\34\3\35\3"+
+ "\35\3\35\3\36\3\36\3\36\3\37\3\37\3\37\3 \6 \u012d\n \r \16 \u012e\3 "+
+ "\3 \3!\3!\3!\3!\3!\3!\3!\3!\3!\5!\u013c\n!\3!\3!\3!\3!\3!\3!\3!\3!\3!"+
+ "\5!\u0147\n!\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\5#\u0153\n#\3#\3#\3#\3"+
+ "#\3#\3#\3#\3#\6#\u015d\n#\r#\16#\u015e\5#\u0161\n#\3#\3#\2\2$\3\3\5\4"+
+ "\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22"+
+ "#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37=\2? A!C"+
+ "\"E\2\3\2\16\4\2C\\c|\7\2/\60\62;C\\aac|\3\2\63;\3\2\62;\3\2))\3\2$$\b"+
+ "\2$$))^^ppttvv\5\2\13\f\16\17\"\"\3\2\62\64\3\2\62\63\3\2\62\66\3\2\62"+
+ "\67\2\u0183\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2"+
+ "\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27"+
+ "\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2"+
+ "\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2"+
+ "\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2"+
+ "\2\2\2;\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\3M\3\2\2\2\5S\3\2\2\2"+
+ "\7[\3\2\2\2\ti\3\2\2\2\13z\3\2\2\2\r|\3\2\2\2\17~\3\2\2\2\21\u0081\3\2"+
+ "\2\2\23\u0083\3\2\2\2\25\u0086\3\2\2\2\27\u0088\3\2\2\2\31\u009b\3\2\2"+
+ "\2\33\u00ab\3\2\2\2\35\u00ad\3\2\2\2\37\u00af\3\2\2\2!\u00b1\3\2\2\2#"+
+ "\u00ba\3\2\2\2%\u00c6\3\2\2\2\'\u00d8\3\2\2\2)\u00e0\3\2\2\2+\u00ea\3"+
+ "\2\2\2-\u00ec\3\2\2\2/\u00ee\3\2\2\2\61\u00f6\3\2\2\2\63\u0101\3\2\2\2"+
+ "\65\u0110\3\2\2\2\67\u0119\3\2\2\29\u0122\3\2\2\2;\u0125\3\2\2\2=\u0128"+
+ "\3\2\2\2?\u012c\3\2\2\2A\u0132\3\2\2\2C\u0148\3\2\2\2E\u0152\3\2\2\2G"+
+ "H\7C\2\2HI\7P\2\2IN\7F\2\2JK\7c\2\2KL\7p\2\2LN\7f\2\2MG\3\2\2\2MJ\3\2"+
+ "\2\2N\4\3\2\2\2OP\7Q\2\2PT\7T\2\2QR\7q\2\2RT\7t\2\2SO\3\2\2\2SQ\3\2\2"+
+ "\2T\6\3\2\2\2UV\7P\2\2VW\7Q\2\2W\\\7V\2\2XY\7p\2\2YZ\7q\2\2Z\\\7v\2\2"+
+ "[U\3\2\2\2[X\3\2\2\2\\\b\3\2\2\2]^\7V\2\2^_\7T\2\2_`\7W\2\2`j\7G\2\2a"+
+ "b\7V\2\2bc\7t\2\2cd\7w\2\2dj\7g\2\2ef\7v\2\2fg\7t\2\2gh\7w\2\2hj\7g\2"+
+ "\2i]\3\2\2\2ia\3\2\2\2ie\3\2\2\2j\n\3\2\2\2kl\7H\2\2lm\7C\2\2mn\7N\2\2"+
+ "no\7U\2\2o{\7G\2\2pq\7H\2\2qr\7c\2\2rs\7n\2\2st\7u\2\2t{\7g\2\2uv\7h\2"+
+ "\2vw\7c\2\2wx\7n\2\2xy\7u\2\2y{\7g\2\2zk\3\2\2\2zp\3\2\2\2zu\3\2\2\2{"+
+ "\f\3\2\2\2|}\7@\2\2}\16\3\2\2\2~\177\7@\2\2\177\u0080\7?\2\2\u0080\20"+
+ "\3\2\2\2\u0081\u0082\7>\2\2\u0082\22\3\2\2\2\u0083\u0084\7>\2\2\u0084"+
+ "\u0085\7?\2\2\u0085\24\3\2\2\2\u0086\u0087\7?\2\2\u0087\26\3\2\2\2\u0088"+
+ "\u0089\7#\2\2\u0089\u008a\7?\2\2\u008a\30\3\2\2\2\u008b\u008c\7E\2\2\u008c"+
+ "\u008d\7Q\2\2\u008d\u008e\7P\2\2\u008e\u008f\7V\2\2\u008f\u0090\7C\2\2"+
+ "\u0090\u0091\7K\2\2\u0091\u0092\7P\2\2\u0092\u009c\7U\2\2\u0093\u0094"+
+ "\7e\2\2\u0094\u0095\7q\2\2\u0095\u0096\7p\2\2\u0096\u0097\7v\2\2\u0097"+
+ "\u0098\7c\2\2\u0098\u0099\7k\2\2\u0099\u009a\7p\2\2\u009a\u009c\7u\2\2"+
+ "\u009b\u008b\3\2\2\2\u009b\u0093\3\2\2\2\u009c\32\3\2\2\2\u009d\u009e"+
+ "\7D\2\2\u009e\u009f\7G\2\2\u009f\u00a0\7V\2\2\u00a0\u00a1\7Y\2\2\u00a1"+
+ "\u00a2\7G\2\2\u00a2\u00a3\7G\2\2\u00a3\u00ac\7P\2\2\u00a4\u00a5\7d\2\2"+
+ "\u00a5\u00a6\7g\2\2\u00a6\u00a7\7v\2\2\u00a7\u00a8\7y\2\2\u00a8\u00a9"+
+ "\7g\2\2\u00a9\u00aa\7g\2\2\u00aa\u00ac\7p\2\2\u00ab\u009d\3\2\2\2\u00ab"+
+ "\u00a4\3\2\2\2\u00ac\34\3\2\2\2\u00ad\u00ae\7*\2\2\u00ae\36\3\2\2\2\u00af"+
+ "\u00b0\7+\2\2\u00b0 \3\2\2\2\u00b1\u00b2\7p\2\2\u00b2\u00b3\7w\2\2\u00b3"+
+ "\u00b4\7n\2\2\u00b4\u00b5\7n\2\2\u00b5\"\3\2\2\2\u00b6\u00b7\7K\2\2\u00b7"+
+ "\u00bb\7P\2\2\u00b8\u00b9\7k\2\2\u00b9\u00bb\7p\2\2\u00ba\u00b6\3\2\2"+
+ "\2\u00ba\u00b8\3\2\2\2\u00bb$\3\2\2\2\u00bc\u00bd\7N\2\2\u00bd\u00be\7"+
+ "K\2\2\u00be\u00bf\7O\2\2\u00bf\u00c0\7K\2\2\u00c0\u00c7\7V\2\2\u00c1\u00c2"+
+ "\7n\2\2\u00c2\u00c3\7k\2\2\u00c3\u00c4\7o\2\2\u00c4\u00c5\7k\2\2\u00c5"+
+ "\u00c7\7v\2\2\u00c6\u00bc\3\2\2\2\u00c6\u00c1\3\2\2\2\u00c7&\3\2\2\2\u00c8"+
+ "\u00c9\7Q\2\2\u00c9\u00ca\7T\2\2\u00ca\u00cb\7F\2\2\u00cb\u00cc\7G\2\2"+
+ "\u00cc\u00cd\7T\2\2\u00cd\u00ce\7\"\2\2\u00ce\u00cf\7D\2\2\u00cf\u00d9"+
+ "\7[\2\2\u00d0\u00d1\7q\2\2\u00d1\u00d2\7t\2\2\u00d2\u00d3\7f\2\2\u00d3"+
+ "\u00d4\7g\2\2\u00d4\u00d5\7t\2\2\u00d5\u00d6\7\"\2\2\u00d6\u00d7\7d\2"+
+ "\2\u00d7\u00d9\7{\2\2\u00d8\u00c8\3\2\2\2\u00d8\u00d0\3\2\2\2\u00d9(\3"+
+ "\2\2\2\u00da\u00db\7C\2\2\u00db\u00dc\7U\2\2\u00dc\u00e1\7E\2\2\u00dd"+
+ "\u00de\7c\2\2\u00de\u00df\7u\2\2\u00df\u00e1\7e\2\2\u00e0\u00da\3\2\2"+
+ "\2\u00e0\u00dd\3\2\2\2\u00e1*\3\2\2\2\u00e2\u00e3\7F\2\2\u00e3\u00e4\7"+
+ "G\2\2\u00e4\u00e5\7U\2\2\u00e5\u00eb\7E\2\2\u00e6\u00e7\7f\2\2\u00e7\u00e8"+
+ "\7g\2\2\u00e8\u00e9\7u\2\2\u00e9\u00eb\7e\2\2\u00ea\u00e2\3\2\2\2\u00ea"+
+ "\u00e6\3\2\2\2\u00eb,\3\2\2\2\u00ec\u00ed\7.\2\2\u00ed.\3\2\2\2\u00ee"+
+ "\u00f2\t\2\2\2\u00ef\u00f1\t\3\2\2\u00f0\u00ef\3\2\2\2\u00f1\u00f4\3\2"+
+ "\2\2\u00f2\u00f0\3\2\2\2\u00f2\u00f3\3\2\2\2\u00f3\60\3\2\2\2\u00f4\u00f2"+
+ "\3\2\2\2\u00f5\u00f7\t\4\2\2\u00f6\u00f5\3\2\2\2\u00f7\u00f8\3\2\2\2\u00f8"+
+ "\u00f6\3\2\2\2\u00f8\u00f9\3\2\2\2\u00f9\u00fd\3\2\2\2\u00fa\u00fc\t\5"+
+ "\2\2\u00fb\u00fa\3\2\2\2\u00fc\u00ff\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd"+
+ "\u00fe\3\2\2\2\u00fe\62\3\2\2\2\u00ff\u00fd\3\2\2\2\u0100\u0102\7/\2\2"+
+ "\u0101\u0100\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0104\3\2\2\2\u0103\u0105"+
+ "\t\5\2\2\u0104\u0103\3\2\2\2\u0105\u0106\3\2\2\2\u0106\u0104\3\2\2\2\u0106"+
+ "\u0107\3\2\2\2\u0107\u010e\3\2\2\2\u0108\u010a\7\60\2\2\u0109\u010b\t"+
+ "\5\2\2\u010a\u0109\3\2\2\2\u010b\u010c\3\2\2\2\u010c\u010a\3\2\2\2\u010c"+
+ "\u010d\3\2\2\2\u010d\u010f\3\2\2\2\u010e\u0108\3\2\2\2\u010e\u010f\3\2"+
+ "\2\2\u010f\64\3\2\2\2\u0110\u0113\7)\2\2\u0111\u0114\n\6\2\2\u0112\u0114"+
+ "\5=\37\2\u0113\u0111\3\2\2\2\u0113\u0112\3\2\2\2\u0114\u0115\3\2\2\2\u0115"+
+ "\u0113\3\2\2\2\u0115\u0116\3\2\2\2\u0116\u0117\3\2\2\2\u0117\u0118\7)"+
+ "\2\2\u0118\66\3\2\2\2\u0119\u011c\7$\2\2\u011a\u011d\n\7\2\2\u011b\u011d"+
+ "\5=\37\2\u011c\u011a\3\2\2\2\u011c\u011b\3\2\2\2\u011d\u011e\3\2\2\2\u011e"+
+ "\u011c\3\2\2\2\u011e\u011f\3\2\2\2\u011f\u0120\3\2\2\2\u0120\u0121\7$"+
+ "\2\2\u01218\3\2\2\2\u0122\u0123\7)\2\2\u0123\u0124\7)\2\2\u0124:\3\2\2"+
+ "\2\u0125\u0126\7$\2\2\u0126\u0127\7$\2\2\u0127<\3\2\2\2\u0128\u0129\7"+
+ "^\2\2\u0129\u012a\t\b\2\2\u012a>\3\2\2\2\u012b\u012d\t\t\2\2\u012c\u012b"+
+ "\3\2\2\2\u012d\u012e\3\2\2\2\u012e\u012c\3\2\2\2\u012e\u012f\3\2\2\2\u012f"+
+ "\u0130\3\2\2\2\u0130\u0131\b \2\2\u0131@\3\2\2\2\u0132\u0133\t\5\2\2\u0133"+
+ "\u0134\t\5\2\2\u0134\u0135\t\5\2\2\u0135\u0136\t\5\2\2\u0136\u013b\7/"+
+ "\2\2\u0137\u0138\7\62\2\2\u0138\u013c\t\4\2\2\u0139\u013a\7\63\2\2\u013a"+
+ "\u013c\t\n\2\2\u013b\u0137\3\2\2\2\u013b\u0139\3\2\2\2\u013c\u013d\3\2"+
+ "\2\2\u013d\u0146\7/\2\2\u013e\u013f\7\62\2\2\u013f\u0147\t\5\2\2\u0140"+
+ "\u0141\7\63\2\2\u0141\u0147\t\5\2\2\u0142\u0143\7\64\2\2\u0143\u0147\t"+
+ "\5\2\2\u0144\u0145\7\65\2\2\u0145\u0147\t\13\2\2\u0146\u013e\3\2\2\2\u0146"+
+ "\u0140\3\2\2\2\u0146\u0142\3\2\2\2\u0146\u0144\3\2\2\2\u0147B\3\2\2\2"+
+ "\u0148\u0149\5A!\2\u0149\u014a\7V\2\2\u014a\u014b\5E#\2\u014bD\3\2\2\2"+
+ "\u014c\u014d\7\62\2\2\u014d\u0153\t\5\2\2\u014e\u014f\7\63\2\2\u014f\u0153"+
+ "\t\5\2\2\u0150\u0151\7\64\2\2\u0151\u0153\t\f\2\2\u0152\u014c\3\2\2\2"+
+ "\u0152\u014e\3\2\2\2\u0152\u0150\3\2\2\2\u0153\u0154\3\2\2\2\u0154\u0155"+
+ "\7<\2\2\u0155\u0156\t\r\2\2\u0156\u0157\t\5\2\2\u0157\u0158\7<\2\2\u0158"+
+ "\u0159\t\r\2\2\u0159\u0160\t\5\2\2\u015a\u015c\7\60\2\2\u015b\u015d\t"+
+ "\5\2\2\u015c\u015b\3\2\2\2\u015d\u015e\3\2\2\2\u015e\u015c\3\2\2\2\u015e"+
+ "\u015f\3\2\2\2\u015f\u0161\3\2\2\2\u0160\u015a\3\2\2\2\u0160\u0161\3\2"+
+ "\2\2\u0161\u0162\3\2\2\2\u0162\u0163\7\\\2\2\u0163F\3\2\2\2 \2MS[iz\u009b"+
+ "\u00ab\u00ba\u00c6\u00d8\u00e0\u00ea\u00f2\u00f8\u00fd\u0101\u0106\u010c"+
+ "\u010e\u0113\u0115\u011c\u011e\u012e\u013b\u0146\u0152\u015e\u0160\3\b"+
"\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.tokens b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.tokens
index a855399..a1bc8bf 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.tokens
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterLexer.tokens
@@ -16,17 +16,20 @@ RPAREN=15
NULL=16
IN=17
LIMIT=18
-COMMA=19
-IDENTIFIER=20
-POS_INTEGER=21
-DECIMAL=22
-SINGLE_STRING=23
-DOUBLE_STRING=24
-EMPTY_SINGLE_STRING=25
-EMPTY_DOUBLE_STRING=26
-WS=27
-DATE=28
-DATETIME=29
+ORDERBY=19
+ASC=20
+DESC=21
+COMMA=22
+IDENTIFIER=23
+POS_INTEGER=24
+DECIMAL=25
+SINGLE_STRING=26
+DOUBLE_STRING=27
+EMPTY_SINGLE_STRING=28
+EMPTY_DOUBLE_STRING=29
+WS=30
+DATE=31
+DATETIME=32
'>'=6
'>='=7
'<'=8
@@ -36,4 +39,4 @@ DATETIME=29
'('=14
')'=15
'null'=16
-','=19
+','=22
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.interp b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.interp
index 47ed56b..b4da66e 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.interp
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.interp
@@ -18,6 +18,9 @@ null
'null'
null
null
+null
+null
+null
','
null
null
@@ -50,6 +53,9 @@ RPAREN
NULL
IN
LIMIT
+ORDERBY
+ASC
+DESC
COMMA
IDENTIFIER
POS_INTEGER
@@ -64,7 +70,8 @@ DATETIME
rule names:
queryfilter
-limitexpression
+limitexpr
+orderbyexpr
expression
gtComparator
geComparator
@@ -80,10 +87,12 @@ bool
identifier
in
limit
+orderby
+order
string
value
count
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 31, 178, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 49, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 58, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 117, 10, 4, 12, 4, 14, 4, 120, 11, 4, 3, 4, 3, 4, 5, 4, 124, 10, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 134, 10, 4, 12, 4, 14, 4, 137, 11, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 174, 10, 20, 3, 21, 3, 21, 3, 21, 2, 3, 6, 22, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 2, 4, 3, 2, 6, 7, 4, 2, 18, 18, 25, 28, 2, 180, 2, 48, 3, 2, 2, 2, 4, 57, 3, 2, 2, 2, 6, 123, 3, 2, 2, 2, 8, 138, 3, 2, 2, 2, 10, 140, 3, 2, 2, 2, 12, 142, 3, 2, 2, 2, 14, 144, 3, 2, 2, 2, 16, 146, 3, 2, 2, 2, 18, 148, 3, 2, 2, 2, 20, 150, 3, 2, 2, 2, 22, 152, 3, 2, 2, 2, 24, 154, 3, 2, 2, 2, 26, 156, 3, 2, 2, 2, 28, 158, 3, 2, 2, 2, 30, 160, 3, 2, 2, 2, 32, 162, 3, 2, 2, 2, 34, 164, 3, 2, 2, 2, 36, 166, 3, 2, 2, 2, 38, 173, 3, 2, 2, 2, 40, 175, 3, 2, 2, 2, 42, 43, 5, 6, 4, 2, 43, 44, 7, 2, 2, 3, 44, 49, 3, 2, 2, 2, 45, 46, 5, 4, 3, 2, 46, 47, 7, 2, 2, 3, 47, 49, 3, 2, 2, 2, 48, 42, 3, 2, 2, 2, 48, 45, 3, 2, 2, 2, 49, 3, 3, 2, 2, 2, 50, 51, 5, 34, 18, 2, 51, 52, 5, 40, 21, 2, 52, 58, 3, 2, 2, 2, 53, 54, 5, 6, 4, 2, 54, 55, 5, 34, 18, 2, 55, 56, 5, 40, 21, 2, 56, 58, 3, 2, 2, 2, 57, 50, 3, 2, 2, 2, 57, 53, 3, 2, 2, 2, 58, 5, 3, 2, 2, 2, 59, 60, 8, 4, 1, 2, 60, 61, 7, 16, 2, 2, 61, 62, 5, 6, 4, 2, 62, 63, 7, 17, 2, 2, 63, 124, 3, 2, 2, 2, 64, 65, 7, 5, 2, 2, 65, 124, 5, 6, 4, 18, 66, 67, 5, 30, 16, 2, 67, 68, 5, 8, 5, 2, 68, 69, 5, 38, 20, 2, 69, 124, 3, 2, 2, 2, 70, 71, 5, 30, 16, 2, 71, 72, 5, 10, 6, 2, 72, 73, 5, 38, 20, 2, 73, 124, 3, 2, 2, 2, 74, 75, 5, 30, 16, 2, 75, 76, 5, 12, 7, 2, 76, 77, 5, 38, 20, 2, 77, 124, 3, 2, 2, 2, 78, 79, 5, 30, 16, 2, 79, 80, 5, 14, 8, 2, 80, 81, 5, 38, 20, 2, 81, 124, 3, 2, 2, 2, 82, 83, 5, 30, 16, 2, 83, 84, 5, 16, 9, 2, 84, 85, 5, 38, 20, 2, 85, 124, 3, 2, 2, 2, 86, 87, 5, 30, 16, 2, 87, 88, 5, 16, 9, 2, 88, 89, 5, 28, 15, 2, 89, 124, 3, 2, 2, 2, 90, 91, 5, 30, 16, 2, 91, 92, 5, 18, 10, 2, 92, 93, 5, 38, 20, 2, 93, 124, 3, 2, 2, 2, 94, 95, 5, 30, 16, 2, 95, 96, 5, 18, 10, 2, 96, 97, 5, 28, 15, 2, 97, 124, 3, 2, 2, 2, 98, 99, 5, 30, 16, 2, 99, 100, 5, 20, 11, 2, 100, 101, 5, 38, 20, 2, 101, 124, 3, 2, 2, 2, 102, 103, 5, 30, 16, 2, 103, 104, 5, 22, 12, 2, 104, 105, 5, 38, 20, 2, 105, 106, 5, 24, 13, 2, 106, 107, 5, 38, 20, 2, 107, 124, 3, 2, 2, 2, 108, 124, 5, 30, 16, 2, 109, 124, 5, 38, 20, 2, 110, 111, 5, 30, 16, 2, 111, 112, 5, 32, 17, 2, 112, 113, 7, 16, 2, 2, 113, 118, 5, 38, 20, 2, 114, 115, 7, 21, 2, 2, 115, 117, 5, 38, 20, 2, 116, 114, 3, 2, 2, 2, 117, 120, 3, 2, 2, 2, 118, 116, 3, 2, 2, 2, 118, 119, 3, 2, 2, 2, 119, 121, 3, 2, 2, 2, 120, 118, 3, 2, 2, 2, 121, 122, 7, 17, 2, 2, 122, 124, 3, 2, 2, 2, 123, 59, 3, 2, 2, 2, 123, 64, 3, 2, 2, 2, 123, 66, 3, 2, 2, 2, 123, 70, 3, 2, 2, 2, 123, 74, 3, 2, 2, 2, 123, 78, 3, 2, 2, 2, 123, 82, 3, 2, 2, 2, 123, 86, 3, 2, 2, 2, 123, 90, 3, 2, 2, 2, 123, 94, 3, 2, 2, 2, 123, 98, 3, 2, 2, 2, 123, 102, 3, 2, 2, 2, 123, 108, 3, 2, 2, 2, 123, 109, 3, 2, 2, 2, 123, 110, 3, 2, 2, 2, 124, 135, 3, 2, 2, 2, 125, 126, 12, 17, 2, 2, 126, 127, 5, 24, 13, 2, 127, 128, 5, 6, 4, 18, 128, 134, 3, 2, 2, 2, 129, 130, 12, 16, 2, 2, 130, 131, 5, 26, 14, 2, 131, 132, 5, 6, 4, 17, 132, 134, 3, 2, 2, 2, 133, 125, 3, 2, 2, 2, 133, 129, 3, 2, 2, 2, 134, 137, 3, 2, 2, 2, 135, 133, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 7, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 138, 139, 7, 8, 2, 2, 139, 9, 3, 2, 2, 2, 140, 141, 7, 9, 2, 2, 141, 11, 3, 2, 2, 2, 142, 143, 7, 10, 2, 2, 143, 13, 3, 2, 2, 2, 144, 145, 7, 11, 2, 2, 145, 15, 3, 2, 2, 2, 146, 147, 7, 12, 2, 2, 147, 17, 3, 2, 2, 2, 148, 149, 7, 13, 2, 2, 149, 19, 3, 2, 2, 2, 150, 151, 7, 14, 2, 2, 151, 21, 3, 2, 2, 2, 152, 153, 7, 15, 2, 2, 153, 23, 3, 2, 2, 2, 154, 155, 7, 3, 2, 2, 155, 25, 3, 2, 2, 2, 156, 157, 7, 4, 2, 2, 157, 27, 3, 2, 2, 2, 158, 159, 9, 2, 2, 2, 159, 29, 3, 2, 2, 2, 160, 161, 7, 22, 2, 2, 161, 31, 3, 2, 2, 2, 162, 163, 7, 19, 2, 2, 163, 33, 3, 2, 2, 2, 164, 165, 7, 20, 2, 2, 165, 35, 3, 2, 2, 2, 166, 167, 9, 3, 2, 2, 167, 37, 3, 2, 2, 2, 168, 174, 5, 36, 19, 2, 169, 174, 7, 23, 2, 2, 170, 174, 7, 24, 2, 2, 171, 174, 7, 30, 2, 2, 172, 174, 7, 31, 2, 2, 173, 168, 3, 2, 2, 2, 173, 169, 3, 2, 2, 2, 173, 170, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 173, 172, 3, 2, 2, 2, 174, 39, 3, 2, 2, 2, 175, 176, 7, 23, 2, 2, 176, 41, 3, 2, 2, 2, 9, 48, 57, 118, 123, 133, 135, 173]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 34, 220, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 5, 2, 58, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 71, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 77, 10, 4, 12, 4, 14, 4, 80, 11, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 89, 10, 4, 12, 4, 14, 4, 92, 11, 4, 3, 4, 3, 4, 5, 4, 96, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 155, 10, 5, 12, 5, 14, 5, 158, 11, 5, 3, 5, 3, 5, 5, 5, 162, 10, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 7, 5, 172, 10, 5, 12, 5, 14, 5, 175, 11, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 216, 10, 23, 3, 24, 3, 24, 3, 24, 2, 3, 8, 25, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 2, 5, 3, 2, 6, 7, 3, 2, 22, 23, 4, 2, 18, 18, 28, 31, 2, 224, 2, 57, 3, 2, 2, 2, 4, 70, 3, 2, 2, 2, 6, 95, 3, 2, 2, 2, 8, 161, 3, 2, 2, 2, 10, 176, 3, 2, 2, 2, 12, 178, 3, 2, 2, 2, 14, 180, 3, 2, 2, 2, 16, 182, 3, 2, 2, 2, 18, 184, 3, 2, 2, 2, 20, 186, 3, 2, 2, 2, 22, 188, 3, 2, 2, 2, 24, 190, 3, 2, 2, 2, 26, 192, 3, 2, 2, 2, 28, 194, 3, 2, 2, 2, 30, 196, 3, 2, 2, 2, 32, 198, 3, 2, 2, 2, 34, 200, 3, 2, 2, 2, 36, 202, 3, 2, 2, 2, 38, 204, 3, 2, 2, 2, 40, 206, 3, 2, 2, 2, 42, 208, 3, 2, 2, 2, 44, 215, 3, 2, 2, 2, 46, 217, 3, 2, 2, 2, 48, 49, 5, 8, 5, 2, 49, 50, 7, 2, 2, 3, 50, 58, 3, 2, 2, 2, 51, 52, 5, 6, 4, 2, 52, 53, 7, 2, 2, 3, 53, 58, 3, 2, 2, 2, 54, 55, 5, 4, 3, 2, 55, 56, 7, 2, 2, 3, 56, 58, 3, 2, 2, 2, 57, 48, 3, 2, 2, 2, 57, 51, 3, 2, 2, 2, 57, 54, 3, 2, 2, 2, 58, 3, 3, 2, 2, 2, 59, 60, 5, 36, 19, 2, 60, 61, 5, 46, 24, 2, 61, 71, 3, 2, 2, 2, 62, 63, 5, 8, 5, 2, 63, 64, 5, 36, 19, 2, 64, 65, 5, 46, 24, 2, 65, 71, 3, 2, 2, 2, 66, 67, 5, 6, 4, 2, 67, 68, 5, 36, 19, 2, 68, 69, 5, 46, 24, 2, 69, 71, 3, 2, 2, 2, 70, 59, 3, 2, 2, 2, 70, 62, 3, 2, 2, 2, 70, 66, 3, 2, 2, 2, 71, 5, 3, 2, 2, 2, 72, 73, 5, 38, 20, 2, 73, 78, 5, 32, 17, 2, 74, 75, 7, 24, 2, 2, 75, 77, 5, 32, 17, 2, 76, 74, 3, 2, 2, 2, 77, 80, 3, 2, 2, 2, 78, 76, 3, 2, 2, 2, 78, 79, 3, 2, 2, 2, 79, 81, 3, 2, 2, 2, 80, 78, 3, 2, 2, 2, 81, 82, 5, 40, 21, 2, 82, 96, 3, 2, 2, 2, 83, 84, 5, 8, 5, 2, 84, 85, 5, 38, 20, 2, 85, 90, 5, 32, 17, 2, 86, 87, 7, 24, 2, 2, 87, 89, 5, 32, 17, 2, 88, 86, 3, 2, 2, 2, 89, 92, 3, 2, 2, 2, 90, 88, 3, 2, 2, 2, 90, 91, 3, 2, 2, 2, 91, 93, 3, 2, 2, 2, 92, 90, 3, 2, 2, 2, 93, 94, 5, 40, 21, 2, 94, 96, 3, 2, 2, 2, 95, 72, 3, 2, 2, 2, 95, 83, 3, 2, 2, 2, 96, 7, 3, 2, 2, 2, 97, 98, 8, 5, 1, 2, 98, 99, 7, 16, 2, 2, 99, 100, 5, 8, 5, 2, 100, 101, 7, 17, 2, 2, 101, 162, 3, 2, 2, 2, 102, 103, 7, 5, 2, 2, 103, 162, 5, 8, 5, 18, 104, 105, 5, 32, 17, 2, 105, 106, 5, 10, 6, 2, 106, 107, 5, 44, 23, 2, 107, 162, 3, 2, 2, 2, 108, 109, 5, 32, 17, 2, 109, 110, 5, 12, 7, 2, 110, 111, 5, 44, 23, 2, 111, 162, 3, 2, 2, 2, 112, 113, 5, 32, 17, 2, 113, 114, 5, 14, 8, 2, 114, 115, 5, 44, 23, 2, 115, 162, 3, 2, 2, 2, 116, 117, 5, 32, 17, 2, 117, 118, 5, 16, 9, 2, 118, 119, 5, 44, 23, 2, 119, 162, 3, 2, 2, 2, 120, 121, 5, 32, 17, 2, 121, 122, 5, 18, 10, 2, 122, 123, 5, 44, 23, 2, 123, 162, 3, 2, 2, 2, 124, 125, 5, 32, 17, 2, 125, 126, 5, 18, 10, 2, 126, 127, 5, 30, 16, 2, 127, 162, 3, 2, 2, 2, 128, 129, 5, 32, 17, 2, 129, 130, 5, 20, 11, 2, 130, 131, 5, 44, 23, 2, 131, 162, 3, 2, 2, 2, 132, 133, 5, 32, 17, 2, 133, 134, 5, 20, 11, 2, 134, 135, 5, 30, 16, 2, 135, 162, 3, 2, 2, 2, 136, 137, 5, 32, 17, 2, 137, 138, 5, 22, 12, 2, 138, 139, 5, 44, 23, 2, 139, 162, 3, 2, 2, 2, 140, 141, 5, 32, 17, 2, 141, 142, 5, 24, 13, 2, 142, 143, 5, 44, 23, 2, 143, 144, 5, 26, 14, 2, 144, 145, 5, 44, 23, 2, 145, 162, 3, 2, 2, 2, 146, 162, 5, 32, 17, 2, 147, 162, 5, 44, 23, 2, 148, 149, 5, 32, 17, 2, 149, 150, 5, 34, 18, 2, 150, 151, 7, 16, 2, 2, 151, 156, 5, 44, 23, 2, 152, 153, 7, 24, 2, 2, 153, 155, 5, 44, 23, 2, 154, 152, 3, 2, 2, 2, 155, 158, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 159, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 160, 7, 17, 2, 2, 160, 162, 3, 2, 2, 2, 161, 97, 3, 2, 2, 2, 161, 102, 3, 2, 2, 2, 161, 104, 3, 2, 2, 2, 161, 108, 3, 2, 2, 2, 161, 112, 3, 2, 2, 2, 161, 116, 3, 2, 2, 2, 161, 120, 3, 2, 2, 2, 161, 124, 3, 2, 2, 2, 161, 128, 3, 2, 2, 2, 161, 132, 3, 2, 2, 2, 161, 136, 3, 2, 2, 2, 161, 140, 3, 2, 2, 2, 161, 146, 3, 2, 2, 2, 161, 147, 3, 2, 2, 2, 161, 148, 3, 2, 2, 2, 162, 173, 3, 2, 2, 2, 163, 164, 12, 17, 2, 2, 164, 165, 5, 26, 14, 2, 165, 166, 5, 8, 5, 18, 166, 172, 3, 2, 2, 2, 167, 168, 12, 16, 2, 2, 168, 169, 5, 28, 15, 2, 169, 170, 5, 8, 5, 17, 170, 172, 3, 2, 2, 2, 171, 163, 3, 2, 2, 2, 171, 167, 3, 2, 2, 2, 172, 175, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 9, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 176, 177, 7, 8, 2, 2, 177, 11, 3, 2, 2, 2, 178, 179, 7, 9, 2, 2, 179, 13, 3, 2, 2, 2, 180, 181, 7, 10, 2, 2, 181, 15, 3, 2, 2, 2, 182, 183, 7, 11, 2, 2, 183, 17, 3, 2, 2, 2, 184, 185, 7, 12, 2, 2, 185, 19, 3, 2, 2, 2, 186, 187, 7, 13, 2, 2, 187, 21, 3, 2, 2, 2, 188, 189, 7, 14, 2, 2, 189, 23, 3, 2, 2, 2, 190, 191, 7, 15, 2, 2, 191, 25, 3, 2, 2, 2, 192, 193, 7, 3, 2, 2, 193, 27, 3, 2, 2, 2, 194, 195, 7, 4, 2, 2, 195, 29, 3, 2, 2, 2, 196, 197, 9, 2, 2, 2, 197, 31, 3, 2, 2, 2, 198, 199, 7, 25, 2, 2, 199, 33, 3, 2, 2, 2, 200, 201, 7, 19, 2, 2, 201, 35, 3, 2, 2, 2, 202, 203, 7, 20, 2, 2, 203, 37, 3, 2, 2, 2, 204, 205, 7, 21, 2, 2, 205, 39, 3, 2, 2, 2, 206, 207, 9, 3, 2, 2, 207, 41, 3, 2, 2, 2, 208, 209, 9, 4, 2, 2, 209, 43, 3, 2, 2, 2, 210, 216, 5, 42, 22, 2, 211, 216, 7, 26, 2, 2, 212, 216, 7, 27, 2, 2, 213, 216, 7, 33, 2, 2, 214, 216, 7, 34, 2, 2, 215, 210, 3, 2, 2, 2, 215, 211, 3, 2, 2, 2, 215, 212, 3, 2, 2, 2, 215, 213, 3, 2, 2, 2, 215, 214, 3, 2, 2, 2, 216, 45, 3, 2, 2, 2, 217, 218, 7, 26, 2, 2, 218, 47, 3, 2, 2, 2, 12, 57, 70, 78, 90, 95, 156, 161, 171, 173, 215]
\ No newline at end of file
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.java b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.java
index 6e3b626..82c56e9 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.java
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.java
@@ -17,7 +17,7 @@
* limitations under the License.
* #L%
*/
-// Generated from CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
+// Generated from src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
package com.amazonaws.appflow.custom.connector.queryfilter.antlr;
@@ -39,21 +39,23 @@ public class CustomConnectorQueryFilterParser extends Parser {
new PredictionContextCache();
public static final int
AND=1, OR=2, NOT=3, TRUE=4, FALSE=5, GT=6, GE=7, LT=8, LE=9, EQ=10, NE=11,
- LIKE=12, BETWEEN=13, LPAREN=14, RPAREN=15, NULL=16, IN=17, LIMIT=18, COMMA=19,
- IDENTIFIER=20, POS_INTEGER=21, DECIMAL=22, SINGLE_STRING=23, DOUBLE_STRING=24,
- EMPTY_SINGLE_STRING=25, EMPTY_DOUBLE_STRING=26, WS=27, DATE=28, DATETIME=29;
+ LIKE=12, BETWEEN=13, LPAREN=14, RPAREN=15, NULL=16, IN=17, LIMIT=18, ORDERBY=19,
+ ASC=20, DESC=21, COMMA=22, IDENTIFIER=23, POS_INTEGER=24, DECIMAL=25,
+ SINGLE_STRING=26, DOUBLE_STRING=27, EMPTY_SINGLE_STRING=28, EMPTY_DOUBLE_STRING=29,
+ WS=30, DATE=31, DATETIME=32;
public static final int
- RULE_queryfilter = 0, RULE_limitexpression = 1, RULE_expression = 2, RULE_gtComparator = 3,
- RULE_geComparator = 4, RULE_ltComparator = 5, RULE_leComparator = 6, RULE_eqComparator = 7,
- RULE_neComparator = 8, RULE_likeComparator = 9, RULE_betweenComparator = 10,
- RULE_andBinary = 11, RULE_orBinary = 12, RULE_bool = 13, RULE_identifier = 14,
- RULE_in = 15, RULE_limit = 16, RULE_string = 17, RULE_value = 18, RULE_count = 19;
+ RULE_queryfilter = 0, RULE_limitexpr = 1, RULE_orderbyexpr = 2, RULE_expression = 3,
+ RULE_gtComparator = 4, RULE_geComparator = 5, RULE_ltComparator = 6, RULE_leComparator = 7,
+ RULE_eqComparator = 8, RULE_neComparator = 9, RULE_likeComparator = 10,
+ RULE_betweenComparator = 11, RULE_andBinary = 12, RULE_orBinary = 13,
+ RULE_bool = 14, RULE_identifier = 15, RULE_in = 16, RULE_limit = 17, RULE_orderby = 18,
+ RULE_order = 19, RULE_string = 20, RULE_value = 21, RULE_count = 22;
private static String[] makeRuleNames() {
return new String[] {
- "queryfilter", "limitexpression", "expression", "gtComparator", "geComparator",
- "ltComparator", "leComparator", "eqComparator", "neComparator", "likeComparator",
- "betweenComparator", "andBinary", "orBinary", "bool", "identifier", "in",
- "limit", "string", "value", "count"
+ "queryfilter", "limitexpr", "orderbyexpr", "expression", "gtComparator",
+ "geComparator", "ltComparator", "leComparator", "eqComparator", "neComparator",
+ "likeComparator", "betweenComparator", "andBinary", "orBinary", "bool",
+ "identifier", "in", "limit", "orderby", "order", "string", "value", "count"
};
}
public static final String[] ruleNames = makeRuleNames();
@@ -61,16 +63,18 @@ private static String[] makeRuleNames() {
private static String[] makeLiteralNames() {
return new String[] {
null, null, null, null, null, null, "'>'", "'>='", "'<'", "'<='", "'='",
- "'!='", null, null, "'('", "')'", "'null'", null, null, "','"
+ "'!='", null, null, "'('", "')'", "'null'", null, null, null, null, null,
+ "','"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
null, "AND", "OR", "NOT", "TRUE", "FALSE", "GT", "GE", "LT", "LE", "EQ",
- "NE", "LIKE", "BETWEEN", "LPAREN", "RPAREN", "NULL", "IN", "LIMIT", "COMMA",
- "IDENTIFIER", "POS_INTEGER", "DECIMAL", "SINGLE_STRING", "DOUBLE_STRING",
- "EMPTY_SINGLE_STRING", "EMPTY_DOUBLE_STRING", "WS", "DATE", "DATETIME"
+ "NE", "LIKE", "BETWEEN", "LPAREN", "RPAREN", "NULL", "IN", "LIMIT", "ORDERBY",
+ "ASC", "DESC", "COMMA", "IDENTIFIER", "POS_INTEGER", "DECIMAL", "SINGLE_STRING",
+ "DOUBLE_STRING", "EMPTY_SINGLE_STRING", "EMPTY_DOUBLE_STRING", "WS",
+ "DATE", "DATETIME"
};
}
private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
@@ -129,8 +133,11 @@ public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
public TerminalNode EOF() { return getToken(CustomConnectorQueryFilterParser.EOF, 0); }
- public LimitexpressionContext limitexpression() {
- return getRuleContext(LimitexpressionContext.class,0);
+ public OrderbyexprContext orderbyexpr() {
+ return getRuleContext(OrderbyexprContext.class,0);
+ }
+ public LimitexprContext limitexpr() {
+ return getRuleContext(LimitexprContext.class,0);
}
public QueryfilterContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -155,24 +162,33 @@ public final QueryfilterContext queryfilter() throws RecognitionException {
QueryfilterContext _localctx = new QueryfilterContext(_ctx, getState());
enterRule(_localctx, 0, RULE_queryfilter);
try {
- setState(46);
+ setState(55);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,0,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(40);
+ setState(46);
expression(0);
- setState(41);
+ setState(47);
match(EOF);
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(43);
- limitexpression();
- setState(44);
+ setState(49);
+ orderbyexpr();
+ setState(50);
+ match(EOF);
+ }
+ break;
+ case 3:
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(52);
+ limitexpr();
+ setState(53);
match(EOF);
}
break;
@@ -189,18 +205,18 @@ public final QueryfilterContext queryfilter() throws RecognitionException {
return _localctx;
}
- public static class LimitexpressionContext extends ParserRuleContext {
- public LimitexpressionContext(ParserRuleContext parent, int invokingState) {
+ public static class LimitexprContext extends ParserRuleContext {
+ public LimitexprContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
}
- @Override public int getRuleIndex() { return RULE_limitexpression; }
+ @Override public int getRuleIndex() { return RULE_limitexpr; }
- public LimitexpressionContext() { }
- public void copyFrom(LimitexpressionContext ctx) {
+ public LimitexprContext() { }
+ public void copyFrom(LimitexprContext ctx) {
super.copyFrom(ctx);
}
}
- public static class LimitExpressionContext extends LimitexpressionContext {
+ public static class LimitExpressionContext extends LimitexprContext {
public LimitContext op;
public CountContext right;
public ExpressionContext left;
@@ -213,7 +229,10 @@ public CountContext count() {
public ExpressionContext expression() {
return getRuleContext(ExpressionContext.class,0);
}
- public LimitExpressionContext(LimitexpressionContext ctx) { copyFrom(ctx); }
+ public OrderbyexprContext orderbyexpr() {
+ return getRuleContext(OrderbyexprContext.class,0);
+ }
+ public LimitExpressionContext(LimitexprContext ctx) { copyFrom(ctx); }
@Override
public void enterRule(ParseTreeListener listener) {
if ( listener instanceof CustomConnectorQueryFilterParserListener ) ((CustomConnectorQueryFilterParserListener)listener).enterLimitExpression(this);
@@ -229,23 +248,146 @@ public T accept(ParseTreeVisitor extends T> visitor) {
}
}
- public final LimitexpressionContext limitexpression() throws RecognitionException {
- LimitexpressionContext _localctx = new LimitexpressionContext(_ctx, getState());
- enterRule(_localctx, 2, RULE_limitexpression);
+ public final LimitexprContext limitexpr() throws RecognitionException {
+ LimitexprContext _localctx = new LimitexprContext(_ctx, getState());
+ enterRule(_localctx, 2, RULE_limitexpr);
try {
- setState(55);
+ setState(68);
_errHandler.sync(this);
- switch (_input.LA(1)) {
- case LIMIT:
+ switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
+ case 1:
_localctx = new LimitExpressionContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(48);
+ setState(57);
((LimitExpressionContext)_localctx).op = limit();
- setState(49);
+ setState(58);
+ ((LimitExpressionContext)_localctx).right = count();
+ }
+ break;
+ case 2:
+ _localctx = new LimitExpressionContext(_localctx);
+ enterOuterAlt(_localctx, 2);
+ {
+ setState(60);
+ ((LimitExpressionContext)_localctx).left = expression(0);
+ setState(61);
+ ((LimitExpressionContext)_localctx).op = limit();
+ setState(62);
+ ((LimitExpressionContext)_localctx).right = count();
+ }
+ break;
+ case 3:
+ _localctx = new LimitExpressionContext(_localctx);
+ enterOuterAlt(_localctx, 3);
+ {
+ setState(64);
+ orderbyexpr();
+ setState(65);
+ ((LimitExpressionContext)_localctx).op = limit();
+ setState(66);
((LimitExpressionContext)_localctx).right = count();
}
break;
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class OrderbyexprContext extends ParserRuleContext {
+ public OrderbyexprContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_orderbyexpr; }
+
+ public OrderbyexprContext() { }
+ public void copyFrom(OrderbyexprContext ctx) {
+ super.copyFrom(ctx);
+ }
+ }
+ public static class OrderByExpressionContext extends OrderbyexprContext {
+ public OrderbyContext op;
+ public OrderContext right;
+ public ExpressionContext left;
+ public List identifier() {
+ return getRuleContexts(IdentifierContext.class);
+ }
+ public IdentifierContext identifier(int i) {
+ return getRuleContext(IdentifierContext.class,i);
+ }
+ public OrderbyContext orderby() {
+ return getRuleContext(OrderbyContext.class,0);
+ }
+ public OrderContext order() {
+ return getRuleContext(OrderContext.class,0);
+ }
+ public List COMMA() { return getTokens(CustomConnectorQueryFilterParser.COMMA); }
+ public TerminalNode COMMA(int i) {
+ return getToken(CustomConnectorQueryFilterParser.COMMA, i);
+ }
+ public ExpressionContext expression() {
+ return getRuleContext(ExpressionContext.class,0);
+ }
+ public OrderByExpressionContext(OrderbyexprContext ctx) { copyFrom(ctx); }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof CustomConnectorQueryFilterParserListener ) ((CustomConnectorQueryFilterParserListener)listener).enterOrderByExpression(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof CustomConnectorQueryFilterParserListener ) ((CustomConnectorQueryFilterParserListener)listener).exitOrderByExpression(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof CustomConnectorQueryFilterParserVisitor ) return ((CustomConnectorQueryFilterParserVisitor extends T>)visitor).visitOrderByExpression(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final OrderbyexprContext orderbyexpr() throws RecognitionException {
+ OrderbyexprContext _localctx = new OrderbyexprContext(_ctx, getState());
+ enterRule(_localctx, 4, RULE_orderbyexpr);
+ int _la;
+ try {
+ setState(93);
+ _errHandler.sync(this);
+ switch (_input.LA(1)) {
+ case ORDERBY:
+ _localctx = new OrderByExpressionContext(_localctx);
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(70);
+ ((OrderByExpressionContext)_localctx).op = orderby();
+ setState(71);
+ identifier();
+ setState(76);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(72);
+ match(COMMA);
+ setState(73);
+ identifier();
+ }
+ }
+ setState(78);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(79);
+ ((OrderByExpressionContext)_localctx).right = order();
+ }
+ break;
case NOT:
case LPAREN:
case NULL:
@@ -258,15 +400,33 @@ public final LimitexpressionContext limitexpression() throws RecognitionExceptio
case EMPTY_DOUBLE_STRING:
case DATE:
case DATETIME:
- _localctx = new LimitExpressionContext(_localctx);
+ _localctx = new OrderByExpressionContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(51);
- ((LimitExpressionContext)_localctx).left = expression(0);
- setState(52);
- ((LimitExpressionContext)_localctx).op = limit();
- setState(53);
- ((LimitExpressionContext)_localctx).right = count();
+ setState(81);
+ ((OrderByExpressionContext)_localctx).left = expression(0);
+ setState(82);
+ ((OrderByExpressionContext)_localctx).op = orderby();
+ setState(83);
+ identifier();
+ setState(88);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while (_la==COMMA) {
+ {
+ {
+ setState(84);
+ match(COMMA);
+ setState(85);
+ identifier();
+ }
+ }
+ setState(90);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(91);
+ ((OrderByExpressionContext)_localctx).right = order();
}
break;
default:
@@ -763,27 +923,27 @@ private ExpressionContext expression(int _p) throws RecognitionException {
int _parentState = getState();
ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
ExpressionContext _prevctx = _localctx;
- int _startState = 4;
- enterRecursionRule(_localctx, 4, RULE_expression, _p);
+ int _startState = 6;
+ enterRecursionRule(_localctx, 6, RULE_expression, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(121);
+ setState(159);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
case 1:
{
_localctx = new ParenExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(58);
+ setState(96);
match(LPAREN);
- setState(59);
+ setState(97);
expression(0);
- setState(60);
+ setState(98);
match(RPAREN);
}
break;
@@ -792,9 +952,9 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new NotExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(62);
+ setState(100);
match(NOT);
- setState(63);
+ setState(101);
expression(16);
}
break;
@@ -803,11 +963,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new GreaterThanComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(64);
+ setState(102);
((GreaterThanComparatorExpressionContext)_localctx).left = identifier();
- setState(65);
+ setState(103);
((GreaterThanComparatorExpressionContext)_localctx).op = gtComparator();
- setState(66);
+ setState(104);
((GreaterThanComparatorExpressionContext)_localctx).right = value();
}
break;
@@ -816,11 +976,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new GreaterThanEqualToComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(68);
+ setState(106);
((GreaterThanEqualToComparatorExpressionContext)_localctx).left = identifier();
- setState(69);
+ setState(107);
((GreaterThanEqualToComparatorExpressionContext)_localctx).op = geComparator();
- setState(70);
+ setState(108);
((GreaterThanEqualToComparatorExpressionContext)_localctx).right = value();
}
break;
@@ -829,11 +989,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new LesserThanComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(72);
+ setState(110);
((LesserThanComparatorExpressionContext)_localctx).left = identifier();
- setState(73);
+ setState(111);
((LesserThanComparatorExpressionContext)_localctx).op = ltComparator();
- setState(74);
+ setState(112);
((LesserThanComparatorExpressionContext)_localctx).right = value();
}
break;
@@ -842,11 +1002,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new LesserThanEqualToComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(76);
+ setState(114);
((LesserThanEqualToComparatorExpressionContext)_localctx).left = identifier();
- setState(77);
+ setState(115);
((LesserThanEqualToComparatorExpressionContext)_localctx).op = leComparator();
- setState(78);
+ setState(116);
((LesserThanEqualToComparatorExpressionContext)_localctx).right = value();
}
break;
@@ -855,11 +1015,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new EqualToComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(80);
+ setState(118);
((EqualToComparatorExpressionContext)_localctx).left = identifier();
- setState(81);
+ setState(119);
((EqualToComparatorExpressionContext)_localctx).op = eqComparator();
- setState(82);
+ setState(120);
((EqualToComparatorExpressionContext)_localctx).right = value();
}
break;
@@ -868,11 +1028,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new BoolEqualToComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(84);
+ setState(122);
((BoolEqualToComparatorExpressionContext)_localctx).left = identifier();
- setState(85);
+ setState(123);
((BoolEqualToComparatorExpressionContext)_localctx).op = eqComparator();
- setState(86);
+ setState(124);
((BoolEqualToComparatorExpressionContext)_localctx).right = bool();
}
break;
@@ -881,11 +1041,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new NotEqualToComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(88);
+ setState(126);
((NotEqualToComparatorExpressionContext)_localctx).left = identifier();
- setState(89);
+ setState(127);
((NotEqualToComparatorExpressionContext)_localctx).op = neComparator();
- setState(90);
+ setState(128);
((NotEqualToComparatorExpressionContext)_localctx).right = value();
}
break;
@@ -894,11 +1054,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new BoolNotEqualToComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(92);
+ setState(130);
((BoolNotEqualToComparatorExpressionContext)_localctx).left = identifier();
- setState(93);
+ setState(131);
((BoolNotEqualToComparatorExpressionContext)_localctx).op = neComparator();
- setState(94);
+ setState(132);
((BoolNotEqualToComparatorExpressionContext)_localctx).right = bool();
}
break;
@@ -907,11 +1067,11 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new LikeComparatorExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(96);
+ setState(134);
((LikeComparatorExpressionContext)_localctx).left = identifier();
- setState(97);
+ setState(135);
((LikeComparatorExpressionContext)_localctx).op = likeComparator();
- setState(98);
+ setState(136);
((LikeComparatorExpressionContext)_localctx).right = value();
}
break;
@@ -921,16 +1081,16 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_ctx = _localctx;
_prevctx = _localctx;
{
- setState(100);
+ setState(138);
((BetweenExpressionContext)_localctx).left = identifier();
- setState(101);
+ setState(139);
((BetweenExpressionContext)_localctx).op = betweenComparator();
{
- setState(102);
+ setState(140);
((BetweenExpressionContext)_localctx).l1 = value();
- setState(103);
+ setState(141);
((BetweenExpressionContext)_localctx).op1 = andBinary();
- setState(104);
+ setState(142);
((BetweenExpressionContext)_localctx).right = value();
}
}
@@ -941,7 +1101,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new IdentifierExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(106);
+ setState(144);
identifier();
}
break;
@@ -950,7 +1110,7 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new ValueExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(107);
+ setState(145);
value();
}
break;
@@ -959,57 +1119,57 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new InExpressionContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
- setState(108);
+ setState(146);
identifier();
- setState(109);
+ setState(147);
((InExpressionContext)_localctx).op = in();
- setState(110);
+ setState(148);
match(LPAREN);
- setState(111);
+ setState(149);
value();
- setState(116);
+ setState(154);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(112);
+ setState(150);
match(COMMA);
- setState(113);
+ setState(151);
value();
}
}
- setState(118);
+ setState(156);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(119);
+ setState(157);
match(RPAREN);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(133);
+ setState(171);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,5,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,8,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(131);
+ setState(169);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,4,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) {
case 1:
{
_localctx = new ANDBinaryExpressionContext(new ExpressionContext(_parentctx, _parentState));
((ANDBinaryExpressionContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(123);
+ setState(161);
if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
- setState(124);
+ setState(162);
((ANDBinaryExpressionContext)_localctx).op = andBinary();
- setState(125);
+ setState(163);
((ANDBinaryExpressionContext)_localctx).right = expression(16);
}
break;
@@ -1018,20 +1178,20 @@ private ExpressionContext expression(int _p) throws RecognitionException {
_localctx = new ORBinaryExpressionContext(new ExpressionContext(_parentctx, _parentState));
((ORBinaryExpressionContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
- setState(127);
+ setState(165);
if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
- setState(128);
+ setState(166);
((ORBinaryExpressionContext)_localctx).op = orBinary();
- setState(129);
+ setState(167);
((ORBinaryExpressionContext)_localctx).right = expression(15);
}
break;
}
}
}
- setState(135);
+ setState(173);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,5,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,8,_ctx);
}
}
}
@@ -1069,11 +1229,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final GtComparatorContext gtComparator() throws RecognitionException {
GtComparatorContext _localctx = new GtComparatorContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_gtComparator);
+ enterRule(_localctx, 8, RULE_gtComparator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(136);
+ setState(174);
match(GT);
}
}
@@ -1111,11 +1271,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final GeComparatorContext geComparator() throws RecognitionException {
GeComparatorContext _localctx = new GeComparatorContext(_ctx, getState());
- enterRule(_localctx, 8, RULE_geComparator);
+ enterRule(_localctx, 10, RULE_geComparator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(138);
+ setState(176);
match(GE);
}
}
@@ -1153,11 +1313,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LtComparatorContext ltComparator() throws RecognitionException {
LtComparatorContext _localctx = new LtComparatorContext(_ctx, getState());
- enterRule(_localctx, 10, RULE_ltComparator);
+ enterRule(_localctx, 12, RULE_ltComparator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(140);
+ setState(178);
match(LT);
}
}
@@ -1195,11 +1355,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LeComparatorContext leComparator() throws RecognitionException {
LeComparatorContext _localctx = new LeComparatorContext(_ctx, getState());
- enterRule(_localctx, 12, RULE_leComparator);
+ enterRule(_localctx, 14, RULE_leComparator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(142);
+ setState(180);
match(LE);
}
}
@@ -1237,11 +1397,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final EqComparatorContext eqComparator() throws RecognitionException {
EqComparatorContext _localctx = new EqComparatorContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_eqComparator);
+ enterRule(_localctx, 16, RULE_eqComparator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(144);
+ setState(182);
match(EQ);
}
}
@@ -1279,11 +1439,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final NeComparatorContext neComparator() throws RecognitionException {
NeComparatorContext _localctx = new NeComparatorContext(_ctx, getState());
- enterRule(_localctx, 16, RULE_neComparator);
+ enterRule(_localctx, 18, RULE_neComparator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(146);
+ setState(184);
match(NE);
}
}
@@ -1321,11 +1481,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LikeComparatorContext likeComparator() throws RecognitionException {
LikeComparatorContext _localctx = new LikeComparatorContext(_ctx, getState());
- enterRule(_localctx, 18, RULE_likeComparator);
+ enterRule(_localctx, 20, RULE_likeComparator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(148);
+ setState(186);
match(LIKE);
}
}
@@ -1363,11 +1523,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BetweenComparatorContext betweenComparator() throws RecognitionException {
BetweenComparatorContext _localctx = new BetweenComparatorContext(_ctx, getState());
- enterRule(_localctx, 20, RULE_betweenComparator);
+ enterRule(_localctx, 22, RULE_betweenComparator);
try {
enterOuterAlt(_localctx, 1);
{
- setState(150);
+ setState(188);
match(BETWEEN);
}
}
@@ -1405,11 +1565,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final AndBinaryContext andBinary() throws RecognitionException {
AndBinaryContext _localctx = new AndBinaryContext(_ctx, getState());
- enterRule(_localctx, 22, RULE_andBinary);
+ enterRule(_localctx, 24, RULE_andBinary);
try {
enterOuterAlt(_localctx, 1);
{
- setState(152);
+ setState(190);
match(AND);
}
}
@@ -1447,11 +1607,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final OrBinaryContext orBinary() throws RecognitionException {
OrBinaryContext _localctx = new OrBinaryContext(_ctx, getState());
- enterRule(_localctx, 24, RULE_orBinary);
+ enterRule(_localctx, 26, RULE_orBinary);
try {
enterOuterAlt(_localctx, 1);
{
- setState(154);
+ setState(192);
match(OR);
}
}
@@ -1490,12 +1650,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final BoolContext bool() throws RecognitionException {
BoolContext _localctx = new BoolContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_bool);
+ enterRule(_localctx, 28, RULE_bool);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(156);
+ setState(194);
_la = _input.LA(1);
if ( !(_la==TRUE || _la==FALSE) ) {
_errHandler.recoverInline(this);
@@ -1541,11 +1701,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final IdentifierContext identifier() throws RecognitionException {
IdentifierContext _localctx = new IdentifierContext(_ctx, getState());
- enterRule(_localctx, 28, RULE_identifier);
+ enterRule(_localctx, 30, RULE_identifier);
try {
enterOuterAlt(_localctx, 1);
{
- setState(158);
+ setState(196);
match(IDENTIFIER);
}
}
@@ -1583,11 +1743,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final InContext in() throws RecognitionException {
InContext _localctx = new InContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_in);
+ enterRule(_localctx, 32, RULE_in);
try {
enterOuterAlt(_localctx, 1);
{
- setState(160);
+ setState(198);
match(IN);
}
}
@@ -1625,11 +1785,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final LimitContext limit() throws RecognitionException {
LimitContext _localctx = new LimitContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_limit);
+ enterRule(_localctx, 34, RULE_limit);
try {
enterOuterAlt(_localctx, 1);
{
- setState(162);
+ setState(200);
match(LIMIT);
}
}
@@ -1644,6 +1804,100 @@ public final LimitContext limit() throws RecognitionException {
return _localctx;
}
+ public static class OrderbyContext extends ParserRuleContext {
+ public TerminalNode ORDERBY() { return getToken(CustomConnectorQueryFilterParser.ORDERBY, 0); }
+ public OrderbyContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_orderby; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof CustomConnectorQueryFilterParserListener ) ((CustomConnectorQueryFilterParserListener)listener).enterOrderby(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof CustomConnectorQueryFilterParserListener ) ((CustomConnectorQueryFilterParserListener)listener).exitOrderby(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof CustomConnectorQueryFilterParserVisitor ) return ((CustomConnectorQueryFilterParserVisitor extends T>)visitor).visitOrderby(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final OrderbyContext orderby() throws RecognitionException {
+ OrderbyContext _localctx = new OrderbyContext(_ctx, getState());
+ enterRule(_localctx, 36, RULE_orderby);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(202);
+ match(ORDERBY);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class OrderContext extends ParserRuleContext {
+ public TerminalNode ASC() { return getToken(CustomConnectorQueryFilterParser.ASC, 0); }
+ public TerminalNode DESC() { return getToken(CustomConnectorQueryFilterParser.DESC, 0); }
+ public OrderContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_order; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof CustomConnectorQueryFilterParserListener ) ((CustomConnectorQueryFilterParserListener)listener).enterOrder(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof CustomConnectorQueryFilterParserListener ) ((CustomConnectorQueryFilterParserListener)listener).exitOrder(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof CustomConnectorQueryFilterParserVisitor ) return ((CustomConnectorQueryFilterParserVisitor extends T>)visitor).visitOrder(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final OrderContext order() throws RecognitionException {
+ OrderContext _localctx = new OrderContext(_ctx, getState());
+ enterRule(_localctx, 38, RULE_order);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(204);
+ _la = _input.LA(1);
+ if ( !(_la==ASC || _la==DESC) ) {
+ _errHandler.recoverInline(this);
+ }
+ else {
+ if ( _input.LA(1)==Token.EOF ) matchedEOF = true;
+ _errHandler.reportMatch(this);
+ consume();
+ }
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class StringContext extends ParserRuleContext {
public TerminalNode SINGLE_STRING() { return getToken(CustomConnectorQueryFilterParser.SINGLE_STRING, 0); }
public TerminalNode DOUBLE_STRING() { return getToken(CustomConnectorQueryFilterParser.DOUBLE_STRING, 0); }
@@ -1671,12 +1925,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final StringContext string() throws RecognitionException {
StringContext _localctx = new StringContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_string);
+ enterRule(_localctx, 40, RULE_string);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(164);
+ setState(206);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NULL) | (1L << SINGLE_STRING) | (1L << DOUBLE_STRING) | (1L << EMPTY_SINGLE_STRING) | (1L << EMPTY_DOUBLE_STRING))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1784,9 +2038,9 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ValueContext value() throws RecognitionException {
ValueContext _localctx = new ValueContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_value);
+ enterRule(_localctx, 42, RULE_value);
try {
- setState(171);
+ setState(213);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NULL:
@@ -1797,7 +2051,7 @@ public final ValueContext value() throws RecognitionException {
_localctx = new StringValueExpressionContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(166);
+ setState(208);
string();
}
break;
@@ -1805,7 +2059,7 @@ public final ValueContext value() throws RecognitionException {
_localctx = new DecimalValueExpressionContext(_localctx);
enterOuterAlt(_localctx, 2);
{
- setState(167);
+ setState(209);
match(POS_INTEGER);
}
break;
@@ -1813,7 +2067,7 @@ public final ValueContext value() throws RecognitionException {
_localctx = new DecimalValueExpressionContext(_localctx);
enterOuterAlt(_localctx, 3);
{
- setState(168);
+ setState(210);
match(DECIMAL);
}
break;
@@ -1821,7 +2075,7 @@ public final ValueContext value() throws RecognitionException {
_localctx = new IsoDateContext(_localctx);
enterOuterAlt(_localctx, 4);
{
- setState(169);
+ setState(211);
match(DATE);
}
break;
@@ -1829,7 +2083,7 @@ public final ValueContext value() throws RecognitionException {
_localctx = new IsoDateTimeContext(_localctx);
enterOuterAlt(_localctx, 5);
{
- setState(170);
+ setState(212);
match(DATETIME);
}
break;
@@ -1879,12 +2133,12 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final CountContext count() throws RecognitionException {
CountContext _localctx = new CountContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_count);
+ enterRule(_localctx, 44, RULE_count);
try {
_localctx = new CountValueExpressionContext(_localctx);
enterOuterAlt(_localctx, 1);
{
- setState(173);
+ setState(215);
match(POS_INTEGER);
}
}
@@ -1901,7 +2155,7 @@ public final CountContext count() throws RecognitionException {
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
- case 2:
+ case 3:
return expression_sempred((ExpressionContext)_localctx, predIndex);
}
return true;
@@ -1917,56 +2171,73 @@ private boolean expression_sempred(ExpressionContext _localctx, int predIndex) {
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\37\u00b2\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\3\2\3\2\3\2\3\2\3\2\3\2\5\2\61\n\2\3\3"+
- "\3\3\3\3\3\3\3\3\3\3\3\3\5\3:\n\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4"+
- "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3"+
- "\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4"+
- "\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4u\n\4\f\4\16\4"+
- "x\13\4\3\4\3\4\5\4|\n\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\7\4\u0086\n\4"+
- "\f\4\16\4\u0089\13\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3"+
- "\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20\3\20\3\21\3\21\3\22"+
- "\3\22\3\23\3\23\3\24\3\24\3\24\3\24\3\24\5\24\u00ae\n\24\3\25\3\25\3\25"+
- "\2\3\6\26\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(\2\4\3\2\6\7\4\2"+
- "\22\22\31\34\2\u00b4\2\60\3\2\2\2\49\3\2\2\2\6{\3\2\2\2\b\u008a\3\2\2"+
- "\2\n\u008c\3\2\2\2\f\u008e\3\2\2\2\16\u0090\3\2\2\2\20\u0092\3\2\2\2\22"+
- "\u0094\3\2\2\2\24\u0096\3\2\2\2\26\u0098\3\2\2\2\30\u009a\3\2\2\2\32\u009c"+
- "\3\2\2\2\34\u009e\3\2\2\2\36\u00a0\3\2\2\2 \u00a2\3\2\2\2\"\u00a4\3\2"+
- "\2\2$\u00a6\3\2\2\2&\u00ad\3\2\2\2(\u00af\3\2\2\2*+\5\6\4\2+,\7\2\2\3"+
- ",\61\3\2\2\2-.\5\4\3\2./\7\2\2\3/\61\3\2\2\2\60*\3\2\2\2\60-\3\2\2\2\61"+
- "\3\3\2\2\2\62\63\5\"\22\2\63\64\5(\25\2\64:\3\2\2\2\65\66\5\6\4\2\66\67"+
- "\5\"\22\2\678\5(\25\28:\3\2\2\29\62\3\2\2\29\65\3\2\2\2:\5\3\2\2\2;<\b"+
- "\4\1\2<=\7\20\2\2=>\5\6\4\2>?\7\21\2\2?|\3\2\2\2@A\7\5\2\2A|\5\6\4\22"+
- "BC\5\36\20\2CD\5\b\5\2DE\5&\24\2E|\3\2\2\2FG\5\36\20\2GH\5\n\6\2HI\5&"+
- "\24\2I|\3\2\2\2JK\5\36\20\2KL\5\f\7\2LM\5&\24\2M|\3\2\2\2NO\5\36\20\2"+
- "OP\5\16\b\2PQ\5&\24\2Q|\3\2\2\2RS\5\36\20\2ST\5\20\t\2TU\5&\24\2U|\3\2"+
- "\2\2VW\5\36\20\2WX\5\20\t\2XY\5\34\17\2Y|\3\2\2\2Z[\5\36\20\2[\\\5\22"+
- "\n\2\\]\5&\24\2]|\3\2\2\2^_\5\36\20\2_`\5\22\n\2`a\5\34\17\2a|\3\2\2\2"+
- "bc\5\36\20\2cd\5\24\13\2de\5&\24\2e|\3\2\2\2fg\5\36\20\2gh\5\26\f\2hi"+
- "\5&\24\2ij\5\30\r\2jk\5&\24\2k|\3\2\2\2l|\5\36\20\2m|\5&\24\2no\5\36\20"+
- "\2op\5 \21\2pq\7\20\2\2qv\5&\24\2rs\7\25\2\2su\5&\24\2tr\3\2\2\2ux\3\2"+
- "\2\2vt\3\2\2\2vw\3\2\2\2wy\3\2\2\2xv\3\2\2\2yz\7\21\2\2z|\3\2\2\2{;\3"+
- "\2\2\2{@\3\2\2\2{B\3\2\2\2{F\3\2\2\2{J\3\2\2\2{N\3\2\2\2{R\3\2\2\2{V\3"+
- "\2\2\2{Z\3\2\2\2{^\3\2\2\2{b\3\2\2\2{f\3\2\2\2{l\3\2\2\2{m\3\2\2\2{n\3"+
- "\2\2\2|\u0087\3\2\2\2}~\f\21\2\2~\177\5\30\r\2\177\u0080\5\6\4\22\u0080"+
- "\u0086\3\2\2\2\u0081\u0082\f\20\2\2\u0082\u0083\5\32\16\2\u0083\u0084"+
- "\5\6\4\21\u0084\u0086\3\2\2\2\u0085}\3\2\2\2\u0085\u0081\3\2\2\2\u0086"+
- "\u0089\3\2\2\2\u0087\u0085\3\2\2\2\u0087\u0088\3\2\2\2\u0088\7\3\2\2\2"+
- "\u0089\u0087\3\2\2\2\u008a\u008b\7\b\2\2\u008b\t\3\2\2\2\u008c\u008d\7"+
- "\t\2\2\u008d\13\3\2\2\2\u008e\u008f\7\n\2\2\u008f\r\3\2\2\2\u0090\u0091"+
- "\7\13\2\2\u0091\17\3\2\2\2\u0092\u0093\7\f\2\2\u0093\21\3\2\2\2\u0094"+
- "\u0095\7\r\2\2\u0095\23\3\2\2\2\u0096\u0097\7\16\2\2\u0097\25\3\2\2\2"+
- "\u0098\u0099\7\17\2\2\u0099\27\3\2\2\2\u009a\u009b\7\3\2\2\u009b\31\3"+
- "\2\2\2\u009c\u009d\7\4\2\2\u009d\33\3\2\2\2\u009e\u009f\t\2\2\2\u009f"+
- "\35\3\2\2\2\u00a0\u00a1\7\26\2\2\u00a1\37\3\2\2\2\u00a2\u00a3\7\23\2\2"+
- "\u00a3!\3\2\2\2\u00a4\u00a5\7\24\2\2\u00a5#\3\2\2\2\u00a6\u00a7\t\3\2"+
- "\2\u00a7%\3\2\2\2\u00a8\u00ae\5$\23\2\u00a9\u00ae\7\27\2\2\u00aa\u00ae"+
- "\7\30\2\2\u00ab\u00ae\7\36\2\2\u00ac\u00ae\7\37\2\2\u00ad\u00a8\3\2\2"+
- "\2\u00ad\u00a9\3\2\2\2\u00ad\u00aa\3\2\2\2\u00ad\u00ab\3\2\2\2\u00ad\u00ac"+
- "\3\2\2\2\u00ae\'\3\2\2\2\u00af\u00b0\7\27\2\2\u00b0)\3\2\2\2\t\609v{\u0085"+
- "\u0087\u00ad";
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\"\u00dc\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\3\2\3\2\3"+
+ "\2\3\2\3\2\3\2\3\2\3\2\3\2\5\2:\n\2\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3"+
+ "\3\3\3\3\3\5\3G\n\3\3\4\3\4\3\4\3\4\7\4M\n\4\f\4\16\4P\13\4\3\4\3\4\3"+
+ "\4\3\4\3\4\3\4\3\4\7\4Y\n\4\f\4\16\4\\\13\4\3\4\3\4\5\4`\n\4\3\5\3\5\3"+
+ "\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5"+
+ "\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3"+
+ "\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5"+
+ "\3\5\3\5\7\5\u009b\n\5\f\5\16\5\u009e\13\5\3\5\3\5\5\5\u00a2\n\5\3\5\3"+
+ "\5\3\5\3\5\3\5\3\5\3\5\3\5\7\5\u00ac\n\5\f\5\16\5\u00af\13\5\3\6\3\6\3"+
+ "\7\3\7\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\f\3\f\3\r\3\r\3\16\3\16\3\17"+
+ "\3\17\3\20\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\26"+
+ "\3\26\3\27\3\27\3\27\3\27\3\27\5\27\u00d8\n\27\3\30\3\30\3\30\2\3\b\31"+
+ "\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\2\5\3\2\6\7\3\2\26\27"+
+ "\4\2\22\22\34\37\2\u00e0\29\3\2\2\2\4F\3\2\2\2\6_\3\2\2\2\b\u00a1\3\2"+
+ "\2\2\n\u00b0\3\2\2\2\f\u00b2\3\2\2\2\16\u00b4\3\2\2\2\20\u00b6\3\2\2\2"+
+ "\22\u00b8\3\2\2\2\24\u00ba\3\2\2\2\26\u00bc\3\2\2\2\30\u00be\3\2\2\2\32"+
+ "\u00c0\3\2\2\2\34\u00c2\3\2\2\2\36\u00c4\3\2\2\2 \u00c6\3\2\2\2\"\u00c8"+
+ "\3\2\2\2$\u00ca\3\2\2\2&\u00cc\3\2\2\2(\u00ce\3\2\2\2*\u00d0\3\2\2\2,"+
+ "\u00d7\3\2\2\2.\u00d9\3\2\2\2\60\61\5\b\5\2\61\62\7\2\2\3\62:\3\2\2\2"+
+ "\63\64\5\6\4\2\64\65\7\2\2\3\65:\3\2\2\2\66\67\5\4\3\2\678\7\2\2\38:\3"+
+ "\2\2\29\60\3\2\2\29\63\3\2\2\29\66\3\2\2\2:\3\3\2\2\2;<\5$\23\2<=\5.\30"+
+ "\2=G\3\2\2\2>?\5\b\5\2?@\5$\23\2@A\5.\30\2AG\3\2\2\2BC\5\6\4\2CD\5$\23"+
+ "\2DE\5.\30\2EG\3\2\2\2F;\3\2\2\2F>\3\2\2\2FB\3\2\2\2G\5\3\2\2\2HI\5&\24"+
+ "\2IN\5 \21\2JK\7\30\2\2KM\5 \21\2LJ\3\2\2\2MP\3\2\2\2NL\3\2\2\2NO\3\2"+
+ "\2\2OQ\3\2\2\2PN\3\2\2\2QR\5(\25\2R`\3\2\2\2ST\5\b\5\2TU\5&\24\2UZ\5 "+
+ "\21\2VW\7\30\2\2WY\5 \21\2XV\3\2\2\2Y\\\3\2\2\2ZX\3\2\2\2Z[\3\2\2\2[]"+
+ "\3\2\2\2\\Z\3\2\2\2]^\5(\25\2^`\3\2\2\2_H\3\2\2\2_S\3\2\2\2`\7\3\2\2\2"+
+ "ab\b\5\1\2bc\7\20\2\2cd\5\b\5\2de\7\21\2\2e\u00a2\3\2\2\2fg\7\5\2\2g\u00a2"+
+ "\5\b\5\22hi\5 \21\2ij\5\n\6\2jk\5,\27\2k\u00a2\3\2\2\2lm\5 \21\2mn\5\f"+
+ "\7\2no\5,\27\2o\u00a2\3\2\2\2pq\5 \21\2qr\5\16\b\2rs\5,\27\2s\u00a2\3"+
+ "\2\2\2tu\5 \21\2uv\5\20\t\2vw\5,\27\2w\u00a2\3\2\2\2xy\5 \21\2yz\5\22"+
+ "\n\2z{\5,\27\2{\u00a2\3\2\2\2|}\5 \21\2}~\5\22\n\2~\177\5\36\20\2\177"+
+ "\u00a2\3\2\2\2\u0080\u0081\5 \21\2\u0081\u0082\5\24\13\2\u0082\u0083\5"+
+ ",\27\2\u0083\u00a2\3\2\2\2\u0084\u0085\5 \21\2\u0085\u0086\5\24\13\2\u0086"+
+ "\u0087\5\36\20\2\u0087\u00a2\3\2\2\2\u0088\u0089\5 \21\2\u0089\u008a\5"+
+ "\26\f\2\u008a\u008b\5,\27\2\u008b\u00a2\3\2\2\2\u008c\u008d\5 \21\2\u008d"+
+ "\u008e\5\30\r\2\u008e\u008f\5,\27\2\u008f\u0090\5\32\16\2\u0090\u0091"+
+ "\5,\27\2\u0091\u00a2\3\2\2\2\u0092\u00a2\5 \21\2\u0093\u00a2\5,\27\2\u0094"+
+ "\u0095\5 \21\2\u0095\u0096\5\"\22\2\u0096\u0097\7\20\2\2\u0097\u009c\5"+
+ ",\27\2\u0098\u0099\7\30\2\2\u0099\u009b\5,\27\2\u009a\u0098\3\2\2\2\u009b"+
+ "\u009e\3\2\2\2\u009c\u009a\3\2\2\2\u009c\u009d\3\2\2\2\u009d\u009f\3\2"+
+ "\2\2\u009e\u009c\3\2\2\2\u009f\u00a0\7\21\2\2\u00a0\u00a2\3\2\2\2\u00a1"+
+ "a\3\2\2\2\u00a1f\3\2\2\2\u00a1h\3\2\2\2\u00a1l\3\2\2\2\u00a1p\3\2\2\2"+
+ "\u00a1t\3\2\2\2\u00a1x\3\2\2\2\u00a1|\3\2\2\2\u00a1\u0080\3\2\2\2\u00a1"+
+ "\u0084\3\2\2\2\u00a1\u0088\3\2\2\2\u00a1\u008c\3\2\2\2\u00a1\u0092\3\2"+
+ "\2\2\u00a1\u0093\3\2\2\2\u00a1\u0094\3\2\2\2\u00a2\u00ad\3\2\2\2\u00a3"+
+ "\u00a4\f\21\2\2\u00a4\u00a5\5\32\16\2\u00a5\u00a6\5\b\5\22\u00a6\u00ac"+
+ "\3\2\2\2\u00a7\u00a8\f\20\2\2\u00a8\u00a9\5\34\17\2\u00a9\u00aa\5\b\5"+
+ "\21\u00aa\u00ac\3\2\2\2\u00ab\u00a3\3\2\2\2\u00ab\u00a7\3\2\2\2\u00ac"+
+ "\u00af\3\2\2\2\u00ad\u00ab\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\t\3\2\2\2"+
+ "\u00af\u00ad\3\2\2\2\u00b0\u00b1\7\b\2\2\u00b1\13\3\2\2\2\u00b2\u00b3"+
+ "\7\t\2\2\u00b3\r\3\2\2\2\u00b4\u00b5\7\n\2\2\u00b5\17\3\2\2\2\u00b6\u00b7"+
+ "\7\13\2\2\u00b7\21\3\2\2\2\u00b8\u00b9\7\f\2\2\u00b9\23\3\2\2\2\u00ba"+
+ "\u00bb\7\r\2\2\u00bb\25\3\2\2\2\u00bc\u00bd\7\16\2\2\u00bd\27\3\2\2\2"+
+ "\u00be\u00bf\7\17\2\2\u00bf\31\3\2\2\2\u00c0\u00c1\7\3\2\2\u00c1\33\3"+
+ "\2\2\2\u00c2\u00c3\7\4\2\2\u00c3\35\3\2\2\2\u00c4\u00c5\t\2\2\2\u00c5"+
+ "\37\3\2\2\2\u00c6\u00c7\7\31\2\2\u00c7!\3\2\2\2\u00c8\u00c9\7\23\2\2\u00c9"+
+ "#\3\2\2\2\u00ca\u00cb\7\24\2\2\u00cb%\3\2\2\2\u00cc\u00cd\7\25\2\2\u00cd"+
+ "\'\3\2\2\2\u00ce\u00cf\t\3\2\2\u00cf)\3\2\2\2\u00d0\u00d1\t\4\2\2\u00d1"+
+ "+\3\2\2\2\u00d2\u00d8\5*\26\2\u00d3\u00d8\7\32\2\2\u00d4\u00d8\7\33\2"+
+ "\2\u00d5\u00d8\7!\2\2\u00d6\u00d8\7\"\2\2\u00d7\u00d2\3\2\2\2\u00d7\u00d3"+
+ "\3\2\2\2\u00d7\u00d4\3\2\2\2\u00d7\u00d5\3\2\2\2\u00d7\u00d6\3\2\2\2\u00d8"+
+ "-\3\2\2\2\u00d9\u00da\7\32\2\2\u00da/\3\2\2\2\f9FNZ_\u009c\u00a1\u00ab"+
+ "\u00ad\u00d7";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.tokens b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.tokens
index a855399..a1bc8bf 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.tokens
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParser.tokens
@@ -16,17 +16,20 @@ RPAREN=15
NULL=16
IN=17
LIMIT=18
-COMMA=19
-IDENTIFIER=20
-POS_INTEGER=21
-DECIMAL=22
-SINGLE_STRING=23
-DOUBLE_STRING=24
-EMPTY_SINGLE_STRING=25
-EMPTY_DOUBLE_STRING=26
-WS=27
-DATE=28
-DATETIME=29
+ORDERBY=19
+ASC=20
+DESC=21
+COMMA=22
+IDENTIFIER=23
+POS_INTEGER=24
+DECIMAL=25
+SINGLE_STRING=26
+DOUBLE_STRING=27
+EMPTY_SINGLE_STRING=28
+EMPTY_DOUBLE_STRING=29
+WS=30
+DATE=31
+DATETIME=32
'>'=6
'>='=7
'<'=8
@@ -36,4 +39,4 @@ DATETIME=29
'('=14
')'=15
'null'=16
-','=19
+','=22
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserBaseListener.java b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserBaseListener.java
index 9c66a47..0b55de5 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserBaseListener.java
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserBaseListener.java
@@ -17,7 +17,7 @@
* limitations under the License.
* #L%
*/
-// Generated from CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
+// Generated from src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
package com.amazonaws.appflow.custom.connector.queryfilter.antlr;
@@ -56,6 +56,18 @@ public class CustomConnectorQueryFilterParserBaseListener implements CustomConne
* The default implementation does nothing.
*/
@Override public void exitLimitExpression(CustomConnectorQueryFilterParser.LimitExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterOrderByExpression(CustomConnectorQueryFilterParser.OrderByExpressionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitOrderByExpression(CustomConnectorQueryFilterParser.OrderByExpressionContext ctx) { }
/**
* {@inheritDoc}
*
@@ -428,6 +440,30 @@ public class CustomConnectorQueryFilterParserBaseListener implements CustomConne
* The default implementation does nothing.
*/
@Override public void exitLimit(CustomConnectorQueryFilterParser.LimitContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterOrderby(CustomConnectorQueryFilterParser.OrderbyContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitOrderby(CustomConnectorQueryFilterParser.OrderbyContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterOrder(CustomConnectorQueryFilterParser.OrderContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitOrder(CustomConnectorQueryFilterParser.OrderContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserBaseVisitor.java b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserBaseVisitor.java
index e74a925..f0889d1 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserBaseVisitor.java
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserBaseVisitor.java
@@ -17,7 +17,7 @@
* limitations under the License.
* #L%
*/
-// Generated from CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
+// Generated from src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
package com.amazonaws.appflow.custom.connector.queryfilter.antlr;
@@ -46,6 +46,13 @@ public class CustomConnectorQueryFilterParserBaseVisitor extends AbstractPars
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitLimitExpression(CustomConnectorQueryFilterParser.LimitExpressionContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitOrderByExpression(CustomConnectorQueryFilterParser.OrderByExpressionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
@@ -263,6 +270,20 @@ public class CustomConnectorQueryFilterParserBaseVisitor extends AbstractPars
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitLimit(CustomConnectorQueryFilterParser.LimitContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitOrderby(CustomConnectorQueryFilterParser.OrderbyContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitOrder(CustomConnectorQueryFilterParser.OrderContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserListener.java b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserListener.java
index df97ba3..51c3ef6 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserListener.java
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserListener.java
@@ -17,7 +17,7 @@
* limitations under the License.
* #L%
*/
-// Generated from CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
+// Generated from src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
package com.amazonaws.appflow.custom.connector.queryfilter.antlr;
@@ -40,16 +40,28 @@ public interface CustomConnectorQueryFilterParserListener extends ParseTreeListe
void exitQueryfilter(CustomConnectorQueryFilterParser.QueryfilterContext ctx);
/**
* Enter a parse tree produced by the {@code limitExpression}
- * labeled alternative in {@link CustomConnectorQueryFilterParser#limitexpression}.
+ * labeled alternative in {@link CustomConnectorQueryFilterParser#limitexpr}.
* @param ctx the parse tree
*/
void enterLimitExpression(CustomConnectorQueryFilterParser.LimitExpressionContext ctx);
/**
* Exit a parse tree produced by the {@code limitExpression}
- * labeled alternative in {@link CustomConnectorQueryFilterParser#limitexpression}.
+ * labeled alternative in {@link CustomConnectorQueryFilterParser#limitexpr}.
* @param ctx the parse tree
*/
void exitLimitExpression(CustomConnectorQueryFilterParser.LimitExpressionContext ctx);
+ /**
+ * Enter a parse tree produced by the {@code orderByExpression}
+ * labeled alternative in {@link CustomConnectorQueryFilterParser#orderbyexpr}.
+ * @param ctx the parse tree
+ */
+ void enterOrderByExpression(CustomConnectorQueryFilterParser.OrderByExpressionContext ctx);
+ /**
+ * Exit a parse tree produced by the {@code orderByExpression}
+ * labeled alternative in {@link CustomConnectorQueryFilterParser#orderbyexpr}.
+ * @param ctx the parse tree
+ */
+ void exitOrderByExpression(CustomConnectorQueryFilterParser.OrderByExpressionContext ctx);
/**
* Enter a parse tree produced by the {@code lesserThanComparatorExpression}
* labeled alternative in {@link CustomConnectorQueryFilterParser#expression}.
@@ -394,6 +406,26 @@ public interface CustomConnectorQueryFilterParserListener extends ParseTreeListe
* @param ctx the parse tree
*/
void exitLimit(CustomConnectorQueryFilterParser.LimitContext ctx);
+ /**
+ * Enter a parse tree produced by {@link CustomConnectorQueryFilterParser#orderby}.
+ * @param ctx the parse tree
+ */
+ void enterOrderby(CustomConnectorQueryFilterParser.OrderbyContext ctx);
+ /**
+ * Exit a parse tree produced by {@link CustomConnectorQueryFilterParser#orderby}.
+ * @param ctx the parse tree
+ */
+ void exitOrderby(CustomConnectorQueryFilterParser.OrderbyContext ctx);
+ /**
+ * Enter a parse tree produced by {@link CustomConnectorQueryFilterParser#order}.
+ * @param ctx the parse tree
+ */
+ void enterOrder(CustomConnectorQueryFilterParser.OrderContext ctx);
+ /**
+ * Exit a parse tree produced by {@link CustomConnectorQueryFilterParser#order}.
+ * @param ctx the parse tree
+ */
+ void exitOrder(CustomConnectorQueryFilterParser.OrderContext ctx);
/**
* Enter a parse tree produced by {@link CustomConnectorQueryFilterParser#string}.
* @param ctx the parse tree
diff --git a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserVisitor.java b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserVisitor.java
index c717a3a..327f2fb 100644
--- a/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserVisitor.java
+++ b/custom-connector-queryfilter/src/main/java/com/amazonaws/appflow/custom/connector/queryfilter/antlr/CustomConnectorQueryFilterParserVisitor.java
@@ -17,7 +17,7 @@
* limitations under the License.
* #L%
*/
-// Generated from CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
+// Generated from src/main/configuration/grammar/CustomConnectorQueryFilterParser.g4 by ANTLR 4.9.3
package com.amazonaws.appflow.custom.connector.queryfilter.antlr;
@@ -39,11 +39,18 @@ public interface CustomConnectorQueryFilterParserVisitor extends ParseTreeVis
T visitQueryfilter(CustomConnectorQueryFilterParser.QueryfilterContext ctx);
/**
* Visit a parse tree produced by the {@code limitExpression}
- * labeled alternative in {@link CustomConnectorQueryFilterParser#limitexpression}.
+ * labeled alternative in {@link CustomConnectorQueryFilterParser#limitexpr}.
* @param ctx the parse tree
* @return the visitor result
*/
T visitLimitExpression(CustomConnectorQueryFilterParser.LimitExpressionContext ctx);
+ /**
+ * Visit a parse tree produced by the {@code orderByExpression}
+ * labeled alternative in {@link CustomConnectorQueryFilterParser#orderbyexpr}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitOrderByExpression(CustomConnectorQueryFilterParser.OrderByExpressionContext ctx);
/**
* Visit a parse tree produced by the {@code lesserThanComparatorExpression}
* labeled alternative in {@link CustomConnectorQueryFilterParser#expression}.
@@ -247,6 +254,18 @@ public interface CustomConnectorQueryFilterParserVisitor extends ParseTreeVis
* @return the visitor result
*/
T visitLimit(CustomConnectorQueryFilterParser.LimitContext ctx);
+ /**
+ * Visit a parse tree produced by {@link CustomConnectorQueryFilterParser#orderby}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitOrderby(CustomConnectorQueryFilterParser.OrderbyContext ctx);
+ /**
+ * Visit a parse tree produced by {@link CustomConnectorQueryFilterParser#order}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitOrder(CustomConnectorQueryFilterParser.OrderContext ctx);
/**
* Visit a parse tree produced by {@link CustomConnectorQueryFilterParser#string}.
* @param ctx the parse tree
diff --git a/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/CustomConnectorParseTreeBuilderTest.java b/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/CustomConnectorParseTreeBuilderTest.java
index bc00e6f..ac63132 100644
--- a/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/CustomConnectorParseTreeBuilderTest.java
+++ b/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/CustomConnectorParseTreeBuilderTest.java
@@ -52,7 +52,13 @@ private static Stream validFilterExpressions() {
return Stream.of(
Arguments.of("os = \"mojave\""),
Arguments.of("os != \"mojave\""),
+ Arguments.of("ORDER BY xyz ASC"),
+ Arguments.of("ORDER BY xyz DESC"),
+ Arguments.of("ORDER BY xyz, abc, def DESC"),
+ Arguments.of("order by foobar asc"),
Arguments.of("LIMIT 100"),
+ Arguments.of("ORDER BY abc, def DESC LIMIT 100"),
+ Arguments.of("os != \"mojave\" ORDER BY os ASC"),
Arguments.of("accountId > 90"),
Arguments.of("dateRange BETWEEN 1611639470000 AND 1611639476298"),
Arguments.of("date BETWEEN 1511630000000 AND 1611639476298"),
@@ -62,6 +68,7 @@ private static Stream validFilterExpressions() {
Arguments.of("accountId <= 100 LIMIT 100"),
Arguments.of("accountId BETWEEN 90 AND 100"),
Arguments.of("accountId BETWEEN 90 AND 100 LIMIT 100"),
+ Arguments.of("accountId BETWEEN 90 AND 100 ORDER BY date ASC LIMIT 100"),
Arguments.of("os CONTAINS \"mojave\""),
Arguments.of("os CONTAINS \"moj%ave\""),
Arguments.of("os = \"mojave\" and app = \"mo\""),
@@ -84,6 +91,13 @@ private static Stream invalidFilterExpressions() {
Arguments.of("os == \"mojave\""),
Arguments.of("os <> \"mojave\""),
Arguments.of("LIMIT 100 LIMIT 100"),
+ Arguments.of("ORDER BY"),
+ Arguments.of("ORDER BY ASC"),
+ Arguments.of("ORDER BY xyz"),
+ Arguments.of("ORDER BY xyz abc DESC"),
+ Arguments.of("LIMIT 100 ORDER BY xyz"),
+ Arguments.of("ORDER BY xyz ASC ORDER BY xyz DESC"),
+ Arguments.of("ORDER BY 123"),
Arguments.of("accountId => 90"),
Arguments.of("accountId >= 90 LIMIT"),
Arguments.of("accountId >= 90 LIMIT 0"),
diff --git a/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/QueryFilterExpressionVisitorTest.java b/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/QueryFilterExpressionVisitorTest.java
index 8c5cf54..e492735 100644
--- a/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/QueryFilterExpressionVisitorTest.java
+++ b/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/QueryFilterExpressionVisitorTest.java
@@ -48,6 +48,11 @@ private static Stream getValidFilterExpression() {
return Stream.of(
Arguments.of("os = \"mojave\"", 2),
Arguments.of("os != \"mojave\"", 2),
+ Arguments.of("ORDER BY os ASC", 1),
+ Arguments.of("ORDER BY os, name ASC", 1),
+ Arguments.of("os != \"mojave\" ORDER BY os ASC", 3),
+ Arguments.of("ORDER BY os ASC LIMIT 100", 3),
+ Arguments.of("ORDER BY os, name ASC LIMIT 100", 3),
Arguments.of("LIMIT 100", 2),
Arguments.of("accountId > 90", 2),
Arguments.of("dateRange BETWEEN 1611639470000 AND 1611639476298", 3),
@@ -56,6 +61,7 @@ private static Stream getValidFilterExpression() {
Arguments.of("accountId < 100", 2),
Arguments.of("accountId >= 90", 2),
Arguments.of("accountId >= 90 LIMIT 100", 4),
+ Arguments.of("accountId >= 90 ORDER BY name ASC LIMIT 100", 5),
Arguments.of("accountId <= 100", 2),
Arguments.of("account-Id <= 100", 2),
Arguments.of("account.Id <= 100", 2),
diff --git a/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/TestQueryFilterExpressionVisitor.java b/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/TestQueryFilterExpressionVisitor.java
index 071c6c2..d69abbe 100644
--- a/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/TestQueryFilterExpressionVisitor.java
+++ b/custom-connector-queryfilter/src/test/java/com/amazonaws/appflow/custom/connector/queryfilter/TestQueryFilterExpressionVisitor.java
@@ -160,4 +160,10 @@ public Integer visitCountValueExpression(CustomConnectorQueryFilterParser.CountV
countOfExpressionsVisited++;
return super.visitCountValueExpression(ctx);
}
+
+ @Override
+ public Integer visitOrderByExpression(CustomConnectorQueryFilterParser.OrderByExpressionContext ctx) {
+ countOfExpressionsVisited++;
+ return super.visitOrderByExpression(ctx);
+ }
}
diff --git a/pom.xml b/pom.xml
index 76a703e..a23159b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -68,8 +68,8 @@
- custom-connector-sdk
custom-connector-queryfilter
+ custom-connector-sdk
custom-connector-example
custom-connector-tests
custom-connector-integ-test