You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by iv...@apache.org on 2022/06/07 09:34:24 UTC

[ignite] branch master updated: IGNITE-15550 SQL Calcite: implement ARRAY, ARRAY_AGG, ARRAY_CONCAT_AGG and MAP support (#10059)

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

ivandasch pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new a6067c6a142 IGNITE-15550 SQL Calcite: implement ARRAY, ARRAY_AGG, ARRAY_CONCAT_AGG and MAP support (#10059)
a6067c6a142 is described below

commit a6067c6a1421bd507ac3c64cfda75dffcbf8b66d
Author: Ivan Daschinskiy <iv...@apache.org>
AuthorDate: Tue Jun 7 12:34:19 2022 +0300

    IGNITE-15550 SQL Calcite: implement ARRAY, ARRAY_AGG, ARRAY_CONCAT_AGG and MAP support (#10059)
---
 docs/_docs/SQL/sql-calcite.adoc                    |    2 +-
 modules/calcite/pom.xml                            |   18 +-
 modules/calcite/src/main/codegen/config.fmpp       |    3 +-
 .../query/calcite/exec/LogicalRelImplementor.java  |   15 +
 .../query/calcite/exec/exp/agg/Accumulators.java   |  162 +-
 .../query/calcite/exec/rel/CollectNode.java        |  239 +++
 .../processors/query/calcite/prepare/Cloner.java   |    6 +
 .../query/calcite/prepare/IgniteRelShuttle.java    |    6 +
 .../query/calcite/prepare/IgniteSqlValidator.java  |    2 +
 .../query/calcite/prepare/PlannerPhase.java        |    2 +
 .../query/calcite/rel/IgniteCollect.java           |   91 ++
 .../query/calcite/rel/IgniteRelVisitor.java        |    5 +
 .../processors/query/calcite/rule/CollectRule.java |   48 +
 .../calcite/sql/fun/IgniteStdSqlOperatorTable.java |    7 +-
 .../calcite/sql/generated/IgniteSqlParserImpl.java | 1550 ++++++++++----------
 .../calcite/integration/StdSqlOperatorsTest.java   |   17 +-
 .../query/calcite/logical/SqlScriptRunner.java     |   23 +-
 .../src/test/sql/types/collections/array.test      |   23 +
 .../src/test/sql/types/collections/array_agg.test  |   84 ++
 .../array_agg.test_slow}                           |   30 +-
 .../{list => collections}/list.test_slow_ignore    |    4 +-
 .../list_aggregates.test_ignore                    |    4 +-
 .../src/test/sql/types/collections/map.test        |   21 +
 23 files changed, 1528 insertions(+), 834 deletions(-)

diff --git a/docs/_docs/SQL/sql-calcite.adoc b/docs/_docs/SQL/sql-calcite.adoc
index ac9f728b929..44b8022bb95 100644
--- a/docs/_docs/SQL/sql-calcite.adoc
+++ b/docs/_docs/SQL/sql-calcite.adoc
@@ -159,7 +159,7 @@ The Calcite-based SQL engine currently supports:
 |Group | Functions list
 
 |Aggregate functions
-|`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`, `ANY_VALUE`, `LISTAGG`, `GROUP_CONCAT`, `STRING_AGG`
+|`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`, `ANY_VALUE`, `LISTAGG`, `GROUP_CONCAT`, `STRING_AGG`, `ARRAY_AGG`, `ARRAY_CONCAT_AGG`
 
 |String functions
 |`UPPER`, `LOWER`, `INITCAP`, `TO_BASE64`, `FROM_BASE64`, `MD5`, `SHA1`, `SUBSTRING`, `LEFT`, `RIGHT`, `REPLACE`, `TRANSLATE`, `CHR`, `CHAR_LENGTH`, `CHARACTER_LENGTH`, `LENGTH`, `CONCAT`, `OVERLAY`, `POSITION`, `ASCII`, `REPEAT`, `SPACE`, `STRCMP`, `SOUNDEX`, `DIFFERENCE`, `REVERSE`, `TRIM`, `LTRIM`, `RTRIM`, `REGEXP_REPLACE`
diff --git a/modules/calcite/pom.xml b/modules/calcite/pom.xml
index 1e3623ca5c3..14a5582b389 100644
--- a/modules/calcite/pom.xml
+++ b/modules/calcite/pom.xml
@@ -221,6 +221,14 @@
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <version>2.8.2</version>
+                <configuration>
+                    <skip>false</skip>
+                </configuration>
+            </plugin>
             <plugin>
                 <artifactId>maven-resources-plugin</artifactId>
                 <executions>
@@ -278,7 +286,7 @@
                 <executions>
                     <execution>
                         <id>generate-fmpp-sources</id>
-                        <phase>compile</phase>
+                        <phase>validate</phase>
                         <goals>
                             <goal>generate</goal>
                         </goals>
@@ -307,14 +315,6 @@
                     </execution>
                 </executions>
             </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-deploy-plugin</artifactId>
-                <version>2.8.2</version>
-                <configuration>
-                    <skip>false</skip>
-                </configuration>
-            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/modules/calcite/src/main/codegen/config.fmpp b/modules/calcite/src/main/codegen/config.fmpp
index 90a0b57d312..10a98614c13 100644
--- a/modules/calcite/src/main/codegen/config.fmpp
+++ b/modules/calcite/src/main/codegen/config.fmpp
@@ -124,7 +124,8 @@ data: {
 #     "ANY"
       "ARE"
       "ARRAY"
-#     "ARRAY_AGG" # not a keyword in Calcite
+      "ARRAY_AGG"
+      "ARRAY_CONCAT_AGG"
       "ARRAY_MAX_CARDINALITY"
       "AS"
       "ASC"
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/LogicalRelImplementor.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/LogicalRelImplementor.java
index 929707fea99..c44e6195eca 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/LogicalRelImplementor.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/LogicalRelImplementor.java
@@ -42,6 +42,7 @@ import org.apache.ignite.internal.processors.query.calcite.exec.exp.ExpressionFa
 import org.apache.ignite.internal.processors.query.calcite.exec.exp.agg.AccumulatorWrapper;
 import org.apache.ignite.internal.processors.query.calcite.exec.exp.agg.AggregateType;
 import org.apache.ignite.internal.processors.query.calcite.exec.rel.AbstractSetOpNode;
+import org.apache.ignite.internal.processors.query.calcite.exec.rel.CollectNode;
 import org.apache.ignite.internal.processors.query.calcite.exec.rel.CorrelatedNestedLoopJoinNode;
 import org.apache.ignite.internal.processors.query.calcite.exec.rel.FilterNode;
 import org.apache.ignite.internal.processors.query.calcite.exec.rel.HashAggregateNode;
@@ -63,6 +64,7 @@ import org.apache.ignite.internal.processors.query.calcite.exec.rel.TableSpoolNo
 import org.apache.ignite.internal.processors.query.calcite.exec.rel.UnionAllNode;
 import org.apache.ignite.internal.processors.query.calcite.metadata.AffinityService;
 import org.apache.ignite.internal.processors.query.calcite.metadata.ColocationGroup;
+import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCollect;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCorrelatedNestedLoopJoin;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteExchange;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteFilter;
@@ -757,6 +759,19 @@ public class LogicalRelImplementor<Row> implements IgniteRelVisitor<Node<Row>> {
         return node;
     }
 
+    /** {@inheritDoc} */
+    @Override public Node<Row> visit(IgniteCollect rel) {
+        RelDataType outType = rel.getRowType();
+
+        CollectNode<Row> node = new CollectNode<>(ctx, outType);
+
+        Node<Row> input = visit(rel.getInput());
+
+        node.register(input);
+
+        return node;
+    }
+
     /** {@inheritDoc} */
     @Override public Node<Row> visit(IgniteRel rel) {
         return rel.accept(this);
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/Accumulators.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/Accumulators.java
index 9a75e28a908..05fd17e1ea8 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/Accumulators.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/exp/agg/Accumulators.java
@@ -22,9 +22,9 @@ import java.math.MathContext;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Objects;
 import java.util.UUID;
 import java.util.function.Function;
 import java.util.function.Supplier;
@@ -85,6 +85,8 @@ public class Accumulators {
             case "ANY_VALUE":
                 return () -> new AnyVal<>(call, hnd);
             case "LISTAGG":
+            case "ARRAY_AGG":
+            case "ARRAY_CONCAT_AGG":
                 return listAggregateSupplier(call, ctx);
             default:
                 throw new AssertionError(call.getAggregation().getName());
@@ -98,7 +100,16 @@ public class Accumulators {
     ) {
         RowHandler<Row> hnd = ctx.rowHandler();
 
-        Supplier<Accumulator<Row>> accSup = () -> new ListAggAccumulator<>(call, hnd);
+        Supplier<Accumulator<Row>> accSup;
+        String aggName = call.getAggregation().getName();
+        if ("LISTAGG".equals(aggName))
+            accSup = () -> new ListAggAccumulator<>(call, hnd);
+        else if ("ARRAY_CONCAT_AGG".equals(aggName))
+            accSup = () -> new ArrayConcatAggregateAccumulator<>(call, hnd);
+        else if ("ARRAY_AGG".equals(aggName))
+            accSup = () -> new ArrayAggregateAccumulator<>(call, hnd);
+        else
+            throw new AssertionError(call.getAggregation().getName());
 
         if (call.getCollation() != null && !call.getCollation().getFieldCollations().isEmpty()) {
             Comparator<Row> cmp = ctx.expressionFactory().comparator(call.getCollation());
@@ -1082,55 +1093,85 @@ public class Accumulators {
     }
 
     /** */
-    private static class ListAggAccumulator<Row> extends AbstractAccumulator<Row> {
-        /** Default separator. */
-        private static final String DEFAULT_SEPARATOR = ",";
-
-        /** */
-        private final List<Row> list;
-
+    private abstract static class AggAccumulator<Row> extends AbstractAccumulator<Row> implements Iterable<Row> {
         /** */
-        private final boolean isDfltSep;
+        private final List<Row> buf;
 
         /** */
-        public ListAggAccumulator(AggregateCall aggCall, RowHandler<Row> hnd) {
+        protected AggAccumulator(AggregateCall aggCall, RowHandler<Row> hnd) {
             super(aggCall, hnd);
 
-            isDfltSep = aggCall.getArgList().size() <= 1;
-
-            list = new ArrayList<>();
+            buf = new ArrayList<>();
         }
 
         /** {@inheritDoc} */
         @Override public void add(Row row) {
-            if (row == null || get(0, row) == null)
+            if (row == null)
                 return;
 
-            list.add(row);
+            buf.add(row);
         }
 
         /** {@inheritDoc} */
         @Override public void apply(Accumulator<Row> other) {
-            ListAggAccumulator<Row> other0 = (ListAggAccumulator<Row>)other;
+            AggAccumulator<Row> other0 = (AggAccumulator<Row>)other;
 
-            list.addAll(other0.list);
+            buf.addAll(other0.buf);
+        }
+
+        /** {@inheritDoc} */
+        @Override public Iterator<Row> iterator() {
+            return buf.iterator();
+        }
+
+        /** */
+        public boolean isEmpty() {
+            return buf.isEmpty();
+        }
+
+        /** */
+        public int size() {
+            return buf.size();
+        }
+    }
+
+    /** */
+    private static class ListAggAccumulator<Row> extends AggAccumulator<Row> {
+        /** Default separator. */
+        private static final String DEFAULT_SEPARATOR = ",";
+
+        /** */
+        private final boolean isDfltSep;
+
+        /** */
+        public ListAggAccumulator(AggregateCall aggCall, RowHandler<Row> hnd) {
+            super(aggCall, hnd);
+
+            isDfltSep = aggCall.getArgList().size() <= 1;
         }
 
         /** {@inheritDoc} */
         @Override public Object end() {
-            if (list.isEmpty())
+            if (isEmpty())
                 return null;
 
-            StringBuilder builder = new StringBuilder();
+            StringBuilder builder = null;
+
+            for (Row row: this) {
+                Object val = get(0, row);
+
+                if (val == null)
+                    continue;
+
+                if (builder == null)
+                    builder = new StringBuilder();
 
-            for (Row row: list) {
                 if (builder.length() != 0)
                     builder.append(extractSeparator(row));
-
-                builder.append(Objects.toString(get(0, row)));
+                builder.append(val);
             }
 
-            return builder.toString();
+            return builder != null ? builder.toString() : null;
         }
 
         /** */
@@ -1158,6 +1199,79 @@ public class Accumulators {
         }
     }
 
+    /** */
+    private static class ArrayAggregateAccumulator<Row> extends AggAccumulator<Row> {
+        /** */
+        public ArrayAggregateAccumulator(AggregateCall aggCall, RowHandler<Row> hnd) {
+            super(aggCall, hnd);
+        }
+
+        /** {@inheritDoc} */
+        @Override public Object end() {
+            if (size() == 0)
+                return null;
+
+            List<Object> result = new ArrayList<>(size());
+            for (Row row: this)
+                result.add(get(0, row));
+
+            return result;
+        }
+
+        /** {@inheritDoc} */
+        @Override public List<RelDataType> argumentTypes(IgniteTypeFactory typeFactory) {
+            return F.asList(typeFactory.createTypeWithNullability(typeFactory.createSqlType(ANY), true));
+        }
+
+        /** {@inheritDoc} */
+        @Override public RelDataType returnType(IgniteTypeFactory typeFactory) {
+            return typeFactory.createTypeWithNullability(typeFactory.createArrayType(
+                typeFactory.createSqlType(ANY), -1), true);
+        }
+    }
+
+    /** */
+    private static class ArrayConcatAggregateAccumulator<Row> extends AggAccumulator<Row> {
+        /** */
+        public ArrayConcatAggregateAccumulator(AggregateCall aggCall, RowHandler<Row> hnd) {
+            super(aggCall, hnd);
+        }
+
+        /** {@inheritDoc} */
+        @Override public Object end() {
+            if (size() == 0)
+                return null;
+
+            List<Object> result = new ArrayList<>(size());
+
+            for (Row row: this) {
+                List<Object> arr = get(0, row);
+
+                if (F.isEmpty(arr))
+                    continue;
+
+                result.addAll(arr);
+            }
+
+            if (result.isEmpty())
+                return null;
+
+            return result;
+        }
+
+        /** {@inheritDoc} */
+        @Override public List<RelDataType> argumentTypes(IgniteTypeFactory typeFactory) {
+            return F.asList(typeFactory.createTypeWithNullability(typeFactory.createArrayType(
+                typeFactory.createSqlType(ANY), -1), true));
+        }
+
+        /** {@inheritDoc} */
+        @Override public RelDataType returnType(IgniteTypeFactory typeFactory) {
+            return typeFactory.createTypeWithNullability(typeFactory.createArrayType(
+                typeFactory.createSqlType(ANY), -1), true);
+        }
+    }
+
     /** */
     private static class DistinctAccumulator<Row> extends AbstractAccumulator<Row> {
         /** */
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/CollectNode.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/CollectNode.java
new file mode 100644
index 00000000000..717a02d58fe
--- /dev/null
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/exec/rel/CollectNode.java
@@ -0,0 +1,239 @@
+/*
+ * 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.exec.rel;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Supplier;
+import com.google.common.collect.Iterables;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.ignite.internal.processors.query.calcite.exec.ExecutionContext;
+import org.apache.ignite.internal.processors.query.calcite.exec.RowHandler;
+import org.apache.ignite.internal.processors.query.calcite.type.IgniteTypeFactory;
+import org.apache.ignite.internal.util.typedef.F;
+
+/** */
+public class CollectNode<Row> extends AbstractNode<Row> implements SingleNode<Row>, Downstream<Row> {
+    /** */
+    private final Collector<Row> collector;
+
+    /** */
+    private int requested;
+
+    /** */
+    private int waiting;
+
+    /**
+     * @param ctx Execution context.
+     * @param rowType Output row type.
+     */
+    public CollectNode(
+        ExecutionContext<Row> ctx,
+        RelDataType rowType
+    ) {
+        super(ctx, rowType);
+
+        collector = createCollector(ctx, rowType);
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void rewindInternal() {
+        requested = 0;
+        waiting = 0;
+        collector.clear();
+    }
+
+    /** {@inheritDoc} */
+    @Override protected Downstream<Row> requestDownstream(int idx) {
+        if (idx != 0)
+            throw new IndexOutOfBoundsException();
+
+        return this;
+    }
+
+    /** {@inheritDoc} */
+    @Override public void request(int rowsCnt) throws Exception {
+        assert !F.isEmpty(sources()) && sources().size() == 1;
+        assert rowsCnt > 0 && requested == 0;
+
+        checkState();
+
+        requested = rowsCnt;
+
+        if (waiting == 0)
+            source().request(waiting = IN_BUFFER_SIZE);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void push(Row row) throws Exception {
+        assert downstream() != null;
+        assert waiting > 0;
+
+        checkState();
+
+        waiting--;
+
+        collector.push(row);
+
+        if (waiting == 0)
+            source().request(waiting = IN_BUFFER_SIZE);
+    }
+
+    /** {@inheritDoc} */
+    @Override public void end() throws Exception {
+        assert downstream() != null;
+        assert waiting > 0;
+
+        checkState();
+
+        waiting = -1;
+
+        if (isClosed())
+            return;
+
+        if (requested > 0) {
+            requested = 0;
+
+            downstream().push(collector.get());
+            downstream().end();
+        }
+    }
+
+    /** */
+    private static <Row> Collector<Row> createCollector(
+        ExecutionContext<Row> ctx,
+        RelDataType rowType
+    ) {
+        IgniteTypeFactory typeFactory = ctx.getTypeFactory();
+        RelDataType collectionType = Iterables.getOnlyElement(rowType.getFieldList()).getType();
+        RowHandler.RowFactory<Row> rowFactory = ctx.rowHandler().factory(typeFactory, rowType);
+
+        switch (collectionType.getSqlTypeName()) {
+            case ARRAY:
+                return new ArrayCollector<>(ctx.rowHandler(), rowFactory, IN_BUFFER_SIZE);
+            case MAP:
+                return new MapCollector<>(ctx.rowHandler(), rowFactory, IN_BUFFER_SIZE);
+            default:
+                throw new RuntimeException("Unsupported collectionType: " + collectionType.getSqlTypeName());
+        }
+    }
+
+    /** */
+    private abstract static class Collector<Row> implements Supplier<Row> {
+        /** */
+        protected final RowHandler<Row> rowHandler;
+
+        /** */
+        protected final RowHandler.RowFactory<Row> rowFactory;
+
+        /** */
+        protected final int cap;
+
+        /** */
+        Collector(
+            RowHandler<Row> handler,
+            RowHandler.RowFactory<Row> factory,
+            int cap
+        ) {
+            rowHandler = handler;
+            rowFactory = factory;
+            this.cap = cap;
+        }
+
+        /** */
+        public abstract void push(Row row);
+
+        /** */
+        public abstract void clear();
+
+        /** */
+        protected abstract Object outData();
+
+        /** {@inheritDoc} */
+        @Override public Row get() {
+            Row out = rowFactory.create();
+
+            rowHandler.set(0, out, outData());
+            return out;
+        }
+    }
+
+    /** */
+    private static class MapCollector<Row> extends Collector<Row> {
+        /** */
+        private Map<Object, Object> outBuf;
+
+        /** */
+        private MapCollector(
+            RowHandler<Row> handler,
+            RowHandler.RowFactory<Row> rowFactory,
+            int cap
+        ) {
+            super(handler, rowFactory, cap);
+            outBuf = new LinkedHashMap<>(cap);
+        }
+
+        /** {@inheritDoc} */
+        @Override protected Object outData() {
+            return Collections.unmodifiableMap(outBuf);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void push(Row row) {
+            outBuf.put(rowHandler.get(0, row), rowHandler.get(1, row));
+        }
+
+        /** {@inheritDoc} */
+        @Override public void clear() {
+            outBuf = new LinkedHashMap<>(cap);
+        }
+    }
+
+    /** */
+    private static class ArrayCollector<Row> extends Collector<Row> {
+        /** */
+        private List<Object> outBuf;
+
+        /** */
+        private ArrayCollector(
+            RowHandler<Row> handler,
+            RowHandler.RowFactory<Row> rowFactory,
+            int cap
+        ) {
+            super(handler, rowFactory, cap);
+            outBuf = new ArrayList<>(cap);
+        }
+
+        /** {@inheritDoc} */
+        @Override protected Object outData() {
+            return Collections.unmodifiableList(outBuf);
+        }
+
+        /** {@inheritDoc} */
+        @Override public void push(Row row) {
+            outBuf.add(rowHandler.get(0, row));
+        }
+
+        /** {@inheritDoc} */
+        @Override public void clear() {
+            outBuf = new ArrayList<>(cap);
+        }
+    }
+}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Cloner.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Cloner.java
index c9a3dfa7fc6..9cee53a2ece 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Cloner.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/Cloner.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.processors.query.calcite.prepare;
 
 import com.google.common.collect.ImmutableList;
 import org.apache.calcite.plan.RelOptCluster;
+import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCollect;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCorrelatedNestedLoopJoin;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteExchange;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteFilter;
@@ -242,6 +243,11 @@ public class Cloner implements IgniteRelVisitor<IgniteRel> {
         return rel.clone(cluster, F.asList());
     }
 
+    /** {@inheritDoc} */
+    @Override public IgniteRel visit(IgniteCollect rel) {
+        return rel.clone(cluster, F.asList(visit((IgniteRel)rel.getInput())));
+    }
+
     /** {@inheritDoc} */
     @Override public IgniteRel visit(IgniteRel rel) {
         return rel.accept(this);
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteRelShuttle.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteRelShuttle.java
index b8930a4028f..a90de5119b7 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteRelShuttle.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/IgniteRelShuttle.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.processors.query.calcite.prepare;
 
 import java.util.List;
+import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCollect;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCorrelatedNestedLoopJoin;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteExchange;
 import org.apache.ignite.internal.processors.query.calcite.rel.IgniteFilter;
@@ -186,6 +187,11 @@ public class IgniteRelShuttle implements IgniteRelVisitor<IgniteRel> {
         return processNode(rel);
     }
 
+    /** {@inheritDoc} */
+    @Override public IgniteRel visit(IgniteCollect rel) {
+        return processNode(rel);
+    }
+
     /** {@inheritDoc} */
     @Override public IgniteRel visit(IgniteRel rel) {
         return rel.accept(this);
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 71c822289e2..8f5644e8963 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
@@ -389,6 +389,8 @@ public class IgniteSqlValidator extends SqlValidatorImpl {
             case MIN:
             case MAX:
             case ANY_VALUE:
+            case ARRAY_AGG:
+            case ARRAY_CONCAT_AGG:
             case GROUP_CONCAT:
             case LISTAGG:
             case STRING_AGG:
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 85ae8bc4cc9..8a0471677e9 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
@@ -42,6 +42,7 @@ import org.apache.calcite.tools.Program;
 import org.apache.calcite.tools.RuleSet;
 import org.apache.calcite.tools.RuleSets;
 import org.apache.calcite.util.Optionality;
+import org.apache.ignite.internal.processors.query.calcite.rule.CollectRule;
 import org.apache.ignite.internal.processors.query.calcite.rule.CorrelateToNestedLoopRule;
 import org.apache.ignite.internal.processors.query.calcite.rule.CorrelatedNestedLoopJoinRule;
 import org.apache.ignite.internal.processors.query.calcite.rule.FilterConverterRule;
@@ -235,6 +236,7 @@ public enum PlannerPhase {
                     ValuesConverterRule.INSTANCE,
                     LogicalScanConverterRule.INDEX_SCAN,
                     LogicalScanConverterRule.TABLE_SCAN,
+                    CollectRule.INSTANCE,
                     HashAggregateConverterRule.COLOCATED,
                     HashAggregateConverterRule.MAP_REDUCE,
                     SortAggregateConverterRule.COLOCATED,
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCollect.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCollect.java
new file mode 100644
index 00000000000..fa53dbc7530
--- /dev/null
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteCollect.java
@@ -0,0 +1,91 @@
+/*
+ * 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.rel;
+
+import java.util.List;
+import com.google.common.collect.ImmutableList;
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.RelCollations;
+import org.apache.calcite.rel.RelNode;
+import org.apache.calcite.rel.core.Collect;
+import org.apache.calcite.rel.type.RelDataType;
+import org.apache.calcite.util.Pair;
+import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions;
+import org.apache.ignite.internal.processors.query.calcite.trait.TraitUtils;
+
+/** */
+public class IgniteCollect extends Collect implements IgniteRel {
+    /**
+     * Creates a <code>SingleRel</code>.
+     *
+     * @param cluster Cluster this relational expression belongs to.
+     * @param traits Relation traits.
+     * @param input Input relational expression.
+     * @param rowType Row type.
+     */
+    public IgniteCollect(
+        RelOptCluster cluster,
+        RelTraitSet traits,
+        RelNode input,
+        RelDataType rowType
+    ) {
+        super(cluster, traits, input, rowType);
+    }
+
+    /** {@inheritDoc} */
+    @Override public <T> T accept(IgniteRelVisitor<T> visitor) {
+        return visitor.visit(this);
+    }
+
+    /** {@inheritDoc} */
+    @Override public IgniteRel clone(RelOptCluster cluster, List<IgniteRel> inputs) {
+        return new IgniteCollect(cluster, getTraitSet(), sole(inputs), rowType);
+    }
+
+    /** {@inheritDoc} */
+    @Override public RelNode copy(RelTraitSet traitSet, RelNode input) {
+        return new IgniteCollect(getCluster(), traitSet, input, rowType());
+    }
+
+    /** {@inheritDoc} */
+    @Override public Pair<RelTraitSet, List<RelTraitSet>> passThroughTraits(RelTraitSet required) {
+        if (required.getConvention() != IgniteConvention.INSTANCE)
+            return null;
+
+        if (TraitUtils.distribution(required) != IgniteDistributions.single())
+            return null;
+
+        if (TraitUtils.collation(required) != RelCollations.EMPTY)
+            return null;
+
+        return Pair.of(required, ImmutableList.of(required));
+    }
+
+    /** {@inheritDoc} */
+    @Override public Pair<RelTraitSet, List<RelTraitSet>> deriveTraits(RelTraitSet childTraits, int childId) {
+        assert childId == 0;
+
+        if (childTraits.getConvention() != IgniteConvention.INSTANCE)
+            return null;
+
+        if (TraitUtils.distribution(childTraits) != IgniteDistributions.single())
+            return null;
+
+        return Pair.of(childTraits.replace(RelCollations.EMPTY), ImmutableList.of(childTraits));
+    }
+}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteRelVisitor.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteRelVisitor.java
index 9ad4fa80628..56ebc3fea35 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteRelVisitor.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rel/IgniteRelVisitor.java
@@ -164,6 +164,11 @@ public interface IgniteRelVisitor<T> {
      */
     T visit(IgniteTableFunctionScan rel);
 
+    /**
+     * See {@link IgniteRelVisitor#visit(IgniteRel)}
+     */
+    T visit(IgniteCollect rel);
+
     /**
      * Visits a relational node and calculates a result on the basis of node meta information.
      * @param rel Relational node.
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CollectRule.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CollectRule.java
new file mode 100644
index 00000000000..e24509d89f0
--- /dev/null
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/rule/CollectRule.java
@@ -0,0 +1,48 @@
+/*
+ * 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.rule;
+
+import org.apache.calcite.plan.RelOptCluster;
+import org.apache.calcite.plan.RelOptPlanner;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.calcite.plan.RelTraitSet;
+import org.apache.calcite.rel.PhysicalNode;
+import org.apache.calcite.rel.core.Collect;
+import org.apache.calcite.rel.metadata.RelMetadataQuery;
+import org.apache.ignite.internal.processors.query.calcite.rel.IgniteCollect;
+import org.apache.ignite.internal.processors.query.calcite.rel.IgniteConvention;
+import org.apache.ignite.internal.processors.query.calcite.trait.IgniteDistributions;
+
+/** */
+public class CollectRule extends AbstractIgniteConverterRule<Collect> {
+    /** */
+    public static final RelOptRule INSTANCE = new CollectRule();
+
+    /** */
+    protected CollectRule() {
+        super(Collect.class, "CollectRule");
+    }
+
+    /** {@inheritDoc} */
+    @Override protected PhysicalNode convert(RelOptPlanner planner, RelMetadataQuery mq, Collect rel) {
+        RelOptCluster cluster = rel.getCluster();
+
+        RelTraitSet traits = cluster.traitSetOf(IgniteConvention.INSTANCE).replace(IgniteDistributions.single());
+
+        return new IgniteCollect(cluster, traits, convert(rel.getInput(), traits), rel.getRowType());
+    }
+}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/fun/IgniteStdSqlOperatorTable.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/fun/IgniteStdSqlOperatorTable.java
index d11b19cdad8..3b19f4665ca 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/fun/IgniteStdSqlOperatorTable.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/fun/IgniteStdSqlOperatorTable.java
@@ -86,6 +86,8 @@ public class IgniteStdSqlOperatorTable extends ReflectiveSqlOperatorTable {
         register(SqlLibraryOperators.GROUP_CONCAT);
         register(SqlLibraryOperators.STRING_AGG);
         register(SqlStdOperatorTable.LISTAGG);
+        register(SqlLibraryOperators.ARRAY_AGG);
+        register(SqlLibraryOperators.ARRAY_CONCAT_AGG);
 
         // IS ... operator.
         register(SqlStdOperatorTable.IS_NULL);
@@ -217,9 +219,8 @@ public class IgniteStdSqlOperatorTable extends ReflectiveSqlOperatorTable {
         register(SqlStdOperatorTable.IS_EMPTY);
         register(SqlStdOperatorTable.IS_NOT_EMPTY);
 
-        // TODO https://issues.apache.org/jira/browse/IGNITE-15550
-        //register(SqlStdOperatorTable.MAP_QUERY);
-        //register(SqlStdOperatorTable.ARRAY_QUERY);
+        register(SqlStdOperatorTable.MAP_QUERY);
+        register(SqlStdOperatorTable.ARRAY_QUERY);
 
         // Multiset.
         // TODO https://issues.apache.org/jira/browse/IGNITE-15551
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 692acecd567..fdee810a12a 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
@@ -8926,245 +8926,245 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else if (jj_2_1022(2)) {
       jj_consume_token(ARE);
     } else if (jj_2_1023(2)) {
-      jj_consume_token(AS);
+      jj_consume_token(ARRAY_CONCAT_AGG);
     } else if (jj_2_1024(2)) {
-      jj_consume_token(ASSERTION);
+      jj_consume_token(ASC);
     } else if (jj_2_1025(2)) {
-      jj_consume_token(ATOMIC);
+      jj_consume_token(ASYMMETRIC);
     } else if (jj_2_1026(2)) {
-      jj_consume_token(BEFORE);
+      jj_consume_token(AUTHORIZATION);
     } else if (jj_2_1027(2)) {
-      jj_consume_token(BEGIN_PARTITION);
+      jj_consume_token(BEGIN);
     } else if (jj_2_1028(2)) {
-      jj_consume_token(BINARY);
+      jj_consume_token(BETWEEN);
     } else if (jj_2_1029(2)) {
-      jj_consume_token(BOOLEAN);
+      jj_consume_token(BIT);
     } else if (jj_2_1030(2)) {
-      jj_consume_token(BY);
+      jj_consume_token(BOTH);
     } else if (jj_2_1031(2)) {
-      jj_consume_token(CARDINALITY);
+      jj_consume_token(C);
     } else if (jj_2_1032(2)) {
-      jj_consume_token(CAST);
+      jj_consume_token(CASCADE);
     } else if (jj_2_1033(2)) {
-      jj_consume_token(CEILING);
+      jj_consume_token(CATALOG);
     } else if (jj_2_1034(2)) {
-      jj_consume_token(CHARACTER_LENGTH);
+      jj_consume_token(CHAR);
     } else if (jj_2_1035(2)) {
-      jj_consume_token(CLASSIFIER);
+      jj_consume_token(CHAR_LENGTH);
     } else if (jj_2_1036(2)) {
-      jj_consume_token(COALESCE);
+      jj_consume_token(CLOB);
     } else if (jj_2_1037(2)) {
-      jj_consume_token(COLLECT);
+      jj_consume_token(COLLATE);
     } else if (jj_2_1038(2)) {
-      jj_consume_token(CONDITION);
+      jj_consume_token(COLUMN);
     } else if (jj_2_1039(2)) {
-      jj_consume_token(CONSTRAINTS);
+      jj_consume_token(CONNECT);
     } else if (jj_2_1040(2)) {
-      jj_consume_token(CONTINUE);
+      jj_consume_token(CONSTRUCTOR);
     } else if (jj_2_1041(2)) {
-      jj_consume_token(CORRESPONDING);
+      jj_consume_token(CONVERT);
     } else if (jj_2_1042(2)) {
-      jj_consume_token(COVAR_SAMP);
+      jj_consume_token(COUNT);
     } else if (jj_2_1043(2)) {
-      jj_consume_token(CURRENT_CATALOG);
+      jj_consume_token(CUBE);
     } else if (jj_2_1044(2)) {
-      jj_consume_token(CURRENT_PATH);
+      jj_consume_token(CURRENT_DATE);
     } else if (jj_2_1045(2)) {
-      jj_consume_token(CURRENT_SCHEMA);
+      jj_consume_token(CURRENT_ROLE);
     } else if (jj_2_1046(2)) {
-      jj_consume_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE);
+      jj_consume_token(CURRENT_TIME);
     } else if (jj_2_1047(2)) {
-      jj_consume_token(DATA);
+      jj_consume_token(CURRENT_USER);
     } else if (jj_2_1048(2)) {
-      jj_consume_token(DEALLOCATE);
+      jj_consume_token(DATE);
     } else if (jj_2_1049(2)) {
-      jj_consume_token(DECLARE);
+      jj_consume_token(DEC);
     } else if (jj_2_1050(2)) {
-      jj_consume_token(DENSE_RANK);
+      jj_consume_token(DEFERRABLE);
     } else if (jj_2_1051(2)) {
-      jj_consume_token(DESC);
+      jj_consume_token(DEPTH);
     } else if (jj_2_1052(2)) {
-      jj_consume_token(DIAGNOSTICS);
+      jj_consume_token(DESCRIPTOR);
     } else if (jj_2_1053(2)) {
-      jj_consume_token(DOMAIN);
+      jj_consume_token(DISALLOW);
     } else if (jj_2_1054(2)) {
-      jj_consume_token(EACH);
+      jj_consume_token(DOUBLE);
     } else if (jj_2_1055(2)) {
-      jj_consume_token(EMPTY);
+      jj_consume_token(ELEMENT);
     } else if (jj_2_1056(2)) {
-      jj_consume_token(END_PARTITION);
+      jj_consume_token(END);
     } else if (jj_2_1057(2)) {
-      jj_consume_token(EVERY);
+      jj_consume_token(EQUALS);
     } else if (jj_2_1058(2)) {
-      jj_consume_token(EXECUTE);
+      jj_consume_token(EXCEPTION);
     } else if (jj_2_1059(2)) {
-      jj_consume_token(EXTEND);
+      jj_consume_token(EXISTS);
     } else if (jj_2_1060(2)) {
-      jj_consume_token(FALSE);
+      jj_consume_token(EXTERNAL);
     } else if (jj_2_1061(2)) {
-      jj_consume_token(FIRST_VALUE);
+      jj_consume_token(FILTER);
     } else if (jj_2_1062(2)) {
-      jj_consume_token(FOR);
+      jj_consume_token(FLOAT);
     } else if (jj_2_1063(2)) {
-      jj_consume_token(FRAME_ROW);
+      jj_consume_token(FOREIGN);
     } else if (jj_2_1064(2)) {
-      jj_consume_token(FUSION);
+      jj_consume_token(FREE);
     } else if (jj_2_1065(2)) {
-      jj_consume_token(GET);
+      jj_consume_token(G);
     } else if (jj_2_1066(2)) {
-      jj_consume_token(GOTO);
+      jj_consume_token(GLOBAL);
     } else if (jj_2_1067(2)) {
-      jj_consume_token(HOUR);
+      jj_consume_token(GROUPS);
     } else if (jj_2_1068(2)) {
-      jj_consume_token(IMMEDIATELY);
+      jj_consume_token(IDENTITY);
     } else if (jj_2_1069(2)) {
-      jj_consume_token(INITIAL);
+      jj_consume_token(IMPORT);
     } else if (jj_2_1070(2)) {
-      jj_consume_token(INPUT);
+      jj_consume_token(INITIALLY);
     } else if (jj_2_1071(2)) {
-      jj_consume_token(INTEGER);
+      jj_consume_token(INSENSITIVE);
     } else if (jj_2_1072(2)) {
-      jj_consume_token(ISOLATION);
+      jj_consume_token(INTERSECTION);
     } else if (jj_2_1073(2)) {
-      jj_consume_token(JSON_EXISTS);
+      jj_consume_token(JSON_ARRAY);
     } else if (jj_2_1074(2)) {
-      jj_consume_token(JSON_QUERY);
+      jj_consume_token(JSON_OBJECT);
     } else if (jj_2_1075(2)) {
-      jj_consume_token(KEY);
+      jj_consume_token(JSON_VALUE);
     } else if (jj_2_1076(2)) {
-      jj_consume_token(LARGE);
+      jj_consume_token(LAG);
     } else if (jj_2_1077(2)) {
-      jj_consume_token(LEAD);
+      jj_consume_token(LAST);
     } else if (jj_2_1078(2)) {
-      jj_consume_token(LEVEL);
+      jj_consume_token(LEADING);
     } else if (jj_2_1079(2)) {
-      jj_consume_token(LN);
+      jj_consume_token(LIKE);
     } else if (jj_2_1080(2)) {
-      jj_consume_token(LOCALTIMESTAMP);
+      jj_consume_token(LOCAL);
     } else if (jj_2_1081(2)) {
-      jj_consume_token(M);
+      jj_consume_token(LOCATOR);
     } else if (jj_2_1082(2)) {
-      jj_consume_token(MATCHES);
+      jj_consume_token(MAP);
     } else if (jj_2_1083(2)) {
-      jj_consume_token(MEASURES);
+      jj_consume_token(MATCH_NUMBER);
     } else if (jj_2_1084(2)) {
-      jj_consume_token(MIN);
+      jj_consume_token(MEMBER);
     } else if (jj_2_1085(2)) {
-      jj_consume_token(MODIFIES);
+      jj_consume_token(MINUTE);
     } else if (jj_2_1086(2)) {
-      jj_consume_token(MULTISET);
+      jj_consume_token(MODULE);
     } else if (jj_2_1087(2)) {
-      jj_consume_token(NATIONAL);
+      jj_consume_token(NAME);
     } else if (jj_2_1088(2)) {
-      jj_consume_token(NO);
+      jj_consume_token(NCHAR);
     } else if (jj_2_1089(2)) {
-      jj_consume_token(NOT);
+      jj_consume_token(NONE);
     } else if (jj_2_1090(2)) {
-      jj_consume_token(NULLIF);
+      jj_consume_token(NTH_VALUE);
     } else if (jj_2_1091(2)) {
-      jj_consume_token(OCCURRENCES_REGEX);
+      jj_consume_token(NUMERIC);
     } else if (jj_2_1092(2)) {
-      jj_consume_token(OLD);
+      jj_consume_token(OCTET_LENGTH);
     } else if (jj_2_1093(2)) {
-      jj_consume_token(ONLY);
+      jj_consume_token(OMIT);
     } else if (jj_2_1094(2)) {
-      jj_consume_token(OR);
+      jj_consume_token(OPEN);
     } else if (jj_2_1095(2)) {
-      jj_consume_token(OUTPUT);
+      jj_consume_token(ORDINALITY);
     } else if (jj_2_1096(2)) {
-      jj_consume_token(PAD);
+      jj_consume_token(OVERLAPS);
     } else if (jj_2_1097(2)) {
-      jj_consume_token(PATH);
+      jj_consume_token(PARAMETER);
     } else if (jj_2_1098(2)) {
-      jj_consume_token(PERCENTILE_CONT);
+      jj_consume_token(PER);
     } else if (jj_2_1099(2)) {
-      jj_consume_token(PERIOD);
+      jj_consume_token(PERCENTILE_DISC);
     } else if (jj_2_1100(2)) {
-      jj_consume_token(POSITION);
+      jj_consume_token(PERMUTE);
     } else if (jj_2_1101(2)) {
-      jj_consume_token(PRECEDES);
+      jj_consume_token(POSITION_REGEX);
     } else if (jj_2_1102(2)) {
-      jj_consume_token(PRESERVE);
+      jj_consume_token(PRECISION);
     } else if (jj_2_1103(2)) {
-      jj_consume_token(PRIVILEGES);
+      jj_consume_token(PREV);
     } else if (jj_2_1104(2)) {
-      jj_consume_token(QUARTER);
+      jj_consume_token(PROCEDURE);
     } else if (jj_2_1105(2)) {
-      jj_consume_token(READS);
+      jj_consume_token(RANK);
     } else if (jj_2_1106(2)) {
-      jj_consume_token(REF);
+      jj_consume_token(REAL);
     } else if (jj_2_1107(2)) {
-      jj_consume_token(REGR_AVGX);
+      jj_consume_token(REFERENCES);
     } else if (jj_2_1108(2)) {
-      jj_consume_token(REGR_INTERCEPT);
+      jj_consume_token(REGR_AVGY);
     } else if (jj_2_1109(2)) {
-      jj_consume_token(REGR_SXX);
+      jj_consume_token(REGR_R2);
     } else if (jj_2_1110(2)) {
-      jj_consume_token(RELATIVE);
+      jj_consume_token(REGR_SXY);
     } else if (jj_2_1111(2)) {
-      jj_consume_token(RESET);
+      jj_consume_token(RELEASE);
     } else if (jj_2_1112(2)) {
-      jj_consume_token(RETURN);
+      jj_consume_token(RESTRICT);
     } else if (jj_2_1113(2)) {
-      jj_consume_token(ROLE);
+      jj_consume_token(RETURNS);
     } else if (jj_2_1114(2)) {
-      jj_consume_token(ROW_NUMBER);
+      jj_consume_token(ROLLBACK);
     } else if (jj_2_1115(2)) {
-      jj_consume_token(SCHEMA);
+      jj_consume_token(RUNNING);
     } else if (jj_2_1116(2)) {
-      jj_consume_token(SEARCH);
+      jj_consume_token(SCOPE);
     } else if (jj_2_1117(2)) {
-      jj_consume_token(SEEK);
+      jj_consume_token(SECOND);
     } else if (jj_2_1118(2)) {
-      jj_consume_token(SESSION_USER);
+      jj_consume_token(SENSITIVE);
     } else if (jj_2_1119(2)) {
-      jj_consume_token(SIZE);
+      jj_consume_token(SHOW);
     } else if (jj_2_1120(2)) {
-      jj_consume_token(SPECIFIC);
+      jj_consume_token(SMALLINT);
     } else if (jj_2_1121(2)) {
-      jj_consume_token(SQLEXCEPTION);
+      jj_consume_token(SPECIFICTYPE);
     } else if (jj_2_1122(2)) {
-      jj_consume_token(SQRT);
+      jj_consume_token(SQLSTATE);
     } else if (jj_2_1123(2)) {
-      jj_consume_token(STATIC);
+      jj_consume_token(START);
     } else if (jj_2_1124(2)) {
-      jj_consume_token(SUBMULTISET);
+      jj_consume_token(STDDEV_POP);
     } else if (jj_2_1125(2)) {
-      jj_consume_token(SUBSTRING_REGEX);
+      jj_consume_token(SUBSET);
     } else if (jj_2_1126(2)) {
-      jj_consume_token(SYMMETRIC);
+      jj_consume_token(SUCCEEDS);
     } else if (jj_2_1127(2)) {
-      jj_consume_token(SYSTEM_USER);
+      jj_consume_token(SYSTEM);
     } else if (jj_2_1128(2)) {
-      jj_consume_token(TEMPORARY);
+      jj_consume_token(STRING_AGG);
     } else if (jj_2_1129(2)) {
-      jj_consume_token(TINYINT);
+      jj_consume_token(TIMEZONE_HOUR);
     } else if (jj_2_1130(2)) {
-      jj_consume_token(TRANSACTION);
+      jj_consume_token(TO);
     } else if (jj_2_1131(2)) {
-      jj_consume_token(TRANSLATION);
+      jj_consume_token(TRANSLATE);
     } else if (jj_2_1132(2)) {
-      jj_consume_token(TRIM);
+      jj_consume_token(TREAT);
     } else if (jj_2_1133(2)) {
-      jj_consume_token(TRUNCATE);
+      jj_consume_token(TRIM_ARRAY);
     } else if (jj_2_1134(2)) {
-      jj_consume_token(UNIQUE);
+      jj_consume_token(UESCAPE);
     } else if (jj_2_1135(2)) {
-      jj_consume_token(UPSERT);
+      jj_consume_token(UNKNOWN);
     } else if (jj_2_1136(2)) {
-      jj_consume_token(VALUE);
+      jj_consume_token(USAGE);
     } else if (jj_2_1137(2)) {
-      jj_consume_token(VARCHAR);
+      jj_consume_token(VALUE_OF);
     } else if (jj_2_1138(2)) {
-      jj_consume_token(VAR_SAMP);
+      jj_consume_token(VARYING);
     } else if (jj_2_1139(2)) {
-      jj_consume_token(VIEW);
+      jj_consume_token(VERSION);
     } else if (jj_2_1140(2)) {
-      jj_consume_token(WIDTH_BUCKET);
+      jj_consume_token(WEEK);
     } else if (jj_2_1141(2)) {
-      jj_consume_token(WORK);
+      jj_consume_token(WITHIN);
     } else if (jj_2_1142(2)) {
-      jj_consume_token(ZONE);
+      jj_consume_token(WRITE);
     } else {
       jj_consume_token(-1);
       throw new ParseException();
@@ -9198,243 +9198,245 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else if (jj_2_1154(2)) {
       jj_consume_token(ARRAY);
     } else if (jj_2_1155(2)) {
-      jj_consume_token(ASC);
+      jj_consume_token(ARRAY_MAX_CARDINALITY);
     } else if (jj_2_1156(2)) {
-      jj_consume_token(ASYMMETRIC);
+      jj_consume_token(ASENSITIVE);
     } else if (jj_2_1157(2)) {
-      jj_consume_token(AUTHORIZATION);
+      jj_consume_token(AT);
     } else if (jj_2_1158(2)) {
-      jj_consume_token(BEGIN);
+      jj_consume_token(AVG);
     } else if (jj_2_1159(2)) {
-      jj_consume_token(BETWEEN);
+      jj_consume_token(BEGIN_FRAME);
     } else if (jj_2_1160(2)) {
-      jj_consume_token(BIT);
+      jj_consume_token(BIGINT);
     } else if (jj_2_1161(2)) {
-      jj_consume_token(BOTH);
+      jj_consume_token(BLOB);
     } else if (jj_2_1162(2)) {
-      jj_consume_token(C);
+      jj_consume_token(BREADTH);
     } else if (jj_2_1163(2)) {
-      jj_consume_token(CASCADE);
+      jj_consume_token(CALLED);
     } else if (jj_2_1164(2)) {
-      jj_consume_token(CATALOG);
+      jj_consume_token(CASCADED);
     } else if (jj_2_1165(2)) {
-      jj_consume_token(CHAR);
+      jj_consume_token(CEIL);
     } else if (jj_2_1166(2)) {
-      jj_consume_token(CHAR_LENGTH);
+      jj_consume_token(CHARACTER);
     } else if (jj_2_1167(2)) {
-      jj_consume_token(CLOB);
+      jj_consume_token(CHECK);
     } else if (jj_2_1168(2)) {
-      jj_consume_token(COLLATE);
+      jj_consume_token(CLOSE);
     } else if (jj_2_1169(2)) {
-      jj_consume_token(COLUMN);
+      jj_consume_token(COLLATION);
     } else if (jj_2_1170(2)) {
-      jj_consume_token(CONNECT);
+      jj_consume_token(COMMIT);
     } else if (jj_2_1171(2)) {
-      jj_consume_token(CONSTRUCTOR);
+      jj_consume_token(CONNECTION);
     } else if (jj_2_1172(2)) {
-      jj_consume_token(CONVERT);
+      jj_consume_token(CONTAINS);
     } else if (jj_2_1173(2)) {
-      jj_consume_token(COUNT);
+      jj_consume_token(CORR);
     } else if (jj_2_1174(2)) {
-      jj_consume_token(CUBE);
+      jj_consume_token(COVAR_POP);
     } else if (jj_2_1175(2)) {
-      jj_consume_token(CURRENT_DATE);
+      jj_consume_token(CUME_DIST);
     } else if (jj_2_1176(2)) {
-      jj_consume_token(CURRENT_ROLE);
+      jj_consume_token(CURRENT_DEFAULT_TRANSFORM_GROUP);
     } else if (jj_2_1177(2)) {
-      jj_consume_token(CURRENT_TIME);
+      jj_consume_token(CURRENT_ROW);
     } else if (jj_2_1178(2)) {
-      jj_consume_token(CURRENT_USER);
+      jj_consume_token(CURRENT_TIMESTAMP);
     } else if (jj_2_1179(2)) {
-      jj_consume_token(DATE);
+      jj_consume_token(CYCLE);
     } else if (jj_2_1180(2)) {
-      jj_consume_token(DEC);
+      jj_consume_token(DAY);
     } else if (jj_2_1181(2)) {
-      jj_consume_token(DEFERRABLE);
+      jj_consume_token(DECIMAL);
     } else if (jj_2_1182(2)) {
-      jj_consume_token(DEPTH);
+      jj_consume_token(DEFERRED);
     } else if (jj_2_1183(2)) {
-      jj_consume_token(DESCRIPTOR);
+      jj_consume_token(DEREF);
     } else if (jj_2_1184(2)) {
-      jj_consume_token(DISALLOW);
+      jj_consume_token(DETERMINISTIC);
     } else if (jj_2_1185(2)) {
-      jj_consume_token(DOUBLE);
+      jj_consume_token(DISCONNECT);
     } else if (jj_2_1186(2)) {
-      jj_consume_token(ELEMENT);
+      jj_consume_token(DYNAMIC);
     } else if (jj_2_1187(2)) {
-      jj_consume_token(END);
+      jj_consume_token(ELSE);
     } else if (jj_2_1188(2)) {
-      jj_consume_token(EQUALS);
+      jj_consume_token(END_FRAME);
     } else if (jj_2_1189(2)) {
-      jj_consume_token(EXCEPTION);
+      jj_consume_token(ESCAPE);
     } else if (jj_2_1190(2)) {
-      jj_consume_token(EXISTS);
+      jj_consume_token(EXEC);
     } else if (jj_2_1191(2)) {
-      jj_consume_token(EXTERNAL);
+      jj_consume_token(EXP);
     } else if (jj_2_1192(2)) {
-      jj_consume_token(FILTER);
+      jj_consume_token(EXTRACT);
     } else if (jj_2_1193(2)) {
-      jj_consume_token(FLOAT);
+      jj_consume_token(FIRST);
     } else if (jj_2_1194(2)) {
-      jj_consume_token(FOREIGN);
+      jj_consume_token(FLOOR);
     } else if (jj_2_1195(2)) {
-      jj_consume_token(FREE);
+      jj_consume_token(FOUND);
     } else if (jj_2_1196(2)) {
-      jj_consume_token(G);
+      jj_consume_token(FUNCTION);
     } else if (jj_2_1197(2)) {
-      jj_consume_token(GLOBAL);
+      jj_consume_token(GENERAL);
     } else if (jj_2_1198(2)) {
-      jj_consume_token(GROUPS);
+      jj_consume_token(GO);
     } else if (jj_2_1199(2)) {
-      jj_consume_token(IDENTITY);
+      jj_consume_token(HOLD);
     } else if (jj_2_1200(2)) {
-      jj_consume_token(IMPORT);
+      jj_consume_token(IMMEDIATE);
     } else if (jj_2_1201(2)) {
-      jj_consume_token(INITIALLY);
+      jj_consume_token(INDICATOR);
     } else if (jj_2_1202(2)) {
-      jj_consume_token(INSENSITIVE);
+      jj_consume_token(INOUT);
     } else if (jj_2_1203(2)) {
-      jj_consume_token(INTERSECTION);
+      jj_consume_token(INT);
     } else if (jj_2_1204(2)) {
-      jj_consume_token(JSON_ARRAY);
+      jj_consume_token(IS);
     } else if (jj_2_1205(2)) {
-      jj_consume_token(JSON_OBJECT);
+      jj_consume_token(JSON_ARRAYAGG);
     } else if (jj_2_1206(2)) {
-      jj_consume_token(JSON_VALUE);
+      jj_consume_token(JSON_OBJECTAGG);
     } else if (jj_2_1207(2)) {
-      jj_consume_token(LAG);
+      jj_consume_token(K);
     } else if (jj_2_1208(2)) {
-      jj_consume_token(LAST);
+      jj_consume_token(LANGUAGE);
     } else if (jj_2_1209(2)) {
-      jj_consume_token(LEADING);
+      jj_consume_token(LAST_VALUE);
     } else if (jj_2_1210(2)) {
-      jj_consume_token(LIKE);
+      jj_consume_token(LENGTH);
     } else if (jj_2_1211(2)) {
-      jj_consume_token(LOCAL);
+      jj_consume_token(LIKE_REGEX);
     } else if (jj_2_1212(2)) {
-      jj_consume_token(LOCATOR);
+      jj_consume_token(LOCALTIME);
     } else if (jj_2_1213(2)) {
-      jj_consume_token(MAP);
+      jj_consume_token(LOWER);
     } else if (jj_2_1214(2)) {
-      jj_consume_token(MATCH_NUMBER);
+      jj_consume_token(MATCH);
     } else if (jj_2_1215(2)) {
-      jj_consume_token(MEMBER);
+      jj_consume_token(MAX);
     } else if (jj_2_1216(2)) {
-      jj_consume_token(MINUTE);
+      jj_consume_token(METHOD);
     } else if (jj_2_1217(2)) {
-      jj_consume_token(MODULE);
+      jj_consume_token(MOD);
     } else if (jj_2_1218(2)) {
-      jj_consume_token(NAME);
+      jj_consume_token(MONTH);
     } else if (jj_2_1219(2)) {
-      jj_consume_token(NCHAR);
+      jj_consume_token(NAMES);
     } else if (jj_2_1220(2)) {
-      jj_consume_token(NONE);
+      jj_consume_token(NCLOB);
     } else if (jj_2_1221(2)) {
-      jj_consume_token(NTH_VALUE);
+      jj_consume_token(NORMALIZE);
     } else if (jj_2_1222(2)) {
-      jj_consume_token(NUMERIC);
+      jj_consume_token(NTILE);
     } else if (jj_2_1223(2)) {
-      jj_consume_token(OCTET_LENGTH);
+      jj_consume_token(OBJECT);
     } else if (jj_2_1224(2)) {
-      jj_consume_token(OMIT);
+      jj_consume_token(OF);
     } else if (jj_2_1225(2)) {
-      jj_consume_token(OPEN);
+      jj_consume_token(ONE);
     } else if (jj_2_1226(2)) {
-      jj_consume_token(ORDINALITY);
+      jj_consume_token(OPTION);
     } else if (jj_2_1227(2)) {
-      jj_consume_token(OVERLAPS);
+      jj_consume_token(OUT);
     } else if (jj_2_1228(2)) {
-      jj_consume_token(PARAMETER);
+      jj_consume_token(OVERLAY);
     } else if (jj_2_1229(2)) {
-      jj_consume_token(PER);
+      jj_consume_token(PARTIAL);
     } else if (jj_2_1230(2)) {
-      jj_consume_token(PERCENTILE_DISC);
+      jj_consume_token(PERCENT);
     } else if (jj_2_1231(2)) {
-      jj_consume_token(PERMUTE);
+      jj_consume_token(PERCENT_RANK);
     } else if (jj_2_1232(2)) {
-      jj_consume_token(POSITION_REGEX);
+      jj_consume_token(PORTION);
     } else if (jj_2_1233(2)) {
-      jj_consume_token(PRECISION);
+      jj_consume_token(POWER);
     } else if (jj_2_1234(2)) {
-      jj_consume_token(PREV);
+      jj_consume_token(PREPARE);
     } else if (jj_2_1235(2)) {
-      jj_consume_token(PROCEDURE);
+      jj_consume_token(PRIOR);
     } else if (jj_2_1236(2)) {
-      jj_consume_token(RANK);
+      jj_consume_token(PUBLIC);
     } else if (jj_2_1237(2)) {
-      jj_consume_token(REAL);
+      jj_consume_token(READ);
     } else if (jj_2_1238(2)) {
-      jj_consume_token(REFERENCES);
+      jj_consume_token(RECURSIVE);
     } else if (jj_2_1239(2)) {
-      jj_consume_token(REGR_AVGY);
+      jj_consume_token(REFERENCING);
     } else if (jj_2_1240(2)) {
-      jj_consume_token(REGR_R2);
+      jj_consume_token(REGR_COUNT);
     } else if (jj_2_1241(2)) {
-      jj_consume_token(REGR_SXY);
+      jj_consume_token(REGR_SLOPE);
     } else if (jj_2_1242(2)) {
-      jj_consume_token(RELEASE);
+      jj_consume_token(REGR_SYY);
     } else if (jj_2_1243(2)) {
-      jj_consume_token(RESTRICT);
+      jj_consume_token(REPLACE);
     } else if (jj_2_1244(2)) {
-      jj_consume_token(RETURNS);
+      jj_consume_token(RESULT);
     } else if (jj_2_1245(2)) {
-      jj_consume_token(ROLLBACK);
+      jj_consume_token(REVOKE);
     } else if (jj_2_1246(2)) {
-      jj_consume_token(RUNNING);
+      jj_consume_token(ROUTINE);
     } else if (jj_2_1247(2)) {
-      jj_consume_token(SCOPE);
+      jj_consume_token(SAVEPOINT);
     } else if (jj_2_1248(2)) {
-      jj_consume_token(SECOND);
+      jj_consume_token(SCROLL);
     } else if (jj_2_1249(2)) {
-      jj_consume_token(SENSITIVE);
+      jj_consume_token(SECTION);
     } else if (jj_2_1250(2)) {
-      jj_consume_token(SHOW);
+      jj_consume_token(SESSION);
     } else if (jj_2_1251(2)) {
-      jj_consume_token(SMALLINT);
+      jj_consume_token(SIMILAR);
     } else if (jj_2_1252(2)) {
-      jj_consume_token(SPECIFICTYPE);
+      jj_consume_token(SPACE);
     } else if (jj_2_1253(2)) {
-      jj_consume_token(SQLSTATE);
+      jj_consume_token(SQL);
     } else if (jj_2_1254(2)) {
-      jj_consume_token(START);
+      jj_consume_token(SQLWARNING);
     } else if (jj_2_1255(2)) {
-      jj_consume_token(STDDEV_POP);
+      jj_consume_token(STATE);
     } else if (jj_2_1256(2)) {
-      jj_consume_token(SUBSET);
+      jj_consume_token(STDDEV_SAMP);
     } else if (jj_2_1257(2)) {
-      jj_consume_token(SUCCEEDS);
+      jj_consume_token(SUBSTRING);
     } else if (jj_2_1258(2)) {
-      jj_consume_token(SYSTEM);
+      jj_consume_token(SUM);
     } else if (jj_2_1259(2)) {
-      jj_consume_token(STRING_AGG);
+      jj_consume_token(SYSTEM_TIME);
     } else if (jj_2_1260(2)) {
-      jj_consume_token(TIMEZONE_HOUR);
+      jj_consume_token(GROUP_CONCAT);
     } else if (jj_2_1261(2)) {
-      jj_consume_token(TO);
+      jj_consume_token(TIMEZONE_MINUTE);
     } else if (jj_2_1262(2)) {
-      jj_consume_token(TRANSLATE);
+      jj_consume_token(TRAILING);
     } else if (jj_2_1263(2)) {
-      jj_consume_token(TREAT);
+      jj_consume_token(TRANSLATE_REGEX);
     } else if (jj_2_1264(2)) {
-      jj_consume_token(TRIM_ARRAY);
+      jj_consume_token(TRIGGER);
     } else if (jj_2_1265(2)) {
-      jj_consume_token(UESCAPE);
+      jj_consume_token(TRUE);
     } else if (jj_2_1266(2)) {
-      jj_consume_token(UNKNOWN);
+      jj_consume_token(UNDER);
     } else if (jj_2_1267(2)) {
-      jj_consume_token(USAGE);
+      jj_consume_token(UPPER);
     } else if (jj_2_1268(2)) {
-      jj_consume_token(VALUE_OF);
+      jj_consume_token(USER);
     } else if (jj_2_1269(2)) {
-      jj_consume_token(VARYING);
+      jj_consume_token(VARBINARY);
     } else if (jj_2_1270(2)) {
-      jj_consume_token(VERSION);
+      jj_consume_token(VAR_POP);
     } else if (jj_2_1271(2)) {
-      jj_consume_token(WEEK);
+      jj_consume_token(VERSIONING);
     } else if (jj_2_1272(2)) {
-      jj_consume_token(WITHIN);
+      jj_consume_token(WHENEVER);
     } else if (jj_2_1273(2)) {
-      jj_consume_token(WRITE);
+      jj_consume_token(WITHOUT);
+    } else if (jj_2_1274(2)) {
+      jj_consume_token(YEAR);
     } else {
       jj_consume_token(-1);
       throw new ParseException();
@@ -9443,268 +9445,270 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** @see #NonReservedKeyWord */
   final public void NonReservedKeyWord2of3() throws ParseException {
-    if (jj_2_1274(2)) {
+    if (jj_2_1275(2)) {
       jj_consume_token(BACKUPS);
-    } else if (jj_2_1275(2)) {
-      jj_consume_token(WRITE_SYNCHRONIZATION_MODE);
     } else if (jj_2_1276(2)) {
-      jj_consume_token(DATA_REGION);
+      jj_consume_token(WRITE_SYNCHRONIZATION_MODE);
     } else if (jj_2_1277(2)) {
-      jj_consume_token(PARALLEL);
+      jj_consume_token(DATA_REGION);
     } else if (jj_2_1278(2)) {
-      jj_consume_token(NOLOGGING);
+      jj_consume_token(PARALLEL);
     } else if (jj_2_1279(2)) {
-      jj_consume_token(SCAN);
+      jj_consume_token(NOLOGGING);
     } else if (jj_2_1280(2)) {
-      jj_consume_token(COMPUTE);
+      jj_consume_token(SCAN);
     } else if (jj_2_1281(2)) {
-      jj_consume_token(A);
+      jj_consume_token(COMPUTE);
     } else if (jj_2_1282(2)) {
-      jj_consume_token(ACTION);
+      jj_consume_token(A);
     } else if (jj_2_1283(2)) {
-      jj_consume_token(ALLOCATE);
+      jj_consume_token(ACTION);
     } else if (jj_2_1284(2)) {
-      jj_consume_token(AND);
+      jj_consume_token(ALLOCATE);
     } else if (jj_2_1285(2)) {
-      jj_consume_token(ARRAY_MAX_CARDINALITY);
+      jj_consume_token(AND);
     } else if (jj_2_1286(2)) {
-      jj_consume_token(ASENSITIVE);
+      jj_consume_token(ARRAY_AGG);
     } else if (jj_2_1287(2)) {
-      jj_consume_token(AT);
+      jj_consume_token(AS);
     } else if (jj_2_1288(2)) {
-      jj_consume_token(AVG);
+      jj_consume_token(ASSERTION);
     } else if (jj_2_1289(2)) {
-      jj_consume_token(BEGIN_FRAME);
+      jj_consume_token(ATOMIC);
     } else if (jj_2_1290(2)) {
-      jj_consume_token(BIGINT);
+      jj_consume_token(BEFORE);
     } else if (jj_2_1291(2)) {
-      jj_consume_token(BLOB);
+      jj_consume_token(BEGIN_PARTITION);
     } else if (jj_2_1292(2)) {
-      jj_consume_token(BREADTH);
+      jj_consume_token(BINARY);
     } else if (jj_2_1293(2)) {
-      jj_consume_token(CALLED);
+      jj_consume_token(BOOLEAN);
     } else if (jj_2_1294(2)) {
-      jj_consume_token(CASCADED);
+      jj_consume_token(BY);
     } else if (jj_2_1295(2)) {
-      jj_consume_token(CEIL);
+      jj_consume_token(CARDINALITY);
     } else if (jj_2_1296(2)) {
-      jj_consume_token(CHARACTER);
+      jj_consume_token(CAST);
     } else if (jj_2_1297(2)) {
-      jj_consume_token(CHECK);
+      jj_consume_token(CEILING);
     } else if (jj_2_1298(2)) {
-      jj_consume_token(CLOSE);
+      jj_consume_token(CHARACTER_LENGTH);
     } else if (jj_2_1299(2)) {
-      jj_consume_token(COLLATION);
+      jj_consume_token(CLASSIFIER);
     } else if (jj_2_1300(2)) {
-      jj_consume_token(COMMIT);
+      jj_consume_token(COALESCE);
     } else if (jj_2_1301(2)) {
-      jj_consume_token(CONNECTION);
+      jj_consume_token(COLLECT);
     } else if (jj_2_1302(2)) {
-      jj_consume_token(CONTAINS);
+      jj_consume_token(CONDITION);
     } else if (jj_2_1303(2)) {
-      jj_consume_token(CORR);
+      jj_consume_token(CONSTRAINTS);
     } else if (jj_2_1304(2)) {
-      jj_consume_token(COVAR_POP);
+      jj_consume_token(CONTINUE);
     } else if (jj_2_1305(2)) {
-      jj_consume_token(CUME_DIST);
+      jj_consume_token(CORRESPONDING);
     } else if (jj_2_1306(2)) {
-      jj_consume_token(CURRENT_DEFAULT_TRANSFORM_GROUP);
+      jj_consume_token(COVAR_SAMP);
     } else if (jj_2_1307(2)) {
-      jj_consume_token(CURRENT_ROW);
+      jj_consume_token(CURRENT_CATALOG);
     } else if (jj_2_1308(2)) {
-      jj_consume_token(CURRENT_TIMESTAMP);
+      jj_consume_token(CURRENT_PATH);
     } else if (jj_2_1309(2)) {
-      jj_consume_token(CYCLE);
+      jj_consume_token(CURRENT_SCHEMA);
     } else if (jj_2_1310(2)) {
-      jj_consume_token(DAY);
+      jj_consume_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE);
     } else if (jj_2_1311(2)) {
-      jj_consume_token(DECIMAL);
+      jj_consume_token(DATA);
     } else if (jj_2_1312(2)) {
-      jj_consume_token(DEFERRED);
+      jj_consume_token(DEALLOCATE);
     } else if (jj_2_1313(2)) {
-      jj_consume_token(DEREF);
+      jj_consume_token(DECLARE);
     } else if (jj_2_1314(2)) {
-      jj_consume_token(DETERMINISTIC);
+      jj_consume_token(DENSE_RANK);
     } else if (jj_2_1315(2)) {
-      jj_consume_token(DISCONNECT);
+      jj_consume_token(DESC);
     } else if (jj_2_1316(2)) {
-      jj_consume_token(DYNAMIC);
+      jj_consume_token(DIAGNOSTICS);
     } else if (jj_2_1317(2)) {
-      jj_consume_token(ELSE);
+      jj_consume_token(DOMAIN);
     } else if (jj_2_1318(2)) {
-      jj_consume_token(END_FRAME);
+      jj_consume_token(EACH);
     } else if (jj_2_1319(2)) {
-      jj_consume_token(ESCAPE);
+      jj_consume_token(EMPTY);
     } else if (jj_2_1320(2)) {
-      jj_consume_token(EXEC);
+      jj_consume_token(END_PARTITION);
     } else if (jj_2_1321(2)) {
-      jj_consume_token(EXP);
+      jj_consume_token(EVERY);
     } else if (jj_2_1322(2)) {
-      jj_consume_token(EXTRACT);
+      jj_consume_token(EXECUTE);
     } else if (jj_2_1323(2)) {
-      jj_consume_token(FIRST);
+      jj_consume_token(EXTEND);
     } else if (jj_2_1324(2)) {
-      jj_consume_token(FLOOR);
+      jj_consume_token(FALSE);
     } else if (jj_2_1325(2)) {
-      jj_consume_token(FOUND);
+      jj_consume_token(FIRST_VALUE);
     } else if (jj_2_1326(2)) {
-      jj_consume_token(FUNCTION);
+      jj_consume_token(FOR);
     } else if (jj_2_1327(2)) {
-      jj_consume_token(GENERAL);
+      jj_consume_token(FRAME_ROW);
     } else if (jj_2_1328(2)) {
-      jj_consume_token(GO);
+      jj_consume_token(FUSION);
     } else if (jj_2_1329(2)) {
-      jj_consume_token(HOLD);
+      jj_consume_token(GET);
     } else if (jj_2_1330(2)) {
-      jj_consume_token(IMMEDIATE);
+      jj_consume_token(GOTO);
     } else if (jj_2_1331(2)) {
-      jj_consume_token(INDICATOR);
+      jj_consume_token(HOUR);
     } else if (jj_2_1332(2)) {
-      jj_consume_token(INOUT);
+      jj_consume_token(IMMEDIATELY);
     } else if (jj_2_1333(2)) {
-      jj_consume_token(INT);
+      jj_consume_token(INITIAL);
     } else if (jj_2_1334(2)) {
-      jj_consume_token(IS);
+      jj_consume_token(INPUT);
     } else if (jj_2_1335(2)) {
-      jj_consume_token(JSON_ARRAYAGG);
+      jj_consume_token(INTEGER);
     } else if (jj_2_1336(2)) {
-      jj_consume_token(JSON_OBJECTAGG);
+      jj_consume_token(ISOLATION);
     } else if (jj_2_1337(2)) {
-      jj_consume_token(K);
+      jj_consume_token(JSON_EXISTS);
     } else if (jj_2_1338(2)) {
-      jj_consume_token(LANGUAGE);
+      jj_consume_token(JSON_QUERY);
     } else if (jj_2_1339(2)) {
-      jj_consume_token(LAST_VALUE);
+      jj_consume_token(KEY);
     } else if (jj_2_1340(2)) {
-      jj_consume_token(LENGTH);
+      jj_consume_token(LARGE);
     } else if (jj_2_1341(2)) {
-      jj_consume_token(LIKE_REGEX);
+      jj_consume_token(LEAD);
     } else if (jj_2_1342(2)) {
-      jj_consume_token(LOCALTIME);
+      jj_consume_token(LEVEL);
     } else if (jj_2_1343(2)) {
-      jj_consume_token(LOWER);
+      jj_consume_token(LN);
     } else if (jj_2_1344(2)) {
-      jj_consume_token(MATCH);
+      jj_consume_token(LOCALTIMESTAMP);
     } else if (jj_2_1345(2)) {
-      jj_consume_token(MAX);
+      jj_consume_token(M);
     } else if (jj_2_1346(2)) {
-      jj_consume_token(METHOD);
+      jj_consume_token(MATCHES);
     } else if (jj_2_1347(2)) {
-      jj_consume_token(MOD);
+      jj_consume_token(MEASURES);
     } else if (jj_2_1348(2)) {
-      jj_consume_token(MONTH);
+      jj_consume_token(MIN);
     } else if (jj_2_1349(2)) {
-      jj_consume_token(NAMES);
+      jj_consume_token(MODIFIES);
     } else if (jj_2_1350(2)) {
-      jj_consume_token(NCLOB);
+      jj_consume_token(MULTISET);
     } else if (jj_2_1351(2)) {
-      jj_consume_token(NORMALIZE);
+      jj_consume_token(NATIONAL);
     } else if (jj_2_1352(2)) {
-      jj_consume_token(NTILE);
+      jj_consume_token(NO);
     } else if (jj_2_1353(2)) {
-      jj_consume_token(OBJECT);
+      jj_consume_token(NOT);
     } else if (jj_2_1354(2)) {
-      jj_consume_token(OF);
+      jj_consume_token(NULLIF);
     } else if (jj_2_1355(2)) {
-      jj_consume_token(ONE);
+      jj_consume_token(OCCURRENCES_REGEX);
     } else if (jj_2_1356(2)) {
-      jj_consume_token(OPTION);
+      jj_consume_token(OLD);
     } else if (jj_2_1357(2)) {
-      jj_consume_token(OUT);
+      jj_consume_token(ONLY);
     } else if (jj_2_1358(2)) {
-      jj_consume_token(OVERLAY);
+      jj_consume_token(OR);
     } else if (jj_2_1359(2)) {
-      jj_consume_token(PARTIAL);
+      jj_consume_token(OUTPUT);
     } else if (jj_2_1360(2)) {
-      jj_consume_token(PERCENT);
+      jj_consume_token(PAD);
     } else if (jj_2_1361(2)) {
-      jj_consume_token(PERCENT_RANK);
+      jj_consume_token(PATH);
     } else if (jj_2_1362(2)) {
-      jj_consume_token(PORTION);
+      jj_consume_token(PERCENTILE_CONT);
     } else if (jj_2_1363(2)) {
-      jj_consume_token(POWER);
+      jj_consume_token(PERIOD);
     } else if (jj_2_1364(2)) {
-      jj_consume_token(PREPARE);
+      jj_consume_token(POSITION);
     } else if (jj_2_1365(2)) {
-      jj_consume_token(PRIOR);
+      jj_consume_token(PRECEDES);
     } else if (jj_2_1366(2)) {
-      jj_consume_token(PUBLIC);
+      jj_consume_token(PRESERVE);
     } else if (jj_2_1367(2)) {
-      jj_consume_token(READ);
+      jj_consume_token(PRIVILEGES);
     } else if (jj_2_1368(2)) {
-      jj_consume_token(RECURSIVE);
+      jj_consume_token(QUARTER);
     } else if (jj_2_1369(2)) {
-      jj_consume_token(REFERENCING);
+      jj_consume_token(READS);
     } else if (jj_2_1370(2)) {
-      jj_consume_token(REGR_COUNT);
+      jj_consume_token(REF);
     } else if (jj_2_1371(2)) {
-      jj_consume_token(REGR_SLOPE);
+      jj_consume_token(REGR_AVGX);
     } else if (jj_2_1372(2)) {
-      jj_consume_token(REGR_SYY);
+      jj_consume_token(REGR_INTERCEPT);
     } else if (jj_2_1373(2)) {
-      jj_consume_token(REPLACE);
+      jj_consume_token(REGR_SXX);
     } else if (jj_2_1374(2)) {
-      jj_consume_token(RESULT);
+      jj_consume_token(RELATIVE);
     } else if (jj_2_1375(2)) {
-      jj_consume_token(REVOKE);
+      jj_consume_token(RESET);
     } else if (jj_2_1376(2)) {
-      jj_consume_token(ROUTINE);
+      jj_consume_token(RETURN);
     } else if (jj_2_1377(2)) {
-      jj_consume_token(SAVEPOINT);
+      jj_consume_token(ROLE);
     } else if (jj_2_1378(2)) {
-      jj_consume_token(SCROLL);
+      jj_consume_token(ROW_NUMBER);
     } else if (jj_2_1379(2)) {
-      jj_consume_token(SECTION);
+      jj_consume_token(SCHEMA);
     } else if (jj_2_1380(2)) {
-      jj_consume_token(SESSION);
+      jj_consume_token(SEARCH);
     } else if (jj_2_1381(2)) {
-      jj_consume_token(SIMILAR);
+      jj_consume_token(SEEK);
     } else if (jj_2_1382(2)) {
-      jj_consume_token(SPACE);
+      jj_consume_token(SESSION_USER);
     } else if (jj_2_1383(2)) {
-      jj_consume_token(SQL);
+      jj_consume_token(SIZE);
     } else if (jj_2_1384(2)) {
-      jj_consume_token(SQLWARNING);
+      jj_consume_token(SPECIFIC);
     } else if (jj_2_1385(2)) {
-      jj_consume_token(STATE);
+      jj_consume_token(SQLEXCEPTION);
     } else if (jj_2_1386(2)) {
-      jj_consume_token(STDDEV_SAMP);
+      jj_consume_token(SQRT);
     } else if (jj_2_1387(2)) {
-      jj_consume_token(SUBSTRING);
+      jj_consume_token(STATIC);
     } else if (jj_2_1388(2)) {
-      jj_consume_token(SUM);
+      jj_consume_token(SUBMULTISET);
     } else if (jj_2_1389(2)) {
-      jj_consume_token(SYSTEM_TIME);
+      jj_consume_token(SUBSTRING_REGEX);
     } else if (jj_2_1390(2)) {
-      jj_consume_token(GROUP_CONCAT);
+      jj_consume_token(SYMMETRIC);
     } else if (jj_2_1391(2)) {
-      jj_consume_token(TIMEZONE_MINUTE);
+      jj_consume_token(SYSTEM_USER);
     } else if (jj_2_1392(2)) {
-      jj_consume_token(TRAILING);
+      jj_consume_token(TEMPORARY);
     } else if (jj_2_1393(2)) {
-      jj_consume_token(TRANSLATE_REGEX);
+      jj_consume_token(TINYINT);
     } else if (jj_2_1394(2)) {
-      jj_consume_token(TRIGGER);
+      jj_consume_token(TRANSACTION);
     } else if (jj_2_1395(2)) {
-      jj_consume_token(TRUE);
+      jj_consume_token(TRANSLATION);
     } else if (jj_2_1396(2)) {
-      jj_consume_token(UNDER);
+      jj_consume_token(TRIM);
     } else if (jj_2_1397(2)) {
-      jj_consume_token(UPPER);
+      jj_consume_token(TRUNCATE);
     } else if (jj_2_1398(2)) {
-      jj_consume_token(USER);
+      jj_consume_token(UNIQUE);
     } else if (jj_2_1399(2)) {
-      jj_consume_token(VARBINARY);
+      jj_consume_token(UPSERT);
     } else if (jj_2_1400(2)) {
-      jj_consume_token(VAR_POP);
+      jj_consume_token(VALUE);
     } else if (jj_2_1401(2)) {
-      jj_consume_token(VERSIONING);
+      jj_consume_token(VARCHAR);
     } else if (jj_2_1402(2)) {
-      jj_consume_token(WHENEVER);
+      jj_consume_token(VAR_SAMP);
     } else if (jj_2_1403(2)) {
-      jj_consume_token(WITHOUT);
+      jj_consume_token(VIEW);
     } else if (jj_2_1404(2)) {
-      jj_consume_token(YEAR);
+      jj_consume_token(WIDTH_BUCKET);
+    } else if (jj_2_1405(2)) {
+      jj_consume_token(WORK);
+    } else if (jj_2_1406(2)) {
+      jj_consume_token(ZONE);
     } else {
       jj_consume_token(-1);
       throw new ParseException();
@@ -19556,6 +19560,20 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     finally { jj_save(1403, xla); }
   }
 
+  final private boolean jj_2_1405(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1405(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1404, xla); }
+  }
+
+  final private boolean jj_2_1406(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1406(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1405, xla); }
+  }
+
   final private boolean jj_3R_312() {
     if (jj_3R_66()) return true;
     return false;
@@ -20375,18 +20393,28 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
+  final private boolean jj_3_1406() {
+    if (jj_scan_token(ZONE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1405() {
+    if (jj_scan_token(WORK)) return true;
+    return false;
+  }
+
   final private boolean jj_3_590() {
     if (jj_3R_115()) return true;
     return false;
   }
 
   final private boolean jj_3_1404() {
-    if (jj_scan_token(YEAR)) return true;
+    if (jj_scan_token(WIDTH_BUCKET)) return true;
     return false;
   }
 
   final private boolean jj_3_1403() {
-    if (jj_scan_token(WITHOUT)) return true;
+    if (jj_scan_token(VIEW)) return true;
     return false;
   }
 
@@ -20396,12 +20424,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1402() {
-    if (jj_scan_token(WHENEVER)) return true;
+    if (jj_scan_token(VAR_SAMP)) return true;
     return false;
   }
 
   final private boolean jj_3_1401() {
-    if (jj_scan_token(VERSIONING)) return true;
+    if (jj_scan_token(VARCHAR)) return true;
     return false;
   }
 
@@ -20411,7 +20439,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1400() {
-    if (jj_scan_token(VAR_POP)) return true;
+    if (jj_scan_token(VALUE)) return true;
     return false;
   }
 
@@ -20421,22 +20449,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1399() {
-    if (jj_scan_token(VARBINARY)) return true;
+    if (jj_scan_token(UPSERT)) return true;
     return false;
   }
 
   final private boolean jj_3_1398() {
-    if (jj_scan_token(USER)) return true;
+    if (jj_scan_token(UNIQUE)) return true;
     return false;
   }
 
   final private boolean jj_3_1397() {
-    if (jj_scan_token(UPPER)) return true;
+    if (jj_scan_token(TRUNCATE)) return true;
     return false;
   }
 
   final private boolean jj_3_1396() {
-    if (jj_scan_token(UNDER)) return true;
+    if (jj_scan_token(TRIM)) return true;
     return false;
   }
 
@@ -20459,27 +20487,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1395() {
-    if (jj_scan_token(TRUE)) return true;
+    if (jj_scan_token(TRANSLATION)) return true;
     return false;
   }
 
   final private boolean jj_3_1394() {
-    if (jj_scan_token(TRIGGER)) return true;
+    if (jj_scan_token(TRANSACTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1393() {
-    if (jj_scan_token(TRANSLATE_REGEX)) return true;
+    if (jj_scan_token(TINYINT)) return true;
     return false;
   }
 
   final private boolean jj_3_1392() {
-    if (jj_scan_token(TRAILING)) return true;
+    if (jj_scan_token(TEMPORARY)) return true;
     return false;
   }
 
   final private boolean jj_3_1391() {
-    if (jj_scan_token(TIMEZONE_MINUTE)) return true;
+    if (jj_scan_token(SYSTEM_USER)) return true;
     return false;
   }
 
@@ -20495,42 +20523,42 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1390() {
-    if (jj_scan_token(GROUP_CONCAT)) return true;
+    if (jj_scan_token(SYMMETRIC)) return true;
     return false;
   }
 
   final private boolean jj_3_1389() {
-    if (jj_scan_token(SYSTEM_TIME)) return true;
+    if (jj_scan_token(SUBSTRING_REGEX)) return true;
     return false;
   }
 
   final private boolean jj_3_1388() {
-    if (jj_scan_token(SUM)) return true;
+    if (jj_scan_token(SUBMULTISET)) return true;
     return false;
   }
 
   final private boolean jj_3_1387() {
-    if (jj_scan_token(SUBSTRING)) return true;
+    if (jj_scan_token(STATIC)) return true;
     return false;
   }
 
   final private boolean jj_3_1386() {
-    if (jj_scan_token(STDDEV_SAMP)) return true;
+    if (jj_scan_token(SQRT)) return true;
     return false;
   }
 
   final private boolean jj_3_1385() {
-    if (jj_scan_token(STATE)) return true;
+    if (jj_scan_token(SQLEXCEPTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1384() {
-    if (jj_scan_token(SQLWARNING)) return true;
+    if (jj_scan_token(SPECIFIC)) return true;
     return false;
   }
 
   final private boolean jj_3_1383() {
-    if (jj_scan_token(SQL)) return true;
+    if (jj_scan_token(SIZE)) return true;
     return false;
   }
 
@@ -20540,17 +20568,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1382() {
-    if (jj_scan_token(SPACE)) return true;
+    if (jj_scan_token(SESSION_USER)) return true;
     return false;
   }
 
   final private boolean jj_3_1381() {
-    if (jj_scan_token(SIMILAR)) return true;
+    if (jj_scan_token(SEEK)) return true;
     return false;
   }
 
   final private boolean jj_3_1380() {
-    if (jj_scan_token(SESSION)) return true;
+    if (jj_scan_token(SEARCH)) return true;
     return false;
   }
 
@@ -20561,22 +20589,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1379() {
-    if (jj_scan_token(SECTION)) return true;
+    if (jj_scan_token(SCHEMA)) return true;
     return false;
   }
 
   final private boolean jj_3_1378() {
-    if (jj_scan_token(SCROLL)) return true;
+    if (jj_scan_token(ROW_NUMBER)) return true;
     return false;
   }
 
   final private boolean jj_3_1377() {
-    if (jj_scan_token(SAVEPOINT)) return true;
+    if (jj_scan_token(ROLE)) return true;
     return false;
   }
 
   final private boolean jj_3_1376() {
-    if (jj_scan_token(ROUTINE)) return true;
+    if (jj_scan_token(RETURN)) return true;
     return false;
   }
 
@@ -20591,12 +20619,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1375() {
-    if (jj_scan_token(REVOKE)) return true;
+    if (jj_scan_token(RESET)) return true;
     return false;
   }
 
   final private boolean jj_3_1374() {
-    if (jj_scan_token(RESULT)) return true;
+    if (jj_scan_token(RELATIVE)) return true;
     return false;
   }
 
@@ -20612,72 +20640,72 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1373() {
-    if (jj_scan_token(REPLACE)) return true;
+    if (jj_scan_token(REGR_SXX)) return true;
     return false;
   }
 
   final private boolean jj_3_1372() {
-    if (jj_scan_token(REGR_SYY)) return true;
+    if (jj_scan_token(REGR_INTERCEPT)) return true;
     return false;
   }
 
   final private boolean jj_3_1371() {
-    if (jj_scan_token(REGR_SLOPE)) return true;
+    if (jj_scan_token(REGR_AVGX)) return true;
     return false;
   }
 
   final private boolean jj_3_1370() {
-    if (jj_scan_token(REGR_COUNT)) return true;
+    if (jj_scan_token(REF)) return true;
     return false;
   }
 
   final private boolean jj_3_1369() {
-    if (jj_scan_token(REFERENCING)) return true;
+    if (jj_scan_token(READS)) return true;
     return false;
   }
 
   final private boolean jj_3_1368() {
-    if (jj_scan_token(RECURSIVE)) return true;
+    if (jj_scan_token(QUARTER)) return true;
     return false;
   }
 
   final private boolean jj_3_1367() {
-    if (jj_scan_token(READ)) return true;
+    if (jj_scan_token(PRIVILEGES)) return true;
     return false;
   }
 
   final private boolean jj_3_1366() {
-    if (jj_scan_token(PUBLIC)) return true;
+    if (jj_scan_token(PRESERVE)) return true;
     return false;
   }
 
   final private boolean jj_3_1365() {
-    if (jj_scan_token(PRIOR)) return true;
+    if (jj_scan_token(PRECEDES)) return true;
     return false;
   }
 
   final private boolean jj_3_1364() {
-    if (jj_scan_token(PREPARE)) return true;
+    if (jj_scan_token(POSITION)) return true;
     return false;
   }
 
   final private boolean jj_3_1363() {
-    if (jj_scan_token(POWER)) return true;
+    if (jj_scan_token(PERIOD)) return true;
     return false;
   }
 
   final private boolean jj_3_1362() {
-    if (jj_scan_token(PORTION)) return true;
+    if (jj_scan_token(PERCENTILE_CONT)) return true;
     return false;
   }
 
   final private boolean jj_3_1361() {
-    if (jj_scan_token(PERCENT_RANK)) return true;
+    if (jj_scan_token(PATH)) return true;
     return false;
   }
 
   final private boolean jj_3_1360() {
-    if (jj_scan_token(PERCENT)) return true;
+    if (jj_scan_token(PAD)) return true;
     return false;
   }
 
@@ -20687,7 +20715,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1359() {
-    if (jj_scan_token(PARTIAL)) return true;
+    if (jj_scan_token(OUTPUT)) return true;
     return false;
   }
 
@@ -20697,7 +20725,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1358() {
-    if (jj_scan_token(OVERLAY)) return true;
+    if (jj_scan_token(OR)) return true;
     return false;
   }
 
@@ -20708,7 +20736,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1357() {
-    if (jj_scan_token(OUT)) return true;
+    if (jj_scan_token(ONLY)) return true;
     return false;
   }
 
@@ -20723,22 +20751,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1356() {
-    if (jj_scan_token(OPTION)) return true;
+    if (jj_scan_token(OLD)) return true;
     return false;
   }
 
   final private boolean jj_3_1355() {
-    if (jj_scan_token(ONE)) return true;
+    if (jj_scan_token(OCCURRENCES_REGEX)) return true;
     return false;
   }
 
   final private boolean jj_3_1354() {
-    if (jj_scan_token(OF)) return true;
+    if (jj_scan_token(NULLIF)) return true;
     return false;
   }
 
   final private boolean jj_3_1353() {
-    if (jj_scan_token(OBJECT)) return true;
+    if (jj_scan_token(NOT)) return true;
     return false;
   }
 
@@ -20748,12 +20776,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1352() {
-    if (jj_scan_token(NTILE)) return true;
+    if (jj_scan_token(NO)) return true;
     return false;
   }
 
   final private boolean jj_3_1351() {
-    if (jj_scan_token(NORMALIZE)) return true;
+    if (jj_scan_token(NATIONAL)) return true;
     return false;
   }
 
@@ -20764,12 +20792,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1350() {
-    if (jj_scan_token(NCLOB)) return true;
+    if (jj_scan_token(MULTISET)) return true;
     return false;
   }
 
   final private boolean jj_3_1349() {
-    if (jj_scan_token(NAMES)) return true;
+    if (jj_scan_token(MODIFIES)) return true;
     return false;
   }
 
@@ -20784,17 +20812,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1348() {
-    if (jj_scan_token(MONTH)) return true;
+    if (jj_scan_token(MIN)) return true;
     return false;
   }
 
   final private boolean jj_3_1347() {
-    if (jj_scan_token(MOD)) return true;
+    if (jj_scan_token(MEASURES)) return true;
     return false;
   }
 
   final private boolean jj_3_1346() {
-    if (jj_scan_token(METHOD)) return true;
+    if (jj_scan_token(MATCHES)) return true;
     return false;
   }
 
@@ -20804,12 +20832,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1345() {
-    if (jj_scan_token(MAX)) return true;
+    if (jj_scan_token(M)) return true;
     return false;
   }
 
   final private boolean jj_3_1344() {
-    if (jj_scan_token(MATCH)) return true;
+    if (jj_scan_token(LOCALTIMESTAMP)) return true;
     return false;
   }
 
@@ -20824,42 +20852,42 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1343() {
-    if (jj_scan_token(LOWER)) return true;
+    if (jj_scan_token(LN)) return true;
     return false;
   }
 
   final private boolean jj_3_1342() {
-    if (jj_scan_token(LOCALTIME)) return true;
+    if (jj_scan_token(LEVEL)) return true;
     return false;
   }
 
   final private boolean jj_3_1341() {
-    if (jj_scan_token(LIKE_REGEX)) return true;
+    if (jj_scan_token(LEAD)) return true;
     return false;
   }
 
   final private boolean jj_3_1340() {
-    if (jj_scan_token(LENGTH)) return true;
+    if (jj_scan_token(LARGE)) return true;
     return false;
   }
 
   final private boolean jj_3_1339() {
-    if (jj_scan_token(LAST_VALUE)) return true;
+    if (jj_scan_token(KEY)) return true;
     return false;
   }
 
   final private boolean jj_3_1338() {
-    if (jj_scan_token(LANGUAGE)) return true;
+    if (jj_scan_token(JSON_QUERY)) return true;
     return false;
   }
 
   final private boolean jj_3_1337() {
-    if (jj_scan_token(K)) return true;
+    if (jj_scan_token(JSON_EXISTS)) return true;
     return false;
   }
 
   final private boolean jj_3_1336() {
-    if (jj_scan_token(JSON_OBJECTAGG)) return true;
+    if (jj_scan_token(ISOLATION)) return true;
     return false;
   }
 
@@ -20869,7 +20897,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1335() {
-    if (jj_scan_token(JSON_ARRAYAGG)) return true;
+    if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
@@ -20883,22 +20911,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1334() {
-    if (jj_scan_token(IS)) return true;
+    if (jj_scan_token(INPUT)) return true;
     return false;
   }
 
   final private boolean jj_3_1333() {
-    if (jj_scan_token(INT)) return true;
+    if (jj_scan_token(INITIAL)) return true;
     return false;
   }
 
   final private boolean jj_3_1332() {
-    if (jj_scan_token(INOUT)) return true;
+    if (jj_scan_token(IMMEDIATELY)) return true;
     return false;
   }
 
   final private boolean jj_3_1331() {
-    if (jj_scan_token(INDICATOR)) return true;
+    if (jj_scan_token(HOUR)) return true;
     return false;
   }
 
@@ -20909,12 +20937,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1330() {
-    if (jj_scan_token(IMMEDIATE)) return true;
+    if (jj_scan_token(GOTO)) return true;
     return false;
   }
 
   final private boolean jj_3_1329() {
-    if (jj_scan_token(HOLD)) return true;
+    if (jj_scan_token(GET)) return true;
     return false;
   }
 
@@ -20924,22 +20952,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1328() {
-    if (jj_scan_token(GO)) return true;
+    if (jj_scan_token(FUSION)) return true;
     return false;
   }
 
   final private boolean jj_3_1327() {
-    if (jj_scan_token(GENERAL)) return true;
+    if (jj_scan_token(FRAME_ROW)) return true;
     return false;
   }
 
   final private boolean jj_3_1326() {
-    if (jj_scan_token(FUNCTION)) return true;
+    if (jj_scan_token(FOR)) return true;
     return false;
   }
 
   final private boolean jj_3_1325() {
-    if (jj_scan_token(FOUND)) return true;
+    if (jj_scan_token(FIRST_VALUE)) return true;
     return false;
   }
 
@@ -20949,7 +20977,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1324() {
-    if (jj_scan_token(FLOOR)) return true;
+    if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
@@ -20960,47 +20988,47 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1323() {
-    if (jj_scan_token(FIRST)) return true;
+    if (jj_scan_token(EXTEND)) return true;
     return false;
   }
 
   final private boolean jj_3_1322() {
-    if (jj_scan_token(EXTRACT)) return true;
+    if (jj_scan_token(EXECUTE)) return true;
     return false;
   }
 
   final private boolean jj_3_1321() {
-    if (jj_scan_token(EXP)) return true;
+    if (jj_scan_token(EVERY)) return true;
     return false;
   }
 
   final private boolean jj_3_1320() {
-    if (jj_scan_token(EXEC)) return true;
+    if (jj_scan_token(END_PARTITION)) return true;
     return false;
   }
 
   final private boolean jj_3_1319() {
-    if (jj_scan_token(ESCAPE)) return true;
+    if (jj_scan_token(EMPTY)) return true;
     return false;
   }
 
   final private boolean jj_3_1318() {
-    if (jj_scan_token(END_FRAME)) return true;
+    if (jj_scan_token(EACH)) return true;
     return false;
   }
 
   final private boolean jj_3_1317() {
-    if (jj_scan_token(ELSE)) return true;
+    if (jj_scan_token(DOMAIN)) return true;
     return false;
   }
 
   final private boolean jj_3_1316() {
-    if (jj_scan_token(DYNAMIC)) return true;
+    if (jj_scan_token(DIAGNOSTICS)) return true;
     return false;
   }
 
   final private boolean jj_3_1315() {
-    if (jj_scan_token(DISCONNECT)) return true;
+    if (jj_scan_token(DESC)) return true;
     return false;
   }
 
@@ -21011,32 +21039,32 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1314() {
-    if (jj_scan_token(DETERMINISTIC)) return true;
+    if (jj_scan_token(DENSE_RANK)) return true;
     return false;
   }
 
   final private boolean jj_3_1313() {
-    if (jj_scan_token(DEREF)) return true;
+    if (jj_scan_token(DECLARE)) return true;
     return false;
   }
 
   final private boolean jj_3_1312() {
-    if (jj_scan_token(DEFERRED)) return true;
+    if (jj_scan_token(DEALLOCATE)) return true;
     return false;
   }
 
   final private boolean jj_3_1311() {
-    if (jj_scan_token(DECIMAL)) return true;
+    if (jj_scan_token(DATA)) return true;
     return false;
   }
 
   final private boolean jj_3_1310() {
-    if (jj_scan_token(DAY)) return true;
+    if (jj_scan_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE)) return true;
     return false;
   }
 
   final private boolean jj_3_1309() {
-    if (jj_scan_token(CYCLE)) return true;
+    if (jj_scan_token(CURRENT_SCHEMA)) return true;
     return false;
   }
 
@@ -21046,12 +21074,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1308() {
-    if (jj_scan_token(CURRENT_TIMESTAMP)) return true;
+    if (jj_scan_token(CURRENT_PATH)) return true;
     return false;
   }
 
   final private boolean jj_3_1307() {
-    if (jj_scan_token(CURRENT_ROW)) return true;
+    if (jj_scan_token(CURRENT_CATALOG)) return true;
     return false;
   }
 
@@ -21061,7 +21089,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1306() {
-    if (jj_scan_token(CURRENT_DEFAULT_TRANSFORM_GROUP)) return true;
+    if (jj_scan_token(COVAR_SAMP)) return true;
     return false;
   }
 
@@ -21074,12 +21102,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1305() {
-    if (jj_scan_token(CUME_DIST)) return true;
+    if (jj_scan_token(CORRESPONDING)) return true;
     return false;
   }
 
   final private boolean jj_3_1304() {
-    if (jj_scan_token(COVAR_POP)) return true;
+    if (jj_scan_token(CONTINUE)) return true;
     return false;
   }
 
@@ -21089,27 +21117,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1303() {
-    if (jj_scan_token(CORR)) return true;
+    if (jj_scan_token(CONSTRAINTS)) return true;
     return false;
   }
 
   final private boolean jj_3_1302() {
-    if (jj_scan_token(CONTAINS)) return true;
+    if (jj_scan_token(CONDITION)) return true;
     return false;
   }
 
   final private boolean jj_3_1301() {
-    if (jj_scan_token(CONNECTION)) return true;
+    if (jj_scan_token(COLLECT)) return true;
     return false;
   }
 
   final private boolean jj_3_1300() {
-    if (jj_scan_token(COMMIT)) return true;
+    if (jj_scan_token(COALESCE)) return true;
     return false;
   }
 
   final private boolean jj_3_1299() {
-    if (jj_scan_token(COLLATION)) return true;
+    if (jj_scan_token(CLASSIFIER)) return true;
     return false;
   }
 
@@ -21120,27 +21148,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1298() {
-    if (jj_scan_token(CLOSE)) return true;
+    if (jj_scan_token(CHARACTER_LENGTH)) return true;
     return false;
   }
 
   final private boolean jj_3_1297() {
-    if (jj_scan_token(CHECK)) return true;
+    if (jj_scan_token(CEILING)) return true;
     return false;
   }
 
   final private boolean jj_3_1296() {
-    if (jj_scan_token(CHARACTER)) return true;
+    if (jj_scan_token(CAST)) return true;
     return false;
   }
 
   final private boolean jj_3_1295() {
-    if (jj_scan_token(CEIL)) return true;
+    if (jj_scan_token(CARDINALITY)) return true;
     return false;
   }
 
   final private boolean jj_3_1294() {
-    if (jj_scan_token(CASCADED)) return true;
+    if (jj_scan_token(BY)) return true;
     return false;
   }
 
@@ -21150,12 +21178,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1293() {
-    if (jj_scan_token(CALLED)) return true;
+    if (jj_scan_token(BOOLEAN)) return true;
     return false;
   }
 
   final private boolean jj_3_1292() {
-    if (jj_scan_token(BREADTH)) return true;
+    if (jj_scan_token(BINARY)) return true;
     return false;
   }
 
@@ -21168,37 +21196,37 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1291() {
-    if (jj_scan_token(BLOB)) return true;
+    if (jj_scan_token(BEGIN_PARTITION)) return true;
     return false;
   }
 
   final private boolean jj_3_1290() {
-    if (jj_scan_token(BIGINT)) return true;
+    if (jj_scan_token(BEFORE)) return true;
     return false;
   }
 
   final private boolean jj_3_1289() {
-    if (jj_scan_token(BEGIN_FRAME)) return true;
+    if (jj_scan_token(ATOMIC)) return true;
     return false;
   }
 
   final private boolean jj_3_1288() {
-    if (jj_scan_token(AVG)) return true;
+    if (jj_scan_token(ASSERTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1287() {
-    if (jj_scan_token(AT)) return true;
+    if (jj_scan_token(AS)) return true;
     return false;
   }
 
   final private boolean jj_3_1286() {
-    if (jj_scan_token(ASENSITIVE)) return true;
+    if (jj_scan_token(ARRAY_AGG)) return true;
     return false;
   }
 
   final private boolean jj_3_1285() {
-    if (jj_scan_token(ARRAY_MAX_CARDINALITY)) return true;
+    if (jj_scan_token(AND)) return true;
     return false;
   }
 
@@ -21222,7 +21250,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1284() {
-    if (jj_scan_token(AND)) return true;
+    if (jj_scan_token(ALLOCATE)) return true;
     return false;
   }
 
@@ -21232,17 +21260,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1283() {
-    if (jj_scan_token(ALLOCATE)) return true;
+    if (jj_scan_token(ACTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1282() {
-    if (jj_scan_token(ACTION)) return true;
+    if (jj_scan_token(A)) return true;
     return false;
   }
 
   final private boolean jj_3_1281() {
-    if (jj_scan_token(A)) return true;
+    if (jj_scan_token(COMPUTE)) return true;
     return false;
   }
 
@@ -21265,52 +21293,39 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1280() {
-    if (jj_scan_token(COMPUTE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1279() {
+  final private boolean jj_3_1280() {
     if (jj_scan_token(SCAN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1278() {
+  final private boolean jj_3_1279() {
     if (jj_scan_token(NOLOGGING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1277() {
+  final private boolean jj_3_1278() {
     if (jj_scan_token(PARALLEL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1276() {
+  final private boolean jj_3_1277() {
     if (jj_scan_token(DATA_REGION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1275() {
+  final private boolean jj_3_1276() {
     if (jj_scan_token(WRITE_SYNCHRONIZATION_MODE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1274() {
+  final private boolean jj_3_1275() {
     if (jj_scan_token(BACKUPS)) return true;
     return false;
   }
 
-  final private boolean jj_3_581() {
-    if (jj_scan_token(DOT)) return true;
-    if (jj_3R_214()) return true;
-    return false;
-  }
-
   final private boolean jj_3R_268() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_1274()) {
-    jj_scanpos = xsp;
     if (jj_3_1275()) {
     jj_scanpos = xsp;
     if (jj_3_1276()) {
@@ -21569,7 +21584,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_scanpos = xsp;
     if (jj_3_1403()) {
     jj_scanpos = xsp;
-    if (jj_3_1404()) return true;
+    if (jj_3_1404()) {
+    jj_scanpos = xsp;
+    if (jj_3_1405()) {
+    jj_scanpos = xsp;
+    if (jj_3_1406()) return true;
     }
     }
     }
@@ -21700,6 +21719,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     }
     }
+    }
+    return false;
+  }
+
+  final private boolean jj_3_581() {
+    if (jj_scan_token(DOT)) return true;
+    if (jj_3R_214()) return true;
+    return false;
+  }
+
+  final private boolean jj_3_1274() {
+    if (jj_scan_token(YEAR)) return true;
     return false;
   }
 
@@ -21714,47 +21745,47 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1273() {
-    if (jj_scan_token(WRITE)) return true;
+    if (jj_scan_token(WITHOUT)) return true;
     return false;
   }
 
   final private boolean jj_3_1272() {
-    if (jj_scan_token(WITHIN)) return true;
+    if (jj_scan_token(WHENEVER)) return true;
     return false;
   }
 
   final private boolean jj_3_1271() {
-    if (jj_scan_token(WEEK)) return true;
+    if (jj_scan_token(VERSIONING)) return true;
     return false;
   }
 
   final private boolean jj_3_1270() {
-    if (jj_scan_token(VERSION)) return true;
+    if (jj_scan_token(VAR_POP)) return true;
     return false;
   }
 
   final private boolean jj_3_1269() {
-    if (jj_scan_token(VARYING)) return true;
+    if (jj_scan_token(VARBINARY)) return true;
     return false;
   }
 
   final private boolean jj_3_1268() {
-    if (jj_scan_token(VALUE_OF)) return true;
+    if (jj_scan_token(USER)) return true;
     return false;
   }
 
   final private boolean jj_3_1267() {
-    if (jj_scan_token(USAGE)) return true;
+    if (jj_scan_token(UPPER)) return true;
     return false;
   }
 
   final private boolean jj_3_1266() {
-    if (jj_scan_token(UNKNOWN)) return true;
+    if (jj_scan_token(UNDER)) return true;
     return false;
   }
 
   final private boolean jj_3_1265() {
-    if (jj_scan_token(UESCAPE)) return true;
+    if (jj_scan_token(TRUE)) return true;
     return false;
   }
 
@@ -21764,72 +21795,72 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1264() {
-    if (jj_scan_token(TRIM_ARRAY)) return true;
+    if (jj_scan_token(TRIGGER)) return true;
     return false;
   }
 
   final private boolean jj_3_1263() {
-    if (jj_scan_token(TREAT)) return true;
+    if (jj_scan_token(TRANSLATE_REGEX)) return true;
     return false;
   }
 
   final private boolean jj_3_1262() {
-    if (jj_scan_token(TRANSLATE)) return true;
+    if (jj_scan_token(TRAILING)) return true;
     return false;
   }
 
   final private boolean jj_3_1261() {
-    if (jj_scan_token(TO)) return true;
+    if (jj_scan_token(TIMEZONE_MINUTE)) return true;
     return false;
   }
 
   final private boolean jj_3_1260() {
-    if (jj_scan_token(TIMEZONE_HOUR)) return true;
+    if (jj_scan_token(GROUP_CONCAT)) return true;
     return false;
   }
 
   final private boolean jj_3_1259() {
-    if (jj_scan_token(STRING_AGG)) return true;
+    if (jj_scan_token(SYSTEM_TIME)) return true;
     return false;
   }
 
   final private boolean jj_3_1258() {
-    if (jj_scan_token(SYSTEM)) return true;
+    if (jj_scan_token(SUM)) return true;
     return false;
   }
 
   final private boolean jj_3_1257() {
-    if (jj_scan_token(SUCCEEDS)) return true;
+    if (jj_scan_token(SUBSTRING)) return true;
     return false;
   }
 
   final private boolean jj_3_1256() {
-    if (jj_scan_token(SUBSET)) return true;
+    if (jj_scan_token(STDDEV_SAMP)) return true;
     return false;
   }
 
   final private boolean jj_3_1255() {
-    if (jj_scan_token(STDDEV_POP)) return true;
+    if (jj_scan_token(STATE)) return true;
     return false;
   }
 
   final private boolean jj_3_1254() {
-    if (jj_scan_token(START)) return true;
+    if (jj_scan_token(SQLWARNING)) return true;
     return false;
   }
 
   final private boolean jj_3_1253() {
-    if (jj_scan_token(SQLSTATE)) return true;
+    if (jj_scan_token(SQL)) return true;
     return false;
   }
 
   final private boolean jj_3_1252() {
-    if (jj_scan_token(SPECIFICTYPE)) return true;
+    if (jj_scan_token(SPACE)) return true;
     return false;
   }
 
   final private boolean jj_3_1251() {
-    if (jj_scan_token(SMALLINT)) return true;
+    if (jj_scan_token(SIMILAR)) return true;
     return false;
   }
 
@@ -21840,27 +21871,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1250() {
-    if (jj_scan_token(SHOW)) return true;
+    if (jj_scan_token(SESSION)) return true;
     return false;
   }
 
   final private boolean jj_3_1249() {
-    if (jj_scan_token(SENSITIVE)) return true;
+    if (jj_scan_token(SECTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1248() {
-    if (jj_scan_token(SECOND)) return true;
+    if (jj_scan_token(SCROLL)) return true;
     return false;
   }
 
   final private boolean jj_3_1247() {
-    if (jj_scan_token(SCOPE)) return true;
+    if (jj_scan_token(SAVEPOINT)) return true;
     return false;
   }
 
   final private boolean jj_3_1246() {
-    if (jj_scan_token(RUNNING)) return true;
+    if (jj_scan_token(ROUTINE)) return true;
     return false;
   }
 
@@ -21871,17 +21902,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1245() {
-    if (jj_scan_token(ROLLBACK)) return true;
+    if (jj_scan_token(REVOKE)) return true;
     return false;
   }
 
   final private boolean jj_3_1244() {
-    if (jj_scan_token(RETURNS)) return true;
+    if (jj_scan_token(RESULT)) return true;
     return false;
   }
 
   final private boolean jj_3_1243() {
-    if (jj_scan_token(RESTRICT)) return true;
+    if (jj_scan_token(REPLACE)) return true;
     return false;
   }
 
@@ -21892,12 +21923,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1242() {
-    if (jj_scan_token(RELEASE)) return true;
+    if (jj_scan_token(REGR_SYY)) return true;
     return false;
   }
 
   final private boolean jj_3_1241() {
-    if (jj_scan_token(REGR_SXY)) return true;
+    if (jj_scan_token(REGR_SLOPE)) return true;
     return false;
   }
 
@@ -21914,62 +21945,62 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1240() {
-    if (jj_scan_token(REGR_R2)) return true;
+    if (jj_scan_token(REGR_COUNT)) return true;
     return false;
   }
 
   final private boolean jj_3_1239() {
-    if (jj_scan_token(REGR_AVGY)) return true;
+    if (jj_scan_token(REFERENCING)) return true;
     return false;
   }
 
   final private boolean jj_3_1238() {
-    if (jj_scan_token(REFERENCES)) return true;
+    if (jj_scan_token(RECURSIVE)) return true;
     return false;
   }
 
   final private boolean jj_3_1237() {
-    if (jj_scan_token(REAL)) return true;
+    if (jj_scan_token(READ)) return true;
     return false;
   }
 
   final private boolean jj_3_1236() {
-    if (jj_scan_token(RANK)) return true;
+    if (jj_scan_token(PUBLIC)) return true;
     return false;
   }
 
   final private boolean jj_3_1235() {
-    if (jj_scan_token(PROCEDURE)) return true;
+    if (jj_scan_token(PRIOR)) return true;
     return false;
   }
 
   final private boolean jj_3_1234() {
-    if (jj_scan_token(PREV)) return true;
+    if (jj_scan_token(PREPARE)) return true;
     return false;
   }
 
   final private boolean jj_3_1233() {
-    if (jj_scan_token(PRECISION)) return true;
+    if (jj_scan_token(POWER)) return true;
     return false;
   }
 
   final private boolean jj_3_1232() {
-    if (jj_scan_token(POSITION_REGEX)) return true;
+    if (jj_scan_token(PORTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1231() {
-    if (jj_scan_token(PERMUTE)) return true;
+    if (jj_scan_token(PERCENT_RANK)) return true;
     return false;
   }
 
   final private boolean jj_3_1230() {
-    if (jj_scan_token(PERCENTILE_DISC)) return true;
+    if (jj_scan_token(PERCENT)) return true;
     return false;
   }
 
   final private boolean jj_3_1229() {
-    if (jj_scan_token(PER)) return true;
+    if (jj_scan_token(PARTIAL)) return true;
     return false;
   }
 
@@ -21980,22 +22011,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1228() {
-    if (jj_scan_token(PARAMETER)) return true;
+    if (jj_scan_token(OVERLAY)) return true;
     return false;
   }
 
   final private boolean jj_3_1227() {
-    if (jj_scan_token(OVERLAPS)) return true;
+    if (jj_scan_token(OUT)) return true;
     return false;
   }
 
   final private boolean jj_3_1226() {
-    if (jj_scan_token(ORDINALITY)) return true;
+    if (jj_scan_token(OPTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1225() {
-    if (jj_scan_token(OPEN)) return true;
+    if (jj_scan_token(ONE)) return true;
     return false;
   }
 
@@ -22005,17 +22036,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1224() {
-    if (jj_scan_token(OMIT)) return true;
+    if (jj_scan_token(OF)) return true;
     return false;
   }
 
   final private boolean jj_3_1223() {
-    if (jj_scan_token(OCTET_LENGTH)) return true;
+    if (jj_scan_token(OBJECT)) return true;
     return false;
   }
 
   final private boolean jj_3_1222() {
-    if (jj_scan_token(NUMERIC)) return true;
+    if (jj_scan_token(NTILE)) return true;
     return false;
   }
 
@@ -22030,7 +22061,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1221() {
-    if (jj_scan_token(NTH_VALUE)) return true;
+    if (jj_scan_token(NORMALIZE)) return true;
     return false;
   }
 
@@ -22040,17 +22071,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1220() {
-    if (jj_scan_token(NONE)) return true;
+    if (jj_scan_token(NCLOB)) return true;
     return false;
   }
 
   final private boolean jj_3_1219() {
-    if (jj_scan_token(NCHAR)) return true;
+    if (jj_scan_token(NAMES)) return true;
     return false;
   }
 
   final private boolean jj_3_1218() {
-    if (jj_scan_token(NAME)) return true;
+    if (jj_scan_token(MONTH)) return true;
     return false;
   }
 
@@ -22061,82 +22092,82 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1217() {
-    if (jj_scan_token(MODULE)) return true;
+    if (jj_scan_token(MOD)) return true;
     return false;
   }
 
   final private boolean jj_3_1216() {
-    if (jj_scan_token(MINUTE)) return true;
+    if (jj_scan_token(METHOD)) return true;
     return false;
   }
 
   final private boolean jj_3_1215() {
-    if (jj_scan_token(MEMBER)) return true;
+    if (jj_scan_token(MAX)) return true;
     return false;
   }
 
   final private boolean jj_3_1214() {
-    if (jj_scan_token(MATCH_NUMBER)) return true;
+    if (jj_scan_token(MATCH)) return true;
     return false;
   }
 
   final private boolean jj_3_1213() {
-    if (jj_scan_token(MAP)) return true;
+    if (jj_scan_token(LOWER)) return true;
     return false;
   }
 
   final private boolean jj_3_1212() {
-    if (jj_scan_token(LOCATOR)) return true;
+    if (jj_scan_token(LOCALTIME)) return true;
     return false;
   }
 
   final private boolean jj_3_1211() {
-    if (jj_scan_token(LOCAL)) return true;
+    if (jj_scan_token(LIKE_REGEX)) return true;
     return false;
   }
 
   final private boolean jj_3_1210() {
-    if (jj_scan_token(LIKE)) return true;
+    if (jj_scan_token(LENGTH)) return true;
     return false;
   }
 
   final private boolean jj_3_1209() {
-    if (jj_scan_token(LEADING)) return true;
+    if (jj_scan_token(LAST_VALUE)) return true;
     return false;
   }
 
   final private boolean jj_3_1208() {
-    if (jj_scan_token(LAST)) return true;
+    if (jj_scan_token(LANGUAGE)) return true;
     return false;
   }
 
   final private boolean jj_3_1207() {
-    if (jj_scan_token(LAG)) return true;
+    if (jj_scan_token(K)) return true;
     return false;
   }
 
   final private boolean jj_3_1206() {
-    if (jj_scan_token(JSON_VALUE)) return true;
+    if (jj_scan_token(JSON_OBJECTAGG)) return true;
     return false;
   }
 
   final private boolean jj_3_1205() {
-    if (jj_scan_token(JSON_OBJECT)) return true;
+    if (jj_scan_token(JSON_ARRAYAGG)) return true;
     return false;
   }
 
   final private boolean jj_3_1204() {
-    if (jj_scan_token(JSON_ARRAY)) return true;
+    if (jj_scan_token(IS)) return true;
     return false;
   }
 
   final private boolean jj_3_1203() {
-    if (jj_scan_token(INTERSECTION)) return true;
+    if (jj_scan_token(INT)) return true;
     return false;
   }
 
   final private boolean jj_3_1202() {
-    if (jj_scan_token(INSENSITIVE)) return true;
+    if (jj_scan_token(INOUT)) return true;
     return false;
   }
 
@@ -22148,47 +22179,47 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1201() {
-    if (jj_scan_token(INITIALLY)) return true;
+    if (jj_scan_token(INDICATOR)) return true;
     return false;
   }
 
   final private boolean jj_3_1200() {
-    if (jj_scan_token(IMPORT)) return true;
+    if (jj_scan_token(IMMEDIATE)) return true;
     return false;
   }
 
   final private boolean jj_3_1199() {
-    if (jj_scan_token(IDENTITY)) return true;
+    if (jj_scan_token(HOLD)) return true;
     return false;
   }
 
   final private boolean jj_3_1198() {
-    if (jj_scan_token(GROUPS)) return true;
+    if (jj_scan_token(GO)) return true;
     return false;
   }
 
   final private boolean jj_3_1197() {
-    if (jj_scan_token(GLOBAL)) return true;
+    if (jj_scan_token(GENERAL)) return true;
     return false;
   }
 
   final private boolean jj_3_1196() {
-    if (jj_scan_token(G)) return true;
+    if (jj_scan_token(FUNCTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1195() {
-    if (jj_scan_token(FREE)) return true;
+    if (jj_scan_token(FOUND)) return true;
     return false;
   }
 
   final private boolean jj_3_1194() {
-    if (jj_scan_token(FOREIGN)) return true;
+    if (jj_scan_token(FLOOR)) return true;
     return false;
   }
 
   final private boolean jj_3_1193() {
-    if (jj_scan_token(FLOAT)) return true;
+    if (jj_scan_token(FIRST)) return true;
     return false;
   }
 
@@ -22199,22 +22230,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1192() {
-    if (jj_scan_token(FILTER)) return true;
+    if (jj_scan_token(EXTRACT)) return true;
     return false;
   }
 
   final private boolean jj_3_1191() {
-    if (jj_scan_token(EXTERNAL)) return true;
+    if (jj_scan_token(EXP)) return true;
     return false;
   }
 
   final private boolean jj_3_1190() {
-    if (jj_scan_token(EXISTS)) return true;
+    if (jj_scan_token(EXEC)) return true;
     return false;
   }
 
   final private boolean jj_3_1189() {
-    if (jj_scan_token(EXCEPTION)) return true;
+    if (jj_scan_token(ESCAPE)) return true;
     return false;
   }
 
@@ -22225,27 +22256,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1188() {
-    if (jj_scan_token(EQUALS)) return true;
+    if (jj_scan_token(END_FRAME)) return true;
     return false;
   }
 
   final private boolean jj_3_1187() {
-    if (jj_scan_token(END)) return true;
+    if (jj_scan_token(ELSE)) return true;
     return false;
   }
 
   final private boolean jj_3_1186() {
-    if (jj_scan_token(ELEMENT)) return true;
+    if (jj_scan_token(DYNAMIC)) return true;
     return false;
   }
 
   final private boolean jj_3_1185() {
-    if (jj_scan_token(DOUBLE)) return true;
+    if (jj_scan_token(DISCONNECT)) return true;
     return false;
   }
 
   final private boolean jj_3_1184() {
-    if (jj_scan_token(DISALLOW)) return true;
+    if (jj_scan_token(DETERMINISTIC)) return true;
     return false;
   }
 
@@ -22260,22 +22291,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1183() {
-    if (jj_scan_token(DESCRIPTOR)) return true;
+    if (jj_scan_token(DEREF)) return true;
     return false;
   }
 
   final private boolean jj_3_1182() {
-    if (jj_scan_token(DEPTH)) return true;
+    if (jj_scan_token(DEFERRED)) return true;
     return false;
   }
 
   final private boolean jj_3_1181() {
-    if (jj_scan_token(DEFERRABLE)) return true;
+    if (jj_scan_token(DECIMAL)) return true;
     return false;
   }
 
   final private boolean jj_3_1180() {
-    if (jj_scan_token(DEC)) return true;
+    if (jj_scan_token(DAY)) return true;
     return false;
   }
 
@@ -22286,47 +22317,47 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1179() {
-    if (jj_scan_token(DATE)) return true;
+    if (jj_scan_token(CYCLE)) return true;
     return false;
   }
 
   final private boolean jj_3_1178() {
-    if (jj_scan_token(CURRENT_USER)) return true;
+    if (jj_scan_token(CURRENT_TIMESTAMP)) return true;
     return false;
   }
 
   final private boolean jj_3_1177() {
-    if (jj_scan_token(CURRENT_TIME)) return true;
+    if (jj_scan_token(CURRENT_ROW)) return true;
     return false;
   }
 
   final private boolean jj_3_1176() {
-    if (jj_scan_token(CURRENT_ROLE)) return true;
+    if (jj_scan_token(CURRENT_DEFAULT_TRANSFORM_GROUP)) return true;
     return false;
   }
 
   final private boolean jj_3_1175() {
-    if (jj_scan_token(CURRENT_DATE)) return true;
+    if (jj_scan_token(CUME_DIST)) return true;
     return false;
   }
 
   final private boolean jj_3_1174() {
-    if (jj_scan_token(CUBE)) return true;
+    if (jj_scan_token(COVAR_POP)) return true;
     return false;
   }
 
   final private boolean jj_3_1173() {
-    if (jj_scan_token(COUNT)) return true;
+    if (jj_scan_token(CORR)) return true;
     return false;
   }
 
   final private boolean jj_3_1172() {
-    if (jj_scan_token(CONVERT)) return true;
+    if (jj_scan_token(CONTAINS)) return true;
     return false;
   }
 
   final private boolean jj_3_1171() {
-    if (jj_scan_token(CONSTRUCTOR)) return true;
+    if (jj_scan_token(CONNECTION)) return true;
     return false;
   }
 
@@ -22338,22 +22369,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1170() {
-    if (jj_scan_token(CONNECT)) return true;
+    if (jj_scan_token(COMMIT)) return true;
     return false;
   }
 
   final private boolean jj_3_1169() {
-    if (jj_scan_token(COLUMN)) return true;
+    if (jj_scan_token(COLLATION)) return true;
     return false;
   }
 
   final private boolean jj_3_1168() {
-    if (jj_scan_token(COLLATE)) return true;
+    if (jj_scan_token(CLOSE)) return true;
     return false;
   }
 
   final private boolean jj_3_1167() {
-    if (jj_scan_token(CLOB)) return true;
+    if (jj_scan_token(CHECK)) return true;
     return false;
   }
 
@@ -22363,62 +22394,62 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1166() {
-    if (jj_scan_token(CHAR_LENGTH)) return true;
+    if (jj_scan_token(CHARACTER)) return true;
     return false;
   }
 
   final private boolean jj_3_1165() {
-    if (jj_scan_token(CHAR)) return true;
+    if (jj_scan_token(CEIL)) return true;
     return false;
   }
 
   final private boolean jj_3_1164() {
-    if (jj_scan_token(CATALOG)) return true;
+    if (jj_scan_token(CASCADED)) return true;
     return false;
   }
 
   final private boolean jj_3_1163() {
-    if (jj_scan_token(CASCADE)) return true;
+    if (jj_scan_token(CALLED)) return true;
     return false;
   }
 
   final private boolean jj_3_1162() {
-    if (jj_scan_token(C)) return true;
+    if (jj_scan_token(BREADTH)) return true;
     return false;
   }
 
   final private boolean jj_3_1161() {
-    if (jj_scan_token(BOTH)) return true;
+    if (jj_scan_token(BLOB)) return true;
     return false;
   }
 
   final private boolean jj_3_1160() {
-    if (jj_scan_token(BIT)) return true;
+    if (jj_scan_token(BIGINT)) return true;
     return false;
   }
 
   final private boolean jj_3_1159() {
-    if (jj_scan_token(BETWEEN)) return true;
+    if (jj_scan_token(BEGIN_FRAME)) return true;
     return false;
   }
 
   final private boolean jj_3_1158() {
-    if (jj_scan_token(BEGIN)) return true;
+    if (jj_scan_token(AVG)) return true;
     return false;
   }
 
   final private boolean jj_3_1157() {
-    if (jj_scan_token(AUTHORIZATION)) return true;
+    if (jj_scan_token(AT)) return true;
     return false;
   }
 
   final private boolean jj_3_1156() {
-    if (jj_scan_token(ASYMMETRIC)) return true;
+    if (jj_scan_token(ASENSITIVE)) return true;
     return false;
   }
 
   final private boolean jj_3_1155() {
-    if (jj_scan_token(ASC)) return true;
+    if (jj_scan_token(ARRAY_MAX_CARDINALITY)) return true;
     return false;
   }
 
@@ -22776,7 +22807,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_scanpos = xsp;
     if (jj_3_1272()) {
     jj_scanpos = xsp;
-    if (jj_3_1273()) return true;
+    if (jj_3_1273()) {
+    jj_scanpos = xsp;
+    if (jj_3_1274()) return true;
+    }
     }
     }
     }
@@ -22911,107 +22945,107 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1142() {
-    if (jj_scan_token(ZONE)) return true;
+    if (jj_scan_token(WRITE)) return true;
     return false;
   }
 
   final private boolean jj_3_1141() {
-    if (jj_scan_token(WORK)) return true;
+    if (jj_scan_token(WITHIN)) return true;
     return false;
   }
 
   final private boolean jj_3_1140() {
-    if (jj_scan_token(WIDTH_BUCKET)) return true;
+    if (jj_scan_token(WEEK)) return true;
     return false;
   }
 
   final private boolean jj_3_1139() {
-    if (jj_scan_token(VIEW)) return true;
+    if (jj_scan_token(VERSION)) return true;
     return false;
   }
 
   final private boolean jj_3_1138() {
-    if (jj_scan_token(VAR_SAMP)) return true;
+    if (jj_scan_token(VARYING)) return true;
     return false;
   }
 
   final private boolean jj_3_1137() {
-    if (jj_scan_token(VARCHAR)) return true;
+    if (jj_scan_token(VALUE_OF)) return true;
     return false;
   }
 
   final private boolean jj_3_1136() {
-    if (jj_scan_token(VALUE)) return true;
+    if (jj_scan_token(USAGE)) return true;
     return false;
   }
 
   final private boolean jj_3_1135() {
-    if (jj_scan_token(UPSERT)) return true;
+    if (jj_scan_token(UNKNOWN)) return true;
     return false;
   }
 
   final private boolean jj_3_1134() {
-    if (jj_scan_token(UNIQUE)) return true;
+    if (jj_scan_token(UESCAPE)) return true;
     return false;
   }
 
   final private boolean jj_3_1133() {
-    if (jj_scan_token(TRUNCATE)) return true;
+    if (jj_scan_token(TRIM_ARRAY)) return true;
     return false;
   }
 
   final private boolean jj_3_1132() {
-    if (jj_scan_token(TRIM)) return true;
+    if (jj_scan_token(TREAT)) return true;
     return false;
   }
 
   final private boolean jj_3_1131() {
-    if (jj_scan_token(TRANSLATION)) return true;
+    if (jj_scan_token(TRANSLATE)) return true;
     return false;
   }
 
   final private boolean jj_3_1130() {
-    if (jj_scan_token(TRANSACTION)) return true;
+    if (jj_scan_token(TO)) return true;
     return false;
   }
 
   final private boolean jj_3_1129() {
-    if (jj_scan_token(TINYINT)) return true;
+    if (jj_scan_token(TIMEZONE_HOUR)) return true;
     return false;
   }
 
   final private boolean jj_3_1128() {
-    if (jj_scan_token(TEMPORARY)) return true;
+    if (jj_scan_token(STRING_AGG)) return true;
     return false;
   }
 
   final private boolean jj_3_1127() {
-    if (jj_scan_token(SYSTEM_USER)) return true;
+    if (jj_scan_token(SYSTEM)) return true;
     return false;
   }
 
   final private boolean jj_3_1126() {
-    if (jj_scan_token(SYMMETRIC)) return true;
+    if (jj_scan_token(SUCCEEDS)) return true;
     return false;
   }
 
   final private boolean jj_3_1125() {
-    if (jj_scan_token(SUBSTRING_REGEX)) return true;
+    if (jj_scan_token(SUBSET)) return true;
     return false;
   }
 
   final private boolean jj_3_1124() {
-    if (jj_scan_token(SUBMULTISET)) return true;
+    if (jj_scan_token(STDDEV_POP)) return true;
     return false;
   }
 
   final private boolean jj_3_1123() {
-    if (jj_scan_token(STATIC)) return true;
+    if (jj_scan_token(START)) return true;
     return false;
   }
 
   final private boolean jj_3_1122() {
-    if (jj_scan_token(SQRT)) return true;
+    if (jj_scan_token(SQLSTATE)) return true;
     return false;
   }
 
@@ -23021,32 +23055,32 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1121() {
-    if (jj_scan_token(SQLEXCEPTION)) return true;
+    if (jj_scan_token(SPECIFICTYPE)) return true;
     return false;
   }
 
   final private boolean jj_3_1120() {
-    if (jj_scan_token(SPECIFIC)) return true;
+    if (jj_scan_token(SMALLINT)) return true;
     return false;
   }
 
   final private boolean jj_3_1119() {
-    if (jj_scan_token(SIZE)) return true;
+    if (jj_scan_token(SHOW)) return true;
     return false;
   }
 
   final private boolean jj_3_1118() {
-    if (jj_scan_token(SESSION_USER)) return true;
+    if (jj_scan_token(SENSITIVE)) return true;
     return false;
   }
 
   final private boolean jj_3_1117() {
-    if (jj_scan_token(SEEK)) return true;
+    if (jj_scan_token(SECOND)) return true;
     return false;
   }
 
   final private boolean jj_3_1116() {
-    if (jj_scan_token(SEARCH)) return true;
+    if (jj_scan_token(SCOPE)) return true;
     return false;
   }
 
@@ -23057,57 +23091,57 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1115() {
-    if (jj_scan_token(SCHEMA)) return true;
+    if (jj_scan_token(RUNNING)) return true;
     return false;
   }
 
   final private boolean jj_3_1114() {
-    if (jj_scan_token(ROW_NUMBER)) return true;
+    if (jj_scan_token(ROLLBACK)) return true;
     return false;
   }
 
   final private boolean jj_3_1113() {
-    if (jj_scan_token(ROLE)) return true;
+    if (jj_scan_token(RETURNS)) return true;
     return false;
   }
 
   final private boolean jj_3_1112() {
-    if (jj_scan_token(RETURN)) return true;
+    if (jj_scan_token(RESTRICT)) return true;
     return false;
   }
 
   final private boolean jj_3_1111() {
-    if (jj_scan_token(RESET)) return true;
+    if (jj_scan_token(RELEASE)) return true;
     return false;
   }
 
   final private boolean jj_3_1110() {
-    if (jj_scan_token(RELATIVE)) return true;
+    if (jj_scan_token(REGR_SXY)) return true;
     return false;
   }
 
   final private boolean jj_3_1109() {
-    if (jj_scan_token(REGR_SXX)) return true;
+    if (jj_scan_token(REGR_R2)) return true;
     return false;
   }
 
   final private boolean jj_3_1108() {
-    if (jj_scan_token(REGR_INTERCEPT)) return true;
+    if (jj_scan_token(REGR_AVGY)) return true;
     return false;
   }
 
   final private boolean jj_3_1107() {
-    if (jj_scan_token(REGR_AVGX)) return true;
+    if (jj_scan_token(REFERENCES)) return true;
     return false;
   }
 
   final private boolean jj_3_1106() {
-    if (jj_scan_token(REF)) return true;
+    if (jj_scan_token(REAL)) return true;
     return false;
   }
 
   final private boolean jj_3_1105() {
-    if (jj_scan_token(READS)) return true;
+    if (jj_scan_token(RANK)) return true;
     return false;
   }
 
@@ -23118,27 +23152,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1104() {
-    if (jj_scan_token(QUARTER)) return true;
+    if (jj_scan_token(PROCEDURE)) return true;
     return false;
   }
 
   final private boolean jj_3_1103() {
-    if (jj_scan_token(PRIVILEGES)) return true;
+    if (jj_scan_token(PREV)) return true;
     return false;
   }
 
   final private boolean jj_3_1102() {
-    if (jj_scan_token(PRESERVE)) return true;
+    if (jj_scan_token(PRECISION)) return true;
     return false;
   }
 
   final private boolean jj_3_1101() {
-    if (jj_scan_token(PRECEDES)) return true;
+    if (jj_scan_token(POSITION_REGEX)) return true;
     return false;
   }
 
   final private boolean jj_3_1100() {
-    if (jj_scan_token(POSITION)) return true;
+    if (jj_scan_token(PERMUTE)) return true;
     return false;
   }
 
@@ -23148,37 +23182,37 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1099() {
-    if (jj_scan_token(PERIOD)) return true;
+    if (jj_scan_token(PERCENTILE_DISC)) return true;
     return false;
   }
 
   final private boolean jj_3_1098() {
-    if (jj_scan_token(PERCENTILE_CONT)) return true;
+    if (jj_scan_token(PER)) return true;
     return false;
   }
 
   final private boolean jj_3_1097() {
-    if (jj_scan_token(PATH)) return true;
+    if (jj_scan_token(PARAMETER)) return true;
     return false;
   }
 
   final private boolean jj_3_1096() {
-    if (jj_scan_token(PAD)) return true;
+    if (jj_scan_token(OVERLAPS)) return true;
     return false;
   }
 
   final private boolean jj_3_1095() {
-    if (jj_scan_token(OUTPUT)) return true;
+    if (jj_scan_token(ORDINALITY)) return true;
     return false;
   }
 
   final private boolean jj_3_1094() {
-    if (jj_scan_token(OR)) return true;
+    if (jj_scan_token(OPEN)) return true;
     return false;
   }
 
   final private boolean jj_3_1093() {
-    if (jj_scan_token(ONLY)) return true;
+    if (jj_scan_token(OMIT)) return true;
     return false;
   }
 
@@ -23188,7 +23222,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1092() {
-    if (jj_scan_token(OLD)) return true;
+    if (jj_scan_token(OCTET_LENGTH)) return true;
     return false;
   }
 
@@ -23204,17 +23238,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1091() {
-    if (jj_scan_token(OCCURRENCES_REGEX)) return true;
+    if (jj_scan_token(NUMERIC)) return true;
     return false;
   }
 
   final private boolean jj_3_1090() {
-    if (jj_scan_token(NULLIF)) return true;
+    if (jj_scan_token(NTH_VALUE)) return true;
     return false;
   }
 
   final private boolean jj_3_1089() {
-    if (jj_scan_token(NOT)) return true;
+    if (jj_scan_token(NONE)) return true;
     return false;
   }
 
@@ -23224,17 +23258,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1088() {
-    if (jj_scan_token(NO)) return true;
+    if (jj_scan_token(NCHAR)) return true;
     return false;
   }
 
   final private boolean jj_3_1087() {
-    if (jj_scan_token(NATIONAL)) return true;
+    if (jj_scan_token(NAME)) return true;
     return false;
   }
 
   final private boolean jj_3_1086() {
-    if (jj_scan_token(MULTISET)) return true;
+    if (jj_scan_token(MODULE)) return true;
     return false;
   }
 
@@ -23245,12 +23279,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1085() {
-    if (jj_scan_token(MODIFIES)) return true;
+    if (jj_scan_token(MINUTE)) return true;
     return false;
   }
 
   final private boolean jj_3_1084() {
-    if (jj_scan_token(MIN)) return true;
+    if (jj_scan_token(MEMBER)) return true;
     return false;
   }
 
@@ -23264,12 +23298,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1083() {
-    if (jj_scan_token(MEASURES)) return true;
+    if (jj_scan_token(MATCH_NUMBER)) return true;
     return false;
   }
 
   final private boolean jj_3_1082() {
-    if (jj_scan_token(MATCHES)) return true;
+    if (jj_scan_token(MAP)) return true;
     return false;
   }
 
@@ -23283,7 +23317,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1081() {
-    if (jj_scan_token(M)) return true;
+    if (jj_scan_token(LOCATOR)) return true;
     return false;
   }
 
@@ -23296,7 +23330,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1080() {
-    if (jj_scan_token(LOCALTIMESTAMP)) return true;
+    if (jj_scan_token(LOCAL)) return true;
     return false;
   }
 
@@ -23310,12 +23344,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1079() {
-    if (jj_scan_token(LN)) return true;
+    if (jj_scan_token(LIKE)) return true;
     return false;
   }
 
   final private boolean jj_3_1078() {
-    if (jj_scan_token(LEVEL)) return true;
+    if (jj_scan_token(LEADING)) return true;
     return false;
   }
 
@@ -23326,17 +23360,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1077() {
-    if (jj_scan_token(LEAD)) return true;
+    if (jj_scan_token(LAST)) return true;
     return false;
   }
 
   final private boolean jj_3_1076() {
-    if (jj_scan_token(LARGE)) return true;
+    if (jj_scan_token(LAG)) return true;
     return false;
   }
 
   final private boolean jj_3_1075() {
-    if (jj_scan_token(KEY)) return true;
+    if (jj_scan_token(JSON_VALUE)) return true;
     return false;
   }
 
@@ -23346,22 +23380,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1074() {
-    if (jj_scan_token(JSON_QUERY)) return true;
+    if (jj_scan_token(JSON_OBJECT)) return true;
     return false;
   }
 
   final private boolean jj_3_1073() {
-    if (jj_scan_token(JSON_EXISTS)) return true;
+    if (jj_scan_token(JSON_ARRAY)) return true;
     return false;
   }
 
   final private boolean jj_3_1072() {
-    if (jj_scan_token(ISOLATION)) return true;
+    if (jj_scan_token(INTERSECTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1071() {
-    if (jj_scan_token(INTEGER)) return true;
+    if (jj_scan_token(INSENSITIVE)) return true;
     return false;
   }
 
@@ -23371,7 +23405,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1070() {
-    if (jj_scan_token(INPUT)) return true;
+    if (jj_scan_token(INITIALLY)) return true;
     return false;
   }
 
@@ -23398,7 +23432,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1069() {
-    if (jj_scan_token(INITIAL)) return true;
+    if (jj_scan_token(IMPORT)) return true;
     return false;
   }
 
@@ -23408,32 +23442,32 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1068() {
-    if (jj_scan_token(IMMEDIATELY)) return true;
+    if (jj_scan_token(IDENTITY)) return true;
     return false;
   }
 
   final private boolean jj_3_1067() {
-    if (jj_scan_token(HOUR)) return true;
+    if (jj_scan_token(GROUPS)) return true;
     return false;
   }
 
   final private boolean jj_3_1066() {
-    if (jj_scan_token(GOTO)) return true;
+    if (jj_scan_token(GLOBAL)) return true;
     return false;
   }
 
   final private boolean jj_3_1065() {
-    if (jj_scan_token(GET)) return true;
+    if (jj_scan_token(G)) return true;
     return false;
   }
 
   final private boolean jj_3_1064() {
-    if (jj_scan_token(FUSION)) return true;
+    if (jj_scan_token(FREE)) return true;
     return false;
   }
 
   final private boolean jj_3_1063() {
-    if (jj_scan_token(FRAME_ROW)) return true;
+    if (jj_scan_token(FOREIGN)) return true;
     return false;
   }
 
@@ -23443,7 +23477,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1062() {
-    if (jj_scan_token(FOR)) return true;
+    if (jj_scan_token(FLOAT)) return true;
     return false;
   }
 
@@ -23452,12 +23486,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1061() {
-    if (jj_scan_token(FIRST_VALUE)) return true;
+    if (jj_scan_token(FILTER)) return true;
     return false;
   }
 
   final private boolean jj_3_1060() {
-    if (jj_scan_token(FALSE)) return true;
+    if (jj_scan_token(EXTERNAL)) return true;
     return false;
   }
 
@@ -23477,17 +23511,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1059() {
-    if (jj_scan_token(EXTEND)) return true;
+    if (jj_scan_token(EXISTS)) return true;
     return false;
   }
 
   final private boolean jj_3_1058() {
-    if (jj_scan_token(EXECUTE)) return true;
+    if (jj_scan_token(EXCEPTION)) return true;
     return false;
   }
 
   final private boolean jj_3_1057() {
-    if (jj_scan_token(EVERY)) return true;
+    if (jj_scan_token(EQUALS)) return true;
     return false;
   }
 
@@ -23497,27 +23531,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1056() {
-    if (jj_scan_token(END_PARTITION)) return true;
+    if (jj_scan_token(END)) return true;
     return false;
   }
 
   final private boolean jj_3_1055() {
-    if (jj_scan_token(EMPTY)) return true;
+    if (jj_scan_token(ELEMENT)) return true;
     return false;
   }
 
   final private boolean jj_3_1054() {
-    if (jj_scan_token(EACH)) return true;
+    if (jj_scan_token(DOUBLE)) return true;
     return false;
   }
 
   final private boolean jj_3_1053() {
-    if (jj_scan_token(DOMAIN)) return true;
+    if (jj_scan_token(DISALLOW)) return true;
     return false;
   }
 
   final private boolean jj_3_1052() {
-    if (jj_scan_token(DIAGNOSTICS)) return true;
+    if (jj_scan_token(DESCRIPTOR)) return true;
     return false;
   }
 
@@ -23527,7 +23561,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1051() {
-    if (jj_scan_token(DESC)) return true;
+    if (jj_scan_token(DEPTH)) return true;
     return false;
   }
 
@@ -23537,22 +23571,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1050() {
-    if (jj_scan_token(DENSE_RANK)) return true;
+    if (jj_scan_token(DEFERRABLE)) return true;
     return false;
   }
 
   final private boolean jj_3_1049() {
-    if (jj_scan_token(DECLARE)) return true;
+    if (jj_scan_token(DEC)) return true;
     return false;
   }
 
   final private boolean jj_3_1048() {
-    if (jj_scan_token(DEALLOCATE)) return true;
+    if (jj_scan_token(DATE)) return true;
     return false;
   }
 
   final private boolean jj_3_1047() {
-    if (jj_scan_token(DATA)) return true;
+    if (jj_scan_token(CURRENT_USER)) return true;
     return false;
   }
 
@@ -23577,27 +23611,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1046() {
-    if (jj_scan_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE)) return true;
+    if (jj_scan_token(CURRENT_TIME)) return true;
     return false;
   }
 
   final private boolean jj_3_1045() {
-    if (jj_scan_token(CURRENT_SCHEMA)) return true;
+    if (jj_scan_token(CURRENT_ROLE)) return true;
     return false;
   }
 
   final private boolean jj_3_1044() {
-    if (jj_scan_token(CURRENT_PATH)) return true;
+    if (jj_scan_token(CURRENT_DATE)) return true;
     return false;
   }
 
   final private boolean jj_3_1043() {
-    if (jj_scan_token(CURRENT_CATALOG)) return true;
+    if (jj_scan_token(CUBE)) return true;
     return false;
   }
 
   final private boolean jj_3_1042() {
-    if (jj_scan_token(COVAR_SAMP)) return true;
+    if (jj_scan_token(COUNT)) return true;
     return false;
   }
 
@@ -23630,37 +23664,37 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1041() {
-    if (jj_scan_token(CORRESPONDING)) return true;
+    if (jj_scan_token(CONVERT)) return true;
     return false;
   }
 
   final private boolean jj_3_1040() {
-    if (jj_scan_token(CONTINUE)) return true;
+    if (jj_scan_token(CONSTRUCTOR)) return true;
     return false;
   }
 
   final private boolean jj_3_1039() {
-    if (jj_scan_token(CONSTRAINTS)) return true;
+    if (jj_scan_token(CONNECT)) return true;
     return false;
   }
 
   final private boolean jj_3_1038() {
-    if (jj_scan_token(CONDITION)) return true;
+    if (jj_scan_token(COLUMN)) return true;
     return false;
   }
 
   final private boolean jj_3_1037() {
-    if (jj_scan_token(COLLECT)) return true;
+    if (jj_scan_token(COLLATE)) return true;
     return false;
   }
 
   final private boolean jj_3_1036() {
-    if (jj_scan_token(COALESCE)) return true;
+    if (jj_scan_token(CLOB)) return true;
     return false;
   }
 
   final private boolean jj_3_1035() {
-    if (jj_scan_token(CLASSIFIER)) return true;
+    if (jj_scan_token(CHAR_LENGTH)) return true;
     return false;
   }
 
@@ -23670,22 +23704,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1034() {
-    if (jj_scan_token(CHARACTER_LENGTH)) return true;
+    if (jj_scan_token(CHAR)) return true;
     return false;
   }
 
   final private boolean jj_3_1033() {
-    if (jj_scan_token(CEILING)) return true;
+    if (jj_scan_token(CATALOG)) return true;
     return false;
   }
 
   final private boolean jj_3_1032() {
-    if (jj_scan_token(CAST)) return true;
+    if (jj_scan_token(CASCADE)) return true;
     return false;
   }
 
   final private boolean jj_3_1031() {
-    if (jj_scan_token(CARDINALITY)) return true;
+    if (jj_scan_token(C)) return true;
     return false;
   }
 
@@ -23695,22 +23729,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1030() {
-    if (jj_scan_token(BY)) return true;
+    if (jj_scan_token(BOTH)) return true;
     return false;
   }
 
   final private boolean jj_3_1029() {
-    if (jj_scan_token(BOOLEAN)) return true;
+    if (jj_scan_token(BIT)) return true;
     return false;
   }
 
   final private boolean jj_3_1028() {
-    if (jj_scan_token(BINARY)) return true;
+    if (jj_scan_token(BETWEEN)) return true;
     return false;
   }
 
   final private boolean jj_3_1027() {
-    if (jj_scan_token(BEGIN_PARTITION)) return true;
+    if (jj_scan_token(BEGIN)) return true;
     return false;
   }
 
@@ -23720,12 +23754,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1026() {
-    if (jj_scan_token(BEFORE)) return true;
+    if (jj_scan_token(AUTHORIZATION)) return true;
     return false;
   }
 
   final private boolean jj_3_1025() {
-    if (jj_scan_token(ATOMIC)) return true;
+    if (jj_scan_token(ASYMMETRIC)) return true;
     return false;
   }
 
@@ -23742,12 +23776,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_1024() {
-    if (jj_scan_token(ASSERTION)) return true;
+    if (jj_scan_token(ASC)) return true;
     return false;
   }
 
   final private boolean jj_3_1023() {
-    if (jj_scan_token(AS)) return true;
+    if (jj_scan_token(ARRAY_CONCAT_AGG)) return true;
     return false;
   }
 
@@ -31820,7 +31854,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
    private static void jj_la1_24() {
       jj_la1_24 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
-  final private JJCalls[] jj_2_rtns = new JJCalls[1404];
+  final private JJCalls[] jj_2_rtns = new JJCalls[1406];
   private boolean jj_rescan = false;
   private int jj_gc = 0;
 
@@ -32109,7 +32143,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final private void jj_rescan_token() {
     jj_rescan = true;
-    for (int i = 0; i < 1404; i++) {
+    for (int i = 0; i < 1406; i++) {
     try {
       JJCalls p = jj_2_rtns[i];
       do {
@@ -33520,6 +33554,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             case 1401: jj_3_1402(); break;
             case 1402: jj_3_1403(); break;
             case 1403: jj_3_1404(); break;
+            case 1404: jj_3_1405(); break;
+            case 1405: jj_3_1406(); break;
           }
         }
         p = p.next;
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/StdSqlOperatorsTest.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/StdSqlOperatorsTest.java
index d92faa8c6e9..ddbdb0b4635 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/StdSqlOperatorsTest.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/StdSqlOperatorsTest.java
@@ -23,10 +23,11 @@ import java.sql.Timestamp;
 import java.time.Period;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 import org.apache.ignite.internal.processors.query.calcite.QueryChecker;
 import org.apache.ignite.internal.processors.query.calcite.sql.fun.IgniteStdSqlOperatorTable;
 import org.apache.ignite.internal.util.typedef.F;
-import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -101,6 +102,10 @@ public class StdSqlOperatorsTest extends AbstractBasicIntegrationTest {
         assertExpression("LISTAGG(val, ',') WITHIN GROUP (ORDER BY val DESC)").returns("1").check();
         assertExpression("GROUP_CONCAT(val, ',' ORDER BY val DESC)").returns("1").check();
         assertExpression("STRING_AGG(val, ',' ORDER BY val DESC)").returns("1").check();
+        assertExpression("ARRAY_AGG(val ORDER BY val DESC)").returns(Collections.singletonList(1)).check();
+        assertQuery("SELECT ARRAY_CONCAT_AGG(a ORDER BY CARDINALITY(a)) FROM " +
+            "(SELECT 1 as id, ARRAY[3, 4, 5, 6] as a UNION SELECT 1 as id, ARRAY[1, 2] as a) GROUP BY id")
+            .returns((IntStream.range(1, 7).boxed().collect(Collectors.toList()))).check();
     }
 
     /** */
@@ -254,6 +259,8 @@ public class StdSqlOperatorsTest extends AbstractBasicIntegrationTest {
     /** */
     @Test
     public void testCollections() {
+        assertExpression("MAP(SELECT 'a', 1)").returns(F.asMap("a", 1)).check();
+        assertExpression("ARRAY(SELECT 1)").returns(Collections.singletonList(1)).check();
         assertExpression("MAP['a', 1, 'A', 2]").returns(F.asMap("a", 1, "A", 2)).check();
         assertExpression("ARRAY[1, 2, 3]").returns(Arrays.asList(1, 2, 3)).check();
         assertExpression("ARRAY[1, 2, 3][2]").returns(2).check();
@@ -262,14 +269,6 @@ public class StdSqlOperatorsTest extends AbstractBasicIntegrationTest {
         assertExpression("ARRAY[1, 2, 3] IS NOT EMPTY").returns(true).check();
     }
 
-    /** */
-    @Test
-    @Ignore("https://issues.apache.org/jira/browse/IGNITE-15550")
-    public void testQueryAsCollections() {
-        assertExpression("MAP(SELECT 'a', 1)").returns(F.asMap("a", 1)).check();
-        assertExpression("ARRAY(SELECT 1)").returns(Collections.singletonList(1)).check();
-    }
-
     /** */
     @Test
     public void testOtherFunctions() {
diff --git a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/logical/SqlScriptRunner.java b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/logical/SqlScriptRunner.java
index 7f34495f08c..4c26c83e5da 100644
--- a/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/logical/SqlScriptRunner.java
+++ b/modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/logical/SqlScriptRunner.java
@@ -37,9 +37,10 @@ import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Objects;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-
+import java.util.stream.Collectors;
 import com.google.common.collect.ImmutableSet;
 import org.apache.calcite.avatica.util.ByteString;
 import org.apache.ignite.IgniteException;
@@ -174,10 +175,24 @@ public class SqlScriptRunner {
     private static String toString(Object res) {
         if (res instanceof byte[])
             return ByteString.toString((byte[])res, 16);
+        else if (res instanceof Map)
+            return mapToString((Map<?, ?>)res);
         else
             return String.valueOf(res);
     }
 
+    /** */
+    private static String mapToString(Map<?, ?> map) {
+        if (map == null)
+            return NULL;
+
+        List<String> entries = (new TreeMap<>(map)).entrySet().stream()
+            .map(e -> toString(e.getKey()) + ":" + toString(e.getValue()))
+            .collect(Collectors.toList());
+
+        return "{" + String.join(", ", entries) + "}";
+    }
+
     /** */
     private class Script implements Iterable<Command>, AutoCloseable {
         /** Reader. */
@@ -678,6 +693,12 @@ public class SqlScriptRunner {
                         throw new AssertionError(msg);
                 }
             }
+            else if (actual instanceof Map) {
+                String actualStr = mapToString((Map<? extends Comparable, ?>)actual);
+
+                if (!expectedStr.equals(actualStr))
+                    throw new AssertionError(msg);
+            }
             else {
                 if (!String.valueOf(expectedStr).equals(SqlScriptRunner.toString(actual)) &&
                     !("(empty)".equals(expectedStr) && SqlScriptRunner.toString(actual).isEmpty()))
diff --git a/modules/calcite/src/test/sql/types/collections/array.test b/modules/calcite/src/test/sql/types/collections/array.test
new file mode 100644
index 00000000000..c3802368139
--- /dev/null
+++ b/modules/calcite/src/test/sql/types/collections/array.test
@@ -0,0 +1,23 @@
+# name: test/sql/types/collections/array.test
+# description: Test ARRAY creation query
+# group: [collections]
+
+query T
+SELECT ARRAY(SELECT * FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3))
+----
+[1, 2, 3]
+
+query T
+SELECT ARRAY(SELECT * FROM (SELECT NULL UNION ALL SELECT NULL UNION ALL SELECT NULL))
+----
+[null, null, null]
+
+query T
+SELECT ARRAY(SELECT * FROM (SELECT 1) T(a) WHERE a > 1)
+----
+[]
+
+query T
+SELECT ARRAY[1, 2, 3]
+----
+[1, 2, 3]
diff --git a/modules/calcite/src/test/sql/types/collections/array_agg.test b/modules/calcite/src/test/sql/types/collections/array_agg.test
new file mode 100644
index 00000000000..1727c4742de
--- /dev/null
+++ b/modules/calcite/src/test/sql/types/collections/array_agg.test
@@ -0,0 +1,84 @@
+# name: test/sql/types/collections/array_agg.test
+# description: Test ARRAY_AGG and ARRAY_CONCAT_AGG function
+# group: [collections]
+
+# scalar ARRAY_AGG
+query II
+SELECT ARRAY_AGG(NULL), ARRAY_AGG(42)
+----
+[null]	[42]
+
+# simple ARRAY_AGG
+query I
+SELECT ARRAY_AGG(i) FROM TABLE(SYSTEM_RANGE(0, 2)) TBL(i)
+----
+[0, 1, 2]
+
+# empty ARRAY_AGG
+query I
+SELECT ARRAY_AGG(i) FROM TABLE(SYSTEM_RANGE(1, 0)) TBL(i)
+----
+NULL
+
+# ARRAY_CONCAT_AGG with NULL
+query I
+SELECT ARRAY_CONCAT_AGG(a) FROM (SELECT ARRAY[1, 2, 3] UNION ALL SELECT NULL) T(a)
+----
+[1, 2, 3]
+
+# ARRAY_CONCAT_AGG with ARRAY[NULL]
+query I
+SELECT ARRAY_CONCAT_AGG(a) FROM (SELECT ARRAY[1, 2, 3] UNION ALL SELECT ARRAY[NULL]) T(a)
+----
+[1, 2, 3, null]
+
+# ARRAY_CONCAT_AGG with NULL array
+query I
+SELECT ARRAY_CONCAT_AGG(a) FROM (SELECT ARRAY[1, 2, 3] UNION ALL SELECT ARRAY_AGG(i) FROM TABLE(SYSTEM_RANGE(1, 0)) TBL(i)) T(a)
+----
+[1, 2, 3]
+
+# ARRAY_CONCAT_AGG with empty array
+query I
+SELECT ARRAY_CONCAT_AGG(a) FROM (SELECT ARRAY(SELECT * FROM TABLE(SYSTEM_RANGE(1, 3))) UNION ALL SELECT ARRAY(SELECT * FROM TABLE(SYSTEM_RANGE(1, 0)))) T(a)
+----
+[1, 2, 3]
+
+# empty ARRAY_CONCAT_AGG
+query I
+SELECT ARRAY_CONCAT_AGG(a) FROM (SELECT arr FROM (SELECT 1 AS id, ARRAY[1, 2, 3] AS arr) T(id, arr) WHERE id > 1) T1(a)
+----
+NULL
+
+statement ok
+CREATE TABLE T1 (a INTEGER, b INTEGER, c INTEGER);
+
+statement ok
+INSERT INTO T1 VALUES (11, 22, 1), (11, 10, 2), (12, 21, 3);
+
+query T
+SELECT ARRAY_AGG(b ORDER BY b) as c FROM T1 GROUP BY a ORDER BY a
+----
+[10, 22]
+[21]
+
+query T
+SELECT ARRAY_AGG(b ORDER BY c) as c FROM T1 GROUP BY a ORDER BY a
+----
+[22, 10]
+[21]
+
+query T
+SELECT ARRAY_CONCAT_AGG(a) FROM (SELECT 1 as id, ARRAY[1, 2, 3] as a UNION SELECT 1 as id, ARRAY[4, 5, 6] as a) GROUP BY id
+----
+[1, 2, 3, 4, 5, 6]
+
+query T
+SELECT ARRAY_CONCAT_AGG(a ORDER BY rate DESC) FROM (SELECT 1 as id, ARRAY[10, 2, 24] as a, 2 as rate UNION SELECT 1 as id, ARRAY[4, 5, 2] as a, 1 as rate) GROUP BY id
+----
+[10, 2, 24, 4, 5, 2]
+
+query T
+SELECT ARRAY_CONCAT_AGG(a ORDER BY CARDINALITY(a)) FROM (SELECT 1 as id, ARRAY[3, 7, 2, 5] as a UNION SELECT 1 as id, ARRAY[2, 0] as a) GROUP BY id
+----
+[2, 0, 3, 7, 2, 5]
diff --git a/modules/calcite/src/test/sql/types/list/array_agg.test_ignore b/modules/calcite/src/test/sql/types/collections/array_agg.test_slow
similarity index 61%
rename from modules/calcite/src/test/sql/types/list/array_agg.test_ignore
rename to modules/calcite/src/test/sql/types/collections/array_agg.test_slow
index c98ac28a9ac..4958c73f51e 100644
--- a/modules/calcite/src/test/sql/types/list/array_agg.test_ignore
+++ b/modules/calcite/src/test/sql/types/collections/array_agg.test_slow
@@ -1,25 +1,6 @@
-# name: test/sql/types/list/array_agg.test
-# description: Test array_agg function
-# group: [list]
-# Ignore https://issues.apache.org/jira/browse/IGNITE-15620
-
-# scalar array agg
-query II
-SELECT ARRAY_AGG(NULL), ARRAY_AGG(42)
-----
-[NULL]	[42]
-
-# simple array agg
-query I
-SELECT ARRAY_AGG(i) FROM range(0, 3) tbl(i)
-----
-[0, 1, 2]
-
-# empty array agg
-query I
-SELECT ARRAY_AGG(i) FROM range(0, 0) tbl(i)
-----
-NULL
+# name: test/sql/types/collections/array_agg.test_slow
+# description: Test ARRAY_AGG function, slow tests
+# group: [collections]
 
 statement ok
 CREATE TABLE films(film_id INTEGER, title VARCHAR)
@@ -34,8 +15,7 @@ statement ok
 INSERT INTO films VALUES (1, 'The Martian'), (2, 'Saving Private Ryan'), (3, 'Team America');
 
 statement ok
-INSERT INTO actors VALUES (1, 'Matt', 'Damon'), (2, 'Jessica', 'Chastain'), (3, 'Tom', 'Hanks'), (4, 'Edward', 'Burns'),
-						  (5, 'Kim', 'Jong Un'), (6, 'Alec', 'Baldwin');
+INSERT INTO actors VALUES (1, 'Matt', 'Damon'), (2, 'Jessica', 'Chastain'), (3, 'Tom', 'Hanks'), (4, 'Edward', 'Burns'), (5, 'Kim', 'Jong Un'), (6, 'Alec', 'Baldwin');
 
 statement ok
 INSERT INTO film_actor VALUES (1, 1), (2, 1), (3, 1), (1, 2), (2, 3), (2, 4), (3, 5), (3, 6);
@@ -46,7 +26,7 @@ SELECT
 	ARRAY_AGG (
 	CASE WHEN first_name='Matt' and title='Team America'
 	THEN 'MATT DAAAMON'
-	ELSE first_name || ' ' || last_name END) actors
+	ELSE first_name || ' ' || last_name END ORDER BY actor_id) actors
 FROM films
 JOIN film_actor USING (film_id)
 JOIN actors USING (actor_id)
diff --git a/modules/calcite/src/test/sql/types/list/list.test_slow_ignore b/modules/calcite/src/test/sql/types/collections/list.test_slow_ignore
similarity index 77%
rename from modules/calcite/src/test/sql/types/list/list.test_slow_ignore
rename to modules/calcite/src/test/sql/types/collections/list.test_slow_ignore
index 73530d1c30b..f3f483b1165 100644
--- a/modules/calcite/src/test/sql/types/list/list.test_slow_ignore
+++ b/modules/calcite/src/test/sql/types/collections/list.test_slow_ignore
@@ -1,6 +1,6 @@
-# name: test/sql/types/list/list.test_slow
+# name: test/sql/types/collections/list.test_slow
 # description: Test big list
-# group: [list]
+# group: [collections]
 # Ignore https://issues.apache.org/jira/browse/IGNITE-16417
 
 statement ok
diff --git a/modules/calcite/src/test/sql/types/list/list_aggregates.test_ignore b/modules/calcite/src/test/sql/types/collections/list_aggregates.test_ignore
similarity index 94%
rename from modules/calcite/src/test/sql/types/list/list_aggregates.test_ignore
rename to modules/calcite/src/test/sql/types/collections/list_aggregates.test_ignore
index 7407b2ea6ec..8427643512d 100644
--- a/modules/calcite/src/test/sql/types/list/list_aggregates.test_ignore
+++ b/modules/calcite/src/test/sql/types/collections/list_aggregates.test_ignore
@@ -1,6 +1,6 @@
-# name: test/sql/types/list/list_aggregates.test
+# name: test/sql/types/collections/list_aggregates.test
 # description: Test lists with aggregations
-# group: [list]
+# group: [collections]
 # Ignore https://issues.apache.org/jira/browse/IGNITE-16417
 
 query II
diff --git a/modules/calcite/src/test/sql/types/collections/map.test b/modules/calcite/src/test/sql/types/collections/map.test
new file mode 100644
index 00000000000..7988ff60393
--- /dev/null
+++ b/modules/calcite/src/test/sql/types/collections/map.test
@@ -0,0 +1,21 @@
+# name: test/sql/types/collections/map.test
+# description: Test MAP query
+# group: [collect]
+
+query T
+SELECT MAP(SELECT * FROM (SELECT 1, 'test1' UNION SELECT 2, 'test2' UNION SELECT 3, 'test3'))
+----
+{1:test1, 2:test2, 3:test3}
+
+statement ok
+CREATE TABLE T1 (a INTEGER, b INTEGER);
+
+statement ok
+INSERT INTO T1 VALUES (11, 22), (11, 10), (12, 21);
+
+query T
+SELECT MAP(SELECT b, b+1 FROM t1 t1_1 WHERE t1_1.a = t1_2.a) FROM t1 t1_2 ORDER BY a
+----
+{10:11, 22:23}
+{10:11, 22:23}
+{21:22}