This is an automated email from the ASF dual-hosted git repository.

tkalkirill pushed a commit to branch ignite-28739-new
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 3353e3d107d023f0e9247728cbdd15b01ee79b2a
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Tue Aug 11 13:41:24 2026 +0300

    IGNITE-28739 Wip
---
 modules/calcite/pom.xml                            |    7 +
 .../src/main/codegen/includes/parserImpls.ftl      |   16 +
 .../codegen/patches/select-fetch-expression.patch  |   26 +
 .../query/calcite/prepare/IgnitePlanner.java       |    9 +-
 .../calcite/prepare/IgniteRelFieldTrimmer.java     |   92 +
 .../calcite/prepare/IgniteSqlToRelConvertor.java   |    6 +
 .../query/calcite/prepare/IgniteSqlValidator.java  |   97 +-
 .../query/calcite/prepare/PlannerPhase.java        |    5 +-
 .../calcite/sql/generated/IgniteSqlParserImpl.java | 2525 ++++++++++----------
 .../DynamicParametersIntegrationTest.java          |  138 ++
 .../integration/LimitOffsetIntegrationTest.java    |  127 +-
 11 files changed, 1772 insertions(+), 1276 deletions(-)

diff --git a/modules/calcite/pom.xml b/modules/calcite/pom.xml
index f527c6bee09..7bfedc5caa8 100644
--- a/modules/calcite/pom.xml
+++ b/modules/calcite/pom.xml
@@ -351,6 +351,13 @@
                                     
outputRoot="${project.build.directory}/generated-sources/fmpp"
                                     
data="tdd(${project.build.directory}/codegen/config.fmpp), default: 
tdd(${project.build.directory}/codegen/default_config.fmpp)"
                                 />
+                                <!-- TODO: 
https://issues.apache.org/jira/browse/CALCITE-7592
+                                     Remove this workaround and 
select-fetch-expression.patch after upgrading to Calcite 1.43. -->
+                                <patch
+                                    
dir="${project.build.directory}/generated-sources/fmpp"
+                                    
patchfile="${project.build.directory}/codegen/patches/select-fetch-expression.patch"
+                                    strip="1"
+                                />
                             </target>
                         </configuration>
                     </execution>
diff --git a/modules/calcite/src/main/codegen/includes/parserImpls.ftl 
b/modules/calcite/src/main/codegen/includes/parserImpls.ftl
index 8c5c964b609..c2cf7559328 100644
--- a/modules/calcite/src/main/codegen/includes/parserImpls.ftl
+++ b/modules/calcite/src/main/codegen/includes/parserImpls.ftl
@@ -816,3 +816,19 @@ SqlDrop SqlDropView(Span s, boolean replace) :
         return SqlDdlNodes.dropView(s.end(this), ifExists, id);
     }
 }
+
+// TODO: https://issues.apache.org/jira/browse/CALCITE-7592
+//  Remove this method and select-fetch-expression.patch after upgrading to 
Calcite 1.43.
+JAVACODE
+SqlNode FetchCount() {
+    SqlNode e;
+    if (getToken(1).kind == LPAREN) {
+        jj_consume_token(LPAREN);
+        e = Expression(ExprContext.ACCEPT_NON_QUERY);
+        jj_consume_token(RPAREN);
+    }
+    else
+        e = UnsignedNumericLiteralOrParam();
+
+    return e;
+}
diff --git 
a/modules/calcite/src/main/codegen/patches/select-fetch-expression.patch 
b/modules/calcite/src/main/codegen/patches/select-fetch-expression.patch
new file mode 100644
index 00000000000..60ec72ffb85
--- /dev/null
+++ b/modules/calcite/src/main/codegen/patches/select-fetch-expression.patch
@@ -0,0 +1,26 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+--- a/javacc/Parser.jj
++++ b/javacc/Parser.jj
+@@ -765,7 +765,7 @@
+ {
+     // SQL:2008-style syntax. "OFFSET ... FETCH ...".
+     // If you specify both LIMIT and FETCH, FETCH wins.
+-    <FETCH> ( <FIRST> | <NEXT> ) offsetFetch[1] = 
UnsignedNumericLiteralOrParam()
++    <FETCH> ( <FIRST> | <NEXT> ) offsetFetch[1] = FetchCount()
+     ( <ROW> | <ROWS> ) <ONLY>
+ }
diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
index 553ca3ba89a..a29571d4195 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgnitePlanner.java
@@ -343,7 +343,14 @@ public class IgnitePlanner implements Planner, 
RelOptTable.ViewExpander {
 
     /** {@inheritDoc} */
     @Override public RelRoot rel(SqlNode sql) {
-        SqlToRelConverter sqlToRelConverter = sqlToRelConverter(validator(), 
catalogReader, sqlToRelConverterCfg);
+        // TODO: https://issues.apache.org/jira/browse/CALCITE-7592
+        //  Restore the original implementation after upgrading to Calcite 
1.43: use validator() directly and remove
+        //  deriveLimitDynamicParameterTypes().
+        IgniteSqlValidator validator = (IgniteSqlValidator)validator();
+
+        validator.deriveLimitDynamicParameterTypes(sql);
+
+        SqlToRelConverter sqlToRelConverter = sqlToRelConverter(validator, 
catalogReader, sqlToRelConverterCfg);
 
         return sqlToRelConverter.convertQuery(sql, false, true);
     }
diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteRelFieldTrimmer.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteRelFieldTrimmer.java
new file mode 100644
index 00000000000..b1b4f97e866
--- /dev/null
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteRelFieldTrimmer.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.processors.query.calcite.prepare;
+
+import java.util.Set;
+import org.apache.calcite.rel.RelCollation;
+import org.apache.calcite.rel.RelFieldCollation;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Sort;
+import org.apache.calcite.rel.type.RelDataTypeField;
+import org.apache.calcite.rex.RexDynamicParam;
+import org.apache.calcite.rex.RexLiteral;
+import org.apache.calcite.rex.RexNode;
+import org.apache.calcite.rex.RexUtil;
+import org.apache.calcite.sql.validate.SqlValidator;
+import org.apache.calcite.sql2rel.RelFieldTrimmer;
+import org.apache.calcite.tools.RelBuilder;
+import org.apache.calcite.util.ImmutableBitSet;
+import org.apache.calcite.util.mapping.Mapping;
+import org.apache.calcite.util.mapping.Mappings;
+import org.jetbrains.annotations.Nullable;
+
+import static java.util.Collections.emptySet;
+
+/** Field trimmer that preserves expression-based FETCH nodes. */
+// TODO: https://issues.apache.org/jira/browse/CALCITE-7592
+//  Remove this class and IgniteSqlToRelConvertor.newFieldTrimmer() after 
upgrading to Calcite 1.43.
+public class IgniteRelFieldTrimmer extends RelFieldTrimmer {
+    /**  */
+    IgniteRelFieldTrimmer(@Nullable SqlValidator validator, RelBuilder 
relBuilder) {
+        super(validator, relBuilder);
+    }
+
+    /** {@inheritDoc} */
+    @Override public TrimResult trimFields(
+        Sort sort,
+        ImmutableBitSet fieldsUsed,
+        Set<RelDataTypeField> extraFields
+    ) {
+        if (supportedByRelBuilder(sort.fetch))
+            return super.trimFields(sort, fieldsUsed, extraFields);
+
+        RelCollation collation = sort.getCollation();
+        RelNode input = sort.getInput();
+        int fieldCnt = sort.getRowType().getFieldCount();
+
+        ImmutableBitSet.Builder inputFieldsUsed = fieldsUsed.rebuild();
+
+        for (RelFieldCollation field : collation.getFieldCollations())
+            inputFieldsUsed.set(field.getFieldIndex());
+
+        TrimResult trimRes = trimChild(sort, input, inputFieldsUsed.build(), 
emptySet());
+        RelNode newInput = trimRes.left;
+        Mapping inputMapping = trimRes.right;
+
+        if (newInput == input && inputMapping.isIdentity() && 
fieldsUsed.cardinality() == fieldCnt)
+            return result(sort, Mappings.createIdentity(fieldCnt));
+
+        RelNode newSort = sort.copy(
+            sort.getTraitSet(),
+            newInput,
+            RexUtil.apply(inputMapping, collation),
+            sort.offset,
+            sort.fetch
+        );
+
+        return result(newSort, inputMapping, sort);
+    }
+
+    /**
+     * @param node Rex node.
+     * @return {@code true} if Calcite RelBuilder accepts the node for FETCH.
+     */
+    private static boolean supportedByRelBuilder(@Nullable RexNode node) {
+        return node == null || node instanceof RexLiteral || node instanceof 
RexDynamicParam;
+    }
+}
diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlToRelConvertor.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlToRelConvertor.java
index fa8b31d7eee..61ea5ba35bf 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlToRelConvertor.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlToRelConvertor.java
@@ -46,6 +46,7 @@ import org.apache.calcite.sql.util.SqlShuttle;
 import org.apache.calcite.sql.validate.SqlValidator;
 import org.apache.calcite.sql.validate.SqlValidatorScope;
 import org.apache.calcite.sql.validate.SqlValidatorUtil;
+import org.apache.calcite.sql2rel.RelFieldTrimmer;
 import org.apache.calcite.sql2rel.SqlRexConvertletTable;
 import org.apache.calcite.sql2rel.SqlToRelConverter;
 import org.apache.calcite.tools.RelBuilder;
@@ -87,6 +88,11 @@ public class IgniteSqlToRelConvertor extends 
SqlToRelConverter {
             return super.convertQueryRecursive(qry, top, targetRowType);
     }
 
+    /** {@inheritDoc} */
+    @Override protected RelFieldTrimmer newFieldTrimmer() {
+        return new IgniteRelFieldTrimmer(validator, relBuilder);
+    }
+
     /** {@inheritDoc} */
     @Override protected RelNode convertInsert(SqlInsert call) {
         datasetStack.push(call);
diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
index 22d9be1f083..6386f346369 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteSqlValidator.java
@@ -48,6 +48,7 @@ import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlNodeList;
 import org.apache.calcite.sql.SqlNumericLiteral;
 import org.apache.calcite.sql.SqlOperatorTable;
+import org.apache.calcite.sql.SqlOrderBy;
 import org.apache.calcite.sql.SqlSelect;
 import org.apache.calcite.sql.SqlUpdate;
 import org.apache.calcite.sql.SqlUtil;
@@ -243,10 +244,49 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
     @Override protected void validateSelect(SqlSelect select, RelDataType 
targetRowType) {
         super.validateSelect(select, targetRowType);
 
-        validateFetchOffset(select.getFetch(), "fetch / limit");
+        validateFetch(select, "fetch / limit");
         validateFetchOffset(select.getOffset(), "offset");
     }
 
+    /** Validate fetch expression. */
+    // TODO: https://issues.apache.org/jira/browse/CALCITE-7592
+    //  Remove this method after upgrading to Calcite 1.43.
+    private void validateFetch(SqlSelect select, String clauseName) {
+        SqlNode fetch = select.getFetch();
+
+        if (fetch == null)
+            return;
+
+        validateFetchExpression(fetch, clauseName);
+        deriveDynamicParameterTypes(fetch);
+
+        RelDataType type = deriveType(getWhereScope(select), fetch);
+
+        if (type.getSqlTypeName().getFamily() != SqlTypeFamily.NUMERIC)
+            throw newValidationError(fetch, 
IgniteResource.INSTANCE.illegalFetchLimit(clauseName));
+
+        validateFetchOffset(fetch, clauseName);
+    }
+
+    /** Reject column references in a fetch expression. */
+    // TODO: https://issues.apache.org/jira/browse/CALCITE-7592
+    //  Remove this method after upgrading to Calcite 1.43.
+    private void validateFetchExpression(SqlNode node, String clauseName) {
+        if (node instanceof SqlIdentifier)
+            throw newValidationError(node, 
IgniteResource.INSTANCE.illegalFetchLimit(clauseName));
+
+        if (node instanceof SqlNodeList) {
+            for (SqlNode child : (SqlNodeList)node)
+                validateFetchExpression(child, clauseName);
+        }
+        else if (node instanceof SqlCall) {
+            for (SqlNode child : ((SqlCall)node).getOperandList()) {
+                if (child != null)
+                    validateFetchExpression(child, clauseName);
+            }
+        }
+    }
+
     /**
      * Validate fetch/offset params restrictions.
      *
@@ -258,7 +298,12 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
             return;
 
         if (n instanceof SqlLiteral) {
-            BigDecimal offsetFetchLimit = ((SqlLiteral)n).bigDecimalValue();
+            SqlLiteral literal = (SqlLiteral)n;
+
+            if (literal.getTypeName().getFamily() != SqlTypeFamily.NUMERIC)
+                throw newValidationError(n, 
IgniteResource.INSTANCE.illegalFetchLimit(clauseName));
+
+            BigDecimal offsetFetchLimit = literal.bigDecimalValue();
 
             checkLimitOffset(offsetFetchLimit, n, clauseName);
         }
@@ -723,6 +768,54 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
         super.validateUnnest(call, scope, targetRowType);
     }
 
+    /** Derive types of dynamic parameters in a fetch expression. */
+    // TODO: https://issues.apache.org/jira/browse/CALCITE-7592
+    //  Remove this method after upgrading to Calcite 1.43.
+    private void deriveDynamicParameterTypes(SqlNode n) {
+        if (n instanceof SqlDynamicParam) {
+            SqlDynamicParam paramNode = (SqlDynamicParam)n;
+
+            RelDataType type = 
typeFactory().createSqlType(SqlTypeName.DECIMAL);
+            RelDataType dataType = 
typeFactory().createTypeWithNullability(type, true);
+
+            type = deriveDynamicParameterType(paramNode, dataType);
+
+            if (type == null)
+                setValidatedNodeType(paramNode, dataType);
+        }
+        else if (n instanceof SqlNodeList) {
+            for (SqlNode node : (SqlNodeList)n)
+                deriveDynamicParameterTypes(node);
+        }
+        else if (n instanceof SqlCall) {
+            for (SqlNode operand : ((SqlCall)n).getOperandList())
+                deriveDynamicParameterTypes(operand);
+        }
+    }
+
+    /** Derive types of dynamic parameters in all fetch expressions. */
+    // TODO: https://issues.apache.org/jira/browse/CALCITE-7592
+    //  Remove this method after upgrading to Calcite 1.43.
+    public void deriveLimitDynamicParameterTypes(SqlNode n) {
+        if (n instanceof SqlSelect) {
+            SqlSelect select = (SqlSelect)n;
+
+            deriveDynamicParameterTypes(select.getFetch());
+        }
+        else if (n instanceof SqlOrderBy) {
+            SqlOrderBy orderBy = (SqlOrderBy)n;
+
+            deriveDynamicParameterTypes(orderBy.fetch);
+        }
+
+        if (n instanceof SqlCall) {
+            for (SqlNode operand : ((SqlCall)n).getOperandList()) {
+                if (operand != null)
+                    deriveLimitDynamicParameterTypes(operand);
+            }
+        }
+    }
+
     /**
      * Interface to define extension to the configuration for a 
IgniteSqlValidator.
      */
diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerPhase.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerPhase.java
index 1ac34eab526..e7f790625ec 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerPhase.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/PlannerPhase.java
@@ -43,6 +43,7 @@ import org.apache.calcite.rel.rules.ProjectRemoveRule;
 import org.apache.calcite.rel.rules.PruneEmptyRules;
 import org.apache.calcite.rel.rules.SetOpToFilterRule;
 import org.apache.calcite.rel.rules.SortRemoveRule;
+import org.apache.calcite.rex.RexLiteral;
 import org.apache.calcite.tools.Program;
 import org.apache.calcite.tools.RuleSet;
 import org.apache.calcite.tools.RuleSets;
@@ -281,7 +282,9 @@ public enum PlannerPhase {
 
                     
((RelRule<?>)PruneEmptyRules.SORT_FETCH_ZERO_INSTANCE).config
                         .withOperandSupplier(b ->
-                            b.operand(LogicalSort.class).anyInputs())
+                            b.operand(LogicalSort.class)
+                                .predicate(sort -> sort.fetch instanceof 
RexLiteral)
+                                .anyInputs())
                         .toRule(),
 
                     ExposeIndexRule.INSTANCE,
diff --git 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/generated/IgniteSqlParserImpl.java
 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/generated/IgniteSqlParserImpl.java
index 43055c6234e..24fa792bcb9 100644
--- 
a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/generated/IgniteSqlParserImpl.java
+++ 
b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/generated/IgniteSqlParserImpl.java
@@ -698,7 +698,7 @@ public class IgniteSqlParserImpl extends 
SqlAbstractParserImpl implements Ignite
       jj_consume_token(-1);
       throw new ParseException();
     }
-    offsetFetch[1] = UnsignedNumericLiteralOrParam();
+    offsetFetch[1] = FetchCount();
     if (jj_2_19(2)) {
       jj_consume_token(ROW);
     } else if (jj_2_20(2)) {
@@ -2046,6 +2046,19 @@ public class IgniteSqlParserImpl extends 
SqlAbstractParserImpl implements Ignite
     throw new Error("Missing return statement in function");
   }
 
+  SqlNode FetchCount() throws ParseException {
+    SqlNode e;
+    if (getToken(1).kind == LPAREN) {
+        jj_consume_token(LPAREN);
+        e = Expression(ExprContext.ACCEPT_NON_QUERY);
+        jj_consume_token(RPAREN);
+    }
+    else
+        e = UnsignedNumericLiteralOrParam();
+
+    return e;
+  }
+
   final public SqlNodeList ParenthesizedKeyValueOptionCommaList() throws 
ParseException {
     final Span s;
     final List<SqlNode> list = new ArrayList<SqlNode>();
@@ -24595,68 +24608,6 @@ final String p;
     finally { jj_save(1828, xla); }
   }
 
-  final private boolean jj_3R_262() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_615()) {
-    jj_scanpos = xsp;
-    if (jj_3_616()) return true;
-    }
-    return false;
-  }
-
-  final private boolean jj_3_615() {
-    if (jj_scan_token(SECOND)) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_349() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_268()) {
-    jj_scanpos = xsp;
-    if (jj_3_269()) {
-    jj_scanpos = xsp;
-    if (jj_3_270()) {
-    jj_scanpos = xsp;
-    if (jj_3_271()) {
-    jj_scanpos = xsp;
-    if (jj_3_272()) return true;
-    }
-    }
-    }
-    }
-    xsp = jj_scanpos;
-    if (jj_3_273()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3_274()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3_277()) jj_scanpos = xsp;
-    xsp = jj_scanpos;
-    if (jj_3_278()) jj_scanpos = xsp;
-    return false;
-  }
-
-  final private boolean jj_3_614() {
-    if (jj_scan_token(MINUTES)) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_261() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_613()) {
-    jj_scanpos = xsp;
-    if (jj_3_614()) return true;
-    }
-    return false;
-  }
-
-  final private boolean jj_3_613() {
-    if (jj_scan_token(MINUTE)) return true;
-    return false;
-  }
-
   final private boolean jj_3_612() {
     if (jj_scan_token(HOURS)) return true;
     return false;
@@ -28896,21 +28847,15 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_246() {
-    if (jj_scan_token(VIEW)) return true;
-    if (jj_3R_134()) return true;
-    if (jj_3R_153()) return true;
-    return false;
-  }
-
   final private boolean jj_3R_300() {
     if (jj_scan_token(DATETIME_TRUNC)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3R_242() {
+  final private boolean jj_3R_246() {
     if (jj_scan_token(VIEW)) return true;
+    if (jj_3R_134()) return true;
     if (jj_3R_153()) return true;
     return false;
   }
@@ -28937,9 +28882,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_105() {
-    if (jj_scan_token(ANALYZE)) return true;
-    if (jj_3R_358()) return true;
+  final private boolean jj_3R_242() {
+    if (jj_scan_token(VIEW)) return true;
+    if (jj_3R_153()) return true;
     return false;
   }
 
@@ -28954,9 +28899,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_106() {
-    if (jj_scan_token(REFRESH)) return true;
-    if (jj_scan_token(STATISTICS)) return true;
+  final private boolean jj_3R_105() {
+    if (jj_scan_token(ANALYZE)) return true;
+    if (jj_3R_358()) return true;
     return false;
   }
 
@@ -28966,14 +28911,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_107() {
-    if (jj_scan_token(DROP)) return true;
-    if (jj_scan_token(STATISTICS)) return true;
+  final private boolean jj_3_470() {
+    if (jj_3R_223()) return true;
     return false;
   }
 
-  final private boolean jj_3_470() {
-    if (jj_3R_223()) return true;
+  final private boolean jj_3R_106() {
+    if (jj_scan_token(REFRESH)) return true;
+    if (jj_scan_token(STATISTICS)) return true;
     return false;
   }
 
@@ -28997,13 +28942,25 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_147() {
-    if (jj_3R_85()) return true;
+  final private boolean jj_3_944() {
+    if (jj_3R_274()) return true;
     return false;
   }
 
-  final private boolean jj_3_944() {
-    if (jj_3R_274()) return true;
+  final private boolean jj_3R_107() {
+    if (jj_scan_token(DROP)) return true;
+    if (jj_scan_token(STATISTICS)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_299() {
+    if (jj_scan_token(DATE_TRUNC)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_147() {
+    if (jj_3R_85()) return true;
     return false;
   }
 
@@ -29012,14 +28969,41 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_468() {
+    if (jj_scan_token(EQUALS)) return true;
+    return false;
+  }
+
   final private boolean jj_3R_137() {
     if (jj_3R_368()) return true;
     if (jj_scan_token(EQ)) return true;
     return false;
   }
 
-  final private boolean jj_3R_299() {
-    if (jj_scan_token(DATE_TRUNC)) return true;
+  final private boolean jj_3_467() {
+    if (jj_scan_token(SUCCEEDS)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_466() {
+    if (jj_scan_token(IMMEDIATELY)) return true;
+    if (jj_scan_token(SUCCEEDS)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_465() {
+    if (jj_scan_token(PRECEDES)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_464() {
+    if (jj_scan_token(IMMEDIATELY)) return true;
+    if (jj_scan_token(PRECEDES)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_302() {
+    if (jj_scan_token(DATETIME_DIFF)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
@@ -29029,6 +29013,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_463() {
+    if (jj_scan_token(OVERLAPS)) return true;
+    return false;
+  }
+
   final private boolean jj_3_144() {
     if (jj_scan_token(NULLS)) return true;
     return false;
@@ -29039,21 +29028,11 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_468() {
-    if (jj_scan_token(EQUALS)) return true;
-    return false;
-  }
-
   final private boolean jj_3_142() {
     if (jj_scan_token(TOTAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_467() {
-    if (jj_scan_token(SUCCEEDS)) return true;
-    return false;
-  }
-
   final private boolean jj_3R_368() {
     Token xsp;
     xsp = jj_scanpos;
@@ -29078,26 +29057,24 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_466() {
-    if (jj_scan_token(IMMEDIATELY)) return true;
-    if (jj_scan_token(SUCCEEDS)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_465() {
-    if (jj_scan_token(PRECEDES)) return true;
+  final private boolean jj_3_462() {
+    if (jj_3R_135()) return true;
     return false;
   }
 
-  final private boolean jj_3_464() {
-    if (jj_scan_token(IMMEDIATELY)) return true;
-    if (jj_scan_token(PRECEDES)) return true;
+  final private boolean jj_3R_428() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_461()) {
+    jj_scanpos = xsp;
+    if (jj_3_462()) return true;
+    }
     return false;
   }
 
-  final private boolean jj_3R_302() {
-    if (jj_scan_token(DATETIME_DIFF)) return true;
+  final private boolean jj_3_461() {
     if (jj_scan_token(LPAREN)) return true;
+    if (jj_scan_token(RPAREN)) return true;
     return false;
   }
 
@@ -29106,40 +29083,20 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_463() {
-    if (jj_scan_token(OVERLAPS)) return true;
-    return false;
-  }
-
   final private boolean jj_3_137() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_137()) return true;
     return false;
   }
 
-  final private boolean jj_3_138() {
-    if (jj_3R_137()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_462() {
-    if (jj_3R_135()) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_428() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_461()) {
-    jj_scanpos = xsp;
-    if (jj_3_462()) return true;
-    }
+  final private boolean jj_3R_304() {
+    if (jj_scan_token(TIMESTAMP_DIFF)) return true;
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_461() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_scan_token(RPAREN)) return true;
+  final private boolean jj_3_138() {
+    if (jj_3R_137()) return true;
     return false;
   }
 
@@ -29154,9 +29111,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_304() {
-    if (jj_scan_token(TIMESTAMP_DIFF)) return true;
-    if (jj_scan_token(LPAREN)) return true;
+  final private boolean jj_3R_420() {
+    if (jj_3R_428()) return true;
+    if (jj_scan_token(LAMBDA)) return true;
     return false;
   }
 
@@ -29166,9 +29123,10 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_420() {
-    if (jj_3R_428()) return true;
-    if (jj_scan_token(LAMBDA)) return true;
+  final private boolean jj_3R_303() {
+    if (jj_scan_token(TIMESTAMPDIFF)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_336()) return true;
     return false;
   }
 
@@ -29182,15 +29140,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_303() {
-    if (jj_scan_token(TIMESTAMPDIFF)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_336()) return true;
+  final private boolean jj_3R_136() {
+    if (jj_3R_153()) return true;
     return false;
   }
 
-  final private boolean jj_3R_136() {
-    if (jj_3R_153()) return true;
+  final private boolean jj_3R_301() {
+    if (jj_scan_token(TIMESTAMPADD)) return true;
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
@@ -29210,26 +29167,12 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_301() {
-    if (jj_scan_token(TIMESTAMPADD)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
   final private boolean jj_3R_101() {
     if (jj_scan_token(SAVEPOINT)) return true;
     if (jj_3R_85()) return true;
     return false;
   }
 
-  final private boolean jj_3R_104() {
-    if (jj_scan_token(ROLLBACK)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_134()) jj_scanpos = xsp;
-    return false;
-  }
-
   final private boolean jj_3_456() {
     if (jj_3R_219()) return true;
     return false;
@@ -29241,11 +29184,11 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_103() {
-    if (jj_scan_token(COMMIT)) return true;
+  final private boolean jj_3R_104() {
+    if (jj_scan_token(ROLLBACK)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_133()) jj_scanpos = xsp;
+    if (jj_3_134()) jj_scanpos = xsp;
     return false;
   }
 
@@ -29269,6 +29212,14 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_103() {
+    if (jj_scan_token(COMMIT)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_133()) jj_scanpos = xsp;
+    return false;
+  }
+
   final private boolean jj_3_460() {
     Token xsp;
     xsp = jj_scanpos;
@@ -29280,26 +29231,15 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_100() {
-    if (jj_scan_token(KILL)) return true;
-    if (jj_scan_token(QUERY)) return true;
-    return false;
-  }
-
   final private boolean jj_3R_296() {
     if (jj_scan_token(CONTAINS_SUBSTR)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_132() {
-    if (jj_scan_token(ASYNC)) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_99() {
+  final private boolean jj_3R_100() {
     if (jj_scan_token(KILL)) return true;
-    if (jj_scan_token(COMPUTE)) return true;
+    if (jj_scan_token(QUERY)) return true;
     return false;
   }
 
@@ -29314,6 +29254,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_132() {
+    if (jj_scan_token(ASYNC)) return true;
+    return false;
+  }
+
   final private boolean jj_3R_213() {
     Token xsp;
     xsp = jj_scanpos;
@@ -29340,9 +29285,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_97() {
+  final private boolean jj_3R_99() {
     if (jj_scan_token(KILL)) return true;
-    if (jj_scan_token(SERVICE)) return true;
+    if (jj_scan_token(COMPUTE)) return true;
     return false;
   }
 
@@ -29351,14 +29296,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_98() {
-    if (jj_scan_token(KILL)) return true;
-    if (jj_scan_token(TRANSACTION)) return true;
+  final private boolean jj_3_939() {
+    if (jj_3R_326()) return true;
     return false;
   }
 
-  final private boolean jj_3_939() {
-    if (jj_3R_326()) return true;
+  final private boolean jj_3R_97() {
+    if (jj_scan_token(KILL)) return true;
+    if (jj_scan_token(SERVICE)) return true;
     return false;
   }
 
@@ -29388,12 +29333,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_96() {
-    if (jj_scan_token(KILL)) return true;
-    if (jj_scan_token(CONTINUOUS)) return true;
-    return false;
-  }
-
   final private boolean jj_3_450() {
     if (jj_scan_token(GT)) return true;
     return false;
@@ -29404,6 +29343,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_98() {
+    if (jj_scan_token(KILL)) return true;
+    if (jj_scan_token(TRANSACTION)) return true;
+    return false;
+  }
+
   final private boolean jj_3R_212() {
     Token xsp;
     xsp = jj_scanpos;
@@ -29448,9 +29393,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_95() {
+  final private boolean jj_3R_96() {
     if (jj_scan_token(KILL)) return true;
-    if (jj_scan_token(SCAN)) return true;
+    if (jj_scan_token(CONTINUOUS)) return true;
     return false;
   }
 
@@ -29492,6 +29437,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_95() {
+    if (jj_scan_token(KILL)) return true;
+    if (jj_scan_token(SCAN)) return true;
+    return false;
+  }
+
   final private boolean jj_3_436() {
     if (jj_scan_token(SAFE_ORDINAL)) return true;
     if (jj_scan_token(LPAREN)) return true;
@@ -29599,11 +29550,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_131() {
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
-    return false;
-  }
-
   final private boolean jj_3_424() {
     if (jj_scan_token(ILIKE)) return true;
     return false;
@@ -29620,12 +29566,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_130() {
-    if (jj_scan_token(MINUS)) return true;
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
-    return false;
-  }
-
   final private boolean jj_3_420() {
     if (jj_scan_token(RLIKE)) return true;
     return false;
@@ -29636,12 +29576,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_129() {
-    if (jj_scan_token(PLUS)) return true;
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
-    return false;
-  }
-
   final private boolean jj_3_418() {
     if (jj_scan_token(LIKE)) return true;
     return false;
@@ -29675,6 +29609,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_131() {
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
+    return false;
+  }
+
   final private boolean jj_3_429() {
     Token xsp;
     xsp = jj_scanpos;
@@ -29694,14 +29633,20 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_130() {
+    if (jj_scan_token(MINUS)) return true;
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
+    return false;
+  }
+
   final private boolean jj_3_933() {
     if (jj_3R_324()) return true;
     return false;
   }
 
-  final private boolean jj_3R_245() {
-    if (jj_scan_token(USER)) return true;
-    if (jj_3R_85()) return true;
+  final private boolean jj_3_129() {
+    if (jj_scan_token(PLUS)) return true;
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
@@ -29745,9 +29690,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_94() {
-    if (jj_scan_token(ALTER)) return true;
+  final private boolean jj_3R_245() {
     if (jj_scan_token(USER)) return true;
+    if (jj_3R_85()) return true;
     return false;
   }
 
@@ -29801,20 +29746,15 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_416() {
-    if (jj_scan_token(NOT)) return true;
-    if (jj_scan_token(BETWEEN)) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_241() {
+  final private boolean jj_3R_94() {
+    if (jj_scan_token(ALTER)) return true;
     if (jj_scan_token(USER)) return true;
-    if (jj_3R_85()) return true;
     return false;
   }
 
-  final private boolean jj_3_124() {
-    if (jj_scan_token(COLUMN)) return true;
+  final private boolean jj_3_416() {
+    if (jj_scan_token(NOT)) return true;
+    if (jj_scan_token(BETWEEN)) return true;
     return false;
   }
 
@@ -29823,11 +29763,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_123() {
-    if (jj_scan_token(COLUMN)) return true;
-    return false;
-  }
-
   final private boolean jj_3_926() {
     if (jj_scan_token(KEY)) return true;
     if (jj_3R_323()) return true;
@@ -29845,16 +29780,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_128() {
-    if (jj_scan_token(DROP)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_124()) jj_scanpos = xsp;
-    if (jj_3R_134()) return true;
-    if (jj_3R_135()) return true;
-    return false;
-  }
-
   final private boolean jj_3_928() {
     if (jj_scan_token(COMMA)) return true;
     return false;
@@ -29865,27 +29790,18 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_127() {
-    if (jj_scan_token(ADD)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_123()) jj_scanpos = xsp;
-    if (jj_3R_132()) return true;
-    if (jj_3R_133()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_126() {
-    if (jj_scan_token(NOLOGGING)) return true;
+  final private boolean jj_3R_424() {
     return false;
   }
 
-  final private boolean jj_3R_424() {
+  final private boolean jj_3R_241() {
+    if (jj_scan_token(USER)) return true;
+    if (jj_3R_85()) return true;
     return false;
   }
 
-  final private boolean jj_3_125() {
-    if (jj_scan_token(LOGGING)) return true;
+  final private boolean jj_3_124() {
+    if (jj_scan_token(COLUMN)) return true;
     return false;
   }
 
@@ -29899,6 +29815,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_123() {
+    if (jj_scan_token(COLUMN)) return true;
+    return false;
+  }
+
   final private boolean jj_3_405() {
     if (jj_scan_token(ANY)) return true;
     return false;
@@ -29920,14 +29841,33 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_93() {
-    if (jj_scan_token(ALTER)) return true;
-    if (jj_scan_token(TABLE)) return true;
+  final private boolean jj_3_404() {
+    if (jj_scan_token(SOME)) return true;
     return false;
   }
 
-  final private boolean jj_3_404() {
-    if (jj_scan_token(SOME)) return true;
+  final private boolean jj_3_128() {
+    if (jj_scan_token(DROP)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_124()) jj_scanpos = xsp;
+    if (jj_3R_134()) return true;
+    if (jj_3R_135()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_127() {
+    if (jj_scan_token(ADD)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_123()) jj_scanpos = xsp;
+    if (jj_3R_132()) return true;
+    if (jj_3R_133()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_126() {
+    if (jj_scan_token(NOLOGGING)) return true;
     return false;
   }
 
@@ -29956,6 +29896,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_125() {
+    if (jj_scan_token(LOGGING)) return true;
+    return false;
+  }
+
   final private boolean jj_3_408() {
     if (jj_scan_token(IN)) return true;
     return false;
@@ -29972,23 +29917,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_122() {
-    if (jj_3R_131()) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_133() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_121()) {
-    jj_scanpos = xsp;
-    if (jj_3_122()) return true;
-    }
-    return false;
-  }
-
-  final private boolean jj_3_121() {
-    if (jj_3R_130()) return true;
+  final private boolean jj_3R_93() {
+    if (jj_scan_token(ALTER)) return true;
+    if (jj_scan_token(TABLE)) return true;
     return false;
   }
 
@@ -30006,12 +29937,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_120() {
-    if (jj_scan_token(NOT)) return true;
-    if (jj_scan_token(NULL)) return true;
-    return false;
-  }
-
   final private boolean jj_3_446() {
     Token xsp;
     xsp = jj_scanpos;
@@ -30037,14 +29962,28 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_925() {
-    if (jj_3R_322()) return true;
+  final private boolean jj_3_122() {
+    if (jj_3R_131()) return true;
     return false;
   }
 
-  final private boolean jj_3R_130() {
-    if (jj_3R_85()) return true;
-    if (jj_3R_123()) return true;
+  final private boolean jj_3R_133() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_121()) {
+    jj_scanpos = xsp;
+    if (jj_3_122()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_121() {
+    if (jj_3R_130()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_925() {
+    if (jj_3R_322()) return true;
     return false;
   }
 
@@ -30085,9 +30024,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_119() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_130()) return true;
+  final private boolean jj_3_120() {
+    if (jj_scan_token(NOT)) return true;
+    if (jj_scan_token(NULL)) return true;
     return false;
   }
 
@@ -30096,15 +30035,15 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_311() {
-    if (jj_scan_token(JSON_QUERY)) return true;
-    if (jj_scan_token(LPAREN)) return true;
+  final private boolean jj_3R_130() {
+    if (jj_3R_85()) return true;
+    if (jj_3R_123()) return true;
     return false;
   }
 
-  final private boolean jj_3R_131() {
+  final private boolean jj_3R_311() {
+    if (jj_scan_token(JSON_QUERY)) return true;
     if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_130()) return true;
     return false;
   }
 
@@ -30113,6 +30052,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_119() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_130()) return true;
+    return false;
+  }
+
   final private boolean jj_3_916() {
     if (jj_scan_token(ARRAY)) return true;
     return false;
@@ -30128,9 +30073,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_216() {
-    if (jj_scan_token(INFIX_CAST)) return true;
-    if (jj_3R_123()) return true;
+  final private boolean jj_3R_131() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_130()) return true;
     return false;
   }
 
@@ -30167,13 +30112,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_244() {
-    if (jj_scan_token(INDEX)) return true;
-    if (jj_3R_134()) return true;
-    if (jj_3R_153()) return true;
-    return false;
-  }
-
   final private boolean jj_3_915() {
     if (jj_scan_token(ERROR)) return true;
     return false;
@@ -30184,6 +30122,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_216() {
+    if (jj_scan_token(INFIX_CAST)) return true;
+    if (jj_3R_123()) return true;
+    return false;
+  }
+
   final private boolean jj_3_914() {
     if (jj_scan_token(EMPTY)) return true;
     return false;
@@ -30204,13 +30148,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_243() {
-    if (jj_scan_token(TABLE)) return true;
-    if (jj_3R_134()) return true;
-    if (jj_3R_153()) return true;
-    return false;
-  }
-
   final private boolean jj_3_913() {
     if (jj_scan_token(EMPTY)) return true;
     if (jj_scan_token(OBJECT)) return true;
@@ -30223,13 +30160,16 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_912() {
-    if (jj_scan_token(EMPTY)) return true;
-    if (jj_scan_token(ARRAY)) return true;
+  final private boolean jj_3R_244() {
+    if (jj_scan_token(INDEX)) return true;
+    if (jj_3R_134()) return true;
+    if (jj_3R_153()) return true;
     return false;
   }
 
-  final private boolean jj_3R_367() {
+  final private boolean jj_3_912() {
+    if (jj_scan_token(EMPTY)) return true;
+    if (jj_scan_token(ARRAY)) return true;
     return false;
   }
 
@@ -30238,22 +30178,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_134() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_118()) {
-    jj_scanpos = xsp;
-    if (jj_3R_367()) return true;
-    }
-    return false;
-  }
-
-  final private boolean jj_3_118() {
-    if (jj_scan_token(IF)) return true;
-    if (jj_scan_token(EXISTS)) return true;
-    return false;
-  }
-
   final private boolean jj_3R_392() {
     if (jj_3R_85()) return true;
     return false;
@@ -30264,6 +30188,13 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_243() {
+    if (jj_scan_token(TABLE)) return true;
+    if (jj_3R_134()) return true;
+    if (jj_3R_153()) return true;
+    return false;
+  }
+
   final private boolean jj_3_401() {
     if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
@@ -30291,12 +30222,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_117() {
-    if (jj_scan_token(INLINE_SIZE)) return true;
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
-    return false;
-  }
-
   final private boolean jj_3R_209() {
     if (jj_scan_token(LBRACKET)) return true;
     Token xsp;
@@ -30311,27 +30236,31 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_909() {
-    if (jj_3R_320()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_116() {
-    if (jj_scan_token(PARALLEL)) return true;
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
+  final private boolean jj_3R_367() {
     return false;
   }
 
-  final private boolean jj_3_115() {
+  final private boolean jj_3R_134() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_116()) {
+    if (jj_3_118()) {
     jj_scanpos = xsp;
-    if (jj_3_117()) return true;
+    if (jj_3R_367()) return true;
     }
     return false;
   }
 
+  final private boolean jj_3_118() {
+    if (jj_scan_token(IF)) return true;
+    if (jj_scan_token(EXISTS)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_909() {
+    if (jj_3R_320()) return true;
+    return false;
+  }
+
   final private boolean jj_3_398() {
     if (jj_3R_209()) return true;
     return false;
@@ -30342,8 +30271,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_114() {
-    if (jj_3R_85()) return true;
+  final private boolean jj_3_117() {
+    if (jj_scan_token(INLINE_SIZE)) return true;
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
@@ -30379,13 +30309,19 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_240() {
-    if (jj_scan_token(INDEX)) return true;
-    if (jj_3R_132()) return true;
+  final private boolean jj_3_116() {
+    if (jj_scan_token(PARALLEL)) return true;
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_115() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_114()) jj_scanpos = xsp;
-    if (jj_scan_token(ON)) return true;
+    if (jj_3_116()) {
+    jj_scanpos = xsp;
+    if (jj_3_117()) return true;
+    }
     return false;
   }
 
@@ -30405,14 +30341,13 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_907() {
-    if (jj_scan_token(ERROR)) return true;
+  final private boolean jj_3_114() {
+    if (jj_3R_85()) return true;
     return false;
   }
 
-  final private boolean jj_3_113() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_129()) return true;
+  final private boolean jj_3_907() {
+    if (jj_scan_token(ERROR)) return true;
     return false;
   }
 
@@ -30421,6 +30356,16 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_240() {
+    if (jj_scan_token(INDEX)) return true;
+    if (jj_3R_132()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_114()) jj_scanpos = xsp;
+    if (jj_scan_token(ON)) return true;
+    return false;
+  }
+
   final private boolean jj_3R_427() {
     if (jj_scan_token(COLON)) return true;
     return false;
@@ -30444,28 +30389,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_903() {
-    if (jj_scan_token(ERROR)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_111() {
-    if (jj_scan_token(DESC)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_112() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_110()) {
-    jj_scanpos = xsp;
-    if (jj_3_111()) return true;
-    }
+  final private boolean jj_3_113() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_129()) return true;
     return false;
   }
 
-  final private boolean jj_3_110() {
-    if (jj_scan_token(ASC)) return true;
+  final private boolean jj_3_903() {
+    if (jj_scan_token(ERROR)) return true;
     return false;
   }
 
@@ -30483,11 +30414,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_129() {
-    if (jj_3R_85()) return true;
-    return false;
-  }
-
   final private boolean jj_3R_82() {
     if (jj_3R_215()) return true;
     return false;
@@ -30499,12 +30425,23 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_127() {
+  final private boolean jj_3_111() {
+    if (jj_scan_token(DESC)) return true;
     return false;
   }
 
-  final private boolean jj_3_107() {
-    if (jj_3R_125()) return true;
+  final private boolean jj_3_112() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_110()) {
+    jj_scanpos = xsp;
+    if (jj_3_111()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_110() {
+    if (jj_scan_token(ASC)) return true;
     return false;
   }
 
@@ -30519,21 +30456,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_109() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_107()) {
-    jj_scanpos = xsp;
-    if (jj_3R_127()) return true;
-    }
-    if (jj_3R_128()) return true;
-    if (jj_scan_token(AS)) return true;
-    if (jj_3R_80()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_108() {
-    if (jj_3R_126()) return true;
+  final private boolean jj_3R_129() {
+    if (jj_3R_85()) return true;
     return false;
   }
 
@@ -30557,11 +30481,20 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_127() {
+    return false;
+  }
+
   final private boolean jj_3_901() {
     if (jj_scan_token(ERROR)) return true;
     return false;
   }
 
+  final private boolean jj_3_107() {
+    if (jj_3R_125()) return true;
+    return false;
+  }
+
   final private boolean jj_3_900() {
     if (jj_scan_token(UNKNOWN)) return true;
     return false;
@@ -30593,10 +30526,16 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_239() {
-    if (jj_scan_token(TABLE)) return true;
-    if (jj_3R_132()) return true;
-    if (jj_3R_153()) return true;
+  final private boolean jj_3_109() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_107()) {
+    jj_scanpos = xsp;
+    if (jj_3R_127()) return true;
+    }
+    if (jj_3R_128()) return true;
+    if (jj_scan_token(AS)) return true;
+    if (jj_3R_80()) return true;
     return false;
   }
 
@@ -30605,6 +30544,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_108() {
+    if (jj_3R_126()) return true;
+    return false;
+  }
+
   final private boolean jj_3R_208() {
     if (jj_3R_85()) return true;
     return false;
@@ -30621,15 +30565,16 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_106() {
+  final private boolean jj_3_390() {
     if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_124()) return true;
+    if (jj_3R_208()) return true;
     return false;
   }
 
-  final private boolean jj_3_390() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_208()) return true;
+  final private boolean jj_3R_239() {
+    if (jj_scan_token(TABLE)) return true;
+    if (jj_3R_132()) return true;
+    if (jj_3R_153()) return true;
     return false;
   }
 
@@ -30642,15 +30587,26 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_897() {
+    if (jj_scan_token(PASSING)) return true;
+    if (jj_3R_82()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_106() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_124()) return true;
+    return false;
+  }
+
   final private boolean jj_3R_126() {
     if (jj_scan_token(LPAREN)) return true;
     if (jj_3R_124()) return true;
     return false;
   }
 
-  final private boolean jj_3_897() {
-    if (jj_scan_token(PASSING)) return true;
-    if (jj_3R_82()) return true;
+  final private boolean jj_3R_68() {
+    if (jj_3R_348()) return true;
     return false;
   }
 
@@ -30660,6 +30616,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_895() {
+    if (jj_scan_token(FORMAT)) return true;
+    if (jj_3R_317()) return true;
+    return false;
+  }
+
   final private boolean jj_3_105() {
     Token xsp;
     xsp = jj_scanpos;
@@ -30675,14 +30637,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_68() {
-    if (jj_3R_348()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_895() {
-    if (jj_scan_token(FORMAT)) return true;
-    if (jj_3R_317()) return true;
+  final private boolean jj_3R_319() {
+    if (jj_scan_token(RETURNING)) return true;
+    if (jj_3R_121()) return true;
     return false;
   }
 
@@ -30708,18 +30665,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_319() {
-    if (jj_scan_token(RETURNING)) return true;
-    if (jj_3R_121()) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_122() {
-    if (jj_scan_token(INTERVAL)) return true;
-    if (jj_3R_219()) return true;
-    return false;
-  }
-
   final private boolean jj_3_893() {
     if (jj_scan_token(UTF32)) return true;
     return false;
@@ -30735,16 +30680,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_100() {
-    if (jj_3R_122()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_99() {
-    if (jj_3R_121()) return true;
-    return false;
-  }
-
   final private boolean jj_3_894() {
     if (jj_scan_token(ENCODING)) return true;
     Token xsp;
@@ -30759,13 +30694,9 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_123() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_99()) {
-    jj_scanpos = xsp;
-    if (jj_3_100()) return true;
-    }
+  final private boolean jj_3R_122() {
+    if (jj_scan_token(INTERVAL)) return true;
+    if (jj_3R_219()) return true;
     return false;
   }
 
@@ -30794,18 +30725,13 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_98() {
-    if (jj_3R_85()) return true;
-    return false;
-  }
-
   final private boolean jj_3_889() {
     if (jj_3R_315()) return true;
     return false;
   }
 
-  final private boolean jj_3_97() {
-    if (jj_3R_120()) return true;
+  final private boolean jj_3_100() {
+    if (jj_3R_122()) return true;
     return false;
   }
 
@@ -30824,6 +30750,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_99() {
+    if (jj_3R_121()) return true;
+    return false;
+  }
+
   final private boolean jj_3_887() {
     if (jj_3R_313()) return true;
     return false;
@@ -30834,9 +30765,13 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_119() {
-    if (jj_3R_363()) return true;
-    if (jj_scan_token(EQ)) return true;
+  final private boolean jj_3R_123() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_99()) {
+    jj_scanpos = xsp;
+    if (jj_3_100()) return true;
+    }
     return false;
   }
 
@@ -30870,6 +30805,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_98() {
+    if (jj_3R_85()) return true;
+    return false;
+  }
+
   final private boolean jj_3R_351() {
     Token xsp;
     xsp = jj_scanpos;
@@ -30887,8 +30827,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_96() {
-    if (jj_scan_token(WRAP_VALUE)) return true;
+  final private boolean jj_3_97() {
+    if (jj_3R_120()) return true;
     return false;
   }
 
@@ -30897,13 +30837,64 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_879() {
+    if (jj_3R_305()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_878() {
+    if (jj_3R_304()) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_119() {
+    if (jj_3R_363()) return true;
+    if (jj_scan_token(EQ)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_877() {
+    if (jj_3R_303()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_876() {
+    if (jj_3R_302()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_875() {
+    if (jj_3R_301()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_874() {
+    if (jj_3R_300()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_873() {
+    if (jj_3R_299()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_96() {
+    if (jj_scan_token(WRAP_VALUE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_872() {
+    if (jj_3R_298()) return true;
+    return false;
+  }
+
   final private boolean jj_3_95() {
     if (jj_scan_token(WRAP_KEY)) return true;
     return false;
   }
 
-  final private boolean jj_3_879() {
-    if (jj_3R_305()) return true;
+  final private boolean jj_3_871() {
+    if (jj_3R_297()) return true;
     return false;
   }
 
@@ -30912,8 +30903,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_878() {
-    if (jj_3R_304()) return true;
+  final private boolean jj_3_870() {
+    if (jj_3R_296()) return true;
     return false;
   }
 
@@ -30922,18 +30913,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_877() {
-    if (jj_3R_303()) return true;
-    return false;
-  }
-
   final private boolean jj_3_92() {
     if (jj_scan_token(KEY_TYPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_876() {
-    if (jj_3R_302()) return true;
+  final private boolean jj_3_857() {
+    if (jj_scan_token(FROM)) return true;
+    if (jj_3R_82()) return true;
     return false;
   }
 
@@ -30942,48 +30929,36 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_875() {
-    if (jj_3R_301()) return true;
-    return false;
-  }
-
   final private boolean jj_3_90() {
     if (jj_scan_token(CACHE_NAME)) return true;
     return false;
   }
 
-  final private boolean jj_3_874() {
-    if (jj_3R_300()) return true;
-    return false;
-  }
-
   final private boolean jj_3_89() {
     if (jj_scan_token(CACHE_GROUP)) return true;
     return false;
   }
 
-  final private boolean jj_3_873() {
-    if (jj_3R_299()) return true;
-    return false;
-  }
-
   final private boolean jj_3_88() {
     if (jj_scan_token(WRITE_SYNCHRONIZATION_MODE)) return true;
     return false;
   }
 
-  final private boolean jj_3_872() {
-    if (jj_3R_298()) return true;
+  final private boolean jj_3_87() {
+    if (jj_scan_token(ATOMICITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_87() {
-    if (jj_scan_token(ATOMICITY)) return true;
+  final private boolean jj_3_856() {
+    if (jj_3R_82()) return true;
     return false;
   }
 
-  final private boolean jj_3_871() {
-    if (jj_3R_297()) return true;
+  final private boolean jj_3_859() {
+    if (jj_3R_82()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_857()) jj_scanpos = xsp;
     return false;
   }
 
@@ -30992,8 +30967,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_870() {
-    if (jj_3R_296()) return true;
+  final private boolean jj_3_855() {
+    if (jj_scan_token(LEADING)) return true;
     return false;
   }
 
@@ -31050,64 +31025,24 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_857() {
-    if (jj_scan_token(FROM)) return true;
-    if (jj_3R_82()) return true;
-    return false;
-  }
-
   final private boolean jj_3_80() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_119()) return true;
     return false;
   }
 
-  final private boolean jj_3_82() {
-    if (jj_3R_119()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_856() {
-    if (jj_3R_82()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_859() {
-    if (jj_3R_82()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_857()) jj_scanpos = xsp;
-    return false;
-  }
-
-  final private boolean jj_3_855() {
-    if (jj_scan_token(LEADING)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_81() {
-    if (jj_scan_token(QUOTED_IDENTIFIER)) return true;
-    return false;
-  }
-
   final private boolean jj_3_854() {
     if (jj_scan_token(TRAILING)) return true;
     return false;
   }
 
-  final private boolean jj_3_83() {
-    if (jj_scan_token(WITH)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_81()) {
-    jj_scanpos = xsp;
-    if (jj_3_82()) return true;
-    }
+  final private boolean jj_3_853() {
+    if (jj_scan_token(BOTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_853() {
-    if (jj_scan_token(BOTH)) return true;
+  final private boolean jj_3_82() {
+    if (jj_3R_119()) return true;
     return false;
   }
 
@@ -31116,10 +31051,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_128() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_83()) jj_scanpos = xsp;
+  final private boolean jj_3_81() {
+    if (jj_scan_token(QUOTED_IDENTIFIER)) return true;
     return false;
   }
 
@@ -31139,10 +31072,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_366() {
-    return false;
-  }
-
   final private boolean jj_3_1829() {
     if (jj_scan_token(FRIDAY)) return true;
     return false;
@@ -31153,24 +31082,19 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_132() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_79()) {
-    jj_scanpos = xsp;
-    if (jj_3R_366()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3_1827() {
     if (jj_scan_token(WITHOUT)) return true;
     return false;
   }
 
-  final private boolean jj_3_79() {
-    if (jj_scan_token(IF)) return true;
-    if (jj_scan_token(NOT)) return true;
+  final private boolean jj_3_83() {
+    if (jj_scan_token(WITH)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_81()) {
+    jj_scanpos = xsp;
+    if (jj_3_82()) return true;
+    }
     return false;
   }
 
@@ -31205,6 +31129,13 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_128() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_83()) jj_scanpos = xsp;
+    return false;
+  }
+
   final private boolean jj_3_1822() {
     if (jj_scan_token(UPSERT)) return true;
     return false;
@@ -31277,6 +31208,10 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_366() {
+    return false;
+  }
+
   final private boolean jj_3_1813() {
     if (jj_scan_token(SUBSTRING)) return true;
     return false;
@@ -31292,11 +31227,27 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_132() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_79()) {
+    jj_scanpos = xsp;
+    if (jj_3R_366()) return true;
+    }
+    return false;
+  }
+
   final private boolean jj_3_1811() {
     if (jj_scan_token(STATIC)) return true;
     return false;
   }
 
+  final private boolean jj_3_79() {
+    if (jj_scan_token(IF)) return true;
+    if (jj_scan_token(NOT)) return true;
+    return false;
+  }
+
   final private boolean jj_3_848() {
     if (jj_scan_token(FROM)) return true;
     return false;
@@ -31338,11 +31289,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_78() {
-    if (jj_3R_118()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1804() {
     if (jj_scan_token(SAFE_ORDINAL)) return true;
     return false;
@@ -31353,11 +31299,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_77() {
-    if (jj_3R_117()) return true;
-    return false;
-  }
-
   final private boolean jj_3_846() {
     if (jj_scan_token(CEIL)) return true;
     return false;
@@ -31378,11 +31319,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_76() {
-    if (jj_3R_116()) return true;
-    return false;
-  }
-
   final private boolean jj_3_867() {
     Token xsp;
     xsp = jj_scanpos;
@@ -31404,11 +31340,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_75() {
-    if (jj_3R_115()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1798() {
     if (jj_scan_token(REGR_R2)) return true;
     return false;
@@ -31419,11 +31350,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_74() {
-    if (jj_3R_114()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1796() {
     if (jj_scan_token(REFERENCES)) return true;
     return false;
@@ -31440,11 +31366,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_73() {
-    if (jj_3R_113()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1794() {
     if (jj_scan_token(RANGE)) return true;
     return false;
@@ -31461,11 +31382,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_72() {
-    if (jj_3R_112()) return true;
-    return false;
-  }
-
   final private boolean jj_3_845() {
     if (jj_scan_token(FOR)) return true;
     if (jj_3R_79()) return true;
@@ -31487,11 +31403,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_71() {
-    if (jj_3R_80()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1790() {
     if (jj_scan_token(PERIOD)) return true;
     return false;
@@ -31502,8 +31413,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_70() {
-    if (jj_3R_111()) return true;
+  final private boolean jj_3_78() {
+    if (jj_3R_118()) return true;
     return false;
   }
 
@@ -31517,8 +31428,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_69() {
-    if (jj_3R_110()) return true;
+  final private boolean jj_3_77() {
+    if (jj_3R_117()) return true;
     return false;
   }
 
@@ -31544,8 +31455,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_68() {
-    if (jj_3R_109()) return true;
+  final private boolean jj_3_76() {
+    if (jj_3R_116()) return true;
     return false;
   }
 
@@ -31575,8 +31486,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_67() {
-    if (jj_3R_108()) return true;
+  final private boolean jj_3_75() {
+    if (jj_3R_115()) return true;
     return false;
   }
 
@@ -31590,8 +31501,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_66() {
-    if (jj_3R_107()) return true;
+  final private boolean jj_3_74() {
+    if (jj_3R_114()) return true;
     return false;
   }
 
@@ -31605,8 +31516,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_65() {
-    if (jj_3R_106()) return true;
+  final private boolean jj_3_73() {
+    if (jj_3R_113()) return true;
     return false;
   }
 
@@ -31626,8 +31537,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_64() {
-    if (jj_3R_105()) return true;
+  final private boolean jj_3_72() {
+    if (jj_3R_112()) return true;
     return false;
   }
 
@@ -31641,8 +31552,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_63() {
-    if (jj_3R_104()) return true;
+  final private boolean jj_3_71() {
+    if (jj_3R_80()) return true;
     return false;
   }
 
@@ -31667,8 +31578,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_62() {
-    if (jj_3R_103()) return true;
+  final private boolean jj_3_70() {
+    if (jj_3R_111()) return true;
     return false;
   }
 
@@ -31687,8 +31598,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_61() {
-    if (jj_3R_102()) return true;
+  final private boolean jj_3_69() {
+    if (jj_3R_110()) return true;
     return false;
   }
 
@@ -31708,8 +31619,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_60() {
-    if (jj_3R_101()) return true;
+  final private boolean jj_3_68() {
+    if (jj_3R_109()) return true;
     return false;
   }
 
@@ -31729,8 +31640,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_59() {
-    if (jj_3R_100()) return true;
+  final private boolean jj_3_67() {
+    if (jj_3R_108()) return true;
     return false;
   }
 
@@ -31761,8 +31672,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_58() {
-    if (jj_3R_99()) return true;
+  final private boolean jj_3_66() {
+    if (jj_3R_107()) return true;
     return false;
   }
 
@@ -31797,8 +31708,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_57() {
-    if (jj_3R_98()) return true;
+  final private boolean jj_3_65() {
+    if (jj_3R_106()) return true;
     return false;
   }
 
@@ -31812,8 +31723,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_56() {
-    if (jj_3R_97()) return true;
+  final private boolean jj_3_64() {
+    if (jj_3R_105()) return true;
     return false;
   }
 
@@ -31833,8 +31744,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_55() {
-    if (jj_3R_96()) return true;
+  final private boolean jj_3_63() {
+    if (jj_3R_104()) return true;
     return false;
   }
 
@@ -31853,8 +31764,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_54() {
-    if (jj_3R_95()) return true;
+  final private boolean jj_3_62() {
+    if (jj_3R_103()) return true;
     return false;
   }
 
@@ -31868,8 +31779,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_53() {
-    if (jj_3R_94()) return true;
+  final private boolean jj_3_61() {
+    if (jj_3R_102()) return true;
     return false;
   }
 
@@ -31903,8 +31814,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_52() {
-    if (jj_3R_93()) return true;
+  final private boolean jj_3_60() {
+    if (jj_3R_101()) return true;
     return false;
   }
 
@@ -31918,6 +31829,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_59() {
+    if (jj_3R_100()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1750() {
     if (jj_scan_token(DEC)) return true;
     return false;
@@ -31928,12 +31844,169 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_58() {
+    if (jj_3R_99()) return true;
+    return false;
+  }
+
   final private boolean jj_3_831() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_85()) return true;
     return false;
   }
 
+  final private boolean jj_3_1748() {
+    if (jj_scan_token(CURSOR)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_376() {
+    if (jj_scan_token(HOOK)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1747() {
+    if (jj_scan_token(CURRENT_ROLE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_57() {
+    if (jj_3R_98()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1746() {
+    if (jj_scan_token(CURRENT_CATALOG)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1745() {
+    if (jj_scan_token(CUBE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_56() {
+    if (jj_3R_97()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1744() {
+    if (jj_scan_token(COUNT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1743() {
+    if (jj_scan_token(CONVERT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_55() {
+    if (jj_3R_96()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_371() {
+    if (jj_scan_token(MINUS)) return true;
+    if (jj_3R_203()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_834() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_85()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1742() {
+    if (jj_scan_token(CONDITION)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1741() {
+    if (jj_scan_token(COLLATE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_54() {
+    if (jj_3R_95()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1740() {
+    if (jj_scan_token(CLOB)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_202() {
+    return false;
+  }
+
+  final private boolean jj_3R_201() {
+    return false;
+  }
+
+  final private boolean jj_3_1739() {
+    if (jj_scan_token(CHAR_LENGTH)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_53() {
+    if (jj_3R_94()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1738() {
+    if (jj_scan_token(CHAR)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_370() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_200()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_833() {
+    if (jj_scan_token(USING)) return true;
+    if (jj_3R_85()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1737() {
+    if (jj_scan_token(CASCADED)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_52() {
+    if (jj_3R_93()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_367() {
+    if (jj_3R_200()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1736() {
+    if (jj_scan_token(CALL)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1735() {
+    if (jj_scan_token(BIT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1734() {
+    if (jj_scan_token(BEGIN_PARTITION)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1733() {
+    if (jj_scan_token(AVG)) return true;
+    return false;
+  }
+
   final private boolean jj_3R_92() {
     Token xsp;
     xsp = jj_scanpos;
@@ -32019,141 +32092,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_1748() {
-    if (jj_scan_token(CURSOR)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_376() {
-    if (jj_scan_token(HOOK)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1747() {
-    if (jj_scan_token(CURRENT_ROLE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1746() {
-    if (jj_scan_token(CURRENT_CATALOG)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1745() {
-    if (jj_scan_token(CUBE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1744() {
-    if (jj_scan_token(COUNT)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1743() {
-    if (jj_scan_token(CONVERT)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_371() {
-    if (jj_scan_token(MINUS)) return true;
-    if (jj_3R_203()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_834() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_85()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1742() {
-    if (jj_scan_token(CONDITION)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1741() {
-    if (jj_scan_token(COLLATE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1740() {
-    if (jj_scan_token(CLOB)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_50() {
-    if (jj_3R_92()) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_202() {
-    return false;
-  }
-
-  final private boolean jj_3R_201() {
-    return false;
-  }
-
-  final private boolean jj_3_1739() {
-    if (jj_scan_token(CHAR_LENGTH)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1738() {
-    if (jj_scan_token(CHAR)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_370() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_200()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_833() {
-    if (jj_scan_token(USING)) return true;
-    if (jj_3R_85()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1737() {
-    if (jj_scan_token(CASCADED)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_367() {
-    if (jj_3R_200()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1736() {
-    if (jj_scan_token(CALL)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1735() {
-    if (jj_scan_token(BIT)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1734() {
-    if (jj_scan_token(BEGIN_PARTITION)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_49() {
-    if (jj_scan_token(SEMICOLON)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_50()) jj_scanpos = xsp;
-    return false;
-  }
-
-  final private boolean jj_3_1733() {
-    if (jj_scan_token(AVG)) return true;
-    return false;
-  }
-
   final private boolean jj_3_1732() {
     if (jj_scan_token(AT)) return true;
     return false;
@@ -32211,16 +32149,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_51() {
-    if (jj_3R_92()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_49()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
   final private boolean jj_3_1725() {
     if (jj_scan_token(NOLOGGING)) return true;
     return false;
@@ -32243,6 +32171,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_50() {
+    if (jj_3R_92()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1723() {
     if (jj_scan_token(WRAP_KEY)) return true;
     return false;
@@ -32293,6 +32226,14 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_49() {
+    if (jj_scan_token(SEMICOLON)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_50()) jj_scanpos = xsp;
+    return false;
+  }
+
   final private boolean jj_3_1717() {
     if (jj_scan_token(VIEW)) return true;
     return false;
@@ -32309,12 +32250,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_91() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_scan_token(RPAREN)) return true;
-    return false;
-  }
-
   final private boolean jj_3_1715() {
     if (jj_scan_token(USER_DEFINED_TYPE_NAME)) return true;
     return false;
@@ -32350,6 +32285,16 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_51() {
+    if (jj_3R_92()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_49()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
   final private boolean jj_3_1709() {
     if (jj_scan_token(TRANSACTIONS_COMMITTED)) return true;
     return false;
@@ -32416,6 +32361,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_91() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_scan_token(RPAREN)) return true;
+    return false;
+  }
+
   final private boolean jj_3_1699() {
     if (jj_scan_token(SQL_TSI_FRAC_SECOND)) return true;
     return false;
@@ -32501,11 +32452,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_81() {
-    if (jj_scan_token(DEFAULT_)) return true;
-    return false;
-  }
-
   final private boolean jj_3_1691() {
     if (jj_scan_token(SQL_INTERVAL_DAY_TO_MINUTE)) return true;
     return false;
@@ -32526,11 +32472,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_90() {
-    if (jj_3R_135()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1688() {
     if (jj_scan_token(SQL_CHAR)) return true;
     return false;
@@ -32541,28 +32482,11 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_46() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_90()) {
-    jj_scanpos = xsp;
-    if (jj_3R_91()) return true;
-    }
-    if (jj_scan_token(LAMBDA)) return true;
-    return false;
-  }
-
   final private boolean jj_3_1686() {
     if (jj_scan_token(SPECIFIC_NAME)) return true;
     return false;
   }
 
-  final private boolean jj_3R_87() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_scan_token(RPAREN)) return true;
-    return false;
-  }
-
   final private boolean jj_3_1685() {
     if (jj_scan_token(SIZE)) return true;
     return false;
@@ -32583,11 +32507,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_48() {
-    if (jj_3R_88()) return true;
-    return false;
-  }
-
   final private boolean jj_3_826() {
     if (jj_scan_token(TRY_CAST)) return true;
     return false;
@@ -32613,11 +32532,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_47() {
-    if (jj_3R_82()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1679() {
     if (jj_scan_token(SCALE)) return true;
     return false;
@@ -32642,11 +32556,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_354() {
-    if (jj_3R_420()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1677() {
     if (jj_scan_token(ROUTINE)) return true;
     return false;
@@ -32662,13 +32571,13 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_1675() {
-    if (jj_scan_token(RETURNED_LENGTH)) return true;
+  final private boolean jj_3R_81() {
+    if (jj_scan_token(DEFAULT_)) return true;
     return false;
   }
 
-  final private boolean jj_3_45() {
-    if (jj_3R_81()) return true;
+  final private boolean jj_3_1675() {
+    if (jj_scan_token(RETURNED_LENGTH)) return true;
     return false;
   }
 
@@ -32779,7 +32688,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_353() {
+  final private boolean jj_3R_90() {
+    if (jj_3R_135()) return true;
     return false;
   }
 
@@ -32798,9 +32708,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_44() {
-    if (jj_3R_85()) return true;
-    if (jj_scan_token(NAMED_ARGUMENT_ASSIGNMENT)) return true;
+  final private boolean jj_3_46() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_90()) {
+    jj_scanpos = xsp;
+    if (jj_3R_91()) return true;
+    }
+    if (jj_scan_token(LAMBDA)) return true;
     return false;
   }
 
@@ -32809,6 +32724,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_87() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_scan_token(RPAREN)) return true;
+    return false;
+  }
+
   final private boolean jj_3_1669() {
     if (jj_scan_token(PLACING)) return true;
     return false;
@@ -32824,29 +32745,13 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_84() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_44()) {
-    jj_scanpos = xsp;
-    if (jj_3R_353()) return true;
-    }
-    xsp = jj_scanpos;
-    if (jj_3_45()) {
-    jj_scanpos = xsp;
-    if (jj_3R_354()) {
-    jj_scanpos = xsp;
-    if (jj_3_47()) {
-    jj_scanpos = xsp;
-    if (jj_3_48()) return true;
-    }
-    }
-    }
+  final private boolean jj_3_1666() {
+    if (jj_scan_token(PARAMETER_SPECIFIC_NAME)) return true;
     return false;
   }
 
-  final private boolean jj_3_1666() {
-    if (jj_scan_token(PARAMETER_SPECIFIC_NAME)) return true;
+  final private boolean jj_3_48() {
+    if (jj_3R_88()) return true;
     return false;
   }
 
@@ -32860,6 +32765,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_47() {
+    if (jj_3R_82()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1663() {
     if (jj_scan_token(ORDINALITY)) return true;
     return false;
@@ -32870,6 +32780,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_354() {
+    if (jj_3R_420()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1661() {
     if (jj_scan_token(NUMBER)) return true;
     return false;
@@ -32885,8 +32800,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_86() {
-    if (jj_3R_135()) return true;
+  final private boolean jj_3_45() {
+    if (jj_3R_81()) return true;
     return false;
   }
 
@@ -32906,14 +32821,7 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_41() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_86()) {
-    jj_scanpos = xsp;
-    if (jj_3R_87()) return true;
-    }
-    if (jj_scan_token(LAMBDA)) return true;
+  final private boolean jj_3R_353() {
     return false;
   }
 
@@ -32927,6 +32835,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_44() {
+    if (jj_3R_85()) return true;
+    if (jj_scan_token(NAMED_ARGUMENT_ASSIGNMENT)) return true;
+    return false;
+  }
+
   final private boolean jj_3_1654() {
     if (jj_scan_token(MAP)) return true;
     return false;
@@ -32937,11 +32851,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_43() {
-    if (jj_3R_89()) return true;
-    return false;
-  }
-
   final private boolean jj_3R_203() {
     if (jj_3R_198()) return true;
     return false;
@@ -32957,13 +32866,29 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_1650() {
-    if (jj_scan_token(JSON)) return true;
+  final private boolean jj_3R_84() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_44()) {
+    jj_scanpos = xsp;
+    if (jj_3R_353()) return true;
+    }
+    xsp = jj_scanpos;
+    if (jj_3_45()) {
+    jj_scanpos = xsp;
+    if (jj_3R_354()) {
+    jj_scanpos = xsp;
+    if (jj_3_47()) {
+    jj_scanpos = xsp;
+    if (jj_3_48()) return true;
+    }
+    }
+    }
     return false;
   }
 
-  final private boolean jj_3_42() {
-    if (jj_3R_88()) return true;
+  final private boolean jj_3_1650() {
+    if (jj_scan_token(JSON)) return true;
     return false;
   }
 
@@ -32977,11 +32902,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_371() {
-    if (jj_3R_420()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1647() {
     if (jj_scan_token(INITIALLY)) return true;
     return false;
@@ -32997,11 +32917,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_40() {
-    if (jj_3R_81()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1644() {
     if (jj_scan_token(HOURS)) return true;
     return false;
@@ -33012,16 +32927,17 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_370() {
-    return false;
-  }
-
   final private boolean jj_3R_221() {
     if (jj_scan_token(CURSOR)) return true;
     if (jj_3R_82()) return true;
     return false;
   }
 
+  final private boolean jj_3R_86() {
+    if (jj_3R_135()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1642() {
     if (jj_scan_token(GO)) return true;
     return false;
@@ -33032,9 +32948,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_39() {
-    if (jj_3R_85()) return true;
-    if (jj_scan_token(NAMED_ARGUMENT_ASSIGNMENT)) return true;
+  final private boolean jj_3_41() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_86()) {
+    jj_scanpos = xsp;
+    if (jj_3R_87()) return true;
+    }
+    if (jj_scan_token(LAMBDA)) return true;
     return false;
   }
 
@@ -33063,24 +32984,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_155() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_39()) {
-    jj_scanpos = xsp;
-    if (jj_3R_370()) return true;
-    }
-    xsp = jj_scanpos;
-    if (jj_3_40()) {
-    jj_scanpos = xsp;
-    if (jj_3R_371()) {
-    jj_scanpos = xsp;
-    if (jj_3_42()) {
-    jj_scanpos = xsp;
-    if (jj_3_43()) return true;
-    }
-    }
-    }
+  final private boolean jj_3_43() {
+    if (jj_3R_89()) return true;
     return false;
   }
 
@@ -33099,6 +33004,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_42() {
+    if (jj_3R_88()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1633() {
     if (jj_scan_token(DESCRIPTION)) return true;
     return false;
@@ -33114,6 +33024,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_371() {
+    if (jj_3R_420()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1631() {
     if (jj_scan_token(DEFINED)) return true;
     return false;
@@ -33135,6 +33050,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_40() {
+    if (jj_3R_81()) return true;
+    return false;
+  }
+
   final private boolean jj_3R_411() {
     return false;
   }
@@ -33154,6 +33074,10 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_370() {
+    return false;
+  }
+
   final private boolean jj_3_1626() {
     if (jj_scan_token(DATA)) return true;
     return false;
@@ -33164,6 +33088,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_39() {
+    if (jj_3R_85()) return true;
+    if (jj_scan_token(NAMED_ARGUMENT_ASSIGNMENT)) return true;
+    return false;
+  }
+
   final private boolean jj_3_1624() {
     if (jj_scan_token(CONSTRAINTS)) return true;
     return false;
@@ -33213,6 +33143,27 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_155() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_39()) {
+    jj_scanpos = xsp;
+    if (jj_3R_370()) return true;
+    }
+    xsp = jj_scanpos;
+    if (jj_3_40()) {
+    jj_scanpos = xsp;
+    if (jj_3R_371()) {
+    jj_scanpos = xsp;
+    if (jj_3_42()) {
+    jj_scanpos = xsp;
+    if (jj_3_43()) return true;
+    }
+    }
+    }
+    return false;
+  }
+
   final private boolean jj_3_1620() {
     if (jj_scan_token(COLLATION_NAME)) return true;
     return false;
@@ -33269,11 +33220,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_38() {
-    if (jj_scan_token(ALL)) return true;
-    return false;
-  }
-
   final private boolean jj_3_362() {
     if (jj_scan_token(WITHIN)) return true;
     if (jj_3R_195()) return true;
@@ -33285,26 +33231,11 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_83() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_37()) {
-    jj_scanpos = xsp;
-    if (jj_3_38()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3_1609() {
     if (jj_scan_token(ABSOLUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_37() {
-    if (jj_scan_token(DISTINCT)) return true;
-    return false;
-  }
-
   final private boolean jj_3R_410() {
     return false;
   }
@@ -34023,12 +33954,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_36() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_84()) return true;
-    return false;
-  }
-
   final private boolean jj_3R_380() {
     return false;
   }
@@ -34043,6 +33968,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_38() {
+    if (jj_scan_token(ALL)) return true;
+    return false;
+  }
+
   final private boolean jj_3_358() {
     if (jj_scan_token(PAST)) return true;
     if (jj_scan_token(LAST)) return true;
@@ -34054,7 +33984,13 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_397() {
+  final private boolean jj_3R_83() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_37()) {
+    jj_scanpos = xsp;
+    if (jj_3_38()) return true;
+    }
     return false;
   }
 
@@ -34063,6 +33999,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_37() {
+    if (jj_scan_token(DISTINCT)) return true;
+    return false;
+  }
+
   final private boolean jj_3R_194() {
     Token xsp;
     xsp = jj_scanpos;
@@ -34081,11 +34022,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_35() {
-    if (jj_3R_83()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1599() {
     if (jj_scan_token(UNIQUE)) return true;
     return false;
@@ -34118,17 +34054,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_224() {
-    if (jj_scan_token(LPAREN)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_35()) {
-    jj_scanpos = xsp;
-    if (jj_3R_397()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3_1594() {
     if (jj_scan_token(TIME)) return true;
     return false;
@@ -34154,6 +34079,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_36() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_84()) return true;
+    return false;
+  }
+
   final private boolean jj_3_818() {
     if (jj_scan_token(TIME)) return true;
     if (jj_3R_263()) return true;
@@ -34176,6 +34107,10 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_397() {
+    return false;
+  }
+
   final private boolean jj_3_1586() {
     if (jj_scan_token(SKIP_)) return true;
     return false;
@@ -34215,6 +34150,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_35() {
+    if (jj_3R_83()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1583() {
     if (jj_scan_token(SCOPE)) return true;
     return false;
@@ -34246,8 +34186,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_413() {
-    if (jj_3R_224()) return true;
+  final private boolean jj_3R_224() {
+    if (jj_scan_token(LPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_35()) {
+    jj_scanpos = xsp;
+    if (jj_3R_397()) return true;
+    }
     return false;
   }
 
@@ -34338,11 +34284,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_34() {
-    if (jj_3R_81()) return true;
-    return false;
-  }
-
   final private boolean jj_3_359() {
     if (jj_scan_token(AFTER)) return true;
     if (jj_scan_token(MATCH)) return true;
@@ -34364,11 +34305,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_33() {
-    if (jj_3R_82()) return true;
-    return false;
-  }
-
   final private boolean jj_3_813() {
     if (jj_scan_token(VARYING)) return true;
     return false;
@@ -34393,6 +34329,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_413() {
+    if (jj_3R_224()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1562() {
     if (jj_scan_token(OCTET_LENGTH)) return true;
     return false;
@@ -34460,17 +34401,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_32() {
-    if (jj_scan_token(COMMA)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_33()) {
-    jj_scanpos = xsp;
-    if (jj_3_34()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3R_378() {
     return false;
   }
@@ -34503,13 +34433,13 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_31() {
-    if (jj_3R_81()) return true;
+  final private boolean jj_3_1552() {
+    if (jj_scan_token(MATCH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1552() {
-    if (jj_scan_token(MATCH)) return true;
+  final private boolean jj_3_34() {
+    if (jj_3R_81()) return true;
     return false;
   }
 
@@ -34524,13 +34454,13 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_30() {
-    if (jj_3R_80()) return true;
+  final private boolean jj_3_1550() {
+    if (jj_scan_token(LATERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1550() {
-    if (jj_scan_token(LATERAL)) return true;
+  final private boolean jj_3_33() {
+    if (jj_3R_82()) return true;
     return false;
   }
 
@@ -34603,6 +34533,17 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_32() {
+    if (jj_scan_token(COMMA)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_33()) {
+    jj_scanpos = xsp;
+    if (jj_3_34()) return true;
+    }
+    return false;
+  }
+
   final private boolean jj_3_1539() {
     if (jj_scan_token(FOREIGN)) return true;
     return false;
@@ -34618,6 +34559,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_31() {
+    if (jj_3R_81()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1536() {
     if (jj_scan_token(EXECUTE)) return true;
     return false;
@@ -34628,6 +34574,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_30() {
+    if (jj_3R_80()) return true;
+    return false;
+  }
+
   final private boolean jj_3R_284() {
     if (jj_scan_token(MAP)) return true;
     if (jj_scan_token(LT)) return true;
@@ -34645,17 +34596,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_184() {
-    if (jj_scan_token(LPAREN)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_30()) {
-    jj_scanpos = xsp;
-    if (jj_3_31()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3_1532() {
     if (jj_scan_token(DYNAMIC)) return true;
     return false;
@@ -34787,6 +34727,17 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_184() {
+    if (jj_scan_token(LPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_30()) {
+    jj_scanpos = xsp;
+    if (jj_3_31()) return true;
+    }
+    return false;
+  }
+
   final private boolean jj_3_1516() {
     if (jj_scan_token(CEILING)) return true;
     return false;
@@ -34817,12 +34768,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_29() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_79()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1510() {
     if (jj_scan_token(ASOF)) return true;
     return false;
@@ -34925,6 +34870,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_29() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_79()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1494() {
     if (jj_scan_token(UTF16)) return true;
     return false;
@@ -34946,12 +34897,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_174() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_80()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1491() {
     if (jj_scan_token(UNCONDITIONAL)) return true;
     return false;
@@ -35061,6 +35006,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_174() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_80()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1475() {
     if (jj_scan_token(SQL_NVARCHAR)) return true;
     return false;
@@ -35333,12 +35284,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_173() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_383()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1437() {
     if (jj_scan_token(NAME)) return true;
     return false;
@@ -35436,11 +35381,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_28() {
-    if (jj_3R_78()) return true;
-    return false;
-  }
-
   final private boolean jj_3R_190() {
     if (jj_3R_387()) return true;
     return false;
@@ -35456,13 +35396,14 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_27() {
-    if (jj_3R_77()) return true;
+  final private boolean jj_3_1422() {
+    if (jj_scan_token(HOP)) return true;
     return false;
   }
 
-  final private boolean jj_3_1422() {
-    if (jj_scan_token(HOP)) return true;
+  final private boolean jj_3R_173() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_383()) return true;
     return false;
   }
 
@@ -35486,29 +35427,11 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_207() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_26()) {
-    jj_scanpos = xsp;
-    if (jj_3_27()) {
-    jj_scanpos = xsp;
-    if (jj_3_28()) return true;
-    }
-    }
-    return false;
-  }
-
   final private boolean jj_3_1417() {
     if (jj_scan_token(FIRST)) return true;
     return false;
   }
 
-  final private boolean jj_3_26() {
-    if (jj_3R_76()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1416() {
     if (jj_scan_token(EXCLUDE)) return true;
     return false;
@@ -35564,8 +35487,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_25() {
-    if (jj_scan_token(ALL)) return true;
+  final private boolean jj_3_28() {
+    if (jj_3R_78()) return true;
     return false;
   }
 
@@ -35609,8 +35532,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_24() {
-    if (jj_3R_75()) return true;
+  final private boolean jj_3_27() {
+    if (jj_3R_77()) return true;
     return false;
   }
 
@@ -35704,6 +35627,19 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_207() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_26()) {
+    jj_scanpos = xsp;
+    if (jj_3_27()) {
+    jj_scanpos = xsp;
+    if (jj_3_28()) return true;
+    }
+    }
+    return false;
+  }
+
   final private boolean jj_3R_177() {
     if (jj_scan_token(PIVOT)) return true;
     if (jj_scan_token(LPAREN)) return true;
@@ -35715,8 +35651,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_22() {
-    if (jj_scan_token(ALL)) return true;
+  final private boolean jj_3_26() {
+    if (jj_3R_76()) return true;
     return false;
   }
 
@@ -35765,11 +35701,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_21() {
-    if (jj_3R_75()) return true;
-    return false;
-  }
-
   final private boolean jj_3_746() {
     if (jj_scan_token(TIME)) return true;
     return false;
@@ -35860,6 +35791,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_25() {
+    if (jj_scan_token(ALL)) return true;
+    return false;
+  }
+
   final private boolean jj_3_763() {
     if (jj_scan_token(SQL_SMALLINT)) return true;
     return false;
@@ -35900,6 +35836,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_24() {
+    if (jj_3R_75()) return true;
+    return false;
+  }
+
   final private boolean jj_3_759() {
     if (jj_scan_token(SQL_VARBINARY)) return true;
     return false;
@@ -35940,17 +35881,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_23() {
-    if (jj_3R_75()) return true;
-    if (jj_scan_token(COMMA)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_18() {
-    if (jj_scan_token(NEXT)) return true;
-    return false;
-  }
-
   final private boolean jj_3_755() {
     if (jj_scan_token(SQL_INTEGER)) return true;
     return false;
@@ -36021,6 +35951,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_22() {
+    if (jj_scan_token(ALL)) return true;
+    return false;
+  }
+
   final private boolean jj_3_747() {
     if (jj_scan_token(SQL_TIMESTAMP)) return true;
     return false;
@@ -36736,20 +36671,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_73() {
-    if (jj_scan_token(LIMIT)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_23()) {
-    jj_scanpos = xsp;
-    if (jj_3_24()) {
-    jj_scanpos = xsp;
-    if (jj_3_25()) return true;
-    }
-    }
-    return false;
-  }
-
   final private boolean jj_3_734() {
     if (jj_scan_token(NUMERIC)) return true;
     return false;
@@ -36770,6 +36691,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_21() {
+    if (jj_3R_75()) return true;
+    return false;
+  }
+
   final private boolean jj_3_739() {
     if (jj_scan_token(SQL_CHAR)) return true;
     return false;
@@ -36785,11 +36711,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_20() {
-    if (jj_scan_token(ROWS)) return true;
-    return false;
-  }
-
   final private boolean jj_3_773() {
     Token xsp;
     xsp = jj_scanpos;
@@ -36800,11 +36721,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_17() {
-    if (jj_scan_token(FIRST)) return true;
-    return false;
-  }
-
   final private boolean jj_3_1386() {
     if (jj_scan_token(SATURDAY)) return true;
     return false;
@@ -36841,6 +36757,17 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_23() {
+    if (jj_3R_75()) return true;
+    if (jj_scan_token(COMMA)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_18() {
+    if (jj_scan_token(NEXT)) return true;
+    return false;
+  }
+
   final private boolean jj_3_737() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_291()) return true;
@@ -36852,11 +36779,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_19() {
-    if (jj_scan_token(ROW)) return true;
-    return false;
-  }
-
   final private boolean jj_3_1380() {
     if (jj_scan_token(VARBINARY)) return true;
     return false;
@@ -36867,17 +36789,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_74() {
-    if (jj_scan_token(FETCH)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_17()) {
-    jj_scanpos = xsp;
-    if (jj_3_18()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3_1378() {
     if (jj_scan_token(UNSIGNED)) return true;
     return false;
@@ -36893,8 +36804,17 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_15() {
-    if (jj_scan_token(ROWS)) return true;
+  final private boolean jj_3R_73() {
+    if (jj_scan_token(LIMIT)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_23()) {
+    jj_scanpos = xsp;
+    if (jj_3_24()) {
+    jj_scanpos = xsp;
+    if (jj_3_25()) return true;
+    }
+    }
     return false;
   }
 
@@ -36919,11 +36839,21 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_20() {
+    if (jj_scan_token(ROWS)) return true;
+    return false;
+  }
+
   final private boolean jj_3_1372() {
     if (jj_scan_token(TABLESAMPLE)) return true;
     return false;
   }
 
+  final private boolean jj_3_17() {
+    if (jj_scan_token(FIRST)) return true;
+    return false;
+  }
+
   final private boolean jj_3_736() {
     if (jj_scan_token(ANY)) return true;
     return false;
@@ -36967,21 +36897,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_14() {
-    if (jj_scan_token(ROW)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_16() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_14()) {
-    jj_scanpos = xsp;
-    if (jj_3_15()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3_1367() {
     if (jj_scan_token(SQRT)) return true;
     return false;
@@ -37009,9 +36924,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_72() {
-    if (jj_scan_token(OFFSET)) return true;
-    if (jj_3R_75()) return true;
+  final private boolean jj_3_19() {
+    if (jj_scan_token(ROW)) return true;
     return false;
   }
 
@@ -37025,6 +36939,17 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_74() {
+    if (jj_scan_token(FETCH)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_17()) {
+    jj_scanpos = xsp;
+    if (jj_3_18()) return true;
+    }
+    return false;
+  }
+
   final private boolean jj_3_1362() {
     if (jj_scan_token(SEARCH)) return true;
     return false;
@@ -37040,6 +36965,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_15() {
+    if (jj_scan_token(ROWS)) return true;
+    return false;
+  }
+
   final private boolean jj_3_1359() {
     if (jj_scan_token(ROWS)) return true;
     return false;
@@ -37094,6 +37024,21 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_14() {
+    if (jj_scan_token(ROW)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_16() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_14()) {
+    jj_scanpos = xsp;
+    if (jj_3_15()) return true;
+    }
+    return false;
+  }
+
   final private boolean jj_3_729() {
     if (jj_scan_token(VARYING)) return true;
     return false;
@@ -37114,6 +37059,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_72() {
+    if (jj_scan_token(OFFSET)) return true;
+    if (jj_3R_75()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1348() {
     if (jj_scan_token(POSITION_REGEX)) return true;
     return false;
@@ -37166,11 +37117,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_8() {
-    if (jj_3R_74()) return true;
-    return false;
-  }
-
   final private boolean jj_3R_286() {
     Token xsp;
     xsp = jj_scanpos;
@@ -37187,11 +37133,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_12() {
-    if (jj_3R_74()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1340() {
     if (jj_scan_token(OCCURRENCES_REGEX)) return true;
     return false;
@@ -37243,21 +37184,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_7() {
-    if (jj_3R_73()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_9() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_7()) {
-    jj_scanpos = xsp;
-    if (jj_3_8()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3_333() {
     if (jj_scan_token(DESC)) return true;
     return false;
@@ -37318,16 +37244,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_6() {
-    if (jj_3R_72()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_11() {
-    if (jj_3R_72()) return true;
-    return false;
-  }
-
   final private boolean jj_3_727() {
     if (jj_scan_token(VARIANT)) return true;
     return false;
@@ -37358,21 +37274,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_10() {
-    if (jj_3R_73()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_13() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_10()) {
-    jj_scanpos = xsp;
-    if (jj_3_11()) {
-    jj_scanpos = xsp;
-    if (jj_3_12()) return true;
-    }
-    }
+  final private boolean jj_3_8() {
+    if (jj_3R_74()) return true;
     return false;
   }
 
@@ -37386,6 +37289,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_12() {
+    if (jj_3R_74()) return true;
+    return false;
+  }
+
   final private boolean jj_3_331() {
     if (jj_scan_token(AS)) return true;
     Token xsp;
@@ -37410,10 +37318,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_418() {
-    return false;
-  }
-
   final private boolean jj_3_1323() {
     if (jj_scan_token(INSENSITIVE)) return true;
     return false;
@@ -37424,11 +37328,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_5() {
-    if (jj_3R_71()) return true;
-    return false;
-  }
-
   final private boolean jj_3_724() {
     if (jj_scan_token(REAL)) return true;
     return false;
@@ -37454,6 +37353,21 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_7() {
+    if (jj_3R_73()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_9() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_7()) {
+    jj_scanpos = xsp;
+    if (jj_3_8()) return true;
+    }
+    return false;
+  }
+
   final private boolean jj_3_1318() {
     if (jj_scan_token(FREE)) return true;
     return false;
@@ -37481,18 +37395,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_352() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_5()) {
-    jj_scanpos = xsp;
-    if (jj_3R_418()) return true;
-    }
-    xsp = jj_scanpos;
-    if (jj_3_13()) jj_scanpos = xsp;
-    return false;
-  }
-
   final private boolean jj_3_1315() {
     if (jj_scan_token(EXTEND)) return true;
     return false;
@@ -37516,6 +37418,16 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_6() {
+    if (jj_3R_72()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_11() {
+    if (jj_3R_72()) return true;
+    return false;
+  }
+
   final private boolean jj_3_713() {
     if (jj_scan_token(UNSIGNED)) return true;
     return false;
@@ -37541,6 +37453,24 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_10() {
+    if (jj_3R_73()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_13() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_10()) {
+    jj_scanpos = xsp;
+    if (jj_3_11()) {
+    jj_scanpos = xsp;
+    if (jj_3_12()) return true;
+    }
+    }
+    return false;
+  }
+
   final private boolean jj_3_1309() {
     if (jj_scan_token(DETERMINISTIC)) return true;
     return false;
@@ -37565,6 +37495,10 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_418() {
+    return false;
+  }
+
   final private boolean jj_3_1307() {
     if (jj_scan_token(DECIMAL)) return true;
     return false;
@@ -37575,6 +37509,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_5() {
+    if (jj_3R_71()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1305() {
     if (jj_scan_token(CYCLE)) return true;
     return false;
@@ -37618,9 +37557,15 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_80() {
-    if (jj_3R_351()) return true;
-    if (jj_3R_352()) return true;
+  final private boolean jj_3R_352() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_5()) {
+    jj_scanpos = xsp;
+    if (jj_3R_418()) return true;
+    }
+    xsp = jj_scanpos;
+    if (jj_3_13()) jj_scanpos = xsp;
     return false;
   }
 
@@ -37731,6 +37676,12 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_80() {
+    if (jj_3R_351()) return true;
+    if (jj_3R_352()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1283() {
     if (jj_scan_token(CONTINUOUS)) return true;
     return false;
@@ -37888,11 +37839,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_2() {
-    if (jj_3R_68()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1263() {
     if (jj_scan_token(TIME_TRUNC)) return true;
     return false;
@@ -37903,11 +37849,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_1() {
-    if (jj_3R_67()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1261() {
     if (jj_scan_token(SUBCLASS_ORIGIN)) return true;
     return false;
@@ -37933,20 +37874,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_4() {
-    if (jj_3R_70()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_1()) { jj_scanpos = xsp; break; }
-    }
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_2()) { jj_scanpos = xsp; break; }
-    }
-    return false;
-  }
-
   final private boolean jj_3_326() {
     if (jj_scan_token(GROUP)) return true;
     return false;
@@ -38004,11 +37931,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3_3() {
-    if (jj_3R_69()) return true;
-    return false;
-  }
-
   final private boolean jj_3_1253() {
     if (jj_scan_token(SQL_NUMERIC)) return true;
     return false;
@@ -38034,16 +37956,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_383() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_3()) {
-    jj_scanpos = xsp;
-    if (jj_3_4()) return true;
-    }
-    return false;
-  }
-
   final private boolean jj_3_1249() {
     if (jj_scan_token(SQL_INTERVAL_HOUR_TO_SECOND)) return true;
     return false;
@@ -38090,6 +38002,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_2() {
+    if (jj_3R_68()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1247() {
     if (jj_scan_token(SQL_INTERVAL_DAY)) return true;
     return false;
@@ -38100,6 +38017,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_1() {
+    if (jj_3R_67()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1245() {
     if (jj_scan_token(SQL_CLOB)) return true;
     return false;
@@ -38115,6 +38037,20 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_4() {
+    if (jj_3R_70()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_1()) { jj_scanpos = xsp; break; }
+    }
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_2()) { jj_scanpos = xsp; break; }
+    }
+    return false;
+  }
+
   final private boolean jj_3_1242() {
     if (jj_scan_token(SOURCE)) return true;
     return false;
@@ -38140,6 +38076,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3_3() {
+    if (jj_3R_69()) return true;
+    return false;
+  }
+
   final private boolean jj_3_1237() {
     if (jj_scan_token(SCOPE_NAME)) return true;
     return false;
@@ -38175,6 +38116,16 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_383() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_3()) {
+    jj_scanpos = xsp;
+    if (jj_3_4()) return true;
+    }
+    return false;
+  }
+
   final private boolean jj_3_1233() {
     if (jj_scan_token(RLIKE)) return true;
     return false;
@@ -39686,11 +39637,6 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_295() {
-    if (jj_3R_412()) return true;
-    return false;
-  }
-
   final private boolean jj_3_295() {
     Token xsp;
     xsp = jj_scanpos;
@@ -39714,8 +39660,8 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_361() {
-    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
+  final private boolean jj_3R_295() {
+    if (jj_3R_412()) return true;
     return false;
   }
 
@@ -39732,15 +39678,11 @@ final String p;
     return false;
   }
 
-  final private boolean jj_3R_350() {
+  final private boolean jj_3R_361() {
     if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
     return false;
   }
 
-  final private boolean jj_3R_423() {
-    return false;
-  }
-
   final private boolean jj_3R_279() {
     if (jj_3R_278()) return true;
     return false;
@@ -39751,14 +39693,18 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_350() {
+    if (true) { jj_la = 0; jj_scanpos = jj_lastpos; return false;}
+    return false;
+  }
+
   final private boolean jj_3_292() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_183()) return true;
     return false;
   }
 
-  final private boolean jj_3R_176() {
-    if (jj_3R_384()) return true;
+  final private boolean jj_3R_423() {
     return false;
   }
 
@@ -39788,6 +39734,11 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_176() {
+    if (jj_3R_384()) return true;
+    return false;
+  }
+
   final private boolean jj_3_680() {
     if (jj_scan_token(UESCAPE)) return true;
     if (jj_scan_token(QUOTED_STRING)) return true;
@@ -40734,6 +40685,68 @@ final String p;
     return false;
   }
 
+  final private boolean jj_3R_262() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_615()) {
+    jj_scanpos = xsp;
+    if (jj_3_616()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_615() {
+    if (jj_scan_token(SECOND)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_349() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_268()) {
+    jj_scanpos = xsp;
+    if (jj_3_269()) {
+    jj_scanpos = xsp;
+    if (jj_3_270()) {
+    jj_scanpos = xsp;
+    if (jj_3_271()) {
+    jj_scanpos = xsp;
+    if (jj_3_272()) return true;
+    }
+    }
+    }
+    }
+    xsp = jj_scanpos;
+    if (jj_3_273()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3_274()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3_277()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3_278()) jj_scanpos = xsp;
+    return false;
+  }
+
+  final private boolean jj_3_614() {
+    if (jj_scan_token(MINUTES)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_261() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_613()) {
+    jj_scanpos = xsp;
+    if (jj_3_614()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_613() {
+    if (jj_scan_token(MINUTE)) return true;
+    return false;
+  }
+
   public IgniteSqlParserImplTokenManager token_source;
   SimpleCharStream jj_input_stream;
   public Token token, jj_nt;
diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java
index 45f6db66f08..6757da96e7f 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java
@@ -216,6 +216,139 @@ public class DynamicParametersIntegrationTest extends 
AbstractBasicIntegrationTe
         assertThrowsSqlException("SELECT id FROM person ORDER BY id OFFSET ? 
ROWS", null, BigDecimal.valueOf(-1.5));
     }
 
+    /** */
+    @Test
+    public void testInvalidFetchExpression() {
+        createAndPopulateTable();
+
+        assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS 
ONLY", null, -2);
+        assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS 
ONLY", null, -1.5);
+        assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS 
ONLY", null, NULL_RESULT);
+        assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS 
ONLY", null, bigValue());
+        assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS 
ONLY", null, "abc");
+
+        assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (1 + ? - 4) 
ROWS ONLY", null, 1);
+        assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (? - (50 - 
20)) ROWS ONLY", null, 2);
+
+        assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST SQRT(?) 
ROWS ONLY", null, 4);
+    }
+
+    /** */
+    @Test
+    public void testFetchExpression() {
+        createAndPopulateTable();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (?) ROWS 
ONLY")
+            .withParams(1)
+            .returns(0)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (1 + ? - 2) 
ROWS ONLY")
+            .withParams(5)
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .returns(3)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (1 + (? - 
1) + 1) ROWS ONLY")
+            .withParams(2)
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id DESC FETCH FIRST (1 + 
(2 - 1) + ?) ROWS ONLY")
+            .withParams(2)
+            .returns(4)
+            .returns(3)
+            .returns(2)
+            .returns(1)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (ABS(?)) 
ROWS ONLY")
+            .withParams(-2)
+            .returns(0)
+            .returns(1)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (1 + 
ABS(?)) ROWS ONLY")
+            .withParams(-2)
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (SQRT(?) + 
1 + 0) ROWS ONLY")
+            .withParams(4)
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .check();
+    }
+
+    /** */
+    @Test
+    public void testFetchExpressionCachedQuery() {
+        createAndPopulateTable();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (? + 1) 
ROWS ONLY")
+            .withParams(1)
+            .returns(0)
+            .returns(1)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (? + 1) 
ROWS ONLY")
+            .withParams(2)
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id DESC FETCH FIRST (? + 
1) ROWS ONLY")
+            .withParams(1)
+            .returns(4)
+            .returns(3)
+            .check();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id DESC FETCH FIRST (? + 
1) ROWS ONLY")
+            .withParams(2)
+            .returns(4)
+            .returns(3)
+            .returns(2)
+            .check();
+
+        // Check negative param.
+        assertThrowsSqlException("SELECT id FROM PERSON ORDER BY id FETCH 
FIRST (? + 1) ROWS ONLY", null, -2);
+        assertThrowsSqlException("SELECT id FROM PERSON ORDER BY id DESC FETCH 
FIRST (? + 1) ROWS ONLY", null, -2);
+    }
+
+    /** */
+    @Test
+    public void testFetchExpressionNested() {
+        createAndPopulateTable();
+
+        assertQuery("SELECT id FROM (SELECT id from PERSON ORDER BY id FETCH 
FIRST (? + 3) ROWS ONLY) " +
+            "ORDER BY id FETCH NEXT (1 + ?) ROWS ONLY")
+            .withParams(2, 1)
+            .returns(0)
+            .returns(1)
+            .check();
+    }
+
+    /** */
+    @Test
+    public void testFetchExpressionWithRewrite() {
+        createAndPopulateTable();
+
+        assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (1 + NVL(?, 
10000)) ROWS ONLY")
+            .withParams(2)
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .check();
+    }
+
     /** Tests the same query with different type of parameters to cover case 
with check right plans cache work. **/
     @Test
     public void testWithDifferentParametersTypes() {
@@ -391,4 +524,9 @@ public class DynamicParametersIntegrationTest extends 
AbstractBasicIntegrationTe
     private void assertUnexpectedNumberOfParameters(String qry, Object... 
params) {
         assertThrows(qry, IgniteSQLException.class, "Wrong number of query 
parameters", params);
     }
+
+    /** */
+    private static BigDecimal bigValue() {
+        return BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.ONE);
+    }
 }
diff --git 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/LimitOffsetIntegrationTest.java
 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/LimitOffsetIntegrationTest.java
index 04eeb5e543e..434c16afff0 100644
--- 
a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/LimitOffsetIntegrationTest.java
+++ 
b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/LimitOffsetIntegrationTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.internal.processors.query.calcite.integration;
 
-import java.math.BigInteger;
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.List;
 import org.apache.calcite.sql.validate.SqlValidatorException;
@@ -25,7 +25,6 @@ import org.apache.ignite.IgniteCache;
 import org.apache.ignite.cache.CacheMode;
 import org.apache.ignite.cache.QueryEntity;
 import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.internal.processors.query.IgniteSQLException;
 import 
org.apache.ignite.internal.processors.query.calcite.exec.rel.AbstractNode;
 import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.X;
@@ -104,29 +103,28 @@ public class LimitOffsetIntegrationTest extends 
AbstractBasicIntegrationTransact
     /** Tests correctness of fetch / offset params. */
     @Test
     public void testInvalidLimitOffset() {
-        BigInteger moreThanMaxLong = 
BigInteger.valueOf(Long.MAX_VALUE).add(BigInteger.ONE);
-
-        assertThrows("SELECT * FROM TEST_REPL OFFSET " + moreThanMaxLong + " 
ROWS",
+        assertThrows("SELECT * FROM TEST_REPL OFFSET " + bigValue() + " ROWS",
             SqlValidatorException.class, "Illegal value of offset");
 
-        assertThrows("SELECT * FROM TEST_REPL FETCH FIRST " + moreThanMaxLong 
+ " ROWS ONLY",
+        assertThrows("SELECT * FROM TEST_REPL FETCH FIRST " + bigValue() + " 
ROWS ONLY",
             SqlValidatorException.class, "Illegal value of fetch / limit");
 
-        assertThrows("SELECT * FROM TEST_REPL LIMIT " + moreThanMaxLong,
+        assertThrows("SELECT * FROM TEST_REPL LIMIT " + bigValue(),
             SqlValidatorException.class, "Illegal value of fetch / limit");
 
-        assertThrows("SELECT * FROM TEST_REPL OFFSET -1 ROWS FETCH FIRST -1 
ROWS ONLY",
-            IgniteSQLException.class, null);
-
-        assertThrows("SELECT * FROM TEST_REPL OFFSET -1 ROWS",
-            IgniteSQLException.class, null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL OFFSET -1 ROWS FETCH 
FIRST -1 ROWS ONLY", null);
 
+        assertThrowsSqlException("SELECT * FROM TEST_REPL OFFSET -1 ROWS", 
null);
         assertThrowsSqlException("SELECT * FROM TEST_REPL OFFSET -1.5 ROWS", 
null);
-
         assertThrowsSqlException("SELECT * FROM TEST_REPL OFFSET -0.5 ROWS", 
null);
-
-        assertThrows("SELECT * FROM TEST_REPL OFFSET 2+1 ROWS",
-            IgniteSQLException.class, null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL OFFSET 2+1 ROWS", 
null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL OFFSET id ROWS", 
null);
+
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST -1 ROWS 
ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST -1.5 
ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST -0.5 
ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST 2+1 ROWS 
ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST id ROWS 
ONLY", null);
     }
 
     /** */
@@ -199,6 +197,98 @@ public class LimitOffsetIntegrationTest extends 
AbstractBasicIntegrationTransact
         assertQuery("SELECT (SELECT id FROM TEST_PART ORDER BY id LIMIT 1 
OFFSET 10)").returns(NULL_RESULT).check();
     }
 
+    /** */
+    @Test
+    public void testInvalidFetchExpression() {
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (" + 
bigValue() + ") ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (" + 
bigValue() + " + 1) ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (1 + " + 
bigValue() + ") ROWS ONLY", null);
+
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (-2) 
ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (2 - 3) 
ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (1 + 2 - 
4) ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (-1.5) 
ROWS ONLY", null);
+
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST ('abc') 
ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST 
(SUBSTRING('abc', 1, 1)) ROWS ONLY", null);
+
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (id) 
ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST (id + 1) 
ROWS ONLY", null);
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST 
(ABS(id)) ROWS ONLY", null);
+
+        assertThrowsSqlException("SELECT * FROM TEST_REPL FETCH FIRST SQRT(4) 
ROWS ONLY", null);
+    }
+
+    /** */
+    @Test
+    public void testFetchExpression() throws Exception {
+        fillCache(cacheRepl, 5);
+
+        assertQuery("SELECT id FROM TEST_REPL ORDER BY id FETCH FIRST (1) ROWS 
ONLY")
+            .returns(0)
+            .check();
+
+        assertQuery("SELECT id FROM TEST_REPL ORDER BY id FETCH FIRST (1 + 5 - 
2) ROWS ONLY")
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .returns(3)
+            .check();
+
+        assertQuery("SELECT id FROM TEST_REPL ORDER BY id FETCH FIRST (1 + (2 
- 1) + 1) ROWS ONLY")
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .check();
+
+        assertQuery("SELECT id FROM TEST_REPL ORDER BY id DESC FETCH FIRST (1 
+ (2 - 1) + 1) ROWS ONLY")
+            .returns(4)
+            .returns(3)
+            .returns(2)
+            .check();
+
+        assertQuery("SELECT id FROM TEST_REPL ORDER BY id FETCH FIRST 
(ABS(-2)) ROWS ONLY")
+            .returns(0)
+            .returns(1)
+            .check();
+
+        assertQuery("SELECT id FROM TEST_REPL ORDER BY id FETCH FIRST (1 + 
ABS(-2)) ROWS ONLY")
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .check();
+
+        assertQuery("SELECT id FROM TEST_REPL ORDER BY id FETCH FIRST (SQRT(4) 
+ 1 + 0) ROWS ONLY")
+            .returns(0)
+            .returns(1)
+            .returns(2)
+            .check();
+    }
+
+    /** */
+    @Test
+    public void testFetchExpressionNested() throws Exception {
+        fillCache(cacheRepl, 5);
+
+        assertQuery("SELECT id FROM (SELECT id from TEST_REPL ORDER BY id 
FETCH FIRST (2 + 3) ROWS ONLY) " +
+            "ORDER BY id FETCH NEXT (1 + 1) ROWS ONLY")
+            .returns(0)
+            .returns(1)
+            .check();
+    }
+
+    /** */
+    @Test
+    public void testFetchExpressionWithRewrite() throws Exception {
+        fillCache(cacheRepl, 5);
+
+        assertQuery("SELECT id FROM TEST_REPL ORDER BY id FETCH FIRST (1 + 
NVL(?, 10000)) ROWS ONLY")
+            .withParams(1)
+            .returns(0)
+            .returns(1)
+            .check();
+    }
+
     /**
      * @param c Cache.
      * @param rows Rows count.
@@ -283,4 +373,9 @@ public class LimitOffsetIntegrationTest extends 
AbstractBasicIntegrationTransact
 
         return sb.toString();
     }
+
+    /** */
+    private static BigDecimal bigValue() {
+        return BigDecimal.valueOf(Long.MAX_VALUE).add(BigDecimal.ONE);
+    }
 }

Reply via email to