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/08/24 07:54:36 UTC

[ignite] branch master updated: IGNITE-15455 SQL Calcite: Add support for statistics sql commands (#10205)

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 9b90f4e8159 IGNITE-15455 SQL Calcite: Add support for statistics sql commands (#10205)
9b90f4e8159 is described below

commit 9b90f4e8159f437937c05520dc0dbbff0d949604
Author: Ivan Daschinskiy <iv...@apache.org>
AuthorDate: Wed Aug 24 10:54:28 2022 +0300

    IGNITE-15455 SQL Calcite: Add support for statistics sql commands (#10205)
---
 modules/calcite/src/main/codegen/config.fmpp       |    16 +-
 .../src/main/codegen/includes/parserImpls.ftl      |   141 +-
 .../prepare/ddl/SqlToNativeCommandConverter.java   |    50 +-
 .../query/calcite/sql/IgniteSqlCreateTable.java    |    37 -
 .../calcite/sql/IgniteSqlCreateTableOption.java    |    78 +-
 ...CreateTableOption.java => IgniteSqlOption.java} |    96 +-
 .../calcite/sql/generated/IgniteSqlParserImpl.java | 14914 ++++++++++---------
 .../generated/IgniteSqlParserImplConstants.java    |   146 +-
 .../generated/IgniteSqlParserImplTokenManager.java | 13733 ++++++++---------
 .../sql/stat/IgniteSqlStatisticsAnalyze.java       |    79 +
 .../sql/stat/IgniteSqlStatisticsAnalyzeOption.java |    50 +
 .../IgniteSqlStatisticsAnalyzeOptionEnum.java}     |    20 +-
 .../sql/stat/IgniteSqlStatisticsCommand.java       |    67 +
 .../calcite/sql/stat/IgniteSqlStatisticsDrop.java} |    19 +-
 .../sql/stat/IgniteSqlStatisticsRefresh.java}      |    19 +-
 .../calcite/sql/stat/IgniteSqlStatisticsTable.java |    99 +
 .../ServerStatisticsIntegrationTest.java           |    52 +-
 .../StatisticsCommandDdlIntegrationTest.java       |   382 +
 .../query/calcite/sql/SqlCustomParserTest.java     |   102 +-
 .../ignite/testsuites/IntegrationTestSuite.java    |     2 +
 .../query/QuerySysIndexDescriptorImpl.java         |     5 +-
 .../stat/IgniteStatisticsConfigurationManager.java |     2 +-
 .../internal/sql/command/SqlAnalyzeCommand.java    |    18 +
 .../sql/command/SqlDropStatisticsCommand.java      |    11 +
 .../sql/command/SqlRefreshStatitsicsCommand.java   |    11 +
 .../sql/command/SqlStatisticsCommands.java         |    17 +-
 26 files changed, 16079 insertions(+), 14087 deletions(-)

diff --git a/modules/calcite/src/main/codegen/config.fmpp b/modules/calcite/src/main/codegen/config.fmpp
index 10a98614c13..ed7720dd194 100644
--- a/modules/calcite/src/main/codegen/config.fmpp
+++ b/modules/calcite/src/main/codegen/config.fmpp
@@ -36,6 +36,7 @@ data: {
       "org.apache.ignite.lang.IgniteUuid",
       "org.apache.calcite.sql.ddl.SqlDdlNodes",
       "org.apache.ignite.internal.processors.query.calcite.sql.*",
+      "org.apache.ignite.internal.processors.query.calcite.sql.stat.*",
     ]
 
     # List of new keywords. Example: "DATABASES", "TABLES". If the keyword is
@@ -66,7 +67,12 @@ data: {
       "SERVICE"
       "COMPUTE"
       "ASYNC"
-      "QUERY"
+      "QUERY",
+      "STATISTICS",
+      "REFRESH",
+      "ANALYZE",
+      "MAX_CHANGED_PARTITION_ROWS_PERCENT",
+      "TOTAL"
     ]
 
     # List of non-reserved keywords to add;
@@ -96,6 +102,11 @@ data: {
       "COMPUTE"
       "ASYNC"
       "QUERY"
+      "STATISTICS",
+      "REFRESH",
+      "ANALYZE",
+      "MAX_CHANGED_PARTITION_ROWS_PERCENT",
+      "TOTAL",
 
       # The following keywords are reserved in core Calcite,
       # are reserved in some version of SQL,
@@ -621,6 +632,9 @@ data: {
       "SqlKillQuery()",
       "SqlCommitTransaction()",
       "SqlRollbackTransaction()"
+      "SqlStatisticsAnalyze()"
+      "SqlStatisticsRefresh()"
+      "SqlStatisticsDrop()"
     ]
 
     # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
diff --git a/modules/calcite/src/main/codegen/includes/parserImpls.ftl b/modules/calcite/src/main/codegen/includes/parserImpls.ftl
index 500e40a51b0..0ca3da5c619 100644
--- a/modules/calcite/src/main/codegen/includes/parserImpls.ftl
+++ b/modules/calcite/src/main/codegen/includes/parserImpls.ftl
@@ -35,7 +35,7 @@ SqlNodeList WithCreateTableOptionList() :
         (
             <QUOTED_IDENTIFIER>
             {
-                return IgniteSqlCreateTable.parseOptionList(
+                return IgniteSqlCreateTableOption.parseOptionList(
                     SqlParserUtil.stripQuotes(token.image, DQ, DQ, DQDQ, quotedCasing),
                     getPos().withQuoting(true)
                 );
@@ -584,7 +584,7 @@ SqlNode SqlKillQuery():
 }
 {
     <KILL> { s = span(); } <QUERY>
-    isAsync= IsAsyncOpt()
+    isAsync = IsAsyncOpt()
     <QUOTED_STRING> {
         String rawQueryId = SqlParserUtil.parseString(token.image);
         SqlCharStringLiteral queryIdLiteral = SqlLiteral.createCharString(rawQueryId, getPos());
@@ -615,3 +615,140 @@ SqlNode SqlRollbackTransaction():
         return new IgniteSqlRollback(s.end(this));
     }
 }
+
+IgniteSqlStatisticsTable StatisticsTable():
+{
+    final Span s = Span.of();
+    final SqlIdentifier id;
+    final SqlNodeList columnList;
+}
+{
+    id = CompoundIdentifier()
+    (
+        columnList = ParenthesizedSimpleIdentifierList()
+    |
+        { columnList = null; }
+    )
+    {
+        return new IgniteSqlStatisticsTable(id, columnList, s.end(this));
+    }
+}
+
+SqlNodeList StatisticsTables():
+{
+    final Span s = Span.of();
+    List<SqlNode> tbls = new ArrayList<SqlNode>();
+    SqlNode tbl;
+}
+{
+    tbl = StatisticsTable() { tbls.add(tbl); }
+    (
+        <COMMA> tbl = StatisticsTable() { tbls.add(tbl); }
+    )*
+    {
+        return new SqlNodeList(tbls, s.end(this));
+    }
+}
+
+SqlNodeList WithStatisticsAnalyzeOptionList() :
+{
+    List<SqlNode> list = new ArrayList<SqlNode>();
+    final Span s;
+}
+{
+    [
+        <WITH> { s = span(); }
+        (
+            StatisticsAnalyzeOption(list)
+            (
+                <COMMA> { s.add(this); } StatisticsAnalyzeOption(list)
+            )*
+            {
+                return new SqlNodeList(list, s.end(this));
+            }
+        |
+            <QUOTED_IDENTIFIER>
+            {
+                return IgniteSqlStatisticsAnalyzeOption.parseOptionList(
+                    SqlParserUtil.stripQuotes(token.image, DQ, DQ, DQDQ, quotedCasing),
+                    getPos().withQuoting(true)
+                );
+            }
+        )
+    ]
+    { return null; }
+}
+
+SqlLiteral StatisticsAnalyzeOptionKey() :
+{
+}
+{
+    <DISTINCT> { return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.DISTINCT, getPos()); }
+|
+    <TOTAL> { return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.TOTAL, getPos()); }
+|
+    <SIZE> { return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.SIZE, getPos()); }
+|
+    <NULLS> { return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.NULLS, getPos()); }
+|
+    <MAX_CHANGED_PARTITION_ROWS_PERCENT> { return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.MAX_CHANGED_PARTITION_ROWS_PERCENT, getPos()); }
+}
+
+void StatisticsAnalyzeOption(List<SqlNode> list) :
+{
+    final Span s;
+    final SqlLiteral key;
+    final SqlNode val;
+}
+{
+    key = StatisticsAnalyzeOptionKey() { s = span(); }
+    <EQ>
+    (
+        val = Literal()
+    |
+        val = SimpleIdentifier()
+    ) {
+        list.add(new IgniteSqlStatisticsAnalyzeOption(key, val, s.end(this)));
+    }
+}
+
+SqlNode SqlStatisticsDrop():
+{
+    final Span s;
+    SqlNodeList tablesList;
+}
+{
+    <DROP> <STATISTICS> { s = span(); }
+    tablesList = StatisticsTables()
+    {
+        return new IgniteSqlStatisticsDrop(tablesList, s.end(this));
+    }
+}
+
+SqlNode SqlStatisticsRefresh():
+{
+    final Span s;
+    SqlNodeList tablesList;
+}
+{
+    <REFRESH> <STATISTICS> { s = span(); }
+    tablesList = StatisticsTables()
+    {
+        return new IgniteSqlStatisticsRefresh(tablesList, s.end(this));
+    }
+}
+
+SqlNode SqlStatisticsAnalyze():
+{
+    final Span s;
+    SqlNodeList tablesList;
+    SqlNodeList optionsList;
+}
+{
+    <ANALYZE> { s = span(); }
+    tablesList = StatisticsTables()
+    optionsList = WithStatisticsAnalyzeOptionList()
+    {
+        return new IgniteSqlStatisticsAnalyze(tablesList, optionsList, s.end(this));
+    }
+}
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/SqlToNativeCommandConverter.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/SqlToNativeCommandConverter.java
index e8aee943ba7..78683aaccb7 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/SqlToNativeCommandConverter.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/SqlToNativeCommandConverter.java
@@ -19,7 +19,9 @@ package org.apache.ignite.internal.processors.query.calcite.prepare.ddl;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.UUID;
+import java.util.stream.Collectors;
 import org.apache.calcite.sql.SqlCall;
 import org.apache.calcite.sql.SqlDdl;
 import org.apache.calcite.sql.SqlIdentifier;
@@ -42,12 +44,19 @@ import org.apache.ignite.internal.processors.query.calcite.sql.kill.IgniteSqlKil
 import org.apache.ignite.internal.processors.query.calcite.sql.kill.IgniteSqlKillScanQuery;
 import org.apache.ignite.internal.processors.query.calcite.sql.kill.IgniteSqlKillService;
 import org.apache.ignite.internal.processors.query.calcite.sql.kill.IgniteSqlKillTransaction;
+import org.apache.ignite.internal.processors.query.calcite.sql.stat.IgniteSqlStatisticsAnalyze;
+import org.apache.ignite.internal.processors.query.calcite.sql.stat.IgniteSqlStatisticsCommand;
+import org.apache.ignite.internal.processors.query.calcite.sql.stat.IgniteSqlStatisticsDrop;
+import org.apache.ignite.internal.processors.query.calcite.sql.stat.IgniteSqlStatisticsRefresh;
+import org.apache.ignite.internal.processors.query.stat.StatisticsTarget;
 import org.apache.ignite.internal.sql.command.SqlAlterTableCommand;
 import org.apache.ignite.internal.sql.command.SqlAlterUserCommand;
+import org.apache.ignite.internal.sql.command.SqlAnalyzeCommand;
 import org.apache.ignite.internal.sql.command.SqlCommand;
 import org.apache.ignite.internal.sql.command.SqlCreateIndexCommand;
 import org.apache.ignite.internal.sql.command.SqlCreateUserCommand;
 import org.apache.ignite.internal.sql.command.SqlDropIndexCommand;
+import org.apache.ignite.internal.sql.command.SqlDropStatisticsCommand;
 import org.apache.ignite.internal.sql.command.SqlDropUserCommand;
 import org.apache.ignite.internal.sql.command.SqlIndexColumn;
 import org.apache.ignite.internal.sql.command.SqlKillComputeTaskCommand;
@@ -56,6 +65,8 @@ import org.apache.ignite.internal.sql.command.SqlKillQueryCommand;
 import org.apache.ignite.internal.sql.command.SqlKillScanQueryCommand;
 import org.apache.ignite.internal.sql.command.SqlKillServiceCommand;
 import org.apache.ignite.internal.sql.command.SqlKillTransactionCommand;
+import org.apache.ignite.internal.sql.command.SqlRefreshStatitsicsCommand;
+import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.lang.IgniteUuid;
 
 import static org.apache.ignite.internal.processors.query.calcite.util.PlanUtils.deriveObjectName;
@@ -75,7 +86,8 @@ public class SqlToNativeCommandConverter {
             || sqlCmd instanceof IgniteSqlCreateUser
             || sqlCmd instanceof IgniteSqlAlterUser
             || sqlCmd instanceof IgniteSqlDropUser
-            || sqlCmd instanceof IgniteSqlKill;
+            || sqlCmd instanceof IgniteSqlKill
+            || sqlCmd instanceof IgniteSqlStatisticsCommand;
     }
 
     /**
@@ -106,6 +118,8 @@ public class SqlToNativeCommandConverter {
             return convertDropUser((IgniteSqlDropUser)cmd, pctx);
         else if (cmd instanceof IgniteSqlKill)
             return convertKill((IgniteSqlKill)cmd, pctx);
+        else if (cmd instanceof IgniteSqlStatisticsCommand)
+            return convertStatistics((IgniteSqlStatisticsCommand)cmd, pctx);
 
         throw new IgniteSQLException("Unsupported native operation [" +
             "cmdName=" + (cmd == null ? null : cmd.getClass().getSimpleName()) + "; " +
@@ -226,4 +240,38 @@ public class SqlToNativeCommandConverter {
                 "querySql=\"" + pctx.query() + "\"]", IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
         }
     }
+
+    /** */
+    private static SqlCommand convertStatistics(IgniteSqlStatisticsCommand cmd, PlanningContext pctx) {
+        List<StatisticsTarget> targets = cmd.tables().stream().map(t -> {
+            String schemaName = deriveSchemaName(t.name(), pctx);
+            String tblName = deriveObjectName(t.name(), pctx, "table name");
+
+            if (F.isEmpty(t.columns()))
+                return new StatisticsTarget(schemaName, tblName);
+
+            String[] columns = t.columns().stream().map(SqlNode::toString).toArray(String[]::new);
+
+            return new StatisticsTarget(schemaName, tblName, columns);
+        }).collect(Collectors.toList());
+
+        if (cmd instanceof IgniteSqlStatisticsAnalyze) {
+            if (F.isEmpty(((IgniteSqlStatisticsAnalyze)cmd).options()))
+                return new SqlAnalyzeCommand(targets);
+
+            Map<String, String> params = ((IgniteSqlStatisticsAnalyze)cmd).options().stream().collect(
+                Collectors.toMap(o -> o.key().toString(), o -> o.value().toString()));
+
+            return new SqlAnalyzeCommand(targets, params);
+        }
+        else if (cmd instanceof IgniteSqlStatisticsRefresh)
+            return new SqlRefreshStatitsicsCommand(targets);
+        else if (cmd instanceof IgniteSqlStatisticsDrop)
+            return new SqlDropStatisticsCommand(targets);
+        else {
+            throw new IgniteSQLException("Unsupported native operation [" +
+                "cmdName=" + (cmd == null ? null : cmd.getClass().getSimpleName()) + "; " +
+                "querySql=\"" + pctx.query() + "\"]", IgniteQueryErrorCode.UNSUPPORTED_OPERATION);
+        }
+    }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTable.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTable.java
index 4a183f859de..f00b1cabfdb 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTable.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTable.java
@@ -21,16 +21,13 @@ import java.util.Objects;
 import org.apache.calcite.sql.SqlCreate;
 import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlKind;
-import org.apache.calcite.sql.SqlLiteral;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql.SqlNodeList;
 import org.apache.calcite.sql.SqlOperator;
 import org.apache.calcite.sql.SqlSpecialOperator;
-import org.apache.calcite.sql.SqlUtil;
 import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import org.apache.calcite.util.ImmutableNullableList;
-import org.apache.ignite.internal.processors.query.calcite.util.IgniteResource;
 import org.checkerframework.checker.nullness.qual.Nullable;
 
 /**
@@ -134,38 +131,4 @@ public class IgniteSqlCreateTable extends SqlCreate {
     public boolean ifNotExists() {
         return ifNotExists;
     }
-
-    /**
-     * Parse option list. Used for H2-based "create table" syntax.
-     *
-     * @return Parsed option list.
-     */
-    public static SqlNodeList parseOptionList(String opts, SqlParserPos pos) {
-        SqlNodeList list = new SqlNodeList(pos);
-
-        String[] pairs = opts.split(",");
-
-        for (String pair : pairs) {
-            String[] keyVal = pair.split("=");
-
-            if (keyVal.length != 2)
-                throw SqlUtil.newContextException(pos, IgniteResource.INSTANCE.cannotParsePair(pair));
-
-            String key = keyVal[0].trim();
-            String val = keyVal[1].trim();
-
-            IgniteSqlCreateTableOptionEnum optionKey = IgniteSqlCreateTableOptionEnum.valueOf(key.toUpperCase());
-
-            if (optionKey == null)
-                throw SqlUtil.newContextException(pos, IgniteResource.INSTANCE.illegalOption(key));
-
-            list.add(new IgniteSqlCreateTableOption(
-                SqlLiteral.createSymbol(optionKey, pos),
-                new SqlIdentifier(val, pos),
-                pos
-            ));
-        }
-
-        return list;
-    }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java
index f4015ec30b3..20fe453515b 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java
@@ -16,41 +16,24 @@
  */
 package org.apache.ignite.internal.processors.query.calcite.sql;
 
-import java.util.List;
-
-import com.google.common.collect.ImmutableList;
-import org.apache.calcite.sql.SqlCall;
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlLiteral;
 import org.apache.calcite.sql.SqlNode;
+import org.apache.calcite.sql.SqlNodeList;
 import org.apache.calcite.sql.SqlOperator;
 import org.apache.calcite.sql.SqlSpecialOperator;
-import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.parser.SqlParserPos;
-import org.apache.calcite.sql.util.SqlVisitor;
-import org.apache.calcite.sql.validate.SqlValidator;
-import org.apache.calcite.sql.validate.SqlValidatorScope;
-import org.apache.calcite.util.Litmus;
 import org.jetbrains.annotations.NotNull;
 
 /** An AST node representing option to create table with. */
-public class IgniteSqlCreateTableOption extends SqlCall {
+public class IgniteSqlCreateTableOption extends IgniteSqlOption<IgniteSqlCreateTableOptionEnum> {
     /** */
     private static final SqlOperator OPERATOR =
         new SqlSpecialOperator("TableOption", SqlKind.OTHER);
 
-    /** Option key. */
-    private final SqlLiteral key;
-
-    /** Option value. */
-    private final SqlNode value;
-
     /** Creates IgniteSqlCreateTableOption. */
     public IgniteSqlCreateTableOption(SqlLiteral key, SqlNode value, SqlParserPos pos) {
-        super(pos);
-
-        this.key = key;
-        this.value = value;
+        super(key, value, pos, IgniteSqlCreateTableOptionEnum.class);
     }
 
     /** {@inheritDoc} */
@@ -58,56 +41,9 @@ public class IgniteSqlCreateTableOption extends SqlCall {
         return OPERATOR;
     }
 
-    /** {@inheritDoc} */
-    @NotNull @Override public List<SqlNode> getOperandList() {
-        return ImmutableList.of(key, value);
-    }
-
-    /** {@inheritDoc} */
-    @Override public SqlNode clone(SqlParserPos pos) {
-        return new IgniteSqlCreateTableOption(key, value, pos);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
-        key.unparse(writer, leftPrec, rightPrec);
-        writer.keyword("=");
-        value.unparse(writer, leftPrec, rightPrec);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void validate(SqlValidator validator, SqlValidatorScope scope) {
-        throw new UnsupportedOperationException();
-    }
-
-    /** {@inheritDoc} */
-    @Override public <R> R accept(SqlVisitor<R> visitor) {
-        throw new UnsupportedOperationException();
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equalsDeep(SqlNode node, Litmus litmus) {
-        if (!(node instanceof IgniteSqlCreateTableOption))
-            return litmus.fail("{} != {}", this, node);
-
-        IgniteSqlCreateTableOption that = (IgniteSqlCreateTableOption)node;
-        if (key != that.key)
-            return litmus.fail("{} != {}", this, node);
-
-        return value.equalsDeep(that.value, litmus);
-    }
-
-    /**
-     * @return Option's key.
-     */
-    public IgniteSqlCreateTableOptionEnum key() {
-        return key.getValueAs(IgniteSqlCreateTableOptionEnum.class);
-    }
-
-    /**
-     * @return Option's value.
-     */
-    public SqlNode value() {
-        return value;
+    /** */
+    public static SqlNodeList parseOptionList(String opts, SqlParserPos pos) {
+        return IgniteSqlOption.parseOptionList(opts, pos, IgniteSqlCreateTableOption::new,
+            IgniteSqlCreateTableOptionEnum.class);
     }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlOption.java
similarity index 56%
copy from modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java
copy to modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlOption.java
index f4015ec30b3..6381403bd33 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlCreateTableOption.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/IgniteSqlOption.java
@@ -17,47 +17,42 @@
 package org.apache.ignite.internal.processors.query.calcite.sql;
 
 import java.util.List;
-
 import com.google.common.collect.ImmutableList;
 import org.apache.calcite.sql.SqlCall;
-import org.apache.calcite.sql.SqlKind;
+import org.apache.calcite.sql.SqlIdentifier;
 import org.apache.calcite.sql.SqlLiteral;
 import org.apache.calcite.sql.SqlNode;
-import org.apache.calcite.sql.SqlOperator;
-import org.apache.calcite.sql.SqlSpecialOperator;
+import org.apache.calcite.sql.SqlNodeList;
+import org.apache.calcite.sql.SqlUtil;
 import org.apache.calcite.sql.SqlWriter;
 import org.apache.calcite.sql.parser.SqlParserPos;
 import org.apache.calcite.sql.util.SqlVisitor;
 import org.apache.calcite.sql.validate.SqlValidator;
 import org.apache.calcite.sql.validate.SqlValidatorScope;
 import org.apache.calcite.util.Litmus;
+import org.apache.ignite.internal.processors.query.calcite.util.IgniteResource;
 import org.jetbrains.annotations.NotNull;
 
-/** An AST node representing option to create table with. */
-public class IgniteSqlCreateTableOption extends SqlCall {
-    /** */
-    private static final SqlOperator OPERATOR =
-        new SqlSpecialOperator("TableOption", SqlKind.OTHER);
-
+/** */
+public abstract class IgniteSqlOption<E extends Enum<E>> extends SqlCall {
     /** Option key. */
-    private final SqlLiteral key;
+    protected final SqlLiteral key;
 
     /** Option value. */
-    private final SqlNode value;
+    protected final SqlNode value;
 
-    /** Creates IgniteSqlCreateTableOption. */
-    public IgniteSqlCreateTableOption(SqlLiteral key, SqlNode value, SqlParserPos pos) {
+    /** */
+    private final Class<E> enumCls;
+
+    /** */
+    protected IgniteSqlOption(SqlLiteral key, SqlNode value, SqlParserPos pos, Class<E> enumCls) {
         super(pos);
 
+        this.enumCls = enumCls;
         this.key = key;
         this.value = value;
     }
 
-    /** {@inheritDoc} */
-    @NotNull @Override public SqlOperator getOperator() {
-        return OPERATOR;
-    }
-
     /** {@inheritDoc} */
     @NotNull @Override public List<SqlNode> getOperandList() {
         return ImmutableList.of(key, value);
@@ -87,10 +82,20 @@ public class IgniteSqlCreateTableOption extends SqlCall {
 
     /** {@inheritDoc} */
     @Override public boolean equalsDeep(SqlNode node, Litmus litmus) {
-        if (!(node instanceof IgniteSqlCreateTableOption))
+        if (node == this) {
+            return true;
+        }
+
+        if (!(node instanceof IgniteSqlOption)) {
             return litmus.fail("{} != {}", this, node);
+        }
+
+        IgniteSqlOption<E> that = (IgniteSqlOption<E>)node;
+
+        if (!getOperator().getName().equalsIgnoreCase(that.getOperator().getName())) {
+            return litmus.fail("{} != {}", this, node);
+        }
 
-        IgniteSqlCreateTableOption that = (IgniteSqlCreateTableOption)node;
         if (key != that.key)
             return litmus.fail("{} != {}", this, node);
 
@@ -100,8 +105,8 @@ public class IgniteSqlCreateTableOption extends SqlCall {
     /**
      * @return Option's key.
      */
-    public IgniteSqlCreateTableOptionEnum key() {
-        return key.getValueAs(IgniteSqlCreateTableOptionEnum.class);
+    public E key() {
+        return key.getValueAs(enumCls);
     }
 
     /**
@@ -110,4 +115,49 @@ public class IgniteSqlCreateTableOption extends SqlCall {
     public SqlNode value() {
         return value;
     }
+
+    /** */
+    protected static interface OptionFactory<T> {
+        /** */
+        T create(SqlLiteral key, SqlNode value, SqlParserPos pos);
+    }
+
+    /**
+     * Parse option list. Used for H2-based "ANALYZE" syntax.
+     *
+     * @return Parsed option list.
+     */
+    protected static <T extends IgniteSqlOption<E>, E extends Enum<E>> SqlNodeList parseOptionList(
+        String opts,
+        SqlParserPos pos,
+        OptionFactory<T> factory,
+        Class<E> enumCls
+    ) {
+        SqlNodeList list = new SqlNodeList(pos);
+
+        String[] pairs = opts.split(",");
+
+        for (String pair : pairs) {
+            String[] keyVal = pair.split("=");
+
+            if (keyVal.length != 2)
+                throw SqlUtil.newContextException(pos, IgniteResource.INSTANCE.cannotParsePair(pair));
+
+            String key = keyVal[0].trim();
+            String val = keyVal[1].trim();
+
+            E optionKey = E.valueOf(enumCls, key.toUpperCase());
+
+            if (optionKey == null)
+                throw SqlUtil.newContextException(pos, IgniteResource.INSTANCE.illegalOption(key));
+
+            list.add(factory.create(
+                SqlLiteral.createSymbol(optionKey, pos),
+                new SqlIdentifier(val, pos),
+                pos
+            ));
+        }
+
+        return list;
+    }
 }
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 fdee810a12a..6838c107663 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
@@ -10,6 +10,7 @@ import org.apache.ignite.internal.processors.query.calcite.util.IgniteResource;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.calcite.sql.ddl.SqlDdlNodes;
 import org.apache.ignite.internal.processors.query.calcite.sql.*;
+import org.apache.ignite.internal.processors.query.calcite.sql.stat.*;
 
 import org.apache.calcite.avatica.util.Casing;
 import org.apache.calcite.avatica.util.DateTimeUtils;
@@ -952,28 +953,34 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else if (jj_2_45(2)) {
       stmt = SqlRollbackTransaction();
     } else if (jj_2_46(2)) {
-      stmt = SqlSetOption(Span.of(), null);
+      stmt = SqlStatisticsAnalyze();
     } else if (jj_2_47(2)) {
-      stmt = SqlAlter();
+      stmt = SqlStatisticsRefresh();
     } else if (jj_2_48(2)) {
-      stmt = SqlCreate();
+      stmt = SqlStatisticsDrop();
     } else if (jj_2_49(2)) {
-      stmt = SqlDrop();
+      stmt = SqlSetOption(Span.of(), null);
     } else if (jj_2_50(2)) {
-      stmt = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY);
+      stmt = SqlAlter();
     } else if (jj_2_51(2)) {
-      stmt = SqlExplain();
+      stmt = SqlCreate();
     } else if (jj_2_52(2)) {
-      stmt = SqlDescribe();
+      stmt = SqlDrop();
     } else if (jj_2_53(2)) {
-      stmt = SqlInsert();
+      stmt = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY);
     } else if (jj_2_54(2)) {
-      stmt = SqlDelete();
+      stmt = SqlExplain();
     } else if (jj_2_55(2)) {
-      stmt = SqlUpdate();
+      stmt = SqlDescribe();
     } else if (jj_2_56(2)) {
-      stmt = SqlMerge();
+      stmt = SqlInsert();
     } else if (jj_2_57(2)) {
+      stmt = SqlDelete();
+    } else if (jj_2_58(2)) {
+      stmt = SqlUpdate();
+    } else if (jj_2_59(2)) {
+      stmt = SqlMerge();
+    } else if (jj_2_60(2)) {
       stmt = SqlProcedureCall();
     } else {
       jj_consume_token(-1);
@@ -995,7 +1002,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public boolean IfNotExistsOpt() throws ParseException {
-    if (jj_2_58(2)) {
+    if (jj_2_61(2)) {
       jj_consume_token(IF);
       jj_consume_token(NOT);
       jj_consume_token(EXISTS);
@@ -1009,20 +1016,20 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNodeList WithCreateTableOptionList() throws ParseException {
     List<SqlNode> list = new ArrayList<SqlNode>();
     final Span s;
-    if (jj_2_62(2)) {
+    if (jj_2_65(2)) {
       jj_consume_token(WITH);
                  s = span();
-      if (jj_2_60(2)) {
+      if (jj_2_63(2)) {
         jj_consume_token(QUOTED_IDENTIFIER);
-                {if (true) return IgniteSqlCreateTable.parseOptionList(
+                {if (true) return IgniteSqlCreateTableOption.parseOptionList(
                     SqlParserUtil.stripQuotes(token.image, DQ, DQ, DQDQ, quotedCasing),
                     getPos().withQuoting(true)
                 );}
-      } else if (jj_2_61(2)) {
+      } else if (jj_2_64(2)) {
         CreateTableOption(list);
         label_5:
         while (true) {
-          if (jj_2_59(2)) {
+          if (jj_2_62(2)) {
             ;
           } else {
             break label_5;
@@ -1044,37 +1051,37 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlLiteral CreateTableOptionKey() throws ParseException {
-    if (jj_2_63(2)) {
+    if (jj_2_66(2)) {
       jj_consume_token(TEMPLATE);
                  {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.TEMPLATE, getPos());}
-    } else if (jj_2_64(2)) {
+    } else if (jj_2_67(2)) {
       jj_consume_token(BACKUPS);
                 {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.BACKUPS, getPos());}
-    } else if (jj_2_65(2)) {
+    } else if (jj_2_68(2)) {
       jj_consume_token(AFFINITY_KEY);
                      {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.AFFINITY_KEY, getPos());}
-    } else if (jj_2_66(2)) {
+    } else if (jj_2_69(2)) {
       jj_consume_token(ATOMICITY);
                   {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.ATOMICITY, getPos());}
-    } else if (jj_2_67(2)) {
+    } else if (jj_2_70(2)) {
       jj_consume_token(WRITE_SYNCHRONIZATION_MODE);
                                    {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.WRITE_SYNCHRONIZATION_MODE, getPos());}
-    } else if (jj_2_68(2)) {
+    } else if (jj_2_71(2)) {
       jj_consume_token(CACHE_GROUP);
                     {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.CACHE_GROUP, getPos());}
-    } else if (jj_2_69(2)) {
+    } else if (jj_2_72(2)) {
       jj_consume_token(CACHE_NAME);
                    {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.CACHE_NAME, getPos());}
-    } else if (jj_2_70(2)) {
+    } else if (jj_2_73(2)) {
       jj_consume_token(DATA_REGION);
                     {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.DATA_REGION, getPos());}
-    } else if (jj_2_71(2)) {
+    } else if (jj_2_74(2)) {
       jj_consume_token(KEY_TYPE);
                  {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.KEY_TYPE, getPos());}
-    } else if (jj_2_72(2)) {
+    } else if (jj_2_75(2)) {
       jj_consume_token(VALUE_TYPE);
                    {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.VALUE_TYPE, getPos());}
-    } else if (jj_2_73(2)) {
+    } else if (jj_2_76(2)) {
       jj_consume_token(ENCRYPTED);
                   {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.ENCRYPTED, getPos());}
     } else {
@@ -1091,9 +1098,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     key = CreateTableOptionKey();
                                    s = span();
     jj_consume_token(EQ);
-    if (jj_2_74(2)) {
+    if (jj_2_77(2)) {
       val = Literal();
-    } else if (jj_2_75(2)) {
+    } else if (jj_2_78(2)) {
       val = SimpleIdentifier();
     } else {
       jj_consume_token(-1);
@@ -1104,9 +1111,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlDataTypeSpec DataTypeEx() throws ParseException {
     final SqlDataTypeSpec dt;
-    if (jj_2_76(2)) {
+    if (jj_2_79(2)) {
       dt = DataType();
-    } else if (jj_2_77(2)) {
+    } else if (jj_2_80(2)) {
       dt = IntervalType();
     } else {
       jj_consume_token(-1);
@@ -1134,11 +1141,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final ColumnStrategy strategy;
     final SqlNode dflt;
     SqlIdentifier id = null;
-    if (jj_2_81(2)) {
+    if (jj_2_84(2)) {
       id = SimpleIdentifier();
       type = DataTypeEx();
       nullable = NullableOptDefaultTrue();
-      if (jj_2_78(2)) {
+      if (jj_2_81(2)) {
         jj_consume_token(DEFAULT_);
                      s.add(this);
         dflt = Literal();
@@ -1148,7 +1155,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             strategy = nullable ? ColumnStrategy.NULLABLE
                 : ColumnStrategy.NOT_NULLABLE;
       }
-      if (jj_2_79(2)) {
+      if (jj_2_82(2)) {
         jj_consume_token(PRIMARY);
                     s.add(this);
         jj_consume_token(KEY);
@@ -1160,8 +1167,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         list.add(
             SqlDdlNodes.column(s.add(id).end(this), id,
                 type.withNullable(nullable), dflt, strategy));
-    } else if (jj_2_82(2)) {
-      if (jj_2_80(2)) {
+    } else if (jj_2_85(2)) {
+      if (jj_2_83(2)) {
         jj_consume_token(CONSTRAINT);
                      s.add(this);
         id = SimpleIdentifier();
@@ -1187,7 +1194,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     TableElement(list);
     label_6:
     while (true) {
-      if (jj_2_83(2)) {
+      if (jj_2_86(2)) {
         ;
       } else {
         break label_6;
@@ -1209,12 +1216,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(TABLE);
     ifNotExists = IfNotExistsOpt();
     id = CompoundIdentifier();
-    if (jj_2_85(3)) {
+    if (jj_2_88(3)) {
       columnList = TableElementList();
       optionList = WithCreateTableOptionList();
           query = null;
-    } else if (jj_2_86(2)) {
-      if (jj_2_84(2)) {
+    } else if (jj_2_89(2)) {
+      if (jj_2_87(2)) {
         columnList = ParenthesizedSimpleIdentifierList();
       } else {
               columnList = null;
@@ -1235,10 +1242,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     SqlNode col;
     col = SimpleIdentifier();
-    if (jj_2_89(2)) {
-      if (jj_2_87(2)) {
+    if (jj_2_92(2)) {
+      if (jj_2_90(2)) {
         jj_consume_token(ASC);
-      } else if (jj_2_88(2)) {
+      } else if (jj_2_91(2)) {
         jj_consume_token(DESC);
             col = SqlStdOperatorTable.DESC.createCall(getPos(), col);
       } else {
@@ -1262,7 +1269,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                             list.add(col);
     label_7:
     while (true) {
-      if (jj_2_90(2)) {
+      if (jj_2_93(2)) {
         ;
       } else {
         break label_7;
@@ -1285,7 +1292,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNumericLiteral inlineSize = null;
     jj_consume_token(INDEX);
     ifNotExists = IfNotExistsOpt();
-    if (jj_2_91(2)) {
+    if (jj_2_94(2)) {
       idxId = SimpleIdentifier();
     } else {
       ;
@@ -1295,19 +1302,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     columnList = IndexedColumnList();
     label_8:
     while (true) {
-      if (jj_2_92(2)) {
+      if (jj_2_95(2)) {
         ;
       } else {
         break label_8;
       }
-      if (jj_2_93(2)) {
+      if (jj_2_96(2)) {
         jj_consume_token(PARALLEL);
         jj_consume_token(UNSIGNED_INTEGER_LITERAL);
             if (parallel != null)
                 {if (true) throw SqlUtil.newContextException(getPos(), IgniteResource.INSTANCE.optionAlreadyDefined("PARALLEL"));}
 
             parallel = SqlLiteral.createExactNumeric(token.image, getPos());
-      } else if (jj_2_94(2)) {
+      } else if (jj_2_97(2)) {
         jj_consume_token(INLINE_SIZE);
         jj_consume_token(UNSIGNED_INTEGER_LITERAL);
             if (inlineSize != null)
@@ -1324,7 +1331,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public boolean IfExistsOpt() throws ParseException {
-    if (jj_2_95(2)) {
+    if (jj_2_98(2)) {
       jj_consume_token(IF);
       jj_consume_token(EXISTS);
                     {if (true) return true;}
@@ -1375,7 +1382,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                              list.add(col);
     label_9:
     while (true) {
-      if (jj_2_96(2)) {
+      if (jj_2_99(2)) {
         ;
       } else {
         break label_9;
@@ -1396,7 +1403,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s = Span.of();
     id = SimpleIdentifier();
     type = DataTypeEx();
-    if (jj_2_97(2)) {
+    if (jj_2_100(2)) {
       jj_consume_token(NOT);
       jj_consume_token(NULL);
             nullable = false;
@@ -1410,10 +1417,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNodeList ColumnWithTypeOrList() throws ParseException {
     SqlNode col;
     SqlNodeList list;
-    if (jj_2_98(2)) {
+    if (jj_2_101(2)) {
       col = ColumnWithType();
                              {if (true) return new SqlNodeList(Collections.singletonList(col), col.getParserPosition());}
-    } else if (jj_2_99(2)) {
+    } else if (jj_2_102(2)) {
       list = ColumnWithTypeList();
                                   {if (true) return list;}
     } else {
@@ -1435,15 +1442,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(TABLE);
     ifExists = IfExistsOpt();
     id = CompoundIdentifier();
-    if (jj_2_102(2)) {
+    if (jj_2_105(2)) {
       jj_consume_token(LOGGING);
                     {if (true) return new IgniteSqlAlterTable(s.end(this), ifExists, id, true);}
-    } else if (jj_2_103(2)) {
+    } else if (jj_2_106(2)) {
       jj_consume_token(NOLOGGING);
                        {if (true) return new IgniteSqlAlterTable(s.end(this), ifExists, id, false);}
-    } else if (jj_2_104(2)) {
+    } else if (jj_2_107(2)) {
       jj_consume_token(ADD);
-      if (jj_2_100(2)) {
+      if (jj_2_103(2)) {
         jj_consume_token(COLUMN);
       } else {
         ;
@@ -1451,9 +1458,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       colIgnoreErr = IfNotExistsOpt();
       cols = ColumnWithTypeOrList();
             {if (true) return new IgniteSqlAlterTableAddColumn(s.end(this), ifExists, id, colIgnoreErr, cols);}
-    } else if (jj_2_105(2)) {
+    } else if (jj_2_108(2)) {
       jj_consume_token(DROP);
-      if (jj_2_101(2)) {
+      if (jj_2_104(2)) {
         jj_consume_token(COLUMN);
       } else {
         ;
@@ -1505,16 +1512,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlNumericLiteral SignedIntegerLiteral() throws ParseException {
     final Span s;
-    if (jj_2_106(2)) {
+    if (jj_2_109(2)) {
       jj_consume_token(PLUS);
       jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         {if (true) return SqlLiteral.createExactNumeric(token.image, getPos());}
-    } else if (jj_2_107(2)) {
+    } else if (jj_2_110(2)) {
       jj_consume_token(MINUS);
               s = span();
       jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         {if (true) return SqlLiteral.createNegative(SqlLiteral.createExactNumeric(token.image, getPos()), s.end(this));}
-    } else if (jj_2_108(2)) {
+    } else if (jj_2_111(2)) {
       jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         {if (true) return SqlLiteral.createExactNumeric(token.image, getPos());}
     } else {
@@ -1618,7 +1625,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public boolean IsAsyncOpt() throws ParseException {
-    if (jj_2_109(2)) {
+    if (jj_2_112(2)) {
       jj_consume_token(ASYNC);
               {if (true) return true;}
     } else {
@@ -1649,7 +1656,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(COMMIT);
                s = span();
-    if (jj_2_110(2)) {
+    if (jj_2_113(2)) {
       jj_consume_token(TRANSACTION);
     } else {
       ;
@@ -1662,7 +1669,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(ROLLBACK);
                  s = span();
-    if (jj_2_111(2)) {
+    if (jj_2_114(2)) {
       jj_consume_token(TRANSACTION);
     } else {
       ;
@@ -1671,18 +1678,165 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     throw new Error("Missing return statement in function");
   }
 
+  final public IgniteSqlStatisticsTable StatisticsTable() throws ParseException {
+    final Span s = Span.of();
+    final SqlIdentifier id;
+    final SqlNodeList columnList;
+    id = CompoundIdentifier();
+    if (jj_2_115(2)) {
+      columnList = ParenthesizedSimpleIdentifierList();
+    } else {
+          columnList = null;
+    }
+        {if (true) return new IgniteSqlStatisticsTable(id, columnList, s.end(this));}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public SqlNodeList StatisticsTables() throws ParseException {
+    final Span s = Span.of();
+    List<SqlNode> tbls = new ArrayList<SqlNode>();
+    SqlNode tbl;
+    tbl = StatisticsTable();
+                              tbls.add(tbl);
+    label_10:
+    while (true) {
+      if (jj_2_116(2)) {
+        ;
+      } else {
+        break label_10;
+      }
+      jj_consume_token(COMMA);
+      tbl = StatisticsTable();
+                                          tbls.add(tbl);
+    }
+        {if (true) return new SqlNodeList(tbls, s.end(this));}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public SqlNodeList WithStatisticsAnalyzeOptionList() throws ParseException {
+    List<SqlNode> list = new ArrayList<SqlNode>();
+    final Span s;
+    if (jj_2_120(2)) {
+      jj_consume_token(WITH);
+                 s = span();
+      if (jj_2_118(2)) {
+        StatisticsAnalyzeOption(list);
+        label_11:
+        while (true) {
+          if (jj_2_117(2)) {
+            ;
+          } else {
+            break label_11;
+          }
+          jj_consume_token(COMMA);
+                          s.add(this);
+          StatisticsAnalyzeOption(list);
+        }
+                {if (true) return new SqlNodeList(list, s.end(this));}
+      } else if (jj_2_119(2)) {
+        jj_consume_token(QUOTED_IDENTIFIER);
+                {if (true) return IgniteSqlStatisticsAnalyzeOption.parseOptionList(
+                    SqlParserUtil.stripQuotes(token.image, DQ, DQ, DQDQ, quotedCasing),
+                    getPos().withQuoting(true)
+                );}
+      } else {
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } else {
+      ;
+    }
+      {if (true) return null;}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public SqlLiteral StatisticsAnalyzeOptionKey() throws ParseException {
+    if (jj_2_121(2)) {
+      jj_consume_token(DISTINCT);
+                 {if (true) return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.DISTINCT, getPos());}
+    } else if (jj_2_122(2)) {
+      jj_consume_token(TOTAL);
+              {if (true) return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.TOTAL, getPos());}
+    } else if (jj_2_123(2)) {
+      jj_consume_token(SIZE);
+             {if (true) return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.SIZE, getPos());}
+    } else if (jj_2_124(2)) {
+      jj_consume_token(NULLS);
+              {if (true) return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.NULLS, getPos());}
+    } else if (jj_2_125(2)) {
+      jj_consume_token(MAX_CHANGED_PARTITION_ROWS_PERCENT);
+                                           {if (true) return SqlLiteral.createSymbol(IgniteSqlStatisticsAnalyzeOptionEnum.MAX_CHANGED_PARTITION_ROWS_PERCENT, getPos());}
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+  final public void StatisticsAnalyzeOption(List<SqlNode> list) throws ParseException {
+    final Span s;
+    final SqlLiteral key;
+    final SqlNode val;
+    key = StatisticsAnalyzeOptionKey();
+                                         s = span();
+    jj_consume_token(EQ);
+    if (jj_2_126(2)) {
+      val = Literal();
+    } else if (jj_2_127(2)) {
+      val = SimpleIdentifier();
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+        list.add(new IgniteSqlStatisticsAnalyzeOption(key, val, s.end(this)));
+  }
+
+  final public SqlNode SqlStatisticsDrop() throws ParseException {
+    final Span s;
+    SqlNodeList tablesList;
+    jj_consume_token(DROP);
+    jj_consume_token(STATISTICS);
+                          s = span();
+    tablesList = StatisticsTables();
+        {if (true) return new IgniteSqlStatisticsDrop(tablesList, s.end(this));}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public SqlNode SqlStatisticsRefresh() throws ParseException {
+    final Span s;
+    SqlNodeList tablesList;
+    jj_consume_token(REFRESH);
+    jj_consume_token(STATISTICS);
+                             s = span();
+    tablesList = StatisticsTables();
+        {if (true) return new IgniteSqlStatisticsRefresh(tablesList, s.end(this));}
+    throw new Error("Missing return statement in function");
+  }
+
+  final public SqlNode SqlStatisticsAnalyze() throws ParseException {
+    final Span s;
+    SqlNodeList tablesList;
+    SqlNodeList optionsList;
+    jj_consume_token(ANALYZE);
+                s = span();
+    tablesList = StatisticsTables();
+    optionsList = WithStatisticsAnalyzeOptionList();
+        {if (true) return new IgniteSqlStatisticsAnalyze(tablesList, optionsList, s.end(this));}
+    throw new Error("Missing return statement in function");
+  }
+
   final public SqlNodeList ParenthesizedKeyValueOptionCommaList() throws ParseException {
     final Span s;
     final List<SqlNode> list = new ArrayList<SqlNode>();
       s = span();
     jj_consume_token(LPAREN);
     KeyValueOption(list);
-    label_10:
+    label_12:
     while (true) {
-      if (jj_2_112(2)) {
+      if (jj_2_128(2)) {
         ;
       } else {
-        break label_10;
+        break label_12;
       }
       jj_consume_token(COMMA);
       KeyValueOption(list);
@@ -1699,9 +1853,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public void KeyValueOption(List<SqlNode> list) throws ParseException {
     final SqlNode key;
     final SqlNode value;
-    if (jj_2_113(2)) {
+    if (jj_2_129(2)) {
       key = SimpleIdentifier();
-    } else if (jj_2_114(2)) {
+    } else if (jj_2_130(2)) {
       key = StringLiteral();
     } else {
       jj_consume_token(-1);
@@ -1718,9 +1872,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 */
   final public SqlNode OptionValue() throws ParseException {
     final SqlNode value;
-    if (jj_2_115(2)) {
+    if (jj_2_131(2)) {
       value = NumericLiteral();
-    } else if (jj_2_116(2)) {
+    } else if (jj_2_132(2)) {
       value = StringLiteral();
     } else {
       jj_consume_token(-1);
@@ -1741,12 +1895,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
     optionVal = OptionValue();
         list.add(optionVal);
-    label_11:
+    label_13:
     while (true) {
-      if (jj_2_117(2)) {
+      if (jj_2_133(2)) {
         ;
       } else {
-        break label_11;
+        break label_13;
       }
       jj_consume_token(COMMA);
       optionVal = OptionValue();
@@ -1763,17 +1917,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode optionVal;
     SqlHint.HintOptionFormat optionFormat;
     hintName = SimpleIdentifier();
-    if (jj_2_119(5)) {
+    if (jj_2_135(5)) {
       hintOptions = ParenthesizedKeyValueOptionCommaList();
             optionFormat = SqlHint.HintOptionFormat.KV_LIST;
-    } else if (jj_2_120(3)) {
+    } else if (jj_2_136(3)) {
       hintOptions = ParenthesizedSimpleIdentifierList();
             optionFormat = SqlHint.HintOptionFormat.ID_LIST;
-    } else if (jj_2_121(3)) {
+    } else if (jj_2_137(3)) {
       hintOptions = ParenthesizedLiteralOptionCommaList();
             optionFormat = SqlHint.HintOptionFormat.LITERAL_LIST;
     } else {
-      if (jj_2_118(2)) {
+      if (jj_2_134(2)) {
         jj_consume_token(LPAREN);
         jj_consume_token(RPAREN);
       } else {
@@ -1783,26 +1937,26 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             optionFormat = SqlHint.HintOptionFormat.EMPTY;
     }
         hints.add(new SqlHint(Span.of(hintOptions).end(this), hintName, hintOptions, optionFormat));
-    label_12:
+    label_14:
     while (true) {
-      if (jj_2_122(2)) {
+      if (jj_2_138(2)) {
         ;
       } else {
-        break label_12;
+        break label_14;
       }
       jj_consume_token(COMMA);
       hintName = SimpleIdentifier();
-      if (jj_2_124(5)) {
+      if (jj_2_140(5)) {
         hintOptions = ParenthesizedKeyValueOptionCommaList();
                 optionFormat = SqlHint.HintOptionFormat.KV_LIST;
-      } else if (jj_2_125(3)) {
+      } else if (jj_2_141(3)) {
         hintOptions = ParenthesizedSimpleIdentifierList();
                 optionFormat = SqlHint.HintOptionFormat.ID_LIST;
-      } else if (jj_2_126(3)) {
+      } else if (jj_2_142(3)) {
         hintOptions = ParenthesizedLiteralOptionCommaList();
                 optionFormat = SqlHint.HintOptionFormat.LITERAL_LIST;
       } else {
-        if (jj_2_123(2)) {
+        if (jj_2_139(2)) {
           jj_consume_token(LPAREN);
           jj_consume_token(RPAREN);
         } else {
@@ -1825,7 +1979,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
       s = span();
     tableRef = CompoundTableIdentifier();
-    if (jj_2_127(2)) {
+    if (jj_2_143(2)) {
       jj_consume_token(HINT_BEG);
       CommaSeparatedSqlHints(hints);
       jj_consume_token(COMMENT_END);
@@ -1856,7 +2010,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(SELECT);
         s = span();
-    if (jj_2_128(2)) {
+    if (jj_2_144(2)) {
       jj_consume_token(HINT_BEG);
       CommaSeparatedSqlHints(hints);
       jj_consume_token(COMMENT_END);
@@ -1864,13 +2018,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       ;
     }
     SqlSelectKeywords(keywords);
-    if (jj_2_129(2)) {
+    if (jj_2_145(2)) {
       jj_consume_token(STREAM);
             keywords.add(SqlSelectKeyword.STREAM.symbol(getPos()));
     } else {
       ;
     }
-    if (jj_2_130(2)) {
+    if (jj_2_146(2)) {
       keyword = AllOrDistinct();
                                     keywords.add(keyword);
     } else {
@@ -1878,7 +2032,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
         keywordList = new SqlNodeList(keywords, s.addAll(keywords).pos());
     selectList = SelectList();
-    if (jj_2_131(2)) {
+    if (jj_2_147(2)) {
       jj_consume_token(FROM);
       fromClause = FromClause();
       where = WhereOpt();
@@ -1918,21 +2072,21 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlExplainFormat format;
     jj_consume_token(EXPLAIN);
     jj_consume_token(PLAN);
-    if (jj_2_132(2)) {
+    if (jj_2_148(2)) {
       detailLevel = ExplainDetailLevel();
     } else {
       ;
     }
     depth = ExplainDepth();
-    if (jj_2_133(2)) {
+    if (jj_2_149(2)) {
       jj_consume_token(AS);
       jj_consume_token(XML);
                      format = SqlExplainFormat.XML;
-    } else if (jj_2_134(2)) {
+    } else if (jj_2_150(2)) {
       jj_consume_token(AS);
       jj_consume_token(JSON);
                       format = SqlExplainFormat.JSON;
-    } else if (jj_2_135(2)) {
+    } else if (jj_2_151(2)) {
       jj_consume_token(AS);
       jj_consume_token(DOT_FORMAT);
                             format = SqlExplainFormat.DOT;
@@ -1954,15 +2108,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * or DML statement (INSERT, UPDATE, DELETE, MERGE). */
   final public SqlNode SqlQueryOrDml() throws ParseException {
     SqlNode stmt;
-    if (jj_2_136(2)) {
+    if (jj_2_152(2)) {
       stmt = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY);
-    } else if (jj_2_137(2)) {
+    } else if (jj_2_153(2)) {
       stmt = SqlInsert();
-    } else if (jj_2_138(2)) {
+    } else if (jj_2_154(2)) {
       stmt = SqlDelete();
-    } else if (jj_2_139(2)) {
+    } else if (jj_2_155(2)) {
       stmt = SqlUpdate();
-    } else if (jj_2_140(2)) {
+    } else if (jj_2_156(2)) {
       stmt = SqlMerge();
     } else {
       jj_consume_token(-1);
@@ -1977,15 +2131,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * EXPLAIN PLAN.
  */
   final public SqlExplain.Depth ExplainDepth() throws ParseException {
-    if (jj_2_141(2)) {
+    if (jj_2_157(2)) {
       jj_consume_token(WITH);
       jj_consume_token(TYPE);
             {if (true) return SqlExplain.Depth.TYPE;}
-    } else if (jj_2_142(2)) {
+    } else if (jj_2_158(2)) {
       jj_consume_token(WITH);
       jj_consume_token(IMPLEMENTATION);
             {if (true) return SqlExplain.Depth.PHYSICAL;}
-    } else if (jj_2_143(2)) {
+    } else if (jj_2_159(2)) {
       jj_consume_token(WITHOUT);
       jj_consume_token(IMPLEMENTATION);
             {if (true) return SqlExplain.Depth.LOGICAL;}
@@ -2000,13 +2154,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlExplainLevel ExplainDetailLevel() throws ParseException {
     SqlExplainLevel level = SqlExplainLevel.EXPPLAN_ATTRIBUTES;
-    if (jj_2_145(2)) {
+    if (jj_2_161(2)) {
       jj_consume_token(EXCLUDING);
       jj_consume_token(ATTRIBUTES);
             level = SqlExplainLevel.NO_ATTRIBUTES;
-    } else if (jj_2_146(2)) {
+    } else if (jj_2_162(2)) {
       jj_consume_token(INCLUDING);
-      if (jj_2_144(2)) {
+      if (jj_2_160(2)) {
         jj_consume_token(ALL);
                   level = SqlExplainLevel.ALL_ATTRIBUTES;
       } else {
@@ -2033,12 +2187,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
    final SqlNode stmt;
     jj_consume_token(DESCRIBE);
                  s = span();
-    if (jj_2_152(2)) {
-      if (jj_2_147(2)) {
+    if (jj_2_168(2)) {
+      if (jj_2_163(2)) {
         jj_consume_token(DATABASE);
-      } else if (jj_2_148(2)) {
+      } else if (jj_2_164(2)) {
         jj_consume_token(CATALOG);
-      } else if (jj_2_149(2)) {
+      } else if (jj_2_165(2)) {
         jj_consume_token(SCHEMA);
       } else {
         jj_consume_token(-1);
@@ -2049,14 +2203,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             // DESCRIBE SCHEMA but should be different. See
             //   [CALCITE-1221] Implement DESCRIBE DATABASE, CATALOG, STATEMENT
             {if (true) return new SqlDescribeSchema(s.end(id), id);}
-    } else if (jj_2_153(2147483647)) {
-      if (jj_2_150(2)) {
+    } else if (jj_2_169(2147483647)) {
+      if (jj_2_166(2)) {
         jj_consume_token(TABLE);
       } else {
         ;
       }
       table = CompoundIdentifier();
-      if (jj_2_151(2)) {
+      if (jj_2_167(2)) {
         column = SimpleIdentifier();
       } else {
         E();
@@ -2064,7 +2218,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       }
             {if (true) return new SqlDescribeTable(s.add(table).addIf(column).pos(),
                 table, column);}
-    } else if (jj_2_154(2)) {
+    } else if (jj_2_170(2)) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case STATEMENT:
         jj_consume_token(STATEMENT);
@@ -2115,14 +2269,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     name = CompoundIdentifier();
         s = span();
     jj_consume_token(LPAREN);
-    if (jj_2_156(2)) {
+    if (jj_2_172(2)) {
       Arg0(list, exprContext);
-      label_13:
+      label_15:
       while (true) {
-        if (jj_2_155(2)) {
+        if (jj_2_171(2)) {
           ;
         } else {
-          break label_13;
+          break label_15;
         }
         jj_consume_token(COMMA);
                 // a comma-list can't appear where only a query is expected
@@ -2148,9 +2302,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode source;
     SqlNodeList columnList = null;
     final Span s;
-    if (jj_2_157(2)) {
+    if (jj_2_173(2)) {
       jj_consume_token(INSERT);
-    } else if (jj_2_158(2)) {
+    } else if (jj_2_174(2)) {
       jj_consume_token(UPSERT);
                    keywords.add(SqlInsertKeyword.UPSERT.symbol(getPos()));
     } else {
@@ -2162,8 +2316,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         keywordList = new SqlNodeList(keywords, s.addAll(keywords).pos());
     jj_consume_token(INTO);
     table = TableRefWithHintsOpt();
-    if (jj_2_160(5)) {
-      if (jj_2_159(2)) {
+    if (jj_2_176(5)) {
+      if (jj_2_175(2)) {
         jj_consume_token(EXTEND);
       } else {
         ;
@@ -2173,7 +2327,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_161(2)) {
+    if (jj_2_177(2)) {
           final Pair<SqlNodeList, SqlNodeList> p;
       p = ParenthesizedCompoundIdentifierList();
             if (p.right.size() > 0) {
@@ -2212,8 +2366,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         s = span();
     jj_consume_token(FROM);
     table = TableRefWithHintsOpt();
-    if (jj_2_163(2)) {
-      if (jj_2_162(2)) {
+    if (jj_2_179(2)) {
+      if (jj_2_178(2)) {
         jj_consume_token(EXTEND);
       } else {
         ;
@@ -2223,8 +2377,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_165(2)) {
-      if (jj_2_164(2)) {
+    if (jj_2_181(2)) {
+      if (jj_2_180(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -2257,8 +2411,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     table = TableRefWithHintsOpt();
         targetColumnList = new SqlNodeList(s.pos());
         sourceExpressionList = new SqlNodeList(s.pos());
-    if (jj_2_167(2)) {
-      if (jj_2_166(2)) {
+    if (jj_2_183(2)) {
+      if (jj_2_182(2)) {
         jj_consume_token(EXTEND);
       } else {
         ;
@@ -2268,8 +2422,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_169(2)) {
-      if (jj_2_168(2)) {
+    if (jj_2_185(2)) {
+      if (jj_2_184(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -2285,12 +2439,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     exp = Expression(ExprContext.ACCEPT_SUB_QUERY);
         // TODO:  support DEFAULT also
         sourceExpressionList.add(exp);
-    label_14:
+    label_16:
     while (true) {
-      if (jj_2_170(2)) {
+      if (jj_2_186(2)) {
         ;
       } else {
-        break label_14;
+        break label_16;
       }
       jj_consume_token(COMMA);
       id = SimpleIdentifier();
@@ -2322,8 +2476,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
               s = span();
     jj_consume_token(INTO);
     table = TableRefWithHintsOpt();
-    if (jj_2_172(2)) {
-      if (jj_2_171(2)) {
+    if (jj_2_188(2)) {
+      if (jj_2_187(2)) {
         jj_consume_token(EXTEND);
       } else {
         ;
@@ -2333,8 +2487,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_174(2)) {
-      if (jj_2_173(2)) {
+    if (jj_2_190(2)) {
+      if (jj_2_189(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -2347,14 +2501,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     sourceTableRef = TableRef();
     jj_consume_token(ON);
     condition = Expression(ExprContext.ACCEPT_SUB_QUERY);
-    if (jj_2_176(2)) {
+    if (jj_2_192(2)) {
       updateCall = WhenMatchedClause(table, alias);
-      if (jj_2_175(2)) {
+      if (jj_2_191(2)) {
         insertCall = WhenNotMatchedClause(table);
       } else {
         ;
       }
-    } else if (jj_2_177(2)) {
+    } else if (jj_2_193(2)) {
       insertCall = WhenNotMatchedClause(table);
     } else {
       jj_consume_token(-1);
@@ -2382,12 +2536,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(EQ);
     exp = Expression(ExprContext.ACCEPT_SUB_QUERY);
         updateExprList.add(exp);
-    label_15:
+    label_17:
     while (true) {
-      if (jj_2_178(2)) {
+      if (jj_2_194(2)) {
         ;
       } else {
-        break label_15;
+        break label_17;
       }
       jj_consume_token(COMMA);
       id = CompoundIdentifier();
@@ -2416,12 +2570,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         insertSpan = span();
     SqlInsertKeywords(keywords);
         keywordList = new SqlNodeList(keywords, insertSpan.end(this));
-    if (jj_2_179(2)) {
+    if (jj_2_195(2)) {
       insertColumnList = ParenthesizedSimpleIdentifierList();
     } else {
       ;
     }
-    if (jj_2_180(2)) {
+    if (jj_2_196(2)) {
       jj_consume_token(LPAREN);
     } else {
       ;
@@ -2429,7 +2583,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(VALUES);
                valuesSpan = span();
     rowConstructor = RowConstructor();
-    if (jj_2_181(2)) {
+    if (jj_2_197(2)) {
       jj_consume_token(RPAREN);
     } else {
       ;
@@ -2452,12 +2606,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode item;
     item = SelectItem();
         list.add(item);
-    label_16:
+    label_18:
     while (true) {
-      if (jj_2_182(2)) {
+      if (jj_2_198(2)) {
         ;
       } else {
-        break label_16;
+        break label_18;
       }
       jj_consume_token(COMMA);
       item = SelectItem();
@@ -2474,13 +2628,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode e;
     final SqlIdentifier id;
     e = SelectExpression();
-    if (jj_2_185(2)) {
-      if (jj_2_183(2)) {
+    if (jj_2_201(2)) {
+      if (jj_2_199(2)) {
         jj_consume_token(AS);
       } else {
         ;
       }
-      if (jj_2_184(2)) {
+      if (jj_2_200(2)) {
         id = SimpleIdentifier();
       } else {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2506,10 +2660,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode SelectExpression() throws ParseException {
     SqlNode e;
-    if (jj_2_186(2)) {
+    if (jj_2_202(2)) {
       jj_consume_token(STAR);
         {if (true) return SqlIdentifier.star(getPos());}
-    } else if (jj_2_187(2)) {
+    } else if (jj_2_203(2)) {
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
         {if (true) return e;}
     } else {
@@ -2520,7 +2674,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlLiteral Natural() throws ParseException {
-    if (jj_2_188(2)) {
+    if (jj_2_204(2)) {
       jj_consume_token(NATURAL);
                 {if (true) return SqlLiteral.createBoolean(true, getPos());}
     } else {
@@ -2531,41 +2685,41 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlLiteral JoinType() throws ParseException {
     JoinType joinType;
-    if (jj_2_192(3)) {
+    if (jj_2_208(3)) {
       jj_consume_token(JOIN);
                  joinType = JoinType.INNER;
-    } else if (jj_2_193(2)) {
+    } else if (jj_2_209(2)) {
       jj_consume_token(INNER);
       jj_consume_token(JOIN);
                          joinType = JoinType.INNER;
-    } else if (jj_2_194(2)) {
+    } else if (jj_2_210(2)) {
       jj_consume_token(LEFT);
-      if (jj_2_189(2)) {
+      if (jj_2_205(2)) {
         jj_consume_token(OUTER);
       } else {
         ;
       }
       jj_consume_token(JOIN);
                                     joinType = JoinType.LEFT;
-    } else if (jj_2_195(2)) {
+    } else if (jj_2_211(2)) {
       jj_consume_token(RIGHT);
-      if (jj_2_190(2)) {
+      if (jj_2_206(2)) {
         jj_consume_token(OUTER);
       } else {
         ;
       }
       jj_consume_token(JOIN);
                                      joinType = JoinType.RIGHT;
-    } else if (jj_2_196(2)) {
+    } else if (jj_2_212(2)) {
       jj_consume_token(FULL);
-      if (jj_2_191(2)) {
+      if (jj_2_207(2)) {
         jj_consume_token(OUTER);
       } else {
         ;
       }
       jj_consume_token(JOIN);
                                     joinType = JoinType.FULL;
-    } else if (jj_2_197(2)) {
+    } else if (jj_2_213(2)) {
       jj_consume_token(CROSS);
       jj_consume_token(JOIN);
                          joinType = JoinType.CROSS;
@@ -2585,7 +2739,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     natural = Natural();
     joinType = JoinType();
     e2 = TableRef();
-    if (jj_2_198(2)) {
+    if (jj_2_214(2)) {
       jj_consume_token(ON);
                on = JoinConditionType.ON.symbol(getPos());
       condition = Expression(ExprContext.ACCEPT_SUB_QUERY);
@@ -2596,7 +2750,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 e2,
                 on,
                 condition);}
-    } else if (jj_2_199(2)) {
+    } else if (jj_2_215(2)) {
       jj_consume_token(USING);
                   using = JoinConditionType.USING.symbol(getPos());
       list = ParenthesizedSimpleIdentifierList();
@@ -2640,18 +2794,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNodeList list;
     SqlParserPos pos;
     e = TableRef();
-    label_17:
+    label_19:
     while (true) {
-      if (jj_2_200(2)) {
+      if (jj_2_216(2)) {
         ;
       } else {
-        break label_17;
+        break label_19;
       }
-      if (jj_2_203(3)) {
+      if (jj_2_219(3)) {
         natural = Natural();
         joinType = JoinType();
         e2 = TableRef();
-        if (jj_2_201(2)) {
+        if (jj_2_217(2)) {
           jj_consume_token(ON);
                     joinConditionType = JoinConditionType.ON.symbol(getPos());
           condition = Expression(ExprContext.ACCEPT_SUB_QUERY);
@@ -2662,7 +2816,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                         e2,
                         joinConditionType,
                         condition);
-        } else if (jj_2_202(2)) {
+        } else if (jj_2_218(2)) {
           jj_consume_token(USING);
                     joinConditionType = JoinConditionType.USING.symbol(getPos());
           list = ParenthesizedSimpleIdentifierList();
@@ -2682,7 +2836,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                         JoinConditionType.NONE.symbol(joinType.getParserPosition()),
                         null);
         }
-      } else if (jj_2_204(2)) {
+      } else if (jj_2_220(2)) {
         jj_consume_token(COMMA);
                       joinType = JoinType.COMMA.symbol(getPos());
         e2 = TableRef();
@@ -2693,7 +2847,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     e2,
                     JoinConditionType.NONE.symbol(SqlParserPos.ZERO),
                     null);
-      } else if (jj_2_205(2)) {
+      } else if (jj_2_221(2)) {
         jj_consume_token(CROSS);
                       joinType = JoinType.CROSS.symbol(getPos());
         jj_consume_token(APPLY);
@@ -2708,7 +2862,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     e2,
                     JoinConditionType.NONE.symbol(SqlParserPos.ZERO),
                     null);
-      } else if (jj_2_206(2)) {
+      } else if (jj_2_222(2)) {
         jj_consume_token(OUTER);
                       joinType = JoinType.LEFT.symbol(getPos());
         jj_consume_token(APPLY);
@@ -2762,10 +2916,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     int repeatableSeed = 0;
     SqlNodeList columnAliasList = null;
     SqlUnnestOperator unnestOp = SqlStdOperatorTable.UNNEST;
-    if (jj_2_215(2)) {
+    if (jj_2_231(2)) {
       tableRef = TableRefWithHintsOpt();
-      if (jj_2_208(2)) {
-        if (jj_2_207(2)) {
+      if (jj_2_224(2)) {
+        if (jj_2_223(2)) {
           jj_consume_token(EXTEND);
         } else {
           ;
@@ -2780,18 +2934,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 tableRef = SqlStdOperatorTable.OVER.createCall(
                     getPos(), tableRef, over);
             }
-      if (jj_2_209(2)) {
+      if (jj_2_225(2)) {
         tableRef = Snapshot(tableRef);
       } else {
         ;
       }
-      if (jj_2_210(2)) {
+      if (jj_2_226(2)) {
         tableRef = MatchRecognize(tableRef);
       } else {
         ;
       }
-    } else if (jj_2_216(2)) {
-      if (jj_2_211(2)) {
+    } else if (jj_2_232(2)) {
+      if (jj_2_227(2)) {
         jj_consume_token(LATERAL);
                       lateral = true;
       } else {
@@ -2807,16 +2961,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 tableRef = SqlStdOperatorTable.LATERAL.createCall(
                     getPos(), tableRef);
             }
-      if (jj_2_212(2)) {
+      if (jj_2_228(2)) {
         tableRef = MatchRecognize(tableRef);
       } else {
         ;
       }
-    } else if (jj_2_217(2)) {
+    } else if (jj_2_233(2)) {
       jj_consume_token(UNNEST);
                    s = span();
       args = ParenthesizedQueryOrCommaList(ExprContext.ACCEPT_SUB_QUERY);
-      if (jj_2_213(2)) {
+      if (jj_2_229(2)) {
         jj_consume_token(WITH);
         jj_consume_token(ORDINALITY);
                 unnestOp = SqlStdOperatorTable.UNNEST_WITH_ORDINALITY;
@@ -2824,8 +2978,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         ;
       }
             tableRef = unnestOp.createCall(s.end(this), (List<SqlNode>) args);
-    } else if (jj_2_218(2)) {
-      if (jj_2_214(2)) {
+    } else if (jj_2_234(2)) {
+      if (jj_2_230(2)) {
         jj_consume_token(LATERAL);
                      lateral = true;
       } else {
@@ -2840,30 +2994,30 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 tableRef = SqlStdOperatorTable.LATERAL.createCall(
                     s.end(this), tableRef);
             }
-    } else if (jj_2_219(2)) {
+    } else if (jj_2_235(2)) {
       tableRef = ExtendedTableRef();
     } else {
       jj_consume_token(-1);
       throw new ParseException();
     }
-    if (jj_2_220(2)) {
+    if (jj_2_236(2)) {
       tableRef = Pivot(tableRef);
     } else {
       ;
     }
-    if (jj_2_221(2)) {
+    if (jj_2_237(2)) {
       tableRef = Unpivot(tableRef);
     } else {
       ;
     }
-    if (jj_2_224(2)) {
-      if (jj_2_222(2)) {
+    if (jj_2_240(2)) {
+      if (jj_2_238(2)) {
         jj_consume_token(AS);
       } else {
         ;
       }
       alias = SimpleIdentifier();
-      if (jj_2_223(2)) {
+      if (jj_2_239(2)) {
         columnAliasList = ParenthesizedSimpleIdentifierList();
       } else {
         ;
@@ -2882,10 +3036,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_230(2)) {
+    if (jj_2_246(2)) {
       jj_consume_token(TABLESAMPLE);
                         s2 = span();
-      if (jj_2_228(2)) {
+      if (jj_2_244(2)) {
         jj_consume_token(SUBSTITUTE);
         jj_consume_token(LPAREN);
         sample = StringLiteral();
@@ -2897,11 +3051,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     SqlLiteral.createSample(sampleSpec, s2.end(this));
                 tableRef = SqlStdOperatorTable.TABLESAMPLE.createCall(
                     s2.add(tableRef).end(this), tableRef, sampleLiteral);
-      } else if (jj_2_229(2)) {
-        if (jj_2_225(2)) {
+      } else if (jj_2_245(2)) {
+        if (jj_2_241(2)) {
           jj_consume_token(BERNOULLI);
                     isBernoulli = true;
-        } else if (jj_2_226(2)) {
+        } else if (jj_2_242(2)) {
           jj_consume_token(SYSTEM);
                     isBernoulli = false;
         } else {
@@ -2911,7 +3065,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(LPAREN);
         samplePercentage = UnsignedNumericLiteral();
         jj_consume_token(RPAREN);
-        if (jj_2_227(2)) {
+        if (jj_2_243(2)) {
           jj_consume_token(REPEATABLE);
           jj_consume_token(LPAREN);
           repeatableSeed = IntLiteral();
@@ -2964,12 +3118,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
                s = span();
     ColumnType(list);
-    label_18:
+    label_20:
     while (true) {
-      if (jj_2_231(2)) {
+      if (jj_2_247(2)) {
         ;
       } else {
-        break label_18;
+        break label_20;
       }
       jj_consume_token(COMMA);
       ColumnType(list);
@@ -2985,7 +3139,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     boolean nullable = true;
     name = CompoundIdentifier();
     type = DataType();
-    if (jj_2_232(2)) {
+    if (jj_2_248(2)) {
       jj_consume_token(NOT);
       jj_consume_token(NULL);
             nullable = false;
@@ -3004,9 +3158,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlDataTypeSpec type = null;
     boolean nullable = true;
     name = CompoundIdentifier();
-    if (jj_2_234(2)) {
+    if (jj_2_250(2)) {
       type = DataType();
-      if (jj_2_233(2)) {
+      if (jj_2_249(2)) {
         jj_consume_token(NOT);
         jj_consume_token(NULL);
                 nullable = false;
@@ -3030,7 +3184,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNode TableFunctionCall(SqlParserPos pos) throws ParseException {
     SqlNode call;
     SqlFunctionCategory funcType = SqlFunctionCategory.USER_DEFINED_TABLE_FUNCTION;
-    if (jj_2_235(2)) {
+    if (jj_2_251(2)) {
       jj_consume_token(SPECIFIC);
             funcType = SqlFunctionCategory.USER_DEFINED_TABLE_SPECIFIC_FUNCTION;
     } else {
@@ -3090,12 +3244,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode rowConstructor;
     rowConstructor = RowConstructor();
                                         list.add(rowConstructor);
-    label_19:
+    label_21:
     while (true) {
-      if (jj_2_236(2)) {
+      if (jj_2_252(2)) {
         ;
       } else {
-        break label_19;
+        break label_21;
       }
       jj_consume_token(COMMA);
       rowConstructor = RowConstructor();
@@ -3110,22 +3264,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNodeList valueList;
     SqlNode value;
     final Span s;
-    if (jj_2_238(3)) {
+    if (jj_2_254(3)) {
       jj_consume_token(LPAREN);
                    s = span();
       jj_consume_token(ROW);
       valueList = ParenthesizedQueryOrCommaListWithDefault(ExprContext.ACCEPT_NONCURSOR);
       jj_consume_token(RPAREN);
                    s.add(this);
-    } else if (jj_2_239(3)) {
-      if (jj_2_237(2)) {
+    } else if (jj_2_255(3)) {
+      if (jj_2_253(2)) {
         jj_consume_token(ROW);
                     s = span();
       } else {
               s = Span.of();
       }
       valueList = ParenthesizedQueryOrCommaListWithDefault(ExprContext.ACCEPT_NONCURSOR);
-    } else if (jj_2_240(2)) {
+    } else if (jj_2_256(2)) {
       value = Expression(ExprContext.ACCEPT_NONCURSOR);
             // NOTE: A bare value here is standard SQL syntax, believe it or
             // not.  Taken together with multi-row table constructors, it leads
@@ -3153,7 +3307,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode WhereOpt() throws ParseException {
     SqlNode condition;
-    if (jj_2_241(2)) {
+    if (jj_2_257(2)) {
       jj_consume_token(WHERE);
       condition = Expression(ExprContext.ACCEPT_SUB_QUERY);
         {if (true) return condition;}
@@ -3169,7 +3323,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNodeList GroupByOpt() throws ParseException {
     List<SqlNode> list = new ArrayList<SqlNode>();
     final Span s;
-    if (jj_2_242(2)) {
+    if (jj_2_258(2)) {
       jj_consume_token(GROUP);
               s = span();
       jj_consume_token(BY);
@@ -3186,12 +3340,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode e;
     e = GroupingElement();
                             list.add(e);
-    label_20:
+    label_22:
     while (true) {
-      if (jj_2_243(2)) {
+      if (jj_2_259(2)) {
         ;
       } else {
-        break label_20;
+        break label_22;
       }
       jj_consume_token(COMMA);
       e = GroupingElement();
@@ -3206,7 +3360,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNodeList nodes;
     final SqlNode e;
     final Span s;
-    if (jj_2_244(2)) {
+    if (jj_2_260(2)) {
       jj_consume_token(GROUPING);
                  s = span();
       jj_consume_token(SETS);
@@ -3214,7 +3368,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       list = GroupingElementList();
       jj_consume_token(RPAREN);
         {if (true) return SqlStdOperatorTable.GROUPING_SETS.createCall(s.end(this), list);}
-    } else if (jj_2_245(2)) {
+    } else if (jj_2_261(2)) {
       jj_consume_token(ROLLUP);
                s = span();
       jj_consume_token(LPAREN);
@@ -3222,7 +3376,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(RPAREN);
         {if (true) return SqlStdOperatorTable.ROLLUP.createCall(s.end(this),
             nodes.getList());}
-    } else if (jj_2_246(2)) {
+    } else if (jj_2_262(2)) {
       jj_consume_token(CUBE);
              s = span();
       jj_consume_token(LPAREN);
@@ -3230,11 +3384,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(RPAREN);
         {if (true) return SqlStdOperatorTable.CUBE.createCall(s.end(this),
             nodes.getList());}
-    } else if (jj_2_247(3)) {
+    } else if (jj_2_263(3)) {
       jj_consume_token(LPAREN);
       jj_consume_token(RPAREN);
         {if (true) return new SqlNodeList(getPos());}
-    } else if (jj_2_248(2)) {
+    } else if (jj_2_264(2)) {
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
         {if (true) return e;}
     } else {
@@ -3263,12 +3417,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode e;
     e = Expression(exprContext);
                                   list.add(e);
-    label_21:
+    label_23:
     while (true) {
-      if (jj_2_249(2)) {
+      if (jj_2_265(2)) {
         ;
       } else {
-        break label_21;
+        break label_23;
       }
       jj_consume_token(COMMA);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
@@ -3281,7 +3435,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode HavingOpt() throws ParseException {
     SqlNode e;
-    if (jj_2_250(2)) {
+    if (jj_2_266(2)) {
       jj_consume_token(HAVING);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                                                             {if (true) return e;}
@@ -3299,7 +3453,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlWindow e;
     List<SqlNode> list;
     final Span s;
-    if (jj_2_252(2)) {
+    if (jj_2_268(2)) {
       jj_consume_token(WINDOW);
                s = span();
       id = SimpleIdentifier();
@@ -3307,12 +3461,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       e = WindowSpecification();
         e.setDeclName(id);
         list = startList(e);
-      label_22:
+      label_24:
       while (true) {
-        if (jj_2_251(2)) {
+        if (jj_2_267(2)) {
           ;
         } else {
-          break label_22;
+          break label_24;
         }
         jj_consume_token(COMMA);
         id = SimpleIdentifier();
@@ -3343,12 +3497,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlLiteral allowPartial = null;
     jj_consume_token(LPAREN);
                s = span();
-    if (jj_2_253(2)) {
+    if (jj_2_269(2)) {
       id = SimpleIdentifier();
     } else {
           id = null;
     }
-    if (jj_2_254(2)) {
+    if (jj_2_270(2)) {
       jj_consume_token(PARTITION);
                       s1 = span();
       jj_consume_token(BY);
@@ -3356,28 +3510,28 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
           partitionList = SqlNodeList.EMPTY;
     }
-    if (jj_2_255(2)) {
+    if (jj_2_271(2)) {
       orderList = OrderBy(true);
     } else {
           orderList = SqlNodeList.EMPTY;
     }
-    if (jj_2_260(2)) {
-      if (jj_2_256(2)) {
+    if (jj_2_276(2)) {
+      if (jj_2_272(2)) {
         jj_consume_token(ROWS);
                      isRows = SqlLiteral.createBoolean(true, getPos());
-      } else if (jj_2_257(2)) {
+      } else if (jj_2_273(2)) {
         jj_consume_token(RANGE);
                       isRows = SqlLiteral.createBoolean(false, getPos());
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
-      if (jj_2_258(2)) {
+      if (jj_2_274(2)) {
         jj_consume_token(BETWEEN);
         lowerBound = WindowRange();
         jj_consume_token(AND);
         upperBound = WindowRange();
-      } else if (jj_2_259(2)) {
+      } else if (jj_2_275(2)) {
         lowerBound = WindowRange();
       } else {
         jj_consume_token(-1);
@@ -3386,13 +3540,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_263(2)) {
-      if (jj_2_261(2)) {
+    if (jj_2_279(2)) {
+      if (jj_2_277(2)) {
         jj_consume_token(ALLOW);
                   s2 = span();
         jj_consume_token(PARTIAL);
             allowPartial = SqlLiteral.createBoolean(true, s2.end(this));
-      } else if (jj_2_262(2)) {
+      } else if (jj_2_278(2)) {
         jj_consume_token(DISALLOW);
                      s2 = span();
         jj_consume_token(PARTIAL);
@@ -3414,30 +3568,30 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNode WindowRange() throws ParseException {
     final SqlNode e;
     final Span s;
-    if (jj_2_268(2)) {
+    if (jj_2_284(2)) {
       jj_consume_token(CURRENT);
                 s = span();
       jj_consume_token(ROW);
         {if (true) return SqlWindow.createCurrentRow(s.end(this));}
-    } else if (jj_2_269(2)) {
+    } else if (jj_2_285(2)) {
       jj_consume_token(UNBOUNDED);
                   s = span();
-      if (jj_2_264(2)) {
+      if (jj_2_280(2)) {
         jj_consume_token(PRECEDING);
             {if (true) return SqlWindow.createUnboundedPreceding(s.end(this));}
-      } else if (jj_2_265(2)) {
+      } else if (jj_2_281(2)) {
         jj_consume_token(FOLLOWING);
             {if (true) return SqlWindow.createUnboundedFollowing(s.end(this));}
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
-    } else if (jj_2_270(2)) {
+    } else if (jj_2_286(2)) {
       e = Expression(ExprContext.ACCEPT_NON_QUERY);
-      if (jj_2_266(2)) {
+      if (jj_2_282(2)) {
         jj_consume_token(PRECEDING);
             {if (true) return SqlWindow.createPreceding(e, getPos());}
-      } else if (jj_2_267(2)) {
+      } else if (jj_2_283(2)) {
         jj_consume_token(FOLLOWING);
             {if (true) return SqlWindow.createFollowing(e, getPos());}
       } else {
@@ -3469,12 +3623,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(BY);
     e = OrderItem();
         list = startList(e);
-    label_23:
+    label_25:
     while (true) {
-      if (jj_2_271(2)) {
+      if (jj_2_287(2)) {
         ;
       } else {
-        break label_23;
+        break label_25;
       }
       jj_consume_token(COMMA);
       e = OrderItem();
@@ -3490,10 +3644,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNode OrderItem() throws ParseException {
     SqlNode e;
     e = Expression(ExprContext.ACCEPT_SUB_QUERY);
-    if (jj_2_274(2)) {
-      if (jj_2_272(2)) {
+    if (jj_2_290(2)) {
+      if (jj_2_288(2)) {
         jj_consume_token(ASC);
-      } else if (jj_2_273(2)) {
+      } else if (jj_2_289(2)) {
         jj_consume_token(DESC);
             e = SqlStdOperatorTable.DESC.createCall(getPos(), e);
       } else {
@@ -3503,12 +3657,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_277(2)) {
-      if (jj_2_275(2)) {
+    if (jj_2_293(2)) {
+      if (jj_2_291(2)) {
         jj_consume_token(NULLS);
         jj_consume_token(FIRST);
             e = SqlStdOperatorTable.NULLS_FIRST.createCall(getPos(), e);
-      } else if (jj_2_276(2)) {
+      } else if (jj_2_292(2)) {
         jj_consume_token(NULLS);
         jj_consume_token(LAST);
             e = SqlStdOperatorTable.NULLS_LAST.createCall(getPos(), e);
@@ -3560,12 +3714,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
               s = span();
     jj_consume_token(LPAREN);
     PivotAgg(aggList);
-    label_24:
+    label_26:
     while (true) {
-      if (jj_2_278(2)) {
+      if (jj_2_294(2)) {
         ;
       } else {
-        break label_24;
+        break label_26;
       }
       jj_consume_token(COMMA);
       PivotAgg(aggList);
@@ -3575,14 +3729,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(IN);
     jj_consume_token(LPAREN);
                     s2 = span();
-    if (jj_2_280(2)) {
+    if (jj_2_296(2)) {
       PivotValue(valueList);
-      label_25:
+      label_27:
       while (true) {
-        if (jj_2_279(2)) {
+        if (jj_2_295(2)) {
           ;
         } else {
-          break label_25;
+          break label_27;
         }
         jj_consume_token(COMMA);
         PivotValue(valueList);
@@ -3603,8 +3757,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNode e;
     final SqlIdentifier alias;
     e = NamedFunctionCall();
-    if (jj_2_282(2)) {
-      if (jj_2_281(2)) {
+    if (jj_2_298(2)) {
+      if (jj_2_297(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -3624,8 +3778,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlIdentifier alias;
     e = RowConstructor();
                            tuple = SqlParserUtil.stripRow(e);
-    if (jj_2_284(2)) {
-      if (jj_2_283(2)) {
+    if (jj_2_300(2)) {
+      if (jj_2_299(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -3650,11 +3804,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNodeList inList;
     jj_consume_token(UNPIVOT);
                 s = span();
-    if (jj_2_285(2)) {
+    if (jj_2_301(2)) {
       jj_consume_token(INCLUDE);
       jj_consume_token(NULLS);
                             includeNulls = true;
-    } else if (jj_2_286(2)) {
+    } else if (jj_2_302(2)) {
       jj_consume_token(EXCLUDE);
       jj_consume_token(NULLS);
                             includeNulls = false;
@@ -3669,12 +3823,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
                s2 = span();
     UnpivotValue(values);
-    label_26:
+    label_28:
     while (true) {
-      if (jj_2_287(2)) {
+      if (jj_2_303(2)) {
         ;
       } else {
-        break label_26;
+        break label_28;
       }
       jj_consume_token(COMMA);
       UnpivotValue(values);
@@ -3691,7 +3845,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNodeList columnList;
     final SqlNode values;
     columnList = SimpleIdentifierOrList();
-    if (jj_2_288(2)) {
+    if (jj_2_304(2)) {
       jj_consume_token(AS);
       values = RowConstructor();
             final SqlNodeList valueList = SqlParserUtil.stripRow(values);
@@ -3724,7 +3878,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(MATCH_RECOGNIZE);
                         s = span();
     jj_consume_token(LPAREN);
-    if (jj_2_289(2)) {
+    if (jj_2_305(2)) {
       jj_consume_token(PARTITION);
                       s2 = span();
       jj_consume_token(BY);
@@ -3732,25 +3886,25 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_290(2)) {
+    if (jj_2_306(2)) {
       orderList = OrderBy(true);
     } else {
       ;
     }
-    if (jj_2_291(2)) {
+    if (jj_2_307(2)) {
       jj_consume_token(MEASURES);
       measureList = MeasureColumnCommaList(span());
     } else {
       ;
     }
-    if (jj_2_292(2)) {
+    if (jj_2_308(2)) {
       jj_consume_token(ONE);
                 s0 = span();
       jj_consume_token(ROW);
       jj_consume_token(PER);
       jj_consume_token(MATCH);
             rowsPerMatch = SqlMatchRecognize.RowsPerMatchOption.ONE_ROW.symbol(s0.end(this));
-    } else if (jj_2_293(2)) {
+    } else if (jj_2_309(2)) {
       jj_consume_token(ALL);
                 s0 = span();
       jj_consume_token(ROWS);
@@ -3760,25 +3914,25 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
             rowsPerMatch = null;
     }
-    if (jj_2_299(2)) {
+    if (jj_2_315(2)) {
       jj_consume_token(AFTER);
                   s1 = span();
       jj_consume_token(MATCH);
       jj_consume_token(SKIP_);
-      if (jj_2_297(2)) {
+      if (jj_2_313(2)) {
         jj_consume_token(TO);
-        if (jj_2_295(2)) {
+        if (jj_2_311(2)) {
           jj_consume_token(NEXT);
           jj_consume_token(ROW);
                     after = SqlMatchRecognize.AfterOption.SKIP_TO_NEXT_ROW
                         .symbol(s1.end(this));
-        } else if (jj_2_296(2)) {
+        } else if (jj_2_312(2)) {
           jj_consume_token(FIRST);
           var = SimpleIdentifier();
                     after = SqlMatchRecognize.SKIP_TO_FIRST.createCall(
                         s1.end(var), var);
         } else if (true) {
-          if (jj_2_294(2)) {
+          if (jj_2_310(2)) {
             jj_consume_token(LAST);
           } else {
             ;
@@ -3790,7 +3944,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           jj_consume_token(-1);
           throw new ParseException();
         }
-      } else if (jj_2_298(2)) {
+      } else if (jj_2_314(2)) {
         jj_consume_token(PAST);
         jj_consume_token(LAST);
         jj_consume_token(ROW);
@@ -3805,27 +3959,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     jj_consume_token(PATTERN);
     jj_consume_token(LPAREN);
-    if (jj_2_300(2)) {
+    if (jj_2_316(2)) {
       jj_consume_token(CARET);
                   isStrictStarts = SqlLiteral.createBoolean(true, getPos());
     } else {
           isStrictStarts = SqlLiteral.createBoolean(false, getPos());
     }
     pattern = PatternExpression();
-    if (jj_2_301(2)) {
+    if (jj_2_317(2)) {
       jj_consume_token(DOLLAR);
                    isStrictEnds = SqlLiteral.createBoolean(true, getPos());
     } else {
           isStrictEnds = SqlLiteral.createBoolean(false, getPos());
     }
     jj_consume_token(RPAREN);
-    if (jj_2_302(2)) {
+    if (jj_2_318(2)) {
       jj_consume_token(WITHIN);
       interval = IntervalLiteral();
     } else {
           interval = null;
     }
-    if (jj_2_303(2)) {
+    if (jj_2_319(2)) {
       jj_consume_token(SUBSET);
       subsetList = SubsetDefinitionCommaList(span());
     } else {
@@ -3845,12 +3999,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final List<SqlNode> eList = new ArrayList<SqlNode>();
     e = MeasureColumn();
         eList.add(e);
-    label_27:
+    label_29:
     while (true) {
-      if (jj_2_304(2)) {
+      if (jj_2_320(2)) {
         ;
       } else {
-        break label_27;
+        break label_29;
       }
       jj_consume_token(COMMA);
       e = MeasureColumn();
@@ -3874,12 +4028,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode left;
     SqlNode right;
     left = PatternTerm();
-    label_28:
+    label_30:
     while (true) {
-      if (jj_2_305(2)) {
+      if (jj_2_321(2)) {
         ;
       } else {
-        break label_28;
+        break label_30;
       }
       jj_consume_token(VERTICAL_BAR);
       right = PatternTerm();
@@ -3894,12 +4048,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode left;
     SqlNode right;
     left = PatternFactor();
-    label_29:
+    label_31:
     while (true) {
-      if (jj_2_306(2)) {
+      if (jj_2_322(2)) {
         ;
       } else {
-        break label_29;
+        break label_31;
       }
       right = PatternFactor();
             left = SqlStdOperatorTable.PATTERN_CONCAT.createCall(
@@ -3921,27 +4075,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     case HOOK:
     case PLUS:
     case STAR:
-      if (jj_2_312(2)) {
+      if (jj_2_328(2)) {
         jj_consume_token(STAR);
                 startNum = SqlLiteral.createExactNumeric("0", SqlParserPos.ZERO);
                 endNum = SqlLiteral.createExactNumeric("-1", SqlParserPos.ZERO);
-      } else if (jj_2_313(2)) {
+      } else if (jj_2_329(2)) {
         jj_consume_token(PLUS);
                 startNum = SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO);
                 endNum = SqlLiteral.createExactNumeric("-1", SqlParserPos.ZERO);
-      } else if (jj_2_314(2)) {
+      } else if (jj_2_330(2)) {
         jj_consume_token(HOOK);
                 startNum = SqlLiteral.createExactNumeric("0", SqlParserPos.ZERO);
                 endNum = SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO);
-      } else if (jj_2_315(2)) {
+      } else if (jj_2_331(2)) {
         jj_consume_token(LBRACE);
-        if (jj_2_309(2)) {
+        if (jj_2_325(2)) {
           startNum = UnsignedNumericLiteral();
                                                       endNum = startNum;
-          if (jj_2_308(2)) {
+          if (jj_2_324(2)) {
             jj_consume_token(COMMA);
                         endNum = SqlLiteral.createExactNumeric("-1", SqlParserPos.ZERO);
-            if (jj_2_307(2)) {
+            if (jj_2_323(2)) {
               endNum = UnsignedNumericLiteral();
             } else {
               ;
@@ -3950,12 +4104,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             ;
           }
           jj_consume_token(RBRACE);
-        } else if (jj_2_310(2)) {
+        } else if (jj_2_326(2)) {
                     startNum = SqlLiteral.createExactNumeric("-1", SqlParserPos.ZERO);
           jj_consume_token(COMMA);
           endNum = UnsignedNumericLiteral();
           jj_consume_token(RBRACE);
-        } else if (jj_2_311(2)) {
+        } else if (jj_2_327(2)) {
           jj_consume_token(MINUS);
           extra = PatternExpression();
           jj_consume_token(MINUS);
@@ -3973,7 +4127,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(-1);
         throw new ParseException();
       }
-      if (jj_2_316(2)) {
+      if (jj_2_332(2)) {
         jj_consume_token(HOOK);
                 if (startNum.intValue(true) != endNum.intValue(true)) {
                     reluctant = SqlLiteral.createBoolean(true, SqlParserPos.ZERO);
@@ -3999,13 +4153,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     SqlNode e;
     List<SqlNode> eList;
-    if (jj_2_318(2)) {
+    if (jj_2_334(2)) {
       e = SimpleIdentifier();
-    } else if (jj_2_319(2)) {
+    } else if (jj_2_335(2)) {
       jj_consume_token(LPAREN);
       e = PatternExpression();
       jj_consume_token(RPAREN);
-    } else if (jj_2_320(2)) {
+    } else if (jj_2_336(2)) {
       jj_consume_token(LBRACE);
                    s = span();
       jj_consume_token(MINUS);
@@ -4013,19 +4167,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(MINUS);
       jj_consume_token(RBRACE);
             e = SqlStdOperatorTable.PATTERN_EXCLUDE.createCall(s.end(this), e);
-    } else if (jj_2_321(2)) {
+    } else if (jj_2_337(2)) {
       jj_consume_token(PERMUTE);
                         s = span();
       jj_consume_token(LPAREN);
       e = PatternExpression();
                 eList = new ArrayList<SqlNode>();
                 eList.add(e);
-      label_30:
+      label_32:
       while (true) {
-        if (jj_2_317(2)) {
+        if (jj_2_333(2)) {
           ;
         } else {
-          break label_30;
+          break label_32;
         }
         jj_consume_token(COMMA);
         e = PatternExpression();
@@ -4047,12 +4201,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final List<SqlNode> eList = new ArrayList<SqlNode>();
     e = SubsetDefinition();
         eList.add(e);
-    label_31:
+    label_33:
     while (true) {
-      if (jj_2_322(2)) {
+      if (jj_2_338(2)) {
         ;
       } else {
-        break label_31;
+        break label_33;
       }
       jj_consume_token(COMMA);
       e = SubsetDefinition();
@@ -4080,12 +4234,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final List<SqlNode> eList = new ArrayList<SqlNode>();
     e = PatternDefinition();
         eList.add(e);
-    label_32:
+    label_34:
     while (true) {
-      if (jj_2_323(2)) {
+      if (jj_2_339(2)) {
         ;
       } else {
-        break label_32;
+        break label_34;
       }
       jj_consume_token(COMMA);
       e = PatternDefinition();
@@ -4130,19 +4284,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlParserPos pos;
     SqlParserPos withPos;
     List<Object> list;
-    if (jj_2_324(2)) {
+    if (jj_2_340(2)) {
       withList = WithList();
     } else {
       ;
     }
     e = LeafQueryOrExpr(exprContext);
         list = startList(e);
-    label_33:
+    label_35:
     while (true) {
-      if (jj_2_325(2)) {
+      if (jj_2_341(2)) {
         ;
       } else {
-        break label_33;
+        break label_35;
       }
             if (!e.isA(SqlKind.QUERY)) {
                 // whoops, expression we just parsed wasn't a query,
@@ -4174,12 +4328,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
              list = new SqlNodeList(getPos());
     withItem = WithItem();
                            list.add(withItem);
-    label_34:
+    label_36:
     while (true) {
-      if (jj_2_326(2)) {
+      if (jj_2_342(2)) {
         ;
       } else {
-        break label_34;
+        break label_36;
       }
       jj_consume_token(COMMA);
       withItem = WithItem();
@@ -4194,7 +4348,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNodeList columnList = null;
     SqlNode definition;
     id = SimpleIdentifier();
-    if (jj_2_327(2)) {
+    if (jj_2_343(2)) {
       columnList = ParenthesizedSimpleIdentifierList();
     } else {
       ;
@@ -4212,10 +4366,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode LeafQueryOrExpr(ExprContext exprContext) throws ParseException {
     SqlNode e;
-    if (jj_2_328(2)) {
+    if (jj_2_344(2)) {
       e = Expression(exprContext);
                                   {if (true) return e;}
-    } else if (jj_2_329(2)) {
+    } else if (jj_2_345(2)) {
       e = LeafQuery(exprContext);
                                  {if (true) return e;}
     } else {
@@ -4242,7 +4396,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode e;
     SqlOperator op;
     SqlNode ext;
-    label_35:
+    label_37:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case EXISTS:
@@ -4254,7 +4408,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         break;
       default:
         jj_la1[3] = jj_gen;
-        break label_35;
+        break label_37;
       }
       op = PrefixRowOperator();
             checkNonQueryExpression(exprContext);
@@ -4262,12 +4416,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     e = Expression3(exprContext);
         list.add(e);
-    label_36:
+    label_38:
     while (true) {
-      if (jj_2_330(2)) {
+      if (jj_2_346(2)) {
         ;
       } else {
-        break label_36;
+        break label_38;
       }
       jj_consume_token(DOT);
       ext = RowExpressionExtension();
@@ -4302,28 +4456,28 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlIdentifier p;
     final Span s = span();
     Expression2b(exprContext, list);
-    if (jj_2_369(2)) {
-      label_37:
+    if (jj_2_385(2)) {
+      label_39:
       while (true) {
-        if (jj_2_361(2)) {
+        if (jj_2_377(2)) {
                     checkNonQueryExpression(exprContext);
-          if (jj_2_334(2)) {
+          if (jj_2_350(2)) {
             jj_consume_token(NOT);
             jj_consume_token(IN);
                                  op = SqlStdOperatorTable.NOT_IN;
-          } else if (jj_2_335(2)) {
+          } else if (jj_2_351(2)) {
             jj_consume_token(IN);
                            op = SqlStdOperatorTable.IN;
-          } else if (jj_2_336(2)) {
+          } else if (jj_2_352(2)) {
                       final SqlKind k;
             k = comp();
-            if (jj_2_331(2)) {
+            if (jj_2_347(2)) {
               jj_consume_token(SOME);
                                  op = SqlStdOperatorTable.some(k);
-            } else if (jj_2_332(2)) {
+            } else if (jj_2_348(2)) {
               jj_consume_token(ANY);
                                 op = SqlStdOperatorTable.some(k);
-            } else if (jj_2_333(2)) {
+            } else if (jj_2_349(2)) {
               jj_consume_token(ALL);
                                 op = SqlStdOperatorTable.all(k);
             } else {
@@ -4349,18 +4503,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     } else {
                         list.add(nodeList);
                     }
-        } else if (jj_2_362(2)) {
+        } else if (jj_2_378(2)) {
                     checkNonQueryExpression(exprContext);
-          if (jj_2_343(2)) {
+          if (jj_2_359(2)) {
             jj_consume_token(NOT);
             jj_consume_token(BETWEEN);
                         op = SqlStdOperatorTable.NOT_BETWEEN;
                         s.clear().add(this);
-            if (jj_2_339(2)) {
-              if (jj_2_337(2)) {
+            if (jj_2_355(2)) {
+              if (jj_2_353(2)) {
                 jj_consume_token(SYMMETRIC);
                                       op = SqlStdOperatorTable.SYMMETRIC_NOT_BETWEEN;
-              } else if (jj_2_338(2)) {
+              } else if (jj_2_354(2)) {
                 jj_consume_token(ASYMMETRIC);
               } else {
                 jj_consume_token(-1);
@@ -4369,15 +4523,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             } else {
               ;
             }
-          } else if (jj_2_344(2)) {
+          } else if (jj_2_360(2)) {
             jj_consume_token(BETWEEN);
                         op = SqlStdOperatorTable.BETWEEN;
                         s.clear().add(this);
-            if (jj_2_342(2)) {
-              if (jj_2_340(2)) {
+            if (jj_2_358(2)) {
+              if (jj_2_356(2)) {
                 jj_consume_token(SYMMETRIC);
                                       op = SqlStdOperatorTable.SYMMETRIC_BETWEEN;
-              } else if (jj_2_341(2)) {
+              } else if (jj_2_357(2)) {
                 jj_consume_token(ASYMMETRIC);
               } else {
                 jj_consume_token(-1);
@@ -4394,22 +4548,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     list.add(new SqlParserUtil.ToTreeListItem(op, s.pos()));
                     list.addAll(list3);
                     list3.clear();
-        } else if (jj_2_363(2)) {
+        } else if (jj_2_379(2)) {
                     checkNonQueryExpression(exprContext);
                     s.clear().add(this);
-          if (jj_2_356(2)) {
-            if (jj_2_349(2)) {
+          if (jj_2_372(2)) {
+            if (jj_2_365(2)) {
               jj_consume_token(NOT);
-              if (jj_2_345(2)) {
+              if (jj_2_361(2)) {
                 jj_consume_token(LIKE);
                                      op = SqlStdOperatorTable.NOT_LIKE;
-              } else if (jj_2_346(2)) {
+              } else if (jj_2_362(2)) {
                 jj_consume_token(ILIKE);
                                       op = SqlLibraryOperators.NOT_ILIKE;
-              } else if (jj_2_347(2)) {
+              } else if (jj_2_363(2)) {
                 jj_consume_token(RLIKE);
                                       op = SqlLibraryOperators.NOT_RLIKE;
-              } else if (jj_2_348(2)) {
+              } else if (jj_2_364(2)) {
                 jj_consume_token(SIMILAR);
                 jj_consume_token(TO);
                                              op = SqlStdOperatorTable.NOT_SIMILAR_TO;
@@ -4417,16 +4571,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 jj_consume_token(-1);
                 throw new ParseException();
               }
-            } else if (jj_2_350(2)) {
+            } else if (jj_2_366(2)) {
               jj_consume_token(LIKE);
                                  op = SqlStdOperatorTable.LIKE;
-            } else if (jj_2_351(2)) {
+            } else if (jj_2_367(2)) {
               jj_consume_token(ILIKE);
                                   op = SqlLibraryOperators.ILIKE;
-            } else if (jj_2_352(2)) {
+            } else if (jj_2_368(2)) {
               jj_consume_token(RLIKE);
                                   op = SqlLibraryOperators.RLIKE;
-            } else if (jj_2_353(2)) {
+            } else if (jj_2_369(2)) {
               jj_consume_token(SIMILAR);
               jj_consume_token(TO);
                                          op = SqlStdOperatorTable.SIMILAR_TO;
@@ -4434,20 +4588,20 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
               jj_consume_token(-1);
               throw new ParseException();
             }
-          } else if (jj_2_357(2)) {
+          } else if (jj_2_373(2)) {
             jj_consume_token(NEGATE);
             jj_consume_token(TILDE);
                                        op = SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_SENSITIVE;
-            if (jj_2_354(2)) {
+            if (jj_2_370(2)) {
               jj_consume_token(STAR);
                                op = SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_INSENSITIVE;
             } else {
               ;
             }
-          } else if (jj_2_358(2)) {
+          } else if (jj_2_374(2)) {
             jj_consume_token(TILDE);
                               op = SqlStdOperatorTable.POSIX_REGEX_CASE_SENSITIVE;
-            if (jj_2_355(2)) {
+            if (jj_2_371(2)) {
               jj_consume_token(STAR);
                                op = SqlStdOperatorTable.POSIX_REGEX_CASE_INSENSITIVE;
             } else {
@@ -4460,7 +4614,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           list2 = Expression2(ExprContext.ACCEPT_SUB_QUERY);
                     list.add(new SqlParserUtil.ToTreeListItem(op, s.pos()));
                     list.addAll(list2);
-          if (jj_2_359(2)) {
+          if (jj_2_375(2)) {
             jj_consume_token(ESCAPE);
             e = Expression3(ExprContext.ACCEPT_SUB_QUERY);
                         s.clear().add(this);
@@ -4471,14 +4625,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           } else {
             ;
           }
-        } else if (jj_2_364(2)) {
+        } else if (jj_2_380(2)) {
           InfixCast(list, exprContext, s);
-        } else if (jj_2_365(3)) {
+        } else if (jj_2_381(3)) {
           op = BinaryRowOperator();
                     checkNonQueryExpression(exprContext);
                     list.add(new SqlParserUtil.ToTreeListItem(op, getPos()));
           Expression2b(ExprContext.ACCEPT_SUB_QUERY, list);
-        } else if (jj_2_366(2)) {
+        } else if (jj_2_382(2)) {
           jj_consume_token(LBRACKET);
           e = Expression(ExprContext.ACCEPT_SUB_QUERY);
           jj_consume_token(RBRACKET);
@@ -4486,12 +4640,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                         new SqlParserUtil.ToTreeListItem(
                             SqlStdOperatorTable.ITEM, getPos()));
                     list.add(e);
-          label_38:
+          label_40:
           while (true) {
-            if (jj_2_360(2)) {
+            if (jj_2_376(2)) {
               ;
             } else {
-              break label_38;
+              break label_40;
             }
             jj_consume_token(DOT);
             p = SimpleIdentifier();
@@ -4500,7 +4654,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                                 SqlStdOperatorTable.DOT, getPos()));
                         list.add(p);
           }
-        } else if (jj_2_367(2)) {
+        } else if (jj_2_383(2)) {
                     checkNonQueryExpression(exprContext);
           op = PostfixRowOperator();
                     list.add(new SqlParserUtil.ToTreeListItem(op, getPos()));
@@ -4508,10 +4662,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           jj_consume_token(-1);
           throw new ParseException();
         }
-        if (jj_2_368(2)) {
+        if (jj_2_384(2)) {
           ;
         } else {
-          break label_37;
+          break label_39;
         }
       }
             {if (true) return list;}
@@ -4523,25 +4677,25 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** Parses a comparison operator inside a SOME / ALL predicate. */
   final public SqlKind comp() throws ParseException {
-    if (jj_2_370(2)) {
+    if (jj_2_386(2)) {
       jj_consume_token(LT);
            {if (true) return SqlKind.LESS_THAN;}
-    } else if (jj_2_371(2)) {
+    } else if (jj_2_387(2)) {
       jj_consume_token(LE);
            {if (true) return SqlKind.LESS_THAN_OR_EQUAL;}
-    } else if (jj_2_372(2)) {
+    } else if (jj_2_388(2)) {
       jj_consume_token(GT);
            {if (true) return SqlKind.GREATER_THAN;}
-    } else if (jj_2_373(2)) {
+    } else if (jj_2_389(2)) {
       jj_consume_token(GE);
            {if (true) return SqlKind.GREATER_THAN_OR_EQUAL;}
-    } else if (jj_2_374(2)) {
+    } else if (jj_2_390(2)) {
       jj_consume_token(EQ);
            {if (true) return SqlKind.EQUALS;}
-    } else if (jj_2_375(2)) {
+    } else if (jj_2_391(2)) {
       jj_consume_token(NE);
            {if (true) return SqlKind.NOT_EQUALS;}
-    } else if (jj_2_376(2)) {
+    } else if (jj_2_392(2)) {
       jj_consume_token(NE2);
         if (!this.conformance.isBangEqualAllowed()) {
             {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.bangEqualNotAllowed());}
@@ -4566,14 +4720,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlOperator op;
     final Span s;
     Span rowSpan = null;
-    if (jj_2_379(2)) {
+    if (jj_2_395(2)) {
       e = AtomicRowExpression();
         checkNonQueryExpression(exprContext);
         {if (true) return e;}
-    } else if (jj_2_380(2)) {
+    } else if (jj_2_396(2)) {
       e = CursorExpression(exprContext);
                                         {if (true) return e;}
-    } else if (jj_2_381(3)) {
+    } else if (jj_2_397(3)) {
       jj_consume_token(ROW);
         s = span();
       list = ParenthesizedQueryOrCommaList(exprContext);
@@ -4585,8 +4739,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 RESOURCE.illegalRowExpression());}
         }
         {if (true) return SqlStdOperatorTable.ROW.createCall(list);}
-    } else if (jj_2_382(2)) {
-      if (jj_2_377(2)) {
+    } else if (jj_2_398(2)) {
+      if (jj_2_393(2)) {
         jj_consume_token(ROW);
                 rowSpan = span();
       } else {
@@ -4598,7 +4752,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             {if (true) return SqlStdOperatorTable.ROW.createCall(rowSpan.end(list1),
                 (List<SqlNode>) list1);}
         }
-      if (jj_2_378(2)) {
+      if (jj_2_394(2)) {
         e = IntervalQualifier();
                 if ((list1.size() == 1)
                     && list1.get(0) instanceof SqlCall)
@@ -4634,24 +4788,24 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlOperator periodOperator() throws ParseException {
-    if (jj_2_383(2)) {
+    if (jj_2_399(2)) {
       jj_consume_token(OVERLAPS);
                   {if (true) return SqlStdOperatorTable.OVERLAPS;}
-    } else if (jj_2_384(2)) {
+    } else if (jj_2_400(2)) {
       jj_consume_token(IMMEDIATELY);
       jj_consume_token(PRECEDES);
                                 {if (true) return SqlStdOperatorTable.IMMEDIATELY_PRECEDES;}
-    } else if (jj_2_385(2)) {
+    } else if (jj_2_401(2)) {
       jj_consume_token(PRECEDES);
                   {if (true) return SqlStdOperatorTable.PRECEDES;}
-    } else if (jj_2_386(2)) {
+    } else if (jj_2_402(2)) {
       jj_consume_token(IMMEDIATELY);
       jj_consume_token(SUCCEEDS);
                                 {if (true) return SqlStdOperatorTable.IMMEDIATELY_SUCCEEDS;}
-    } else if (jj_2_387(2)) {
+    } else if (jj_2_403(2)) {
       jj_consume_token(SUCCEEDS);
                   {if (true) return SqlStdOperatorTable.SUCCEEDS;}
-    } else if (jj_2_388(2)) {
+    } else if (jj_2_404(2)) {
       jj_consume_token(EQUALS);
                 {if (true) return SqlStdOperatorTable.PERIOD_EQUALS;}
     } else {
@@ -4677,9 +4831,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode UnsignedNumericLiteralOrParam() throws ParseException {
     final SqlNode e;
-    if (jj_2_389(2)) {
+    if (jj_2_405(2)) {
       e = UnsignedNumericLiteral();
-    } else if (jj_2_390(2)) {
+    } else if (jj_2_406(2)) {
       e = DynamicParam();
     } else {
       jj_consume_token(-1);
@@ -4703,19 +4857,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlLiteral quantifier = null;
     p = SimpleIdentifier();
         e = p;
-    if (jj_2_394(2147483647)) {
+    if (jj_2_410(2147483647)) {
                                 s = span();
             funcType = SqlFunctionCategory.USER_DEFINED_FUNCTION;
-      if (jj_2_391(2)) {
+      if (jj_2_407(2)) {
         jj_consume_token(LPAREN);
         jj_consume_token(STAR);
                 args = startList(SqlIdentifier.star(getPos()));
         jj_consume_token(RPAREN);
-      } else if (jj_2_392(2)) {
+      } else if (jj_2_408(2)) {
         jj_consume_token(LPAREN);
         jj_consume_token(RPAREN);
                 args = Collections.emptyList();
-      } else if (jj_2_393(2)) {
+      } else if (jj_2_409(2)) {
         args = FunctionParameterList(ExprContext.ACCEPT_SUB_QUERY);
                 quantifier = (SqlLiteral) args.get(0);
                 args.remove(0);
@@ -4744,16 +4898,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNodeList orderBy;
     final Pair<SqlParserPos, SqlOperator> nullTreatment;
     final SqlNode separator;
-    if (jj_2_395(2)) {
+    if (jj_2_411(2)) {
       jj_consume_token(ARRAY_AGG);
                       s = span(); op = SqlLibraryOperators.ARRAY_AGG;
-    } else if (jj_2_396(2)) {
+    } else if (jj_2_412(2)) {
       jj_consume_token(ARRAY_CONCAT_AGG);
                              s = span(); op = SqlLibraryOperators.ARRAY_CONCAT_AGG;
-    } else if (jj_2_397(2)) {
+    } else if (jj_2_413(2)) {
       jj_consume_token(GROUP_CONCAT);
                          s = span(); op = SqlLibraryOperators.GROUP_CONCAT;
-    } else if (jj_2_398(2)) {
+    } else if (jj_2_414(2)) {
       jj_consume_token(STRING_AGG);
                        s = span(); op = SqlLibraryOperators.STRING_AGG;
     } else {
@@ -4761,36 +4915,36 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       throw new ParseException();
     }
     jj_consume_token(LPAREN);
-    if (jj_2_399(2)) {
+    if (jj_2_415(2)) {
       qualifier = AllOrDistinct();
     } else {
           qualifier = null;
     }
     Arg(args, ExprContext.ACCEPT_SUB_QUERY);
-    label_39:
+    label_41:
     while (true) {
-      if (jj_2_400(2)) {
+      if (jj_2_416(2)) {
         ;
       } else {
-        break label_39;
+        break label_41;
       }
       jj_consume_token(COMMA);
             // a comma-list can't appear where only a query is expected
             checkNonQueryExpression(ExprContext.ACCEPT_SUB_QUERY);
       Arg(args, ExprContext.ACCEPT_SUB_QUERY);
     }
-    if (jj_2_401(2)) {
+    if (jj_2_417(2)) {
       nullTreatment = NullTreatment();
     } else {
           nullTreatment = null;
     }
-    if (jj_2_402(2)) {
+    if (jj_2_418(2)) {
       orderBy = OrderBy(true);
             args.add(orderBy);
     } else {
       ;
     }
-    if (jj_2_403(2)) {
+    if (jj_2_419(2)) {
       jj_consume_token(SEPARATOR);
                       s2 = span();
       separator = StringLiteral();
@@ -4813,33 +4967,33 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode AtomicRowExpression() throws ParseException {
     final SqlNode e;
-    if (jj_2_404(2)) {
+    if (jj_2_420(2)) {
       e = LiteralOrIntervalExpression();
-    } else if (jj_2_405(2)) {
+    } else if (jj_2_421(2)) {
       e = DynamicParam();
-    } else if (jj_2_406(2)) {
+    } else if (jj_2_422(2)) {
       e = BuiltinFunctionCall();
-    } else if (jj_2_407(2)) {
+    } else if (jj_2_423(2)) {
       e = JdbcFunctionCall();
-    } else if (jj_2_408(2)) {
+    } else if (jj_2_424(2)) {
       e = MultisetConstructor();
-    } else if (jj_2_409(2)) {
+    } else if (jj_2_425(2)) {
       e = ArrayConstructor();
-    } else if (jj_2_410(3)) {
+    } else if (jj_2_426(3)) {
       e = MapConstructor();
-    } else if (jj_2_411(2)) {
+    } else if (jj_2_427(2)) {
       e = PeriodConstructor();
-    } else if (jj_2_412(2147483647)) {
+    } else if (jj_2_428(2147483647)) {
       e = NamedFunctionCall();
-    } else if (jj_2_413(2)) {
+    } else if (jj_2_429(2)) {
       e = ContextVariable();
-    } else if (jj_2_414(2)) {
+    } else if (jj_2_430(2)) {
       e = CompoundIdentifier();
-    } else if (jj_2_415(2)) {
+    } else if (jj_2_431(2)) {
       e = NewSpecification();
-    } else if (jj_2_416(2)) {
+    } else if (jj_2_432(2)) {
       e = CaseExpression();
-    } else if (jj_2_417(2)) {
+    } else if (jj_2_433(2)) {
       e = SequenceExpression();
     } else {
       jj_consume_token(-1);
@@ -4860,12 +5014,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     List<SqlNode> thenList = new ArrayList<SqlNode>();
     jj_consume_token(CASE);
              s = span();
-    if (jj_2_418(2)) {
+    if (jj_2_434(2)) {
       caseIdentifier = Expression(ExprContext.ACCEPT_SUB_QUERY);
     } else {
       ;
     }
-    label_40:
+    label_42:
     while (true) {
       jj_consume_token(WHEN);
                  whenSpan.add(this);
@@ -4878,13 +5032,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                  thenSpan.add(this);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
             thenList.add(e);
-      if (jj_2_419(2)) {
+      if (jj_2_435(2)) {
         ;
       } else {
-        break label_40;
+        break label_42;
       }
     }
-    if (jj_2_420(2)) {
+    if (jj_2_436(2)) {
       jj_consume_token(ELSE);
       elseClause = Expression(ExprContext.ACCEPT_SUB_QUERY);
     } else {
@@ -4902,10 +5056,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     final SqlOperator f;
     final SqlNode sequenceRef;
-    if (jj_2_421(2)) {
+    if (jj_2_437(2)) {
       jj_consume_token(NEXT);
                  f = SqlStdOperatorTable.NEXT_VALUE; s = span();
-    } else if (jj_2_422(3)) {
+    } else if (jj_2_438(3)) {
       jj_consume_token(CURRENT);
                     f = SqlStdOperatorTable.CURRENT_VALUE; s = span();
     } else {
@@ -4926,16 +5080,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlSetOption SqlSetOption(Span s, String scope) throws ParseException {
     SqlIdentifier name;
     final SqlNode val;
-    if (jj_2_428(2)) {
+    if (jj_2_444(2)) {
       jj_consume_token(SET);
             s.add(this);
       name = CompoundIdentifier();
       jj_consume_token(EQ);
-      if (jj_2_423(2)) {
+      if (jj_2_439(2)) {
         val = Literal();
-      } else if (jj_2_424(2)) {
+      } else if (jj_2_440(2)) {
         val = SimpleIdentifier();
-      } else if (jj_2_425(2)) {
+      } else if (jj_2_441(2)) {
         jj_consume_token(ON);
                 // OFF is handled by SimpleIdentifier, ON handled here.
                 val = new SqlIdentifier(token.image.toUpperCase(Locale.ROOT),
@@ -4945,12 +5099,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         throw new ParseException();
       }
             {if (true) return new SqlSetOption(s.end(val), scope, name, val);}
-    } else if (jj_2_429(2)) {
+    } else if (jj_2_445(2)) {
       jj_consume_token(RESET);
             s.add(this);
-      if (jj_2_426(2)) {
+      if (jj_2_442(2)) {
         name = CompoundIdentifier();
-      } else if (jj_2_427(2)) {
+      } else if (jj_2_443(2)) {
         jj_consume_token(ALL);
                 name = new SqlIdentifier(token.image.toUpperCase(Locale.ROOT),
                     getPos());
@@ -4983,9 +5137,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public String Scope() throws ParseException {
-    if (jj_2_430(2)) {
+    if (jj_2_446(2)) {
       jj_consume_token(SYSTEM);
-    } else if (jj_2_431(2)) {
+    } else if (jj_2_447(2)) {
       jj_consume_token(SESSION);
     } else {
       jj_consume_token(-1);
@@ -5004,18 +5158,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlCreate create;
     jj_consume_token(CREATE);
                s = span();
-    if (jj_2_432(2)) {
+    if (jj_2_448(2)) {
       jj_consume_token(OR);
       jj_consume_token(REPLACE);
             replace = true;
     } else {
       ;
     }
-    if (jj_2_433(2)) {
+    if (jj_2_449(2)) {
       create = SqlCreateTable(s, replace);
-    } else if (jj_2_434(2)) {
+    } else if (jj_2_450(2)) {
       create = SqlCreateIndex(s, replace);
-    } else if (jj_2_435(2)) {
+    } else if (jj_2_451(2)) {
       create = SqlCreateUser(s, replace);
     } else {
       jj_consume_token(-1);
@@ -5034,11 +5188,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlDrop drop;
     jj_consume_token(DROP);
              s = span();
-    if (jj_2_436(2)) {
+    if (jj_2_452(2)) {
       drop = SqlDropTable(s, replace);
-    } else if (jj_2_437(2)) {
+    } else if (jj_2_453(2)) {
       drop = SqlDropIndex(s, replace);
-    } else if (jj_2_438(2)) {
+    } else if (jj_2_454(2)) {
       drop = SqlDropUser(s, replace);
     } else {
       jj_consume_token(-1);
@@ -5060,9 +5214,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode Literal() throws ParseException {
     SqlNode e;
-    if (jj_2_439(2)) {
+    if (jj_2_455(2)) {
       e = NonIntervalLiteral();
-    } else if (jj_2_440(2)) {
+    } else if (jj_2_456(2)) {
       e = IntervalLiteral();
     } else {
       jj_consume_token(-1);
@@ -5075,13 +5229,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 /** Parses a literal that is not an interval literal. */
   final public SqlNode NonIntervalLiteral() throws ParseException {
     final SqlNode e;
-    if (jj_2_441(2)) {
+    if (jj_2_457(2)) {
       e = NumericLiteral();
-    } else if (jj_2_442(2)) {
+    } else if (jj_2_458(2)) {
       e = StringLiteral();
-    } else if (jj_2_443(2)) {
+    } else if (jj_2_459(2)) {
       e = SpecialLiteral();
-    } else if (jj_2_444(2)) {
+    } else if (jj_2_460(2)) {
       e = DateTimeLiteral();
     } else {
       jj_consume_token(-1);
@@ -5099,9 +5253,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * LOOKAHEAD. */
   final public SqlNode LiteralOrIntervalExpression() throws ParseException {
     final SqlNode e;
-    if (jj_2_445(2)) {
+    if (jj_2_461(2)) {
       e = IntervalLiteralOrExpression();
-    } else if (jj_2_446(2)) {
+    } else if (jj_2_462(2)) {
       e = NonIntervalLiteral();
     } else {
       jj_consume_token(-1);
@@ -5113,13 +5267,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** Parses a unsigned numeric literal */
   final public SqlNumericLiteral UnsignedNumericLiteral() throws ParseException {
-    if (jj_2_447(2)) {
+    if (jj_2_463(2)) {
       jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         {if (true) return SqlLiteral.createExactNumeric(token.image, getPos());}
-    } else if (jj_2_448(2)) {
+    } else if (jj_2_464(2)) {
       jj_consume_token(DECIMAL_NUMERIC_LITERAL);
         {if (true) return SqlLiteral.createExactNumeric(token.image, getPos());}
-    } else if (jj_2_449(2)) {
+    } else if (jj_2_465(2)) {
       jj_consume_token(APPROX_NUMERIC_LITERAL);
         {if (true) return SqlLiteral.createApproxNumeric(token.image, getPos());}
     } else {
@@ -5133,16 +5287,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlLiteral NumericLiteral() throws ParseException {
     final SqlNumericLiteral num;
     final Span s;
-    if (jj_2_450(2)) {
+    if (jj_2_466(2)) {
       jj_consume_token(PLUS);
       num = UnsignedNumericLiteral();
         {if (true) return num;}
-    } else if (jj_2_451(2)) {
+    } else if (jj_2_467(2)) {
       jj_consume_token(MINUS);
               s = span();
       num = UnsignedNumericLiteral();
         {if (true) return SqlLiteral.createNegative(num, s.end(this));}
-    } else if (jj_2_452(2)) {
+    } else if (jj_2_468(2)) {
       num = UnsignedNumericLiteral();
         {if (true) return num;}
     } else {
@@ -5154,16 +5308,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** Parse a special literal keyword */
   final public SqlLiteral SpecialLiteral() throws ParseException {
-    if (jj_2_453(2)) {
+    if (jj_2_469(2)) {
       jj_consume_token(TRUE);
              {if (true) return SqlLiteral.createBoolean(true, getPos());}
-    } else if (jj_2_454(2)) {
+    } else if (jj_2_470(2)) {
       jj_consume_token(FALSE);
               {if (true) return SqlLiteral.createBoolean(false, getPos());}
-    } else if (jj_2_455(2)) {
+    } else if (jj_2_471(2)) {
       jj_consume_token(UNKNOWN);
                 {if (true) return SqlLiteral.createUnknown(getPos());}
-    } else if (jj_2_456(2)) {
+    } else if (jj_2_472(2)) {
       jj_consume_token(NULL);
              {if (true) return SqlLiteral.createNull(getPos());}
     } else {
@@ -5191,7 +5345,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     char unicodeEscapeChar = 0;
     String charSet = null;
     SqlCharStringLiteral literal;
-    if (jj_2_461(2)) {
+    if (jj_2_477(2)) {
       jj_consume_token(BINARY_STRING_LITERAL);
         try {
             p = SqlParserUtil.trim(token.image, "xX'");
@@ -5201,7 +5355,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             {if (true) throw SqlUtil.newContextException(getPos(),
                 RESOURCE.illegalBinaryString(token.image));}
         }
-      label_41:
+      label_43:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case QUOTED_STRING:
@@ -5209,7 +5363,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           break;
         default:
           jj_la1[4] = jj_gen;
-          break label_41;
+          break label_43;
         }
         jj_consume_token(QUOTED_STRING);
             try {
@@ -5228,13 +5382,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             SqlParserPos pos2 = SqlParserPos.sum(frags);
             {if (true) return SqlStdOperatorTable.LITERAL_CHAIN.createCall(pos2, frags);}
         }
-    } else if (jj_2_462(2)) {
-      if (jj_2_457(2)) {
+    } else if (jj_2_478(2)) {
+      if (jj_2_473(2)) {
         jj_consume_token(PREFIXED_STRING_LITERAL);
           charSet = SqlParserUtil.getCharacterSet(token.image);
-      } else if (jj_2_458(2)) {
+      } else if (jj_2_474(2)) {
         jj_consume_token(QUOTED_STRING);
-      } else if (jj_2_459(2)) {
+      } else if (jj_2_475(2)) {
         jj_consume_token(UNICODE_STRING_LITERAL);
             // TODO jvs 2-Feb-2009:  support the explicit specification of
             // a character set for Unicode string literals, per SQL:2003
@@ -5253,7 +5407,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         }
         frags = startList(literal);
         nfrags++;
-      label_42:
+      label_44:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case QUOTED_STRING:
@@ -5261,7 +5415,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           break;
         default:
           jj_la1[5] = jj_gen;
-          break label_42;
+          break label_44;
         }
         jj_consume_token(QUOTED_STRING);
             p = SqlParserUtil.parseString(token.image);
@@ -5274,7 +5428,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             frags.add(literal);
             nfrags++;
       }
-      if (jj_2_460(2)) {
+      if (jj_2_476(2)) {
         jj_consume_token(UESCAPE);
         jj_consume_token(QUOTED_STRING);
             if (unicodeEscapeChar == 0) {
@@ -5300,7 +5454,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             SqlParserPos pos2 = SqlParserPos.sum(rands);
             {if (true) return SqlStdOperatorTable.LITERAL_CHAIN.createCall(pos2, rands);}
         }
-    } else if (jj_2_463(2)) {
+    } else if (jj_2_479(2)) {
       jj_consume_token(BIG_QUERY_DOUBLE_QUOTED_STRING);
         p = SqlParserUtil.stripQuotes(getToken(0).image, DQ, DQ, "\\\"",
             Casing.UNCHANGED);
@@ -5310,7 +5464,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             {if (true) throw SqlUtil.newContextException(getPos(),
                 RESOURCE.unknownCharacterSet(charSet));}
         }
-    } else if (jj_2_464(2)) {
+    } else if (jj_2_480(2)) {
       jj_consume_token(BIG_QUERY_QUOTED_STRING);
         p = SqlParserUtil.stripQuotes(getToken(0).image, "'", "'", "\\'",
             Casing.UNCHANGED);
@@ -5333,36 +5487,36 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlLiteral DateTimeLiteral() throws ParseException {
     final String  p;
     final Span s;
-    if (jj_2_465(2)) {
+    if (jj_2_481(2)) {
       jj_consume_token(LBRACE_D);
       jj_consume_token(QUOTED_STRING);
         p = token.image;
       jj_consume_token(RBRACE);
         {if (true) return SqlParserUtil.parseDateLiteral(p, getPos());}
-    } else if (jj_2_466(2)) {
+    } else if (jj_2_482(2)) {
       jj_consume_token(LBRACE_T);
       jj_consume_token(QUOTED_STRING);
         p = token.image;
       jj_consume_token(RBRACE);
         {if (true) return SqlParserUtil.parseTimeLiteral(p, getPos());}
-    } else if (jj_2_467(2)) {
+    } else if (jj_2_483(2)) {
       jj_consume_token(LBRACE_TS);
                   s = span();
       jj_consume_token(QUOTED_STRING);
         p = token.image;
       jj_consume_token(RBRACE);
         {if (true) return SqlParserUtil.parseTimestampLiteral(p, s.end(this));}
-    } else if (jj_2_468(2)) {
+    } else if (jj_2_484(2)) {
       jj_consume_token(DATE);
              s = span();
       jj_consume_token(QUOTED_STRING);
         {if (true) return SqlParserUtil.parseDateLiteral(token.image, s.end(this));}
-    } else if (jj_2_469(2)) {
+    } else if (jj_2_485(2)) {
       jj_consume_token(TIME);
              s = span();
       jj_consume_token(QUOTED_STRING);
         {if (true) return SqlParserUtil.parseTimeLiteral(token.image, s.end(this));}
-    } else if (jj_2_470(2)) {
+    } else if (jj_2_486(2)) {
       jj_consume_token(TIMESTAMP);
                   s = span();
       jj_consume_token(QUOTED_STRING);
@@ -5381,24 +5535,24 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(MULTISET);
                  s = span();
-    if (jj_2_472(2)) {
+    if (jj_2_488(2)) {
       jj_consume_token(LPAREN);
       // by sub query "MULTISET(SELECT * FROM T)"
               e = LeafQueryOrExpr(ExprContext.ACCEPT_QUERY);
       jj_consume_token(RPAREN);
             {if (true) return SqlStdOperatorTable.MULTISET_QUERY.createCall(
                 s.end(this), e);}
-    } else if (jj_2_473(2)) {
+    } else if (jj_2_489(2)) {
       jj_consume_token(LBRACKET);
       // TODO: do trigraph as well ??( ??)
               e = Expression(ExprContext.ACCEPT_NON_QUERY);
                                                        args = startList(e);
-      label_43:
+      label_45:
       while (true) {
-        if (jj_2_471(2)) {
+        if (jj_2_487(2)) {
           ;
         } else {
-          break label_43;
+          break label_45;
         }
         jj_consume_token(COMMA);
         e = Expression(ExprContext.ACCEPT_NON_QUERY);
@@ -5432,9 +5586,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       break;
     default:
       jj_la1[6] = jj_gen;
-      if (jj_2_475(2)) {
+      if (jj_2_491(2)) {
         jj_consume_token(LBRACKET);
-        if (jj_2_474(2)) {
+        if (jj_2_490(2)) {
           args = ExpressionCommaList(s, ExprContext.ACCEPT_NON_QUERY);
         } else {
               args = SqlNodeList.EMPTY;
@@ -5468,9 +5622,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       break;
     default:
       jj_la1[7] = jj_gen;
-      if (jj_2_477(2)) {
+      if (jj_2_493(2)) {
         jj_consume_token(LBRACKET);
-        if (jj_2_476(2)) {
+        if (jj_2_492(2)) {
           args = ExpressionCommaList(s, ExprContext.ACCEPT_NON_QUERY);
         } else {
               args = SqlNodeList.EMPTY;
@@ -5511,11 +5665,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(INTERVAL);
                  s = span();
-    if (jj_2_480(2)) {
-      if (jj_2_478(2)) {
+    if (jj_2_496(2)) {
+      if (jj_2_494(2)) {
         jj_consume_token(MINUS);
                   sign = -1;
-      } else if (jj_2_479(2)) {
+      } else if (jj_2_495(2)) {
         jj_consume_token(PLUS);
                  sign = 1;
       } else {
@@ -5544,11 +5698,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode e;
     jj_consume_token(INTERVAL);
                  s = span();
-    if (jj_2_483(2)) {
-      if (jj_2_481(2)) {
+    if (jj_2_499(2)) {
+      if (jj_2_497(2)) {
         jj_consume_token(MINUS);
                   sign = -1;
-      } else if (jj_2_482(2)) {
+      } else if (jj_2_498(2)) {
         jj_consume_token(PLUS);
                  sign = 1;
       } else {
@@ -5558,20 +5712,20 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_487(2)) {
+    if (jj_2_503(2)) {
       jj_consume_token(QUOTED_STRING);
                           p = token.image;
       intervalQualifier = IntervalQualifier();
             {if (true) return SqlParserUtil.parseIntervalLiteral(s.end(intervalQualifier),
                 sign, p, intervalQualifier);}
-    } else if (jj_2_488(2)) {
-      if (jj_2_484(2)) {
+    } else if (jj_2_504(2)) {
+      if (jj_2_500(2)) {
         jj_consume_token(LPAREN);
         e = Expression(ExprContext.ACCEPT_SUB_QUERY);
         jj_consume_token(RPAREN);
-      } else if (jj_2_485(2)) {
+      } else if (jj_2_501(2)) {
         e = UnsignedNumericLiteral();
-      } else if (jj_2_486(2)) {
+      } else if (jj_2_502(2)) {
         e = CompoundIdentifier();
       } else {
         jj_consume_token(-1);
@@ -5591,10 +5745,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Year() throws ParseException {
-    if (jj_2_489(2)) {
+    if (jj_2_505(2)) {
       jj_consume_token(YEAR);
              {if (true) return TimeUnit.YEAR;}
-    } else if (jj_2_490(2)) {
+    } else if (jj_2_506(2)) {
       jj_consume_token(YEARS);
               {if (true) return warn(TimeUnit.YEAR);}
     } else {
@@ -5605,10 +5759,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Month() throws ParseException {
-    if (jj_2_491(2)) {
+    if (jj_2_507(2)) {
       jj_consume_token(MONTH);
               {if (true) return TimeUnit.MONTH;}
-    } else if (jj_2_492(2)) {
+    } else if (jj_2_508(2)) {
       jj_consume_token(MONTHS);
                {if (true) return warn(TimeUnit.MONTH);}
     } else {
@@ -5619,10 +5773,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Day() throws ParseException {
-    if (jj_2_493(2)) {
+    if (jj_2_509(2)) {
       jj_consume_token(DAY);
             {if (true) return TimeUnit.DAY;}
-    } else if (jj_2_494(2)) {
+    } else if (jj_2_510(2)) {
       jj_consume_token(DAYS);
              {if (true) return warn(TimeUnit.DAY);}
     } else {
@@ -5633,10 +5787,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Hour() throws ParseException {
-    if (jj_2_495(2)) {
+    if (jj_2_511(2)) {
       jj_consume_token(HOUR);
              {if (true) return TimeUnit.HOUR;}
-    } else if (jj_2_496(2)) {
+    } else if (jj_2_512(2)) {
       jj_consume_token(HOURS);
               {if (true) return warn(TimeUnit.HOUR);}
     } else {
@@ -5647,10 +5801,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Minute() throws ParseException {
-    if (jj_2_497(2)) {
+    if (jj_2_513(2)) {
       jj_consume_token(MINUTE);
                {if (true) return TimeUnit.MINUTE;}
-    } else if (jj_2_498(2)) {
+    } else if (jj_2_514(2)) {
       jj_consume_token(MINUTES);
                 {if (true) return warn(TimeUnit.MINUTE);}
     } else {
@@ -5661,10 +5815,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Second() throws ParseException {
-    if (jj_2_499(2)) {
+    if (jj_2_515(2)) {
       jj_consume_token(SECOND);
                {if (true) return TimeUnit.SECOND;}
-    } else if (jj_2_500(2)) {
+    } else if (jj_2_516(2)) {
       jj_consume_token(SECONDS);
                 {if (true) return warn(TimeUnit.SECOND);}
     } else {
@@ -5680,31 +5834,31 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     TimeUnit end = null;
     int startPrec = RelDataType.PRECISION_NOT_SPECIFIED;
     int secondFracPrec = RelDataType.PRECISION_NOT_SPECIFIED;
-    if (jj_2_514(2)) {
+    if (jj_2_530(2)) {
       start = Year();
                          s = span();
       startPrec = PrecisionOpt();
-      if (jj_2_501(2)) {
+      if (jj_2_517(2)) {
         jj_consume_token(TO);
         end = Month();
       } else {
         ;
       }
-    } else if (jj_2_515(2)) {
+    } else if (jj_2_531(2)) {
       start = Month();
                           s = span();
       startPrec = PrecisionOpt();
-    } else if (jj_2_516(2)) {
+    } else if (jj_2_532(2)) {
       start = Day();
                         s = span();
       startPrec = PrecisionOpt();
-      if (jj_2_505(2)) {
+      if (jj_2_521(2)) {
         jj_consume_token(TO);
-        if (jj_2_502(2)) {
+        if (jj_2_518(2)) {
           end = Hour();
-        } else if (jj_2_503(2)) {
+        } else if (jj_2_519(2)) {
           end = Minute();
-        } else if (jj_2_504(2)) {
+        } else if (jj_2_520(2)) {
           end = Second();
           secondFracPrec = PrecisionOpt();
         } else {
@@ -5714,17 +5868,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       } else {
         ;
       }
-    } else if (jj_2_517(2)) {
+    } else if (jj_2_533(2)) {
       start = Hour();
                          s = span();
       startPrec = PrecisionOpt();
-      if (jj_2_509(2)) {
+      if (jj_2_525(2)) {
         jj_consume_token(TO);
-        if (jj_2_507(2)) {
+        if (jj_2_523(2)) {
           end = Minute();
-        } else if (jj_2_508(2)) {
+        } else if (jj_2_524(2)) {
           end = Second();
-          if (jj_2_506(2)) {
+          if (jj_2_522(2)) {
             jj_consume_token(LPAREN);
             secondFracPrec = UnsignedIntLiteral();
             jj_consume_token(RPAREN);
@@ -5738,14 +5892,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       } else {
         ;
       }
-    } else if (jj_2_518(2)) {
+    } else if (jj_2_534(2)) {
       start = Minute();
                            s = span();
       startPrec = PrecisionOpt();
-      if (jj_2_511(2)) {
+      if (jj_2_527(2)) {
         jj_consume_token(TO);
         end = Second();
-        if (jj_2_510(2)) {
+        if (jj_2_526(2)) {
           jj_consume_token(LPAREN);
           secondFracPrec = UnsignedIntLiteral();
           jj_consume_token(RPAREN);
@@ -5755,13 +5909,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       } else {
         ;
       }
-    } else if (jj_2_519(2)) {
+    } else if (jj_2_535(2)) {
       start = Second();
                            s = span();
-      if (jj_2_513(2)) {
+      if (jj_2_529(2)) {
         jj_consume_token(LPAREN);
         startPrec = UnsignedIntLiteral();
-        if (jj_2_512(2)) {
+        if (jj_2_528(2)) {
           jj_consume_token(COMMA);
           secondFracPrec = UnsignedIntLiteral();
         } else {
@@ -5786,16 +5940,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final TimeUnit start;
     int startPrec = RelDataType.PRECISION_NOT_SPECIFIED;
     int secondFracPrec = RelDataType.PRECISION_NOT_SPECIFIED;
-    if (jj_2_527(2)) {
-      if (jj_2_520(2)) {
+    if (jj_2_543(2)) {
+      if (jj_2_536(2)) {
         start = Year();
-      } else if (jj_2_521(2)) {
+      } else if (jj_2_537(2)) {
         start = Month();
-      } else if (jj_2_522(2)) {
+      } else if (jj_2_538(2)) {
         start = Day();
-      } else if (jj_2_523(2)) {
+      } else if (jj_2_539(2)) {
         start = Hour();
-      } else if (jj_2_524(2)) {
+      } else if (jj_2_540(2)) {
         start = Minute();
       } else {
         jj_consume_token(-1);
@@ -5803,13 +5957,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       }
           s = span();
       startPrec = PrecisionOpt();
-    } else if (jj_2_528(2)) {
+    } else if (jj_2_544(2)) {
       start = Second();
                            s = span();
-      if (jj_2_526(2)) {
+      if (jj_2_542(2)) {
         jj_consume_token(LPAREN);
         startPrec = UnsignedIntLiteral();
-        if (jj_2_525(2)) {
+        if (jj_2_541(2)) {
           jj_consume_token(COMMA);
           secondFracPrec = UnsignedIntLiteral();
         } else {
@@ -5833,55 +5987,55 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * Note that it does't include NANOSECOND and MICROSECOND.
  */
   final public TimeUnit TimeUnit() throws ParseException {
-    if (jj_2_529(2)) {
+    if (jj_2_545(2)) {
       jj_consume_token(MILLISECOND);
                     {if (true) return TimeUnit.MILLISECOND;}
-    } else if (jj_2_530(2)) {
+    } else if (jj_2_546(2)) {
       jj_consume_token(SECOND);
                {if (true) return TimeUnit.SECOND;}
-    } else if (jj_2_531(2)) {
+    } else if (jj_2_547(2)) {
       jj_consume_token(MINUTE);
                {if (true) return TimeUnit.MINUTE;}
-    } else if (jj_2_532(2)) {
+    } else if (jj_2_548(2)) {
       jj_consume_token(HOUR);
              {if (true) return TimeUnit.HOUR;}
-    } else if (jj_2_533(2)) {
+    } else if (jj_2_549(2)) {
       jj_consume_token(DAY);
             {if (true) return TimeUnit.DAY;}
-    } else if (jj_2_534(2)) {
+    } else if (jj_2_550(2)) {
       jj_consume_token(DOW);
             {if (true) return TimeUnit.DOW;}
-    } else if (jj_2_535(2)) {
+    } else if (jj_2_551(2)) {
       jj_consume_token(DOY);
             {if (true) return TimeUnit.DOY;}
-    } else if (jj_2_536(2)) {
+    } else if (jj_2_552(2)) {
       jj_consume_token(ISODOW);
                {if (true) return TimeUnit.ISODOW;}
-    } else if (jj_2_537(2)) {
+    } else if (jj_2_553(2)) {
       jj_consume_token(ISOYEAR);
                 {if (true) return TimeUnit.ISOYEAR;}
-    } else if (jj_2_538(2)) {
+    } else if (jj_2_554(2)) {
       jj_consume_token(WEEK);
              {if (true) return TimeUnit.WEEK;}
-    } else if (jj_2_539(2)) {
+    } else if (jj_2_555(2)) {
       jj_consume_token(MONTH);
               {if (true) return TimeUnit.MONTH;}
-    } else if (jj_2_540(2)) {
+    } else if (jj_2_556(2)) {
       jj_consume_token(QUARTER);
                 {if (true) return TimeUnit.QUARTER;}
-    } else if (jj_2_541(2)) {
+    } else if (jj_2_557(2)) {
       jj_consume_token(YEAR);
              {if (true) return TimeUnit.YEAR;}
-    } else if (jj_2_542(2)) {
+    } else if (jj_2_558(2)) {
       jj_consume_token(EPOCH);
               {if (true) return TimeUnit.EPOCH;}
-    } else if (jj_2_543(2)) {
+    } else if (jj_2_559(2)) {
       jj_consume_token(DECADE);
                {if (true) return TimeUnit.DECADE;}
-    } else if (jj_2_544(2)) {
+    } else if (jj_2_560(2)) {
       jj_consume_token(CENTURY);
                 {if (true) return TimeUnit.CENTURY;}
-    } else if (jj_2_545(2)) {
+    } else if (jj_2_561(2)) {
       jj_consume_token(MILLENNIUM);
                    {if (true) return TimeUnit.MILLENNIUM;}
     } else {
@@ -5892,67 +6046,67 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit TimestampInterval() throws ParseException {
-    if (jj_2_546(2)) {
+    if (jj_2_562(2)) {
       jj_consume_token(FRAC_SECOND);
                     {if (true) return TimeUnit.MICROSECOND;}
-    } else if (jj_2_547(2)) {
+    } else if (jj_2_563(2)) {
       jj_consume_token(MICROSECOND);
                     {if (true) return TimeUnit.MICROSECOND;}
-    } else if (jj_2_548(2)) {
+    } else if (jj_2_564(2)) {
       jj_consume_token(NANOSECOND);
                    {if (true) return TimeUnit.NANOSECOND;}
-    } else if (jj_2_549(2)) {
+    } else if (jj_2_565(2)) {
       jj_consume_token(SQL_TSI_FRAC_SECOND);
                             {if (true) return TimeUnit.NANOSECOND;}
-    } else if (jj_2_550(2)) {
+    } else if (jj_2_566(2)) {
       jj_consume_token(SQL_TSI_MICROSECOND);
                             {if (true) return TimeUnit.MICROSECOND;}
-    } else if (jj_2_551(2)) {
+    } else if (jj_2_567(2)) {
       jj_consume_token(SECOND);
                {if (true) return TimeUnit.SECOND;}
-    } else if (jj_2_552(2)) {
+    } else if (jj_2_568(2)) {
       jj_consume_token(SQL_TSI_SECOND);
                        {if (true) return TimeUnit.SECOND;}
-    } else if (jj_2_553(2)) {
+    } else if (jj_2_569(2)) {
       jj_consume_token(MINUTE);
                {if (true) return TimeUnit.MINUTE;}
-    } else if (jj_2_554(2)) {
+    } else if (jj_2_570(2)) {
       jj_consume_token(SQL_TSI_MINUTE);
                        {if (true) return TimeUnit.MINUTE;}
-    } else if (jj_2_555(2)) {
+    } else if (jj_2_571(2)) {
       jj_consume_token(HOUR);
              {if (true) return TimeUnit.HOUR;}
-    } else if (jj_2_556(2)) {
+    } else if (jj_2_572(2)) {
       jj_consume_token(SQL_TSI_HOUR);
                      {if (true) return TimeUnit.HOUR;}
-    } else if (jj_2_557(2)) {
+    } else if (jj_2_573(2)) {
       jj_consume_token(DAY);
             {if (true) return TimeUnit.DAY;}
-    } else if (jj_2_558(2)) {
+    } else if (jj_2_574(2)) {
       jj_consume_token(SQL_TSI_DAY);
                     {if (true) return TimeUnit.DAY;}
-    } else if (jj_2_559(2)) {
+    } else if (jj_2_575(2)) {
       jj_consume_token(WEEK);
              {if (true) return TimeUnit.WEEK;}
-    } else if (jj_2_560(2)) {
+    } else if (jj_2_576(2)) {
       jj_consume_token(SQL_TSI_WEEK);
                      {if (true) return TimeUnit.WEEK;}
-    } else if (jj_2_561(2)) {
+    } else if (jj_2_577(2)) {
       jj_consume_token(MONTH);
               {if (true) return TimeUnit.MONTH;}
-    } else if (jj_2_562(2)) {
+    } else if (jj_2_578(2)) {
       jj_consume_token(SQL_TSI_MONTH);
                       {if (true) return TimeUnit.MONTH;}
-    } else if (jj_2_563(2)) {
+    } else if (jj_2_579(2)) {
       jj_consume_token(QUARTER);
                 {if (true) return TimeUnit.QUARTER;}
-    } else if (jj_2_564(2)) {
+    } else if (jj_2_580(2)) {
       jj_consume_token(SQL_TSI_QUARTER);
                         {if (true) return TimeUnit.QUARTER;}
-    } else if (jj_2_565(2)) {
+    } else if (jj_2_581(2)) {
       jj_consume_token(YEAR);
              {if (true) return TimeUnit.YEAR;}
-    } else if (jj_2_566(2)) {
+    } else if (jj_2_582(2)) {
       jj_consume_token(SQL_TSI_YEAR);
                      {if (true) return TimeUnit.YEAR;}
     } else {
@@ -5983,41 +6137,41 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     char unicodeEscapeChar = BACKSLASH;
     final SqlParserPos pos;
     final Span span;
-    if (jj_2_568(2)) {
+    if (jj_2_584(2)) {
       jj_consume_token(IDENTIFIER);
             id = unquotedIdentifier();
             pos = getPos();
-    } else if (jj_2_569(2)) {
+    } else if (jj_2_585(2)) {
       jj_consume_token(HYPHENATED_IDENTIFIER);
             id = unquotedIdentifier();
             pos = getPos();
-    } else if (jj_2_570(2)) {
+    } else if (jj_2_586(2)) {
       jj_consume_token(QUOTED_IDENTIFIER);
             id = SqlParserUtil.stripQuotes(getToken(0).image, DQ, DQ, DQDQ,
                 quotedCasing);
             pos = getPos().withQuoting(true);
-    } else if (jj_2_571(2)) {
+    } else if (jj_2_587(2)) {
       jj_consume_token(BACK_QUOTED_IDENTIFIER);
             id = SqlParserUtil.stripQuotes(getToken(0).image, "`", "`", "``",
                 quotedCasing);
             pos = getPos().withQuoting(true);
-    } else if (jj_2_572(2)) {
+    } else if (jj_2_588(2)) {
       jj_consume_token(BIG_QUERY_BACK_QUOTED_IDENTIFIER);
             id = SqlParserUtil.stripQuotes(getToken(0).image, "`", "`", "\\`",
                 quotedCasing);
             pos = getPos().withQuoting(true);
-    } else if (jj_2_573(2)) {
+    } else if (jj_2_589(2)) {
       jj_consume_token(BRACKET_QUOTED_IDENTIFIER);
             id = SqlParserUtil.stripQuotes(getToken(0).image, "[", "]", "]]",
                 quotedCasing);
             pos = getPos().withQuoting(true);
-    } else if (jj_2_574(2)) {
+    } else if (jj_2_590(2)) {
       jj_consume_token(UNICODE_QUOTED_IDENTIFIER);
             span = span();
             String image = getToken(0).image;
             image = image.substring(image.indexOf('"'));
             image = SqlParserUtil.stripQuotes(image, DQ, DQ, DQDQ, quotedCasing);
-      if (jj_2_567(2)) {
+      if (jj_2_583(2)) {
         jj_consume_token(UESCAPE);
         jj_consume_token(QUOTED_STRING);
                 String s = SqlParserUtil.parseString(token.image);
@@ -6029,7 +6183,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             SqlLiteral lit = SqlLiteral.createCharString(image, "UTF16", pos);
             lit = lit.unescapeUnicode(unicodeEscapeChar);
             id = lit.toValue();
-    } else if (jj_2_575(2)) {
+    } else if (jj_2_591(2)) {
       id = NonReservedKeyWord();
             pos = getPos();
     } else {
@@ -6112,12 +6266,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlIdentifier id;
     id = SimpleIdentifier();
                              list.add(id);
-    label_44:
+    label_46:
     while (true) {
-      if (jj_2_576(2)) {
+      if (jj_2_592(2)) {
         ;
       } else {
-        break label_44;
+        break label_46;
       }
       jj_consume_token(COMMA);
       id = SimpleIdentifier();
@@ -6150,10 +6304,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNodeList SimpleIdentifierOrList() throws ParseException {
     SqlIdentifier id;
     SqlNodeList list;
-    if (jj_2_577(2)) {
+    if (jj_2_593(2)) {
       id = SimpleIdentifier();
         {if (true) return new SqlNodeList(Collections.singletonList(id), id.getParserPosition());}
-    } else if (jj_2_578(2)) {
+    } else if (jj_2_594(2)) {
       list = ParenthesizedSimpleIdentifierList();
         {if (true) return list;}
     } else {
@@ -6171,17 +6325,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final List<SqlParserPos> posList = new ArrayList<SqlParserPos>();
     boolean star = false;
     IdentifierSegment(nameList, posList);
-    label_45:
+    label_47:
     while (true) {
-      if (jj_2_579(2)) {
+      if (jj_2_595(2)) {
         ;
       } else {
-        break label_45;
+        break label_47;
       }
       jj_consume_token(DOT);
       IdentifierSegment(nameList, posList);
     }
-    if (jj_2_580(2)) {
+    if (jj_2_596(2)) {
       jj_consume_token(DOT);
       jj_consume_token(STAR);
             star = true;
@@ -6205,12 +6359,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final List<String> nameList = new ArrayList<String>();
     final List<SqlParserPos> posList = new ArrayList<SqlParserPos>();
     TableIdentifierSegment(nameList, posList);
-    label_46:
+    label_48:
     while (true) {
-      if (jj_2_581(2)) {
+      if (jj_2_597(2)) {
         ;
       } else {
-        break label_46;
+        break label_48;
       }
       jj_consume_token(DOT);
       TableIdentifierSegment(nameList, posList);
@@ -6225,12 +6379,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public void CompoundIdentifierTypeCommaList(List<SqlNode> list, List<SqlNode> extendList) throws ParseException {
     CompoundIdentifierType(list, extendList);
-    label_47:
+    label_49:
     while (true) {
-      if (jj_2_582(2)) {
+      if (jj_2_598(2)) {
         ;
       } else {
-        break label_47;
+        break label_49;
       }
       jj_consume_token(COMMA);
       CompoundIdentifierType(list, extendList);
@@ -6282,10 +6436,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public int IntLiteral() throws ParseException {
     Token t;
-    if (jj_2_585(2)) {
-      if (jj_2_583(2)) {
+    if (jj_2_601(2)) {
+      if (jj_2_599(2)) {
         t = jj_consume_token(UNSIGNED_INTEGER_LITERAL);
-      } else if (jj_2_584(2)) {
+      } else if (jj_2_600(2)) {
         jj_consume_token(PLUS);
         t = jj_consume_token(UNSIGNED_INTEGER_LITERAL);
       } else {
@@ -6298,7 +6452,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             {if (true) throw SqlUtil.newContextException(getPos(),
                 RESOURCE.invalidLiteral(t.image, Integer.class.getCanonicalName()));}
         }
-    } else if (jj_2_586(2)) {
+    } else if (jj_2_602(2)) {
       jj_consume_token(MINUS);
       t = jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         try {
@@ -6320,12 +6474,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     typeName = TypeName();
         s = Span.of(typeName.getParserPos());
-    label_48:
+    label_50:
     while (true) {
-      if (jj_2_587(2)) {
+      if (jj_2_603(2)) {
         ;
       } else {
-        break label_48;
+        break label_50;
       }
       typeName = CollectionsTypeName(typeName);
     }
@@ -6339,11 +6493,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlTypeNameSpec typeNameSpec;
     final SqlIdentifier typeName;
     final Span s = Span.of();
-    if (jj_2_588(2)) {
+    if (jj_2_604(2)) {
       typeNameSpec = SqlTypeName(s);
-    } else if (jj_2_589(2)) {
+    } else if (jj_2_605(2)) {
       typeNameSpec = RowTypeName();
-    } else if (jj_2_590(2)) {
+    } else if (jj_2_606(2)) {
       typeName = CompoundIdentifier();
             typeNameSpec = new SqlUserDefinedTypeNameSpec(typeName, s.end(this));
     } else {
@@ -6357,15 +6511,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 // Types used for JDBC and ODBC scalar conversion function
   final public SqlTypeNameSpec SqlTypeName(Span s) throws ParseException {
     final SqlTypeNameSpec sqlTypeNameSpec;
-    if (jj_2_591(2)) {
+    if (jj_2_607(2)) {
       sqlTypeNameSpec = SqlTypeName1(s);
-    } else if (jj_2_592(2)) {
+    } else if (jj_2_608(2)) {
       sqlTypeNameSpec = SqlTypeName2(s);
-    } else if (jj_2_593(2)) {
+    } else if (jj_2_609(2)) {
       sqlTypeNameSpec = SqlTypeName3(s);
-    } else if (jj_2_594(2)) {
+    } else if (jj_2_610(2)) {
       sqlTypeNameSpec = CharacterTypeName(s);
-    } else if (jj_2_595(2)) {
+    } else if (jj_2_611(2)) {
       sqlTypeNameSpec = DateTimeTypeName();
     } else {
       jj_consume_token(-1);
@@ -6379,48 +6533,48 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 // For extra specification, we mean precision, scale, charSet, etc.
   final public SqlTypeNameSpec SqlTypeName1(Span s) throws ParseException {
     final SqlTypeName sqlTypeName;
-    if (jj_2_599(2)) {
+    if (jj_2_615(2)) {
       jj_consume_token(GEOMETRY);
             if (!this.conformance.allowGeometry()) {
                 {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.geometryDisabled());}
             }
             s.add(this);
             sqlTypeName = SqlTypeName.GEOMETRY;
-    } else if (jj_2_600(2)) {
+    } else if (jj_2_616(2)) {
       jj_consume_token(BOOLEAN);
                     s.add(this); sqlTypeName = SqlTypeName.BOOLEAN;
-    } else if (jj_2_601(2)) {
-      if (jj_2_596(2)) {
+    } else if (jj_2_617(2)) {
+      if (jj_2_612(2)) {
         jj_consume_token(INTEGER);
-      } else if (jj_2_597(2)) {
+      } else if (jj_2_613(2)) {
         jj_consume_token(INT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                 s.add(this); sqlTypeName = SqlTypeName.INTEGER;
-    } else if (jj_2_602(2)) {
+    } else if (jj_2_618(2)) {
       jj_consume_token(TINYINT);
                     s.add(this); sqlTypeName = SqlTypeName.TINYINT;
-    } else if (jj_2_603(2)) {
+    } else if (jj_2_619(2)) {
       jj_consume_token(SMALLINT);
                      s.add(this); sqlTypeName = SqlTypeName.SMALLINT;
-    } else if (jj_2_604(2)) {
+    } else if (jj_2_620(2)) {
       jj_consume_token(BIGINT);
                    s.add(this); sqlTypeName = SqlTypeName.BIGINT;
-    } else if (jj_2_605(2)) {
+    } else if (jj_2_621(2)) {
       jj_consume_token(REAL);
                  s.add(this); sqlTypeName = SqlTypeName.REAL;
-    } else if (jj_2_606(2)) {
+    } else if (jj_2_622(2)) {
       jj_consume_token(DOUBLE);
                    s.add(this);
-      if (jj_2_598(2)) {
+      if (jj_2_614(2)) {
         jj_consume_token(PRECISION);
       } else {
         ;
       }
                           sqlTypeName = SqlTypeName.DOUBLE;
-    } else if (jj_2_607(2)) {
+    } else if (jj_2_623(2)) {
       jj_consume_token(FLOAT);
                   s.add(this); sqlTypeName = SqlTypeName.FLOAT;
     } else {
@@ -6435,16 +6589,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlTypeNameSpec SqlTypeName2(Span s) throws ParseException {
     final SqlTypeName sqlTypeName;
     int precision = -1;
-    if (jj_2_609(2)) {
+    if (jj_2_625(2)) {
       jj_consume_token(BINARY);
                    s.add(this);
-      if (jj_2_608(2)) {
+      if (jj_2_624(2)) {
         jj_consume_token(VARYING);
                         sqlTypeName = SqlTypeName.VARBINARY;
       } else {
               sqlTypeName = SqlTypeName.BINARY;
       }
-    } else if (jj_2_610(2)) {
+    } else if (jj_2_626(2)) {
       jj_consume_token(VARBINARY);
                       s.add(this); sqlTypeName = SqlTypeName.VARBINARY;
     } else {
@@ -6461,29 +6615,29 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlTypeName sqlTypeName;
     int precision = -1;
     int scale = -1;
-    if (jj_2_614(2)) {
-      if (jj_2_611(2)) {
+    if (jj_2_630(2)) {
+      if (jj_2_627(2)) {
         jj_consume_token(DECIMAL);
-      } else if (jj_2_612(2)) {
+      } else if (jj_2_628(2)) {
         jj_consume_token(DEC);
-      } else if (jj_2_613(2)) {
+      } else if (jj_2_629(2)) {
         jj_consume_token(NUMERIC);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                           s.add(this); sqlTypeName = SqlTypeName.DECIMAL;
-    } else if (jj_2_615(2)) {
+    } else if (jj_2_631(2)) {
       jj_consume_token(ANY);
                 s.add(this); sqlTypeName = SqlTypeName.ANY;
     } else {
       jj_consume_token(-1);
       throw new ParseException();
     }
-    if (jj_2_617(2)) {
+    if (jj_2_633(2)) {
       jj_consume_token(LPAREN);
       precision = UnsignedIntLiteral();
-      if (jj_2_616(2)) {
+      if (jj_2_632(2)) {
         jj_consume_token(COMMA);
         scale = UnsignedIntLiteral();
       } else {
@@ -6499,213 +6653,213 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 // Types used for for JDBC and ODBC scalar conversion function
   final public SqlJdbcDataTypeName JdbcOdbcDataTypeName() throws ParseException {
-    if (jj_2_652(2)) {
-      if (jj_2_618(2)) {
+    if (jj_2_668(2)) {
+      if (jj_2_634(2)) {
         jj_consume_token(SQL_CHAR);
-      } else if (jj_2_619(2)) {
+      } else if (jj_2_635(2)) {
         jj_consume_token(CHAR);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                             {if (true) return SqlJdbcDataTypeName.SQL_CHAR;}
-    } else if (jj_2_653(2)) {
-      if (jj_2_620(2)) {
+    } else if (jj_2_669(2)) {
+      if (jj_2_636(2)) {
         jj_consume_token(SQL_VARCHAR);
-      } else if (jj_2_621(2)) {
+      } else if (jj_2_637(2)) {
         jj_consume_token(VARCHAR);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_VARCHAR;}
-    } else if (jj_2_654(2)) {
-      if (jj_2_622(2)) {
+    } else if (jj_2_670(2)) {
+      if (jj_2_638(2)) {
         jj_consume_token(SQL_DATE);
-      } else if (jj_2_623(2)) {
+      } else if (jj_2_639(2)) {
         jj_consume_token(DATE);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                             {if (true) return SqlJdbcDataTypeName.SQL_DATE;}
-    } else if (jj_2_655(2)) {
-      if (jj_2_624(2)) {
+    } else if (jj_2_671(2)) {
+      if (jj_2_640(2)) {
         jj_consume_token(SQL_TIME);
-      } else if (jj_2_625(2)) {
+      } else if (jj_2_641(2)) {
         jj_consume_token(TIME);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                             {if (true) return SqlJdbcDataTypeName.SQL_TIME;}
-    } else if (jj_2_656(2)) {
-      if (jj_2_626(2)) {
+    } else if (jj_2_672(2)) {
+      if (jj_2_642(2)) {
         jj_consume_token(SQL_TIMESTAMP);
-      } else if (jj_2_627(2)) {
+      } else if (jj_2_643(2)) {
         jj_consume_token(TIMESTAMP);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                       {if (true) return SqlJdbcDataTypeName.SQL_TIMESTAMP;}
-    } else if (jj_2_657(2)) {
-      if (jj_2_628(2)) {
+    } else if (jj_2_673(2)) {
+      if (jj_2_644(2)) {
         jj_consume_token(SQL_DECIMAL);
-      } else if (jj_2_629(2)) {
+      } else if (jj_2_645(2)) {
         jj_consume_token(DECIMAL);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_DECIMAL;}
-    } else if (jj_2_658(2)) {
-      if (jj_2_630(2)) {
+    } else if (jj_2_674(2)) {
+      if (jj_2_646(2)) {
         jj_consume_token(SQL_NUMERIC);
-      } else if (jj_2_631(2)) {
+      } else if (jj_2_647(2)) {
         jj_consume_token(NUMERIC);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_NUMERIC;}
-    } else if (jj_2_659(2)) {
-      if (jj_2_632(2)) {
+    } else if (jj_2_675(2)) {
+      if (jj_2_648(2)) {
         jj_consume_token(SQL_BOOLEAN);
-      } else if (jj_2_633(2)) {
+      } else if (jj_2_649(2)) {
         jj_consume_token(BOOLEAN);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_BOOLEAN;}
-    } else if (jj_2_660(2)) {
-      if (jj_2_634(2)) {
+    } else if (jj_2_676(2)) {
+      if (jj_2_650(2)) {
         jj_consume_token(SQL_INTEGER);
-      } else if (jj_2_635(2)) {
+      } else if (jj_2_651(2)) {
         jj_consume_token(INTEGER);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_INTEGER;}
-    } else if (jj_2_661(2)) {
-      if (jj_2_636(2)) {
+    } else if (jj_2_677(2)) {
+      if (jj_2_652(2)) {
         jj_consume_token(SQL_BINARY);
-      } else if (jj_2_637(2)) {
+      } else if (jj_2_653(2)) {
         jj_consume_token(BINARY);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                 {if (true) return SqlJdbcDataTypeName.SQL_BINARY;}
-    } else if (jj_2_662(2)) {
-      if (jj_2_638(2)) {
+    } else if (jj_2_678(2)) {
+      if (jj_2_654(2)) {
         jj_consume_token(SQL_VARBINARY);
-      } else if (jj_2_639(2)) {
+      } else if (jj_2_655(2)) {
         jj_consume_token(VARBINARY);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                       {if (true) return SqlJdbcDataTypeName.SQL_VARBINARY;}
-    } else if (jj_2_663(2)) {
-      if (jj_2_640(2)) {
+    } else if (jj_2_679(2)) {
+      if (jj_2_656(2)) {
         jj_consume_token(SQL_TINYINT);
-      } else if (jj_2_641(2)) {
+      } else if (jj_2_657(2)) {
         jj_consume_token(TINYINT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_TINYINT;}
-    } else if (jj_2_664(2)) {
-      if (jj_2_642(2)) {
+    } else if (jj_2_680(2)) {
+      if (jj_2_658(2)) {
         jj_consume_token(SQL_SMALLINT);
-      } else if (jj_2_643(2)) {
+      } else if (jj_2_659(2)) {
         jj_consume_token(SMALLINT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                     {if (true) return SqlJdbcDataTypeName.SQL_SMALLINT;}
-    } else if (jj_2_665(2)) {
-      if (jj_2_644(2)) {
+    } else if (jj_2_681(2)) {
+      if (jj_2_660(2)) {
         jj_consume_token(SQL_BIGINT);
-      } else if (jj_2_645(2)) {
+      } else if (jj_2_661(2)) {
         jj_consume_token(BIGINT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                 {if (true) return SqlJdbcDataTypeName.SQL_BIGINT;}
-    } else if (jj_2_666(2)) {
-      if (jj_2_646(2)) {
+    } else if (jj_2_682(2)) {
+      if (jj_2_662(2)) {
         jj_consume_token(SQL_REAL);
-      } else if (jj_2_647(2)) {
+      } else if (jj_2_663(2)) {
         jj_consume_token(REAL);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                            {if (true) return SqlJdbcDataTypeName.SQL_REAL;}
-    } else if (jj_2_667(2)) {
-      if (jj_2_648(2)) {
+    } else if (jj_2_683(2)) {
+      if (jj_2_664(2)) {
         jj_consume_token(SQL_DOUBLE);
-      } else if (jj_2_649(2)) {
+      } else if (jj_2_665(2)) {
         jj_consume_token(DOUBLE);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                 {if (true) return SqlJdbcDataTypeName.SQL_DOUBLE;}
-    } else if (jj_2_668(2)) {
-      if (jj_2_650(2)) {
+    } else if (jj_2_684(2)) {
+      if (jj_2_666(2)) {
         jj_consume_token(SQL_FLOAT);
-      } else if (jj_2_651(2)) {
+      } else if (jj_2_667(2)) {
         jj_consume_token(FLOAT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                               {if (true) return SqlJdbcDataTypeName.SQL_FLOAT;}
-    } else if (jj_2_669(2)) {
+    } else if (jj_2_685(2)) {
       jj_consume_token(SQL_INTERVAL_YEAR);
                           {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_YEAR;}
-    } else if (jj_2_670(2)) {
+    } else if (jj_2_686(2)) {
       jj_consume_token(SQL_INTERVAL_YEAR_TO_MONTH);
                                    {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_YEAR_TO_MONTH;}
-    } else if (jj_2_671(2)) {
+    } else if (jj_2_687(2)) {
       jj_consume_token(SQL_INTERVAL_MONTH);
                            {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_MONTH;}
-    } else if (jj_2_672(2)) {
+    } else if (jj_2_688(2)) {
       jj_consume_token(SQL_INTERVAL_DAY);
                          {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_DAY;}
-    } else if (jj_2_673(2)) {
+    } else if (jj_2_689(2)) {
       jj_consume_token(SQL_INTERVAL_DAY_TO_HOUR);
                                  {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_DAY_TO_HOUR;}
-    } else if (jj_2_674(2)) {
+    } else if (jj_2_690(2)) {
       jj_consume_token(SQL_INTERVAL_DAY_TO_MINUTE);
                                    {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_DAY_TO_MINUTE;}
-    } else if (jj_2_675(2)) {
+    } else if (jj_2_691(2)) {
       jj_consume_token(SQL_INTERVAL_DAY_TO_SECOND);
                                    {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_DAY_TO_SECOND;}
-    } else if (jj_2_676(2)) {
+    } else if (jj_2_692(2)) {
       jj_consume_token(SQL_INTERVAL_HOUR);
                           {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_HOUR;}
-    } else if (jj_2_677(2)) {
+    } else if (jj_2_693(2)) {
       jj_consume_token(SQL_INTERVAL_HOUR_TO_MINUTE);
                                     {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_HOUR_TO_MINUTE;}
-    } else if (jj_2_678(2)) {
+    } else if (jj_2_694(2)) {
       jj_consume_token(SQL_INTERVAL_HOUR_TO_SECOND);
                                     {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_HOUR_TO_SECOND;}
-    } else if (jj_2_679(2)) {
+    } else if (jj_2_695(2)) {
       jj_consume_token(SQL_INTERVAL_MINUTE);
                             {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_MINUTE;}
-    } else if (jj_2_680(2)) {
+    } else if (jj_2_696(2)) {
       jj_consume_token(SQL_INTERVAL_MINUTE_TO_SECOND);
                                       {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_MINUTE_TO_SECOND;}
-    } else if (jj_2_681(2)) {
+    } else if (jj_2_697(2)) {
       jj_consume_token(SQL_INTERVAL_SECOND);
                             {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_SECOND;}
     } else {
@@ -6728,10 +6882,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 */
   final public SqlTypeNameSpec CollectionsTypeName(SqlTypeNameSpec elementTypeName) throws ParseException {
     final SqlTypeName collectionTypeName;
-    if (jj_2_682(2)) {
+    if (jj_2_698(2)) {
       jj_consume_token(MULTISET);
                      collectionTypeName = SqlTypeName.MULTISET;
-    } else if (jj_2_683(2)) {
+    } else if (jj_2_699(2)) {
       jj_consume_token(ARRAY);
                   collectionTypeName = SqlTypeName.ARRAY;
     } else {
@@ -6747,10 +6901,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 * Parse a nullable option, default is true.
 */
   final public boolean NullableOptDefaultTrue() throws ParseException {
-    if (jj_2_684(2)) {
+    if (jj_2_700(2)) {
       jj_consume_token(NULL);
              {if (true) return true;}
-    } else if (jj_2_685(2)) {
+    } else if (jj_2_701(2)) {
       jj_consume_token(NOT);
       jj_consume_token(NULL);
                    {if (true) return false;}
@@ -6764,10 +6918,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 * Parse a nullable option, default is false.
 */
   final public boolean NullableOptDefaultFalse() throws ParseException {
-    if (jj_2_686(2)) {
+    if (jj_2_702(2)) {
       jj_consume_token(NULL);
              {if (true) return true;}
-    } else if (jj_2_687(2)) {
+    } else if (jj_2_703(2)) {
       jj_consume_token(NOT);
       jj_consume_token(NULL);
                    {if (true) return false;}
@@ -6791,12 +6945,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     nullable = NullableOptDefaultFalse();
         fieldNames.add(fName);
         fieldTypes.add(fType.withNullable(nullable, getPos()));
-    label_49:
+    label_51:
     while (true) {
-      if (jj_2_688(2)) {
+      if (jj_2_704(2)) {
         ;
       } else {
-        break label_49;
+        break label_51;
       }
       jj_consume_token(COMMA);
       fName = SimpleIdentifier();
@@ -6830,23 +6984,23 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     int precision = -1;
     final SqlTypeName sqlTypeName;
     String charSetName = null;
-    if (jj_2_692(2)) {
-      if (jj_2_689(2)) {
+    if (jj_2_708(2)) {
+      if (jj_2_705(2)) {
         jj_consume_token(CHARACTER);
-      } else if (jj_2_690(2)) {
+      } else if (jj_2_706(2)) {
         jj_consume_token(CHAR);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                  s.add(this);
-      if (jj_2_691(2)) {
+      if (jj_2_707(2)) {
         jj_consume_token(VARYING);
                         sqlTypeName = SqlTypeName.VARCHAR;
       } else {
               sqlTypeName = SqlTypeName.CHAR;
       }
-    } else if (jj_2_693(2)) {
+    } else if (jj_2_709(2)) {
       jj_consume_token(VARCHAR);
                     s.add(this); sqlTypeName = SqlTypeName.VARCHAR;
     } else {
@@ -6854,7 +7008,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       throw new ParseException();
     }
     precision = PrecisionOpt();
-    if (jj_2_694(2)) {
+    if (jj_2_710(2)) {
       jj_consume_token(CHARACTER);
       jj_consume_token(SET);
       charSetName = Identifier();
@@ -6873,11 +7027,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlTypeName typeName;
     boolean withLocalTimeZone = false;
     final Span s;
-    if (jj_2_695(2)) {
+    if (jj_2_711(2)) {
       jj_consume_token(DATE);
         typeName = SqlTypeName.DATE;
         {if (true) return new SqlBasicTypeNameSpec(typeName, getPos());}
-    } else if (jj_2_696(2)) {
+    } else if (jj_2_712(2)) {
       jj_consume_token(TIME);
              s = span();
       precision = PrecisionOpt();
@@ -6888,7 +7042,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             typeName = SqlTypeName.TIME;
         }
         {if (true) return new SqlBasicTypeNameSpec(typeName, precision, s.end(this));}
-    } else if (jj_2_697(2)) {
+    } else if (jj_2_713(2)) {
       jj_consume_token(TIMESTAMP);
                   s = span();
       precision = PrecisionOpt();
@@ -6909,7 +7063,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 // Parse an optional data type precision, default is -1.
   final public int PrecisionOpt() throws ParseException {
     int precision = -1;
-    if (jj_2_698(2)) {
+    if (jj_2_714(2)) {
       jj_consume_token(LPAREN);
       precision = UnsignedIntLiteral();
       jj_consume_token(RPAREN);
@@ -6930,12 +7084,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 * @return true if this is "with local time zone".
 */
   final public boolean TimeZoneOpt() throws ParseException {
-    if (jj_2_699(3)) {
+    if (jj_2_715(3)) {
       jj_consume_token(WITHOUT);
       jj_consume_token(TIME);
       jj_consume_token(ZONE);
                               {if (true) return false;}
-    } else if (jj_2_700(2)) {
+    } else if (jj_2_716(2)) {
       jj_consume_token(WITH);
       jj_consume_token(LOCAL);
       jj_consume_token(TIME);
@@ -6979,17 +7133,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     TimeUnit interval;
     final TimeUnit unit;
     final SqlNode node;
-    if (jj_2_726(2)) {
+    if (jj_2_742(2)) {
       jj_consume_token(CAST);
                  s = span();
       jj_consume_token(LPAREN);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                                                                 args = startList(e);
       jj_consume_token(AS);
-      if (jj_2_701(2)) {
+      if (jj_2_717(2)) {
         dt = DataType();
                               args.add(dt);
-      } else if (jj_2_702(2)) {
+      } else if (jj_2_718(2)) {
         jj_consume_token(INTERVAL);
         e = IntervalQualifier();
                                                  args.add(e);
@@ -6999,17 +7153,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       }
       jj_consume_token(RPAREN);
             {if (true) return SqlStdOperatorTable.CAST.createCall(s.end(this), args);}
-    } else if (jj_2_727(2)) {
+    } else if (jj_2_743(2)) {
       jj_consume_token(EXTRACT);
             s = span();
       jj_consume_token(LPAREN);
-      if (jj_2_703(2)) {
+      if (jj_2_719(2)) {
         jj_consume_token(NANOSECOND);
                            unit = TimeUnit.NANOSECOND;
-      } else if (jj_2_704(2)) {
+      } else if (jj_2_720(2)) {
         jj_consume_token(MICROSECOND);
                             unit = TimeUnit.MICROSECOND;
-      } else if (jj_2_705(2)) {
+      } else if (jj_2_721(2)) {
         unit = TimeUnit();
       } else {
         jj_consume_token(-1);
@@ -7021,7 +7175,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                                                        args.add(e);
       jj_consume_token(RPAREN);
             {if (true) return SqlStdOperatorTable.EXTRACT.createCall(s.end(this), args);}
-    } else if (jj_2_728(2)) {
+    } else if (jj_2_744(2)) {
       jj_consume_token(POSITION);
                      s = span();
       jj_consume_token(LPAREN);
@@ -7033,7 +7187,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(IN);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                                                        args.add(e);
-      if (jj_2_706(2)) {
+      if (jj_2_722(2)) {
         jj_consume_token(FROM);
         e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                                                            args.add(e);
@@ -7042,7 +7196,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       }
       jj_consume_token(RPAREN);
             {if (true) return SqlStdOperatorTable.POSITION.createCall(s.end(this), args);}
-    } else if (jj_2_729(2)) {
+    } else if (jj_2_745(2)) {
       jj_consume_token(CONVERT);
                     s = span();
       jj_consume_token(LPAREN);
@@ -7053,26 +7207,26 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             args.add(name);
       jj_consume_token(RPAREN);
             {if (true) return SqlStdOperatorTable.CONVERT.createCall(s.end(this), args);}
-    } else if (jj_2_730(2)) {
+    } else if (jj_2_746(2)) {
       jj_consume_token(TRANSLATE);
                       s = span();
       jj_consume_token(LPAREN);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
             args = startList(e);
-      if (jj_2_708(2)) {
+      if (jj_2_724(2)) {
         jj_consume_token(USING);
         name = SimpleIdentifier();
                 args.add(name);
         jj_consume_token(RPAREN);
                 {if (true) return SqlStdOperatorTable.TRANSLATE.createCall(s.end(this),
                     args);}
-      } else if (jj_2_709(2)) {
-        label_50:
+      } else if (jj_2_725(2)) {
+        label_52:
         while (true) {
-          if (jj_2_707(2)) {
+          if (jj_2_723(2)) {
             ;
           } else {
-            break label_50;
+            break label_52;
           }
           jj_consume_token(COMMA);
           e = Expression(ExprContext.ACCEPT_SUB_QUERY);
@@ -7085,7 +7239,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(-1);
         throw new ParseException();
       }
-    } else if (jj_2_731(2)) {
+    } else if (jj_2_747(2)) {
       jj_consume_token(OVERLAY);
                     s = span();
       jj_consume_token(LPAREN);
@@ -7097,7 +7251,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(FROM);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
             args.add(e);
-      if (jj_2_710(2)) {
+      if (jj_2_726(2)) {
         jj_consume_token(FOR);
         e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                 args.add(e);
@@ -7106,15 +7260,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       }
       jj_consume_token(RPAREN);
             {if (true) return SqlStdOperatorTable.OVERLAY.createCall(s.end(this), args);}
-    } else if (jj_2_732(2)) {
+    } else if (jj_2_748(2)) {
       jj_consume_token(FLOOR);
                   s = span();
       e = FloorCeilOptions(s, true);
             {if (true) return e;}
-    } else if (jj_2_733(2)) {
-      if (jj_2_711(2)) {
+    } else if (jj_2_749(2)) {
+      if (jj_2_727(2)) {
         jj_consume_token(CEIL);
-      } else if (jj_2_712(2)) {
+      } else if (jj_2_728(2)) {
         jj_consume_token(CEILING);
       } else {
         jj_consume_token(-1);
@@ -7123,15 +7277,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                                 s = span();
       e = FloorCeilOptions(s, false);
             {if (true) return e;}
-    } else if (jj_2_734(2)) {
+    } else if (jj_2_750(2)) {
       jj_consume_token(SUBSTRING);
                       s = span();
       jj_consume_token(LPAREN);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
           args = startList(e);
-      if (jj_2_713(2)) {
+      if (jj_2_729(2)) {
         jj_consume_token(FROM);
-      } else if (jj_2_714(2)) {
+      } else if (jj_2_730(2)) {
         jj_consume_token(COMMA);
       } else {
         jj_consume_token(-1);
@@ -7139,10 +7293,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       }
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
           args.add(e);
-      if (jj_2_717(2)) {
-        if (jj_2_715(2)) {
+      if (jj_2_733(2)) {
+        if (jj_2_731(2)) {
           jj_consume_token(FOR);
-        } else if (jj_2_716(2)) {
+        } else if (jj_2_732(2)) {
           jj_consume_token(COMMA);
         } else {
           jj_consume_token(-1);
@@ -7156,23 +7310,23 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(RPAREN);
             {if (true) return SqlStdOperatorTable.SUBSTRING.createCall(
                 s.end(this), args);}
-    } else if (jj_2_735(2)) {
+    } else if (jj_2_751(2)) {
       jj_consume_token(TRIM);
             SqlLiteral flag = null;
             SqlNode trimChars = null;
             s = span();
       jj_consume_token(LPAREN);
-      if (jj_2_725(2)) {
-        if (jj_2_721(2)) {
-          if (jj_2_718(2)) {
+      if (jj_2_741(2)) {
+        if (jj_2_737(2)) {
+          if (jj_2_734(2)) {
             jj_consume_token(BOTH);
                     s.add(this);
                     flag = SqlTrimFunction.Flag.BOTH.symbol(getPos());
-          } else if (jj_2_719(2)) {
+          } else if (jj_2_735(2)) {
             jj_consume_token(TRAILING);
                     s.add(this);
                     flag = SqlTrimFunction.Flag.TRAILING.symbol(getPos());
-          } else if (jj_2_720(2)) {
+          } else if (jj_2_736(2)) {
             jj_consume_token(LEADING);
                     s.add(this);
                     flag = SqlTrimFunction.Flag.LEADING.symbol(getPos());
@@ -7183,18 +7337,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         } else {
           ;
         }
-        if (jj_2_722(2)) {
+        if (jj_2_738(2)) {
           trimChars = Expression(ExprContext.ACCEPT_SUB_QUERY);
         } else {
           ;
         }
-        if (jj_2_723(2)) {
+        if (jj_2_739(2)) {
           jj_consume_token(FROM);
                     if (null == flag && null == trimChars) {
                         {if (true) throw SqlUtil.newContextException(getPos(),
                             RESOURCE.illegalFromEmpty());}
                     }
-        } else if (jj_2_724(2)) {
+        } else if (jj_2_740(2)) {
           jj_consume_token(RPAREN);
                     // This is to handle the case of TRIM(x)
                     // (FRG-191).
@@ -7222,37 +7376,37 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             args.add(e);
       jj_consume_token(RPAREN);
             {if (true) return SqlStdOperatorTable.TRIM.createCall(s.end(this), args);}
-    } else if (jj_2_736(2)) {
+    } else if (jj_2_752(2)) {
       node = TimestampAddFunctionCall();
                                             {if (true) return node;}
-    } else if (jj_2_737(2)) {
+    } else if (jj_2_753(2)) {
       node = TimestampDiffFunctionCall();
                                              {if (true) return node;}
-    } else if (jj_2_738(2)) {
+    } else if (jj_2_754(2)) {
       node = MatchRecognizeFunctionCall();
                                               {if (true) return node;}
-    } else if (jj_2_739(2)) {
+    } else if (jj_2_755(2)) {
       node = JsonExistsFunctionCall();
                                           {if (true) return node;}
-    } else if (jj_2_740(2)) {
+    } else if (jj_2_756(2)) {
       node = JsonValueFunctionCall();
                                          {if (true) return node;}
-    } else if (jj_2_741(2)) {
+    } else if (jj_2_757(2)) {
       node = JsonQueryFunctionCall();
                                          {if (true) return node;}
-    } else if (jj_2_742(2)) {
+    } else if (jj_2_758(2)) {
       node = JsonObjectFunctionCall();
                                           {if (true) return node;}
-    } else if (jj_2_743(2)) {
+    } else if (jj_2_759(2)) {
       node = JsonObjectAggFunctionCall();
                                              {if (true) return node;}
-    } else if (jj_2_744(2)) {
+    } else if (jj_2_760(2)) {
       node = JsonArrayFunctionCall();
                                          {if (true) return node;}
-    } else if (jj_2_745(2)) {
+    } else if (jj_2_761(2)) {
       node = JsonArrayAggFunctionCall();
                                             {if (true) return node;}
-    } else if (jj_2_746(2)) {
+    } else if (jj_2_762(2)) {
       node = GroupByWindowingCall();
                                         {if (true) return node;}
     } else {
@@ -7264,15 +7418,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlJsonEncoding JsonRepresentation() throws ParseException {
     jj_consume_token(JSON);
-    if (jj_2_750(2)) {
+    if (jj_2_766(2)) {
       jj_consume_token(ENCODING);
-      if (jj_2_747(2)) {
+      if (jj_2_763(2)) {
         jj_consume_token(UTF8);
                      {if (true) return SqlJsonEncoding.UTF8;}
-      } else if (jj_2_748(2)) {
+      } else if (jj_2_764(2)) {
         jj_consume_token(UTF16);
                       {if (true) return SqlJsonEncoding.UTF16;}
-      } else if (jj_2_749(2)) {
+      } else if (jj_2_765(2)) {
         jj_consume_token(UTF32);
                       {if (true) return SqlJsonEncoding.UTF32;}
       } else {
@@ -7302,7 +7456,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlDataTypeSpec JsonOutputClause() throws ParseException {
     SqlDataTypeSpec dataType;
     dataType = JsonReturningClause();
-    if (jj_2_751(2)) {
+    if (jj_2_767(2)) {
       jj_consume_token(FORMAT);
       JsonRepresentation();
     } else {
@@ -7327,19 +7481,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(COMMA);
     e = Expression(ExprContext.ACCEPT_NON_QUERY);
             args.add(e);
-    if (jj_2_753(2)) {
+    if (jj_2_769(2)) {
       jj_consume_token(PASSING);
       e = Expression(ExprContext.ACCEPT_NON_QUERY);
 
       jj_consume_token(AS);
       e = SimpleIdentifier();
 
-      label_51:
+      label_53:
       while (true) {
-        if (jj_2_752(2)) {
+        if (jj_2_768(2)) {
           ;
         } else {
-          break label_51;
+          break label_53;
         }
         jj_consume_token(COMMA);
         e = Expression(ExprContext.ACCEPT_NON_QUERY);
@@ -7356,16 +7510,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlJsonExistsErrorBehavior JsonExistsErrorBehavior() throws ParseException {
-    if (jj_2_754(2)) {
+    if (jj_2_770(2)) {
       jj_consume_token(TRUE);
              {if (true) return SqlJsonExistsErrorBehavior.TRUE;}
-    } else if (jj_2_755(2)) {
+    } else if (jj_2_771(2)) {
       jj_consume_token(FALSE);
               {if (true) return SqlJsonExistsErrorBehavior.FALSE;}
-    } else if (jj_2_756(2)) {
+    } else if (jj_2_772(2)) {
       jj_consume_token(UNKNOWN);
                 {if (true) return SqlJsonExistsErrorBehavior.UNKNOWN;}
-    } else if (jj_2_757(2)) {
+    } else if (jj_2_773(2)) {
       jj_consume_token(ERROR);
               {if (true) return SqlJsonExistsErrorBehavior.ERROR;}
     } else {
@@ -7385,7 +7539,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
     commonSyntax = JsonApiCommonSyntax();
         args.addAll(commonSyntax);
-    if (jj_2_758(2)) {
+    if (jj_2_774(2)) {
       errorBehavior = JsonExistsErrorBehavior();
                                                     args.add(errorBehavior.symbol(getPos()));
       jj_consume_token(ON);
@@ -7401,13 +7555,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public List<SqlNode> JsonValueEmptyOrErrorBehavior() throws ParseException {
     final List<SqlNode> list = new ArrayList<SqlNode>();
     final SqlNode e;
-    if (jj_2_759(2)) {
+    if (jj_2_775(2)) {
       jj_consume_token(ERROR);
             list.add(SqlJsonValueEmptyOrErrorBehavior.ERROR.symbol(getPos()));
-    } else if (jj_2_760(2)) {
+    } else if (jj_2_776(2)) {
       jj_consume_token(NULL);
             list.add(SqlJsonValueEmptyOrErrorBehavior.NULL.symbol(getPos()));
-    } else if (jj_2_761(2)) {
+    } else if (jj_2_777(2)) {
       jj_consume_token(DEFAULT_);
       e = Expression(ExprContext.ACCEPT_NON_QUERY);
             list.add(SqlJsonValueEmptyOrErrorBehavior.DEFAULT.symbol(getPos()));
@@ -7417,10 +7571,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       throw new ParseException();
     }
     jj_consume_token(ON);
-    if (jj_2_762(2)) {
+    if (jj_2_778(2)) {
       jj_consume_token(EMPTY);
             list.add(SqlJsonEmptyOrError.EMPTY.symbol(getPos()));
-    } else if (jj_2_763(2)) {
+    } else if (jj_2_779(2)) {
       jj_consume_token(ERROR);
             list.add(SqlJsonEmptyOrError.ERROR.symbol(getPos()));
     } else {
@@ -7442,19 +7596,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
     commonSyntax = JsonApiCommonSyntax();
         args.addAll(commonSyntax);
-    if (jj_2_764(2)) {
+    if (jj_2_780(2)) {
       e = JsonReturningClause();
             args.add(SqlJsonValueReturning.RETURNING.symbol(getPos()));
             args.add(e);
     } else {
       ;
     }
-    label_52:
+    label_54:
     while (true) {
-      if (jj_2_765(2)) {
+      if (jj_2_781(2)) {
         ;
       } else {
-        break label_52;
+        break label_54;
       }
       behavior = JsonValueEmptyOrErrorBehavior();
             args.addAll(behavior);
@@ -7467,17 +7621,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public List<SqlNode> JsonQueryEmptyOrErrorBehavior() throws ParseException {
     final List<SqlNode> list = new ArrayList<SqlNode>();
     SqlNode e;
-    if (jj_2_766(2)) {
+    if (jj_2_782(2)) {
       jj_consume_token(ERROR);
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.ERROR, getPos()));
-    } else if (jj_2_767(2)) {
+    } else if (jj_2_783(2)) {
       jj_consume_token(NULL);
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.NULL, getPos()));
-    } else if (jj_2_768(2)) {
+    } else if (jj_2_784(2)) {
       jj_consume_token(EMPTY);
       jj_consume_token(ARRAY);
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.EMPTY_ARRAY, getPos()));
-    } else if (jj_2_769(2)) {
+    } else if (jj_2_785(2)) {
       jj_consume_token(EMPTY);
       jj_consume_token(OBJECT);
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.EMPTY_OBJECT, getPos()));
@@ -7486,10 +7640,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       throw new ParseException();
     }
     jj_consume_token(ON);
-    if (jj_2_770(2)) {
+    if (jj_2_786(2)) {
       jj_consume_token(EMPTY);
             list.add(SqlLiteral.createSymbol(SqlJsonEmptyOrError.EMPTY, getPos()));
-    } else if (jj_2_771(2)) {
+    } else if (jj_2_787(2)) {
       jj_consume_token(ERROR);
             list.add(SqlLiteral.createSymbol(SqlJsonEmptyOrError.ERROR, getPos()));
     } else {
@@ -7502,31 +7656,31 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlNode JsonQueryWrapperBehavior() throws ParseException {
     SqlNode e;
-    if (jj_2_776(2)) {
+    if (jj_2_792(2)) {
       jj_consume_token(WITHOUT);
-      if (jj_2_772(2)) {
+      if (jj_2_788(2)) {
         jj_consume_token(ARRAY);
       } else {
         ;
       }
         {if (true) return SqlLiteral.createSymbol(SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY, getPos());}
-    } else if (jj_2_777(2)) {
+    } else if (jj_2_793(2)) {
       jj_consume_token(WITH);
       jj_consume_token(CONDITIONAL);
-      if (jj_2_773(2)) {
+      if (jj_2_789(2)) {
         jj_consume_token(ARRAY);
       } else {
         ;
       }
         {if (true) return SqlLiteral.createSymbol(SqlJsonQueryWrapperBehavior.WITH_CONDITIONAL_ARRAY, getPos());}
-    } else if (jj_2_778(2)) {
+    } else if (jj_2_794(2)) {
       jj_consume_token(WITH);
-      if (jj_2_774(2)) {
+      if (jj_2_790(2)) {
         jj_consume_token(UNCONDITIONAL);
       } else {
         ;
       }
-      if (jj_2_775(2)) {
+      if (jj_2_791(2)) {
         jj_consume_token(ARRAY);
       } else {
         ;
@@ -7551,19 +7705,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     commonSyntax = JsonApiCommonSyntax();
         args[0] = commonSyntax.get(0);
         args[1] = commonSyntax.get(1);
-    if (jj_2_779(2)) {
+    if (jj_2_795(2)) {
       e = JsonQueryWrapperBehavior();
       jj_consume_token(WRAPPER);
             args[2] = e;
     } else {
       ;
     }
-    label_53:
+    label_55:
     while (true) {
-      if (jj_2_780(2)) {
+      if (jj_2_796(2)) {
         ;
       } else {
-        break label_53;
+        break label_55;
       }
       behavior = JsonQueryEmptyOrErrorBehavior();
             final SqlJsonEmptyOrError symbol =
@@ -7593,7 +7747,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final List<SqlNode> list = new ArrayList<SqlNode>();
     SqlNode e;
     boolean kvMode = false;
-    if (jj_2_781(2)) {
+    if (jj_2_797(2)) {
       jj_consume_token(KEY);
                 kvMode = true;
     } else {
@@ -7601,9 +7755,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     e = JsonName();
         list.add(e);
-    if (jj_2_782(2)) {
+    if (jj_2_798(2)) {
       jj_consume_token(VALUE);
-    } else if (jj_2_783(2)) {
+    } else if (jj_2_799(2)) {
       jj_consume_token(COLON);
             if (kvMode) {
                 {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.illegalColon());}
@@ -7619,12 +7773,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlNode JsonConstructorNullClause() throws ParseException {
-    if (jj_2_784(2)) {
+    if (jj_2_800(2)) {
       jj_consume_token(NULL);
       jj_consume_token(ON);
       jj_consume_token(NULL);
         {if (true) return SqlLiteral.createSymbol(SqlJsonConstructorNullClause.NULL_ON_NULL, getPos());}
-    } else if (jj_2_785(2)) {
+    } else if (jj_2_801(2)) {
       jj_consume_token(ABSENT);
       jj_consume_token(ON);
       jj_consume_token(NULL);
@@ -7645,15 +7799,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(JSON_OBJECT);
                     span = span();
     jj_consume_token(LPAREN);
-    if (jj_2_787(2)) {
+    if (jj_2_803(2)) {
       list = JsonNameAndValue();
             nvArgs.addAll(list);
-      label_54:
+      label_56:
       while (true) {
-        if (jj_2_786(2)) {
+        if (jj_2_802(2)) {
           ;
         } else {
-          break label_54;
+          break label_56;
         }
         jj_consume_token(COMMA);
         list = JsonNameAndValue();
@@ -7662,7 +7816,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_788(2)) {
+    if (jj_2_804(2)) {
       e = JsonConstructorNullClause();
             otherArgs[0] = e;
     } else {
@@ -7689,7 +7843,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     list = JsonNameAndValue();
         args[0] = list.get(0);
         args[1] = list.get(1);
-    if (jj_2_789(2)) {
+    if (jj_2_805(2)) {
       e = JsonConstructorNullClause();
             nullClause = (SqlJsonConstructorNullClause) ((SqlLiteral) e).getValue();
     } else {
@@ -7709,15 +7863,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(JSON_ARRAY);
                    span = span();
     jj_consume_token(LPAREN);
-    if (jj_2_791(2)) {
+    if (jj_2_807(2)) {
       e = Expression(ExprContext.ACCEPT_NON_QUERY);
             elements.add(e);
-      label_55:
+      label_57:
       while (true) {
-        if (jj_2_790(2)) {
+        if (jj_2_806(2)) {
           ;
         } else {
-          break label_55;
+          break label_57;
         }
         jj_consume_token(COMMA);
         e = Expression(ExprContext.ACCEPT_NON_QUERY);
@@ -7726,7 +7880,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_792(2)) {
+    if (jj_2_808(2)) {
       e = JsonConstructorNullClause();
             otherArgs[0] = e;
     } else {
@@ -7742,7 +7896,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlNodeList JsonArrayAggOrderByClause() throws ParseException {
     final SqlNodeList orderList;
-    if (jj_2_793(2)) {
+    if (jj_2_809(2)) {
       orderList = OrderBy(true);
     } else {
           orderList = null;
@@ -7766,7 +7920,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     e = Expression(ExprContext.ACCEPT_NON_QUERY);
         valueExpr = e;
     orderList = JsonArrayAggOrderByClause();
-    if (jj_2_794(2)) {
+    if (jj_2_810(2)) {
       e = JsonConstructorNullClause();
             nullClause = (SqlJsonConstructorNullClause) ((SqlLiteral) e).getValue();
     } else {
@@ -7775,7 +7929,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(RPAREN);
         aggCall = SqlStdOperatorTable.JSON_ARRAYAGG.with(nullClause)
             .createCall(span.end(this), valueExpr, orderList);
-    if (jj_2_795(2)) {
+    if (jj_2_811(2)) {
       e = withinGroup(aggCall);
             if (orderList != null) {
                 {if (true) throw SqlUtil.newContextException(span.pos().plus(e.getParserPosition()),
@@ -7854,13 +8008,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     final List<SqlNode> args;
     final SqlOperator op;
-    if (jj_2_796(2)) {
+    if (jj_2_812(2)) {
       jj_consume_token(TUMBLE);
             op = SqlStdOperatorTable.TUMBLE_OLD;
-    } else if (jj_2_797(2)) {
+    } else if (jj_2_813(2)) {
       jj_consume_token(HOP);
             op = SqlStdOperatorTable.HOP_OLD;
-    } else if (jj_2_798(2)) {
+    } else if (jj_2_814(2)) {
       jj_consume_token(SESSION);
             op = SqlStdOperatorTable.SESSION_OLD;
     } else {
@@ -7876,23 +8030,23 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlCall MatchRecognizeFunctionCall() throws ParseException {
     final SqlCall func;
     final Span s;
-    if (jj_2_799(2)) {
+    if (jj_2_815(2)) {
       jj_consume_token(CLASSIFIER);
                        s = span();
       jj_consume_token(LPAREN);
       jj_consume_token(RPAREN);
             func = SqlStdOperatorTable.CLASSIFIER.createCall(s.end(this));
-    } else if (jj_2_800(2)) {
+    } else if (jj_2_816(2)) {
       jj_consume_token(MATCH_NUMBER);
                          s = span();
       jj_consume_token(LPAREN);
       jj_consume_token(RPAREN);
             func = SqlStdOperatorTable.MATCH_NUMBER.createCall(s.end(this));
-    } else if (jj_2_801(3)) {
+    } else if (jj_2_817(3)) {
       func = MatchRecognizeNavigationLogical();
-    } else if (jj_2_802(2)) {
+    } else if (jj_2_818(2)) {
       func = MatchRecognizeNavigationPhysical();
-    } else if (jj_2_803(2)) {
+    } else if (jj_2_819(2)) {
       func = MatchRecognizeCallWithModifier();
     } else {
       jj_consume_token(-1);
@@ -7906,10 +8060,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     final SqlOperator runningOp;
     final SqlNode func;
-    if (jj_2_804(2)) {
+    if (jj_2_820(2)) {
       jj_consume_token(RUNNING);
                     runningOp = SqlStdOperatorTable.RUNNING;
-    } else if (jj_2_805(2)) {
+    } else if (jj_2_821(2)) {
       jj_consume_token(FINAL);
                   runningOp = SqlStdOperatorTable.FINAL;
     } else {
@@ -7929,19 +8083,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlOperator runningOp;
     SqlNode arg0;
     SqlNode arg1 = SqlLiteral.createExactNumeric("0", SqlParserPos.ZERO);
-    if (jj_2_806(2)) {
+    if (jj_2_822(2)) {
       jj_consume_token(RUNNING);
                     runningOp = SqlStdOperatorTable.RUNNING; s.add(this);
-    } else if (jj_2_807(2)) {
+    } else if (jj_2_823(2)) {
       jj_consume_token(FINAL);
                   runningOp = SqlStdOperatorTable.FINAL; s.add(this);
     } else {
           runningOp = null;
     }
-    if (jj_2_808(2)) {
+    if (jj_2_824(2)) {
       jj_consume_token(FIRST);
                   funcOp = SqlStdOperatorTable.FIRST;
-    } else if (jj_2_809(2)) {
+    } else if (jj_2_825(2)) {
       jj_consume_token(LAST);
                  funcOp = SqlStdOperatorTable.LAST;
     } else {
@@ -7951,7 +8105,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       s.add(this);
     jj_consume_token(LPAREN);
     arg0 = Expression(ExprContext.ACCEPT_SUB_QUERY);
-    if (jj_2_810(2)) {
+    if (jj_2_826(2)) {
       jj_consume_token(COMMA);
       arg1 = NumericLiteral();
     } else {
@@ -7973,10 +8127,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlOperator funcOp;
     SqlNode arg0;
     SqlNode arg1 = SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO);
-    if (jj_2_811(2)) {
+    if (jj_2_827(2)) {
       jj_consume_token(PREV);
                  funcOp = SqlStdOperatorTable.PREV;
-    } else if (jj_2_812(2)) {
+    } else if (jj_2_828(2)) {
       jj_consume_token(NEXT);
                  funcOp = SqlStdOperatorTable.NEXT;
     } else {
@@ -7986,7 +8140,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       s = span();
     jj_consume_token(LPAREN);
     arg0 = Expression(ExprContext.ACCEPT_SUB_QUERY);
-    if (jj_2_813(2)) {
+    if (jj_2_829(2)) {
       jj_consume_token(COMMA);
       arg1 = NumericLiteral();
     } else {
@@ -8027,12 +8181,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public Pair<SqlParserPos, SqlOperator> NullTreatment() throws ParseException {
     final Span span;
-    if (jj_2_814(2)) {
+    if (jj_2_830(2)) {
       jj_consume_token(IGNORE);
                span = span();
       jj_consume_token(NULLS);
         {if (true) return Pair.of(span.end(this), SqlStdOperatorTable.IGNORE_NULLS);}
-    } else if (jj_2_815(2)) {
+    } else if (jj_2_831(2)) {
       jj_consume_token(RESPECT);
                 span = span();
       jj_consume_token(NULLS);
@@ -8073,31 +8227,31 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span overSpan;
     final SqlNode over;
     final Span withinGroupSpan;
-    if (jj_2_816(2)) {
+    if (jj_2_832(2)) {
       call = StringAggFunctionCall();
-    } else if (jj_2_817(2)) {
+    } else if (jj_2_833(2)) {
       call = NamedCall();
     } else {
       jj_consume_token(-1);
       throw new ParseException();
     }
-    if (jj_2_818(2)) {
+    if (jj_2_834(2)) {
       call = nullTreatment(call);
     } else {
       ;
     }
-    if (jj_2_819(2)) {
+    if (jj_2_835(2)) {
       // decide between WITHIN DISTINCT and WITHIN GROUP
               call = withinDistinct(call);
     } else {
       ;
     }
-    if (jj_2_820(2)) {
+    if (jj_2_836(2)) {
       call = withinGroup(call);
     } else {
       ;
     }
-    if (jj_2_821(2)) {
+    if (jj_2_837(2)) {
       jj_consume_token(FILTER);
                    filterSpan = span();
       jj_consume_token(LPAREN);
@@ -8109,12 +8263,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_824(2)) {
+    if (jj_2_840(2)) {
       jj_consume_token(OVER);
                  overSpan = span();
-      if (jj_2_822(2)) {
+      if (jj_2_838(2)) {
         over = SimpleIdentifier();
-      } else if (jj_2_823(2)) {
+      } else if (jj_2_839(2)) {
         over = WindowSpecification();
       } else {
         jj_consume_token(-1);
@@ -8134,7 +8288,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     final List<SqlNode> args;
     SqlLiteral quantifier = null;
-    if (jj_2_825(2)) {
+    if (jj_2_841(2)) {
       jj_consume_token(SPECIFIC);
             funcType = SqlFunctionCategory.USER_DEFINED_SPECIFIC_FUNCTION;
     } else {
@@ -8142,16 +8296,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     qualifiedName = FunctionName();
         s = span();
-    if (jj_2_826(2)) {
+    if (jj_2_842(2)) {
       jj_consume_token(LPAREN);
       jj_consume_token(STAR);
             args = startList(SqlIdentifier.star(getPos()));
       jj_consume_token(RPAREN);
-    } else if (jj_2_827(2)) {
+    } else if (jj_2_843(2)) {
       jj_consume_token(LPAREN);
       jj_consume_token(RPAREN);
             args = Collections.emptyList();
-    } else if (jj_2_828(2)) {
+    } else if (jj_2_844(2)) {
       args = FunctionParameterList(ExprContext.ACCEPT_SUB_QUERY);
             quantifier = (SqlLiteral) args.get(0);
             args.remove(0);
@@ -8175,7 +8329,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
     e = Expression(ExprContext.ACCEPT_SUB_QUERY);
         args = startList(e);
-    if (jj_2_829(2)) {
+    if (jj_2_845(2)) {
       jj_consume_token(TO);
       unit = TimeUnit();
             args.add(new SqlIntervalQualifier(unit, null, getPos()));
@@ -8187,12 +8341,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             ? SqlStdOperatorTable.FLOOR
             : SqlStdOperatorTable.CEIL;
         function =  op.createCall(s.end(this), args);
-    if (jj_2_832(2)) {
+    if (jj_2_848(2)) {
       jj_consume_token(OVER);
                  s1 = span();
-      if (jj_2_830(2)) {
+      if (jj_2_846(2)) {
         e = SimpleIdentifier();
-      } else if (jj_2_831(2)) {
+      } else if (jj_2_847(2)) {
         e = WindowSpecification();
       } else {
         jj_consume_token(-1);
@@ -8220,9 +8374,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlIdentifier FunctionName() throws ParseException {
     SqlIdentifier qualifiedName;
-    if (jj_2_833(2)) {
+    if (jj_2_849(2)) {
       qualifiedName = CompoundIdentifier();
-    } else if (jj_2_834(2)) {
+    } else if (jj_2_850(2)) {
       qualifiedName = ReservedFunctionName();
     } else {
       jj_consume_token(-1);
@@ -8236,133 +8390,133 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * Parses a reserved word which is used as the name of a function.
  */
   final public SqlIdentifier ReservedFunctionName() throws ParseException {
-    if (jj_2_835(2)) {
+    if (jj_2_851(2)) {
       jj_consume_token(ABS);
-    } else if (jj_2_836(2)) {
+    } else if (jj_2_852(2)) {
       jj_consume_token(AVG);
-    } else if (jj_2_837(2)) {
+    } else if (jj_2_853(2)) {
       jj_consume_token(CARDINALITY);
-    } else if (jj_2_838(2)) {
+    } else if (jj_2_854(2)) {
       jj_consume_token(CEILING);
-    } else if (jj_2_839(2)) {
+    } else if (jj_2_855(2)) {
       jj_consume_token(CHAR_LENGTH);
-    } else if (jj_2_840(2)) {
+    } else if (jj_2_856(2)) {
       jj_consume_token(CHARACTER_LENGTH);
-    } else if (jj_2_841(2)) {
+    } else if (jj_2_857(2)) {
       jj_consume_token(COALESCE);
-    } else if (jj_2_842(2)) {
+    } else if (jj_2_858(2)) {
       jj_consume_token(COLLECT);
-    } else if (jj_2_843(2)) {
+    } else if (jj_2_859(2)) {
       jj_consume_token(COVAR_POP);
-    } else if (jj_2_844(2)) {
+    } else if (jj_2_860(2)) {
       jj_consume_token(COVAR_SAMP);
-    } else if (jj_2_845(2)) {
+    } else if (jj_2_861(2)) {
       jj_consume_token(CUME_DIST);
-    } else if (jj_2_846(2)) {
+    } else if (jj_2_862(2)) {
       jj_consume_token(COUNT);
-    } else if (jj_2_847(2)) {
+    } else if (jj_2_863(2)) {
       jj_consume_token(CURRENT_DATE);
-    } else if (jj_2_848(2)) {
+    } else if (jj_2_864(2)) {
       jj_consume_token(CURRENT_TIME);
-    } else if (jj_2_849(2)) {
+    } else if (jj_2_865(2)) {
       jj_consume_token(CURRENT_TIMESTAMP);
-    } else if (jj_2_850(2)) {
+    } else if (jj_2_866(2)) {
       jj_consume_token(DENSE_RANK);
-    } else if (jj_2_851(2)) {
+    } else if (jj_2_867(2)) {
       jj_consume_token(ELEMENT);
-    } else if (jj_2_852(2)) {
+    } else if (jj_2_868(2)) {
       jj_consume_token(EVERY);
-    } else if (jj_2_853(2)) {
+    } else if (jj_2_869(2)) {
       jj_consume_token(EXP);
-    } else if (jj_2_854(2)) {
+    } else if (jj_2_870(2)) {
       jj_consume_token(FIRST_VALUE);
-    } else if (jj_2_855(2)) {
+    } else if (jj_2_871(2)) {
       jj_consume_token(FLOOR);
-    } else if (jj_2_856(2)) {
+    } else if (jj_2_872(2)) {
       jj_consume_token(FUSION);
-    } else if (jj_2_857(2)) {
+    } else if (jj_2_873(2)) {
       jj_consume_token(INTERSECTION);
-    } else if (jj_2_858(2)) {
+    } else if (jj_2_874(2)) {
       jj_consume_token(GROUPING);
-    } else if (jj_2_859(2)) {
+    } else if (jj_2_875(2)) {
       jj_consume_token(HOUR);
-    } else if (jj_2_860(2)) {
+    } else if (jj_2_876(2)) {
       jj_consume_token(LAG);
-    } else if (jj_2_861(2)) {
+    } else if (jj_2_877(2)) {
       jj_consume_token(LEAD);
-    } else if (jj_2_862(2)) {
+    } else if (jj_2_878(2)) {
       jj_consume_token(LEFT);
-    } else if (jj_2_863(2)) {
+    } else if (jj_2_879(2)) {
       jj_consume_token(LAST_VALUE);
-    } else if (jj_2_864(2)) {
+    } else if (jj_2_880(2)) {
       jj_consume_token(LN);
-    } else if (jj_2_865(2)) {
+    } else if (jj_2_881(2)) {
       jj_consume_token(LOCALTIME);
-    } else if (jj_2_866(2)) {
+    } else if (jj_2_882(2)) {
       jj_consume_token(LOCALTIMESTAMP);
-    } else if (jj_2_867(2)) {
+    } else if (jj_2_883(2)) {
       jj_consume_token(LOWER);
-    } else if (jj_2_868(2)) {
+    } else if (jj_2_884(2)) {
       jj_consume_token(MAX);
-    } else if (jj_2_869(2)) {
+    } else if (jj_2_885(2)) {
       jj_consume_token(MIN);
-    } else if (jj_2_870(2)) {
+    } else if (jj_2_886(2)) {
       jj_consume_token(MINUTE);
-    } else if (jj_2_871(2)) {
+    } else if (jj_2_887(2)) {
       jj_consume_token(MOD);
-    } else if (jj_2_872(2)) {
+    } else if (jj_2_888(2)) {
       jj_consume_token(MONTH);
-    } else if (jj_2_873(2)) {
+    } else if (jj_2_889(2)) {
       jj_consume_token(NTH_VALUE);
-    } else if (jj_2_874(2)) {
+    } else if (jj_2_890(2)) {
       jj_consume_token(NTILE);
-    } else if (jj_2_875(2)) {
+    } else if (jj_2_891(2)) {
       jj_consume_token(NULLIF);
-    } else if (jj_2_876(2)) {
+    } else if (jj_2_892(2)) {
       jj_consume_token(OCTET_LENGTH);
-    } else if (jj_2_877(2)) {
+    } else if (jj_2_893(2)) {
       jj_consume_token(PERCENT_RANK);
-    } else if (jj_2_878(2)) {
+    } else if (jj_2_894(2)) {
       jj_consume_token(PERCENTILE_CONT);
-    } else if (jj_2_879(2)) {
+    } else if (jj_2_895(2)) {
       jj_consume_token(PERCENTILE_DISC);
-    } else if (jj_2_880(2)) {
+    } else if (jj_2_896(2)) {
       jj_consume_token(POWER);
-    } else if (jj_2_881(2)) {
+    } else if (jj_2_897(2)) {
       jj_consume_token(RANK);
-    } else if (jj_2_882(2)) {
+    } else if (jj_2_898(2)) {
       jj_consume_token(REGR_COUNT);
-    } else if (jj_2_883(2)) {
+    } else if (jj_2_899(2)) {
       jj_consume_token(REGR_SXX);
-    } else if (jj_2_884(2)) {
+    } else if (jj_2_900(2)) {
       jj_consume_token(REGR_SYY);
-    } else if (jj_2_885(2)) {
+    } else if (jj_2_901(2)) {
       jj_consume_token(RIGHT);
-    } else if (jj_2_886(2)) {
+    } else if (jj_2_902(2)) {
       jj_consume_token(ROW_NUMBER);
-    } else if (jj_2_887(2)) {
+    } else if (jj_2_903(2)) {
       jj_consume_token(SECOND);
-    } else if (jj_2_888(2)) {
+    } else if (jj_2_904(2)) {
       jj_consume_token(SOME);
-    } else if (jj_2_889(2)) {
+    } else if (jj_2_905(2)) {
       jj_consume_token(SQRT);
-    } else if (jj_2_890(2)) {
+    } else if (jj_2_906(2)) {
       jj_consume_token(STDDEV_POP);
-    } else if (jj_2_891(2)) {
+    } else if (jj_2_907(2)) {
       jj_consume_token(STDDEV_SAMP);
-    } else if (jj_2_892(2)) {
+    } else if (jj_2_908(2)) {
       jj_consume_token(SUM);
-    } else if (jj_2_893(2)) {
+    } else if (jj_2_909(2)) {
       jj_consume_token(UPPER);
-    } else if (jj_2_894(2)) {
+    } else if (jj_2_910(2)) {
       jj_consume_token(TRUNCATE);
-    } else if (jj_2_895(2)) {
+    } else if (jj_2_911(2)) {
       jj_consume_token(USER);
-    } else if (jj_2_896(2)) {
+    } else if (jj_2_912(2)) {
       jj_consume_token(VAR_POP);
-    } else if (jj_2_897(2)) {
+    } else if (jj_2_913(2)) {
       jj_consume_token(VAR_SAMP);
-    } else if (jj_2_898(2)) {
+    } else if (jj_2_914(2)) {
       jj_consume_token(YEAR);
     } else {
       jj_consume_token(-1);
@@ -8373,33 +8527,33 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlIdentifier ContextVariable() throws ParseException {
-    if (jj_2_899(2)) {
+    if (jj_2_915(2)) {
       jj_consume_token(CURRENT_CATALOG);
-    } else if (jj_2_900(2)) {
+    } else if (jj_2_916(2)) {
       jj_consume_token(CURRENT_DATE);
-    } else if (jj_2_901(2)) {
+    } else if (jj_2_917(2)) {
       jj_consume_token(CURRENT_DEFAULT_TRANSFORM_GROUP);
-    } else if (jj_2_902(2)) {
+    } else if (jj_2_918(2)) {
       jj_consume_token(CURRENT_PATH);
-    } else if (jj_2_903(2)) {
+    } else if (jj_2_919(2)) {
       jj_consume_token(CURRENT_ROLE);
-    } else if (jj_2_904(2)) {
+    } else if (jj_2_920(2)) {
       jj_consume_token(CURRENT_SCHEMA);
-    } else if (jj_2_905(2)) {
+    } else if (jj_2_921(2)) {
       jj_consume_token(CURRENT_TIME);
-    } else if (jj_2_906(2)) {
+    } else if (jj_2_922(2)) {
       jj_consume_token(CURRENT_TIMESTAMP);
-    } else if (jj_2_907(2)) {
+    } else if (jj_2_923(2)) {
       jj_consume_token(CURRENT_USER);
-    } else if (jj_2_908(2)) {
+    } else if (jj_2_924(2)) {
       jj_consume_token(LOCALTIME);
-    } else if (jj_2_909(2)) {
+    } else if (jj_2_925(2)) {
       jj_consume_token(LOCALTIMESTAMP);
-    } else if (jj_2_910(2)) {
+    } else if (jj_2_926(2)) {
       jj_consume_token(SESSION_USER);
-    } else if (jj_2_911(2)) {
+    } else if (jj_2_927(2)) {
       jj_consume_token(SYSTEM_USER);
-    } else if (jj_2_912(2)) {
+    } else if (jj_2_928(2)) {
       jj_consume_token(USER);
     } else {
       jj_consume_token(-1);
@@ -8430,11 +8584,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       break;
     default:
       jj_la1[9] = jj_gen;
-      if (jj_2_923(3)) {
+      if (jj_2_939(3)) {
         call = TimestampDiffFunctionCall();
             name = call.getOperator().getName();
             args = new SqlNodeList(call.getOperandList(), getPos());
-      } else if (jj_2_924(2)) {
+      } else if (jj_2_940(2)) {
         jj_consume_token(CONVERT);
                     name = unquotedIdentifier();
         jj_consume_token(LPAREN);
@@ -8445,19 +8599,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         tl = JdbcOdbcDataType();
                                   args.add(tl);
         jj_consume_token(RPAREN);
-      } else if (jj_2_925(2)) {
+      } else if (jj_2_941(2)) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case INSERT:
         case LEFT:
         case RIGHT:
         case TRUNCATE:
-          if (jj_2_913(2)) {
+          if (jj_2_929(2)) {
             jj_consume_token(INSERT);
-          } else if (jj_2_914(2)) {
+          } else if (jj_2_930(2)) {
             jj_consume_token(LEFT);
-          } else if (jj_2_915(2)) {
+          } else if (jj_2_931(2)) {
             jj_consume_token(RIGHT);
-          } else if (jj_2_916(2)) {
+          } else if (jj_2_932(2)) {
             jj_consume_token(TRUNCATE);
           } else {
             jj_consume_token(-1);
@@ -8467,32 +8621,32 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           break;
         default:
           jj_la1[8] = jj_gen;
-          if (jj_2_917(2)) {
+          if (jj_2_933(2)) {
             // For cases like {fn power(1,2)} and {fn lower('a')}
                         id = ReservedFunctionName();
                                           name = id.getSimple();
-          } else if (jj_2_918(2)) {
+          } else if (jj_2_934(2)) {
             // For cases like {fn substring('foo', 1,2)}
                         name = NonReservedJdbcFunctionName();
-          } else if (jj_2_919(2)) {
+          } else if (jj_2_935(2)) {
             name = Identifier();
           } else {
             jj_consume_token(-1);
             throw new ParseException();
           }
         }
-        if (jj_2_920(2)) {
+        if (jj_2_936(2)) {
           jj_consume_token(LPAREN);
           jj_consume_token(STAR);
                                            s1 = span();
           jj_consume_token(RPAREN);
                 args = new SqlNodeList(s1.pos());
                 args.add(SqlIdentifier.star(s1.pos()));
-        } else if (jj_2_921(2)) {
+        } else if (jj_2_937(2)) {
           jj_consume_token(LPAREN);
           jj_consume_token(RPAREN);
                                              args = SqlNodeList.EMPTY;
-        } else if (jj_2_922(2)) {
+        } else if (jj_2_938(2)) {
           args = ParenthesizedQueryOrCommaList(ExprContext.ACCEPT_SUB_QUERY);
         } else {
           jj_consume_token(-1);
@@ -8513,32 +8667,32 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * Parses a binary query operator like UNION.
  */
   final public SqlBinaryOperator BinaryQueryOperator() throws ParseException {
-    if (jj_2_934(2)) {
+    if (jj_2_950(2)) {
       jj_consume_token(UNION);
-      if (jj_2_926(2)) {
+      if (jj_2_942(2)) {
         jj_consume_token(ALL);
                     {if (true) return SqlStdOperatorTable.UNION_ALL;}
-      } else if (jj_2_927(2)) {
+      } else if (jj_2_943(2)) {
         jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.UNION;}
       } else {
               {if (true) return SqlStdOperatorTable.UNION;}
       }
-    } else if (jj_2_935(2)) {
+    } else if (jj_2_951(2)) {
       jj_consume_token(INTERSECT);
-      if (jj_2_928(2)) {
+      if (jj_2_944(2)) {
         jj_consume_token(ALL);
                     {if (true) return SqlStdOperatorTable.INTERSECT_ALL;}
-      } else if (jj_2_929(2)) {
+      } else if (jj_2_945(2)) {
         jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.INTERSECT;}
       } else {
               {if (true) return SqlStdOperatorTable.INTERSECT;}
       }
-    } else if (jj_2_936(2)) {
-      if (jj_2_930(2)) {
+    } else if (jj_2_952(2)) {
+      if (jj_2_946(2)) {
         jj_consume_token(EXCEPT);
-      } else if (jj_2_931(2)) {
+      } else if (jj_2_947(2)) {
         jj_consume_token(SET_MINUS);
                 if (!this.conformance.isMinusAllowed()) {
                     {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.minusNotAllowed());}
@@ -8547,10 +8701,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(-1);
         throw new ParseException();
       }
-      if (jj_2_932(2)) {
+      if (jj_2_948(2)) {
         jj_consume_token(ALL);
                     {if (true) return SqlStdOperatorTable.EXCEPT_ALL;}
-      } else if (jj_2_933(2)) {
+      } else if (jj_2_949(2)) {
         jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.EXCEPT;}
       } else {
@@ -8568,12 +8722,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlBinaryOperator BinaryMultisetOperator() throws ParseException {
     jj_consume_token(MULTISET);
-    if (jj_2_946(2)) {
+    if (jj_2_962(2)) {
       jj_consume_token(UNION);
-      if (jj_2_939(2)) {
-        if (jj_2_937(2)) {
+      if (jj_2_955(2)) {
+        if (jj_2_953(2)) {
           jj_consume_token(ALL);
-        } else if (jj_2_938(2)) {
+        } else if (jj_2_954(2)) {
           jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.MULTISET_UNION_DISTINCT;}
         } else {
@@ -8584,12 +8738,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         ;
       }
           {if (true) return SqlStdOperatorTable.MULTISET_UNION;}
-    } else if (jj_2_947(2)) {
+    } else if (jj_2_963(2)) {
       jj_consume_token(INTERSECT);
-      if (jj_2_942(2)) {
-        if (jj_2_940(2)) {
+      if (jj_2_958(2)) {
+        if (jj_2_956(2)) {
           jj_consume_token(ALL);
-        } else if (jj_2_941(2)) {
+        } else if (jj_2_957(2)) {
           jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.MULTISET_INTERSECT_DISTINCT;}
         } else {
@@ -8600,12 +8754,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         ;
       }
           {if (true) return SqlStdOperatorTable.MULTISET_INTERSECT;}
-    } else if (jj_2_948(2)) {
+    } else if (jj_2_964(2)) {
       jj_consume_token(EXCEPT);
-      if (jj_2_945(2)) {
-        if (jj_2_943(2)) {
+      if (jj_2_961(2)) {
+        if (jj_2_959(2)) {
           jj_consume_token(ALL);
-        } else if (jj_2_944(2)) {
+        } else if (jj_2_960(2)) {
           jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.MULTISET_EXCEPT_DISTINCT;}
         } else {
@@ -8628,105 +8782,105 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlBinaryOperator BinaryRowOperator() throws ParseException {
     SqlBinaryOperator op;
-    if (jj_2_949(2)) {
+    if (jj_2_965(2)) {
       jj_consume_token(EQ);
            {if (true) return SqlStdOperatorTable.EQUALS;}
-    } else if (jj_2_950(2)) {
+    } else if (jj_2_966(2)) {
       jj_consume_token(GT);
            {if (true) return SqlStdOperatorTable.GREATER_THAN;}
-    } else if (jj_2_951(2)) {
+    } else if (jj_2_967(2)) {
       jj_consume_token(LT);
            {if (true) return SqlStdOperatorTable.LESS_THAN;}
-    } else if (jj_2_952(2)) {
+    } else if (jj_2_968(2)) {
       jj_consume_token(LE);
            {if (true) return SqlStdOperatorTable.LESS_THAN_OR_EQUAL;}
-    } else if (jj_2_953(2)) {
+    } else if (jj_2_969(2)) {
       jj_consume_token(GE);
            {if (true) return SqlStdOperatorTable.GREATER_THAN_OR_EQUAL;}
-    } else if (jj_2_954(2)) {
+    } else if (jj_2_970(2)) {
       jj_consume_token(NE);
            {if (true) return SqlStdOperatorTable.NOT_EQUALS;}
-    } else if (jj_2_955(2)) {
+    } else if (jj_2_971(2)) {
       jj_consume_token(NE2);
         if (!this.conformance.isBangEqualAllowed()) {
             {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.bangEqualNotAllowed());}
         }
         {if (true) return SqlStdOperatorTable.NOT_EQUALS;}
-    } else if (jj_2_956(2)) {
+    } else if (jj_2_972(2)) {
       jj_consume_token(PLUS);
              {if (true) return SqlStdOperatorTable.PLUS;}
-    } else if (jj_2_957(2)) {
+    } else if (jj_2_973(2)) {
       jj_consume_token(MINUS);
               {if (true) return SqlStdOperatorTable.MINUS;}
-    } else if (jj_2_958(2)) {
+    } else if (jj_2_974(2)) {
       jj_consume_token(STAR);
              {if (true) return SqlStdOperatorTable.MULTIPLY;}
-    } else if (jj_2_959(2)) {
+    } else if (jj_2_975(2)) {
       jj_consume_token(SLASH);
               {if (true) return SqlStdOperatorTable.DIVIDE;}
-    } else if (jj_2_960(2)) {
+    } else if (jj_2_976(2)) {
       jj_consume_token(PERCENT_REMAINDER);
         if (!this.conformance.isPercentRemainderAllowed()) {
             {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.percentRemainderNotAllowed());}
         }
         {if (true) return SqlStdOperatorTable.PERCENT_REMAINDER;}
-    } else if (jj_2_961(2)) {
+    } else if (jj_2_977(2)) {
       jj_consume_token(CONCAT);
                {if (true) return SqlStdOperatorTable.CONCAT;}
-    } else if (jj_2_962(2)) {
+    } else if (jj_2_978(2)) {
       jj_consume_token(AND);
             {if (true) return SqlStdOperatorTable.AND;}
-    } else if (jj_2_963(2)) {
+    } else if (jj_2_979(2)) {
       jj_consume_token(OR);
            {if (true) return SqlStdOperatorTable.OR;}
-    } else if (jj_2_964(2)) {
+    } else if (jj_2_980(2)) {
       jj_consume_token(IS);
       jj_consume_token(DISTINCT);
       jj_consume_token(FROM);
                                           {if (true) return SqlStdOperatorTable.IS_DISTINCT_FROM;}
-    } else if (jj_2_965(2)) {
+    } else if (jj_2_981(2)) {
       jj_consume_token(IS);
       jj_consume_token(NOT);
       jj_consume_token(DISTINCT);
       jj_consume_token(FROM);
                                    {if (true) return SqlStdOperatorTable.IS_NOT_DISTINCT_FROM;}
-    } else if (jj_2_966(2)) {
+    } else if (jj_2_982(2)) {
       jj_consume_token(MEMBER);
       jj_consume_token(OF);
                     {if (true) return SqlStdOperatorTable.MEMBER_OF;}
-    } else if (jj_2_967(2)) {
+    } else if (jj_2_983(2)) {
       jj_consume_token(SUBMULTISET);
       jj_consume_token(OF);
                                       {if (true) return SqlStdOperatorTable.SUBMULTISET_OF;}
-    } else if (jj_2_968(2)) {
+    } else if (jj_2_984(2)) {
       jj_consume_token(NOT);
       jj_consume_token(SUBMULTISET);
       jj_consume_token(OF);
                                {if (true) return SqlStdOperatorTable.NOT_SUBMULTISET_OF;}
-    } else if (jj_2_969(2)) {
+    } else if (jj_2_985(2)) {
       jj_consume_token(CONTAINS);
                  {if (true) return SqlStdOperatorTable.CONTAINS;}
-    } else if (jj_2_970(2)) {
+    } else if (jj_2_986(2)) {
       jj_consume_token(OVERLAPS);
                  {if (true) return SqlStdOperatorTable.OVERLAPS;}
-    } else if (jj_2_971(2)) {
+    } else if (jj_2_987(2)) {
       jj_consume_token(EQUALS);
                {if (true) return SqlStdOperatorTable.PERIOD_EQUALS;}
-    } else if (jj_2_972(2)) {
+    } else if (jj_2_988(2)) {
       jj_consume_token(PRECEDES);
                  {if (true) return SqlStdOperatorTable.PRECEDES;}
-    } else if (jj_2_973(2)) {
+    } else if (jj_2_989(2)) {
       jj_consume_token(SUCCEEDS);
                  {if (true) return SqlStdOperatorTable.SUCCEEDS;}
-    } else if (jj_2_974(2)) {
+    } else if (jj_2_990(2)) {
       jj_consume_token(IMMEDIATELY);
       jj_consume_token(PRECEDES);
                                             {if (true) return SqlStdOperatorTable.IMMEDIATELY_PRECEDES;}
-    } else if (jj_2_975(2)) {
+    } else if (jj_2_991(2)) {
       jj_consume_token(IMMEDIATELY);
       jj_consume_token(SUCCEEDS);
                                {if (true) return SqlStdOperatorTable.IMMEDIATELY_SUCCEEDS;}
-    } else if (jj_2_976(2)) {
+    } else if (jj_2_992(2)) {
       op = BinaryMultisetOperator();
                                     {if (true) return op;}
     } else {
@@ -8740,19 +8894,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * Parses a prefix row operator like NOT.
  */
   final public SqlPrefixOperator PrefixRowOperator() throws ParseException {
-    if (jj_2_977(2)) {
+    if (jj_2_993(2)) {
       jj_consume_token(PLUS);
              {if (true) return SqlStdOperatorTable.UNARY_PLUS;}
-    } else if (jj_2_978(2)) {
+    } else if (jj_2_994(2)) {
       jj_consume_token(MINUS);
               {if (true) return SqlStdOperatorTable.UNARY_MINUS;}
-    } else if (jj_2_979(2)) {
+    } else if (jj_2_995(2)) {
       jj_consume_token(NOT);
             {if (true) return SqlStdOperatorTable.NOT;}
-    } else if (jj_2_980(2)) {
+    } else if (jj_2_996(2)) {
       jj_consume_token(EXISTS);
                {if (true) return SqlStdOperatorTable.EXISTS;}
-    } else if (jj_2_981(2)) {
+    } else if (jj_2_997(2)) {
       jj_consume_token(UNIQUE);
                {if (true) return SqlStdOperatorTable.UNIQUE;}
     } else {
@@ -8766,89 +8920,89 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * Parses a postfix row operator like IS NOT NULL.
  */
   final public SqlPostfixOperator PostfixRowOperator() throws ParseException {
-    if (jj_2_1006(2)) {
+    if (jj_2_1022(2)) {
       jj_consume_token(IS);
-      if (jj_2_1003(2)) {
+      if (jj_2_1019(2)) {
         jj_consume_token(A);
         jj_consume_token(SET);
                     {if (true) return SqlStdOperatorTable.IS_A_SET;}
-      } else if (jj_2_1004(2)) {
+      } else if (jj_2_1020(2)) {
         jj_consume_token(NOT);
-        if (jj_2_982(2)) {
+        if (jj_2_998(2)) {
           jj_consume_token(NULL);
                      {if (true) return SqlStdOperatorTable.IS_NOT_NULL;}
-        } else if (jj_2_983(2)) {
+        } else if (jj_2_999(2)) {
           jj_consume_token(TRUE);
                      {if (true) return SqlStdOperatorTable.IS_NOT_TRUE;}
-        } else if (jj_2_984(2)) {
+        } else if (jj_2_1000(2)) {
           jj_consume_token(FALSE);
                       {if (true) return SqlStdOperatorTable.IS_NOT_FALSE;}
-        } else if (jj_2_985(2)) {
+        } else if (jj_2_1001(2)) {
           jj_consume_token(UNKNOWN);
                         {if (true) return SqlStdOperatorTable.IS_NOT_UNKNOWN;}
-        } else if (jj_2_986(2)) {
+        } else if (jj_2_1002(2)) {
           jj_consume_token(A);
           jj_consume_token(SET);
                         {if (true) return SqlStdOperatorTable.IS_NOT_A_SET;}
-        } else if (jj_2_987(2)) {
+        } else if (jj_2_1003(2)) {
           jj_consume_token(EMPTY);
                       {if (true) return SqlStdOperatorTable.IS_NOT_EMPTY;}
-        } else if (jj_2_988(2)) {
+        } else if (jj_2_1004(2)) {
           jj_consume_token(JSON);
           jj_consume_token(VALUE);
                                           {if (true) return SqlStdOperatorTable.IS_NOT_JSON_VALUE;}
-        } else if (jj_2_989(2)) {
+        } else if (jj_2_1005(2)) {
           jj_consume_token(JSON);
           jj_consume_token(OBJECT);
                                            {if (true) return SqlStdOperatorTable.IS_NOT_JSON_OBJECT;}
-        } else if (jj_2_990(2)) {
+        } else if (jj_2_1006(2)) {
           jj_consume_token(JSON);
           jj_consume_token(ARRAY);
                                           {if (true) return SqlStdOperatorTable.IS_NOT_JSON_ARRAY;}
-        } else if (jj_2_991(2)) {
+        } else if (jj_2_1007(2)) {
           jj_consume_token(JSON);
           jj_consume_token(SCALAR);
                                            {if (true) return SqlStdOperatorTable.IS_NOT_JSON_SCALAR;}
-        } else if (jj_2_992(2)) {
+        } else if (jj_2_1008(2)) {
           jj_consume_token(JSON);
                      {if (true) return SqlStdOperatorTable.IS_NOT_JSON_VALUE;}
         } else {
           jj_consume_token(-1);
           throw new ParseException();
         }
-      } else if (jj_2_1005(2)) {
-        if (jj_2_993(2)) {
+      } else if (jj_2_1021(2)) {
+        if (jj_2_1009(2)) {
           jj_consume_token(NULL);
                      {if (true) return SqlStdOperatorTable.IS_NULL;}
-        } else if (jj_2_994(2)) {
+        } else if (jj_2_1010(2)) {
           jj_consume_token(TRUE);
                      {if (true) return SqlStdOperatorTable.IS_TRUE;}
-        } else if (jj_2_995(2)) {
+        } else if (jj_2_1011(2)) {
           jj_consume_token(FALSE);
                       {if (true) return SqlStdOperatorTable.IS_FALSE;}
-        } else if (jj_2_996(2)) {
+        } else if (jj_2_1012(2)) {
           jj_consume_token(UNKNOWN);
                         {if (true) return SqlStdOperatorTable.IS_UNKNOWN;}
-        } else if (jj_2_997(2)) {
+        } else if (jj_2_1013(2)) {
           jj_consume_token(EMPTY);
                       {if (true) return SqlStdOperatorTable.IS_EMPTY;}
-        } else if (jj_2_998(2)) {
+        } else if (jj_2_1014(2)) {
           jj_consume_token(JSON);
           jj_consume_token(VALUE);
                                           {if (true) return SqlStdOperatorTable.IS_JSON_VALUE;}
-        } else if (jj_2_999(2)) {
+        } else if (jj_2_1015(2)) {
           jj_consume_token(JSON);
           jj_consume_token(OBJECT);
                                            {if (true) return SqlStdOperatorTable.IS_JSON_OBJECT;}
-        } else if (jj_2_1000(2)) {
+        } else if (jj_2_1016(2)) {
           jj_consume_token(JSON);
           jj_consume_token(ARRAY);
                                           {if (true) return SqlStdOperatorTable.IS_JSON_ARRAY;}
-        } else if (jj_2_1001(2)) {
+        } else if (jj_2_1017(2)) {
           jj_consume_token(JSON);
           jj_consume_token(SCALAR);
                                            {if (true) return SqlStdOperatorTable.IS_JSON_SCALAR;}
-        } else if (jj_2_1002(2)) {
+        } else if (jj_2_1018(2)) {
           jj_consume_token(JSON);
                      {if (true) return SqlStdOperatorTable.IS_JSON_VALUE;}
         } else {
@@ -8859,7 +9013,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(-1);
         throw new ParseException();
       }
-    } else if (jj_2_1007(2)) {
+    } else if (jj_2_1023(2)) {
       jj_consume_token(FORMAT);
       JsonRepresentation();
             {if (true) return SqlStdOperatorTable.JSON_VALUE_EXPRESSION;}
@@ -8885,11 +9039,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * @see Glossary#SQL2003 SQL:2003 Part 2 Section 5.2
  */
   final public String NonReservedKeyWord() throws ParseException {
-    if (jj_2_1008(2)) {
+    if (jj_2_1024(2)) {
       NonReservedKeyWord0of3();
-    } else if (jj_2_1009(2)) {
+    } else if (jj_2_1025(2)) {
       NonReservedKeyWord1of3();
-    } else if (jj_2_1010(2)) {
+    } else if (jj_2_1026(2)) {
       NonReservedKeyWord2of3();
     } else {
       jj_consume_token(-1);
@@ -8901,814 +9055,824 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** @see #NonReservedKeyWord */
   final public void NonReservedKeyWord0of3() throws ParseException {
-    if (jj_2_1011(2)) {
+    if (jj_2_1027(2)) {
       jj_consume_token(SEMI);
-    } else if (jj_2_1012(2)) {
-      jj_consume_token(AFFINITY_KEY);
-    } else if (jj_2_1013(2)) {
-      jj_consume_token(CACHE_GROUP);
-    } else if (jj_2_1014(2)) {
-      jj_consume_token(VALUE_TYPE);
-    } else if (jj_2_1015(2)) {
-      jj_consume_token(INLINE_SIZE);
-    } else if (jj_2_1016(2)) {
-      jj_consume_token(PASSWORD);
-    } else if (jj_2_1017(2)) {
-      jj_consume_token(CONTINUOUS);
-    } else if (jj_2_1018(2)) {
-      jj_consume_token(ASYNC);
-    } else if (jj_2_1019(2)) {
-      jj_consume_token(ABS);
-    } else if (jj_2_1020(2)) {
-      jj_consume_token(ADD);
-    } else if (jj_2_1021(2)) {
-      jj_consume_token(ALLOW);
-    } else if (jj_2_1022(2)) {
-      jj_consume_token(ARE);
-    } else if (jj_2_1023(2)) {
-      jj_consume_token(ARRAY_CONCAT_AGG);
-    } else if (jj_2_1024(2)) {
-      jj_consume_token(ASC);
-    } else if (jj_2_1025(2)) {
-      jj_consume_token(ASYMMETRIC);
-    } else if (jj_2_1026(2)) {
-      jj_consume_token(AUTHORIZATION);
-    } else if (jj_2_1027(2)) {
-      jj_consume_token(BEGIN);
     } else if (jj_2_1028(2)) {
-      jj_consume_token(BETWEEN);
+      jj_consume_token(AFFINITY_KEY);
     } else if (jj_2_1029(2)) {
-      jj_consume_token(BIT);
+      jj_consume_token(CACHE_GROUP);
     } else if (jj_2_1030(2)) {
-      jj_consume_token(BOTH);
+      jj_consume_token(VALUE_TYPE);
     } else if (jj_2_1031(2)) {
-      jj_consume_token(C);
+      jj_consume_token(INLINE_SIZE);
     } else if (jj_2_1032(2)) {
-      jj_consume_token(CASCADE);
+      jj_consume_token(PASSWORD);
     } else if (jj_2_1033(2)) {
-      jj_consume_token(CATALOG);
+      jj_consume_token(CONTINUOUS);
     } else if (jj_2_1034(2)) {
-      jj_consume_token(CHAR);
+      jj_consume_token(ASYNC);
     } else if (jj_2_1035(2)) {
-      jj_consume_token(CHAR_LENGTH);
+      jj_consume_token(REFRESH);
     } else if (jj_2_1036(2)) {
-      jj_consume_token(CLOB);
+      jj_consume_token(TOTAL);
     } else if (jj_2_1037(2)) {
-      jj_consume_token(COLLATE);
+      jj_consume_token(ABSOLUTE);
     } else if (jj_2_1038(2)) {
-      jj_consume_token(COLUMN);
+      jj_consume_token(AFTER);
     } else if (jj_2_1039(2)) {
-      jj_consume_token(CONNECT);
+      jj_consume_token(ALTER);
     } else if (jj_2_1040(2)) {
-      jj_consume_token(CONSTRUCTOR);
+      jj_consume_token(ARRAY);
     } else if (jj_2_1041(2)) {
-      jj_consume_token(CONVERT);
+      jj_consume_token(ARRAY_MAX_CARDINALITY);
     } else if (jj_2_1042(2)) {
-      jj_consume_token(COUNT);
+      jj_consume_token(ASENSITIVE);
     } else if (jj_2_1043(2)) {
-      jj_consume_token(CUBE);
+      jj_consume_token(AT);
     } else if (jj_2_1044(2)) {
-      jj_consume_token(CURRENT_DATE);
+      jj_consume_token(AVG);
     } else if (jj_2_1045(2)) {
-      jj_consume_token(CURRENT_ROLE);
+      jj_consume_token(BEGIN_FRAME);
     } else if (jj_2_1046(2)) {
-      jj_consume_token(CURRENT_TIME);
+      jj_consume_token(BIGINT);
     } else if (jj_2_1047(2)) {
-      jj_consume_token(CURRENT_USER);
+      jj_consume_token(BLOB);
     } else if (jj_2_1048(2)) {
-      jj_consume_token(DATE);
+      jj_consume_token(BREADTH);
     } else if (jj_2_1049(2)) {
-      jj_consume_token(DEC);
+      jj_consume_token(CALLED);
     } else if (jj_2_1050(2)) {
-      jj_consume_token(DEFERRABLE);
+      jj_consume_token(CASCADED);
     } else if (jj_2_1051(2)) {
-      jj_consume_token(DEPTH);
+      jj_consume_token(CEIL);
     } else if (jj_2_1052(2)) {
-      jj_consume_token(DESCRIPTOR);
+      jj_consume_token(CHARACTER);
     } else if (jj_2_1053(2)) {
-      jj_consume_token(DISALLOW);
+      jj_consume_token(CHECK);
     } else if (jj_2_1054(2)) {
-      jj_consume_token(DOUBLE);
+      jj_consume_token(CLOSE);
     } else if (jj_2_1055(2)) {
-      jj_consume_token(ELEMENT);
+      jj_consume_token(COLLATION);
     } else if (jj_2_1056(2)) {
-      jj_consume_token(END);
+      jj_consume_token(COMMIT);
     } else if (jj_2_1057(2)) {
-      jj_consume_token(EQUALS);
+      jj_consume_token(CONNECTION);
     } else if (jj_2_1058(2)) {
-      jj_consume_token(EXCEPTION);
+      jj_consume_token(CONTAINS);
     } else if (jj_2_1059(2)) {
-      jj_consume_token(EXISTS);
+      jj_consume_token(CORR);
     } else if (jj_2_1060(2)) {
-      jj_consume_token(EXTERNAL);
+      jj_consume_token(COVAR_POP);
     } else if (jj_2_1061(2)) {
-      jj_consume_token(FILTER);
+      jj_consume_token(CUME_DIST);
     } else if (jj_2_1062(2)) {
-      jj_consume_token(FLOAT);
+      jj_consume_token(CURRENT_DEFAULT_TRANSFORM_GROUP);
     } else if (jj_2_1063(2)) {
-      jj_consume_token(FOREIGN);
+      jj_consume_token(CURRENT_ROW);
     } else if (jj_2_1064(2)) {
-      jj_consume_token(FREE);
+      jj_consume_token(CURRENT_TIMESTAMP);
     } else if (jj_2_1065(2)) {
-      jj_consume_token(G);
+      jj_consume_token(CYCLE);
     } else if (jj_2_1066(2)) {
-      jj_consume_token(GLOBAL);
+      jj_consume_token(DAY);
     } else if (jj_2_1067(2)) {
-      jj_consume_token(GROUPS);
+      jj_consume_token(DECIMAL);
     } else if (jj_2_1068(2)) {
-      jj_consume_token(IDENTITY);
+      jj_consume_token(DEFERRED);
     } else if (jj_2_1069(2)) {
-      jj_consume_token(IMPORT);
+      jj_consume_token(DEREF);
     } else if (jj_2_1070(2)) {
-      jj_consume_token(INITIALLY);
+      jj_consume_token(DETERMINISTIC);
     } else if (jj_2_1071(2)) {
-      jj_consume_token(INSENSITIVE);
+      jj_consume_token(DISCONNECT);
     } else if (jj_2_1072(2)) {
-      jj_consume_token(INTERSECTION);
+      jj_consume_token(DYNAMIC);
     } else if (jj_2_1073(2)) {
-      jj_consume_token(JSON_ARRAY);
+      jj_consume_token(ELSE);
     } else if (jj_2_1074(2)) {
-      jj_consume_token(JSON_OBJECT);
+      jj_consume_token(END_FRAME);
     } else if (jj_2_1075(2)) {
-      jj_consume_token(JSON_VALUE);
+      jj_consume_token(ESCAPE);
     } else if (jj_2_1076(2)) {
-      jj_consume_token(LAG);
+      jj_consume_token(EXEC);
     } else if (jj_2_1077(2)) {
-      jj_consume_token(LAST);
+      jj_consume_token(EXP);
     } else if (jj_2_1078(2)) {
-      jj_consume_token(LEADING);
+      jj_consume_token(EXTRACT);
     } else if (jj_2_1079(2)) {
-      jj_consume_token(LIKE);
+      jj_consume_token(FIRST);
     } else if (jj_2_1080(2)) {
-      jj_consume_token(LOCAL);
+      jj_consume_token(FLOOR);
     } else if (jj_2_1081(2)) {
-      jj_consume_token(LOCATOR);
+      jj_consume_token(FOUND);
     } else if (jj_2_1082(2)) {
-      jj_consume_token(MAP);
+      jj_consume_token(FUNCTION);
     } else if (jj_2_1083(2)) {
-      jj_consume_token(MATCH_NUMBER);
+      jj_consume_token(GENERAL);
     } else if (jj_2_1084(2)) {
-      jj_consume_token(MEMBER);
+      jj_consume_token(GO);
     } else if (jj_2_1085(2)) {
-      jj_consume_token(MINUTE);
+      jj_consume_token(HOLD);
     } else if (jj_2_1086(2)) {
-      jj_consume_token(MODULE);
+      jj_consume_token(IMMEDIATE);
     } else if (jj_2_1087(2)) {
-      jj_consume_token(NAME);
+      jj_consume_token(INDICATOR);
     } else if (jj_2_1088(2)) {
-      jj_consume_token(NCHAR);
+      jj_consume_token(INOUT);
     } else if (jj_2_1089(2)) {
-      jj_consume_token(NONE);
+      jj_consume_token(INT);
     } else if (jj_2_1090(2)) {
-      jj_consume_token(NTH_VALUE);
+      jj_consume_token(IS);
     } else if (jj_2_1091(2)) {
-      jj_consume_token(NUMERIC);
+      jj_consume_token(JSON_ARRAYAGG);
     } else if (jj_2_1092(2)) {
-      jj_consume_token(OCTET_LENGTH);
+      jj_consume_token(JSON_OBJECTAGG);
     } else if (jj_2_1093(2)) {
-      jj_consume_token(OMIT);
+      jj_consume_token(K);
     } else if (jj_2_1094(2)) {
-      jj_consume_token(OPEN);
+      jj_consume_token(LANGUAGE);
     } else if (jj_2_1095(2)) {
-      jj_consume_token(ORDINALITY);
+      jj_consume_token(LAST_VALUE);
     } else if (jj_2_1096(2)) {
-      jj_consume_token(OVERLAPS);
+      jj_consume_token(LENGTH);
     } else if (jj_2_1097(2)) {
-      jj_consume_token(PARAMETER);
+      jj_consume_token(LIKE_REGEX);
     } else if (jj_2_1098(2)) {
-      jj_consume_token(PER);
+      jj_consume_token(LOCALTIME);
     } else if (jj_2_1099(2)) {
-      jj_consume_token(PERCENTILE_DISC);
+      jj_consume_token(LOWER);
     } else if (jj_2_1100(2)) {
-      jj_consume_token(PERMUTE);
+      jj_consume_token(MATCH);
     } else if (jj_2_1101(2)) {
-      jj_consume_token(POSITION_REGEX);
+      jj_consume_token(MAX);
     } else if (jj_2_1102(2)) {
-      jj_consume_token(PRECISION);
+      jj_consume_token(METHOD);
     } else if (jj_2_1103(2)) {
-      jj_consume_token(PREV);
+      jj_consume_token(MOD);
     } else if (jj_2_1104(2)) {
-      jj_consume_token(PROCEDURE);
+      jj_consume_token(MONTH);
     } else if (jj_2_1105(2)) {
-      jj_consume_token(RANK);
+      jj_consume_token(NAMES);
     } else if (jj_2_1106(2)) {
-      jj_consume_token(REAL);
+      jj_consume_token(NCLOB);
     } else if (jj_2_1107(2)) {
-      jj_consume_token(REFERENCES);
+      jj_consume_token(NORMALIZE);
     } else if (jj_2_1108(2)) {
-      jj_consume_token(REGR_AVGY);
+      jj_consume_token(NTILE);
     } else if (jj_2_1109(2)) {
-      jj_consume_token(REGR_R2);
+      jj_consume_token(OBJECT);
     } else if (jj_2_1110(2)) {
-      jj_consume_token(REGR_SXY);
+      jj_consume_token(OF);
     } else if (jj_2_1111(2)) {
-      jj_consume_token(RELEASE);
+      jj_consume_token(ONE);
     } else if (jj_2_1112(2)) {
-      jj_consume_token(RESTRICT);
+      jj_consume_token(OPTION);
     } else if (jj_2_1113(2)) {
-      jj_consume_token(RETURNS);
+      jj_consume_token(OUT);
     } else if (jj_2_1114(2)) {
-      jj_consume_token(ROLLBACK);
+      jj_consume_token(OVERLAY);
     } else if (jj_2_1115(2)) {
-      jj_consume_token(RUNNING);
+      jj_consume_token(PARTIAL);
     } else if (jj_2_1116(2)) {
-      jj_consume_token(SCOPE);
+      jj_consume_token(PERCENT);
     } else if (jj_2_1117(2)) {
-      jj_consume_token(SECOND);
+      jj_consume_token(PERCENT_RANK);
     } else if (jj_2_1118(2)) {
-      jj_consume_token(SENSITIVE);
+      jj_consume_token(PORTION);
     } else if (jj_2_1119(2)) {
-      jj_consume_token(SHOW);
+      jj_consume_token(POWER);
     } else if (jj_2_1120(2)) {
-      jj_consume_token(SMALLINT);
+      jj_consume_token(PREPARE);
     } else if (jj_2_1121(2)) {
-      jj_consume_token(SPECIFICTYPE);
+      jj_consume_token(PRIOR);
     } else if (jj_2_1122(2)) {
-      jj_consume_token(SQLSTATE);
+      jj_consume_token(PUBLIC);
     } else if (jj_2_1123(2)) {
-      jj_consume_token(START);
+      jj_consume_token(READ);
     } else if (jj_2_1124(2)) {
-      jj_consume_token(STDDEV_POP);
+      jj_consume_token(RECURSIVE);
     } else if (jj_2_1125(2)) {
-      jj_consume_token(SUBSET);
+      jj_consume_token(REFERENCING);
     } else if (jj_2_1126(2)) {
-      jj_consume_token(SUCCEEDS);
+      jj_consume_token(REGR_COUNT);
     } else if (jj_2_1127(2)) {
-      jj_consume_token(SYSTEM);
+      jj_consume_token(REGR_SLOPE);
     } else if (jj_2_1128(2)) {
-      jj_consume_token(STRING_AGG);
+      jj_consume_token(REGR_SYY);
     } else if (jj_2_1129(2)) {
-      jj_consume_token(TIMEZONE_HOUR);
+      jj_consume_token(REPLACE);
     } else if (jj_2_1130(2)) {
-      jj_consume_token(TO);
+      jj_consume_token(RESULT);
     } else if (jj_2_1131(2)) {
-      jj_consume_token(TRANSLATE);
+      jj_consume_token(REVOKE);
     } else if (jj_2_1132(2)) {
-      jj_consume_token(TREAT);
+      jj_consume_token(ROUTINE);
     } else if (jj_2_1133(2)) {
-      jj_consume_token(TRIM_ARRAY);
+      jj_consume_token(SAVEPOINT);
     } else if (jj_2_1134(2)) {
-      jj_consume_token(UESCAPE);
+      jj_consume_token(SCROLL);
     } else if (jj_2_1135(2)) {
-      jj_consume_token(UNKNOWN);
+      jj_consume_token(SECTION);
     } else if (jj_2_1136(2)) {
-      jj_consume_token(USAGE);
+      jj_consume_token(SESSION);
     } else if (jj_2_1137(2)) {
-      jj_consume_token(VALUE_OF);
+      jj_consume_token(SIMILAR);
     } else if (jj_2_1138(2)) {
-      jj_consume_token(VARYING);
+      jj_consume_token(SPACE);
     } else if (jj_2_1139(2)) {
-      jj_consume_token(VERSION);
+      jj_consume_token(SQL);
     } else if (jj_2_1140(2)) {
-      jj_consume_token(WEEK);
+      jj_consume_token(SQLWARNING);
     } else if (jj_2_1141(2)) {
-      jj_consume_token(WITHIN);
+      jj_consume_token(STATE);
     } else if (jj_2_1142(2)) {
-      jj_consume_token(WRITE);
-    } else {
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-/** @see #NonReservedKeyWord */
-  final public void NonReservedKeyWord1of3() throws ParseException {
-    if (jj_2_1143(2)) {
-      jj_consume_token(TEMPLATE);
+      jj_consume_token(STDDEV_SAMP);
+    } else if (jj_2_1143(2)) {
+      jj_consume_token(SUBSTRING);
     } else if (jj_2_1144(2)) {
-      jj_consume_token(ATOMICITY);
+      jj_consume_token(SUM);
     } else if (jj_2_1145(2)) {
-      jj_consume_token(CACHE_NAME);
+      jj_consume_token(SYSTEM_TIME);
     } else if (jj_2_1146(2)) {
-      jj_consume_token(ENCRYPTED);
+      jj_consume_token(GROUP_CONCAT);
     } else if (jj_2_1147(2)) {
-      jj_consume_token(LOGGING);
+      jj_consume_token(TIMEZONE_MINUTE);
     } else if (jj_2_1148(2)) {
-      jj_consume_token(KILL);
+      jj_consume_token(TRAILING);
     } else if (jj_2_1149(2)) {
-      jj_consume_token(SERVICE);
+      jj_consume_token(TRANSLATE_REGEX);
     } else if (jj_2_1150(2)) {
-      jj_consume_token(QUERY);
+      jj_consume_token(TRIGGER);
     } else if (jj_2_1151(2)) {
-      jj_consume_token(ABSOLUTE);
+      jj_consume_token(TRUE);
     } else if (jj_2_1152(2)) {
-      jj_consume_token(AFTER);
+      jj_consume_token(UNDER);
     } else if (jj_2_1153(2)) {
-      jj_consume_token(ALTER);
+      jj_consume_token(UPPER);
     } else if (jj_2_1154(2)) {
-      jj_consume_token(ARRAY);
+      jj_consume_token(USER);
     } else if (jj_2_1155(2)) {
-      jj_consume_token(ARRAY_MAX_CARDINALITY);
+      jj_consume_token(VARBINARY);
     } else if (jj_2_1156(2)) {
-      jj_consume_token(ASENSITIVE);
+      jj_consume_token(VAR_POP);
     } else if (jj_2_1157(2)) {
-      jj_consume_token(AT);
+      jj_consume_token(VERSIONING);
     } else if (jj_2_1158(2)) {
-      jj_consume_token(AVG);
+      jj_consume_token(WHENEVER);
     } else if (jj_2_1159(2)) {
-      jj_consume_token(BEGIN_FRAME);
+      jj_consume_token(WITHOUT);
     } else if (jj_2_1160(2)) {
-      jj_consume_token(BIGINT);
-    } else if (jj_2_1161(2)) {
-      jj_consume_token(BLOB);
+      jj_consume_token(YEAR);
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+/** @see #NonReservedKeyWord */
+  final public void NonReservedKeyWord1of3() throws ParseException {
+    if (jj_2_1161(2)) {
+      jj_consume_token(TEMPLATE);
     } else if (jj_2_1162(2)) {
-      jj_consume_token(BREADTH);
+      jj_consume_token(ATOMICITY);
     } else if (jj_2_1163(2)) {
-      jj_consume_token(CALLED);
+      jj_consume_token(CACHE_NAME);
     } else if (jj_2_1164(2)) {
-      jj_consume_token(CASCADED);
+      jj_consume_token(ENCRYPTED);
     } else if (jj_2_1165(2)) {
-      jj_consume_token(CEIL);
+      jj_consume_token(LOGGING);
     } else if (jj_2_1166(2)) {
-      jj_consume_token(CHARACTER);
+      jj_consume_token(KILL);
     } else if (jj_2_1167(2)) {
-      jj_consume_token(CHECK);
+      jj_consume_token(SERVICE);
     } else if (jj_2_1168(2)) {
-      jj_consume_token(CLOSE);
+      jj_consume_token(QUERY);
     } else if (jj_2_1169(2)) {
-      jj_consume_token(COLLATION);
+      jj_consume_token(ANALYZE);
     } else if (jj_2_1170(2)) {
-      jj_consume_token(COMMIT);
+      jj_consume_token(A);
     } else if (jj_2_1171(2)) {
-      jj_consume_token(CONNECTION);
+      jj_consume_token(ACTION);
     } else if (jj_2_1172(2)) {
-      jj_consume_token(CONTAINS);
+      jj_consume_token(ALLOCATE);
     } else if (jj_2_1173(2)) {
-      jj_consume_token(CORR);
+      jj_consume_token(AND);
     } else if (jj_2_1174(2)) {
-      jj_consume_token(COVAR_POP);
+      jj_consume_token(ARRAY_AGG);
     } else if (jj_2_1175(2)) {
-      jj_consume_token(CUME_DIST);
+      jj_consume_token(AS);
     } else if (jj_2_1176(2)) {
-      jj_consume_token(CURRENT_DEFAULT_TRANSFORM_GROUP);
+      jj_consume_token(ASSERTION);
     } else if (jj_2_1177(2)) {
-      jj_consume_token(CURRENT_ROW);
+      jj_consume_token(ATOMIC);
     } else if (jj_2_1178(2)) {
-      jj_consume_token(CURRENT_TIMESTAMP);
+      jj_consume_token(BEFORE);
     } else if (jj_2_1179(2)) {
-      jj_consume_token(CYCLE);
+      jj_consume_token(BEGIN_PARTITION);
     } else if (jj_2_1180(2)) {
-      jj_consume_token(DAY);
+      jj_consume_token(BINARY);
     } else if (jj_2_1181(2)) {
-      jj_consume_token(DECIMAL);
+      jj_consume_token(BOOLEAN);
     } else if (jj_2_1182(2)) {
-      jj_consume_token(DEFERRED);
+      jj_consume_token(BY);
     } else if (jj_2_1183(2)) {
-      jj_consume_token(DEREF);
+      jj_consume_token(CARDINALITY);
     } else if (jj_2_1184(2)) {
-      jj_consume_token(DETERMINISTIC);
+      jj_consume_token(CAST);
     } else if (jj_2_1185(2)) {
-      jj_consume_token(DISCONNECT);
+      jj_consume_token(CEILING);
     } else if (jj_2_1186(2)) {
-      jj_consume_token(DYNAMIC);
+      jj_consume_token(CHARACTER_LENGTH);
     } else if (jj_2_1187(2)) {
-      jj_consume_token(ELSE);
+      jj_consume_token(CLASSIFIER);
     } else if (jj_2_1188(2)) {
-      jj_consume_token(END_FRAME);
+      jj_consume_token(COALESCE);
     } else if (jj_2_1189(2)) {
-      jj_consume_token(ESCAPE);
+      jj_consume_token(COLLECT);
     } else if (jj_2_1190(2)) {
-      jj_consume_token(EXEC);
+      jj_consume_token(CONDITION);
     } else if (jj_2_1191(2)) {
-      jj_consume_token(EXP);
+      jj_consume_token(CONSTRAINTS);
     } else if (jj_2_1192(2)) {
-      jj_consume_token(EXTRACT);
+      jj_consume_token(CONTINUE);
     } else if (jj_2_1193(2)) {
-      jj_consume_token(FIRST);
+      jj_consume_token(CORRESPONDING);
     } else if (jj_2_1194(2)) {
-      jj_consume_token(FLOOR);
+      jj_consume_token(COVAR_SAMP);
     } else if (jj_2_1195(2)) {
-      jj_consume_token(FOUND);
+      jj_consume_token(CURRENT_CATALOG);
     } else if (jj_2_1196(2)) {
-      jj_consume_token(FUNCTION);
+      jj_consume_token(CURRENT_PATH);
     } else if (jj_2_1197(2)) {
-      jj_consume_token(GENERAL);
+      jj_consume_token(CURRENT_SCHEMA);
     } else if (jj_2_1198(2)) {
-      jj_consume_token(GO);
+      jj_consume_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE);
     } else if (jj_2_1199(2)) {
-      jj_consume_token(HOLD);
+      jj_consume_token(DATA);
     } else if (jj_2_1200(2)) {
-      jj_consume_token(IMMEDIATE);
+      jj_consume_token(DEALLOCATE);
     } else if (jj_2_1201(2)) {
-      jj_consume_token(INDICATOR);
+      jj_consume_token(DECLARE);
     } else if (jj_2_1202(2)) {
-      jj_consume_token(INOUT);
+      jj_consume_token(DENSE_RANK);
     } else if (jj_2_1203(2)) {
-      jj_consume_token(INT);
+      jj_consume_token(DESC);
     } else if (jj_2_1204(2)) {
-      jj_consume_token(IS);
+      jj_consume_token(DIAGNOSTICS);
     } else if (jj_2_1205(2)) {
-      jj_consume_token(JSON_ARRAYAGG);
+      jj_consume_token(DOMAIN);
     } else if (jj_2_1206(2)) {
-      jj_consume_token(JSON_OBJECTAGG);
+      jj_consume_token(EACH);
     } else if (jj_2_1207(2)) {
-      jj_consume_token(K);
+      jj_consume_token(EMPTY);
     } else if (jj_2_1208(2)) {
-      jj_consume_token(LANGUAGE);
+      jj_consume_token(END_PARTITION);
     } else if (jj_2_1209(2)) {
-      jj_consume_token(LAST_VALUE);
+      jj_consume_token(EVERY);
     } else if (jj_2_1210(2)) {
-      jj_consume_token(LENGTH);
+      jj_consume_token(EXECUTE);
     } else if (jj_2_1211(2)) {
-      jj_consume_token(LIKE_REGEX);
+      jj_consume_token(EXTEND);
     } else if (jj_2_1212(2)) {
-      jj_consume_token(LOCALTIME);
+      jj_consume_token(FALSE);
     } else if (jj_2_1213(2)) {
-      jj_consume_token(LOWER);
+      jj_consume_token(FIRST_VALUE);
     } else if (jj_2_1214(2)) {
-      jj_consume_token(MATCH);
+      jj_consume_token(FOR);
     } else if (jj_2_1215(2)) {
-      jj_consume_token(MAX);
+      jj_consume_token(FRAME_ROW);
     } else if (jj_2_1216(2)) {
-      jj_consume_token(METHOD);
+      jj_consume_token(FUSION);
     } else if (jj_2_1217(2)) {
-      jj_consume_token(MOD);
+      jj_consume_token(GET);
     } else if (jj_2_1218(2)) {
-      jj_consume_token(MONTH);
+      jj_consume_token(GOTO);
     } else if (jj_2_1219(2)) {
-      jj_consume_token(NAMES);
+      jj_consume_token(HOUR);
     } else if (jj_2_1220(2)) {
-      jj_consume_token(NCLOB);
+      jj_consume_token(IMMEDIATELY);
     } else if (jj_2_1221(2)) {
-      jj_consume_token(NORMALIZE);
+      jj_consume_token(INITIAL);
     } else if (jj_2_1222(2)) {
-      jj_consume_token(NTILE);
+      jj_consume_token(INPUT);
     } else if (jj_2_1223(2)) {
-      jj_consume_token(OBJECT);
+      jj_consume_token(INTEGER);
     } else if (jj_2_1224(2)) {
-      jj_consume_token(OF);
+      jj_consume_token(ISOLATION);
     } else if (jj_2_1225(2)) {
-      jj_consume_token(ONE);
+      jj_consume_token(JSON_EXISTS);
     } else if (jj_2_1226(2)) {
-      jj_consume_token(OPTION);
+      jj_consume_token(JSON_QUERY);
     } else if (jj_2_1227(2)) {
-      jj_consume_token(OUT);
+      jj_consume_token(KEY);
     } else if (jj_2_1228(2)) {
-      jj_consume_token(OVERLAY);
+      jj_consume_token(LARGE);
     } else if (jj_2_1229(2)) {
-      jj_consume_token(PARTIAL);
+      jj_consume_token(LEAD);
     } else if (jj_2_1230(2)) {
-      jj_consume_token(PERCENT);
+      jj_consume_token(LEVEL);
     } else if (jj_2_1231(2)) {
-      jj_consume_token(PERCENT_RANK);
+      jj_consume_token(LN);
     } else if (jj_2_1232(2)) {
-      jj_consume_token(PORTION);
+      jj_consume_token(LOCALTIMESTAMP);
     } else if (jj_2_1233(2)) {
-      jj_consume_token(POWER);
+      jj_consume_token(M);
     } else if (jj_2_1234(2)) {
-      jj_consume_token(PREPARE);
+      jj_consume_token(MATCHES);
     } else if (jj_2_1235(2)) {
-      jj_consume_token(PRIOR);
+      jj_consume_token(MEASURES);
     } else if (jj_2_1236(2)) {
-      jj_consume_token(PUBLIC);
+      jj_consume_token(MIN);
     } else if (jj_2_1237(2)) {
-      jj_consume_token(READ);
+      jj_consume_token(MODIFIES);
     } else if (jj_2_1238(2)) {
-      jj_consume_token(RECURSIVE);
+      jj_consume_token(MULTISET);
     } else if (jj_2_1239(2)) {
-      jj_consume_token(REFERENCING);
+      jj_consume_token(NATIONAL);
     } else if (jj_2_1240(2)) {
-      jj_consume_token(REGR_COUNT);
+      jj_consume_token(NO);
     } else if (jj_2_1241(2)) {
-      jj_consume_token(REGR_SLOPE);
+      jj_consume_token(NOT);
     } else if (jj_2_1242(2)) {
-      jj_consume_token(REGR_SYY);
+      jj_consume_token(NULLIF);
     } else if (jj_2_1243(2)) {
-      jj_consume_token(REPLACE);
+      jj_consume_token(OCCURRENCES_REGEX);
     } else if (jj_2_1244(2)) {
-      jj_consume_token(RESULT);
+      jj_consume_token(OLD);
     } else if (jj_2_1245(2)) {
-      jj_consume_token(REVOKE);
+      jj_consume_token(ONLY);
     } else if (jj_2_1246(2)) {
-      jj_consume_token(ROUTINE);
+      jj_consume_token(OR);
     } else if (jj_2_1247(2)) {
-      jj_consume_token(SAVEPOINT);
+      jj_consume_token(OUTPUT);
     } else if (jj_2_1248(2)) {
-      jj_consume_token(SCROLL);
+      jj_consume_token(PAD);
     } else if (jj_2_1249(2)) {
-      jj_consume_token(SECTION);
+      jj_consume_token(PATH);
     } else if (jj_2_1250(2)) {
-      jj_consume_token(SESSION);
+      jj_consume_token(PERCENTILE_CONT);
     } else if (jj_2_1251(2)) {
-      jj_consume_token(SIMILAR);
+      jj_consume_token(PERIOD);
     } else if (jj_2_1252(2)) {
-      jj_consume_token(SPACE);
+      jj_consume_token(POSITION);
     } else if (jj_2_1253(2)) {
-      jj_consume_token(SQL);
+      jj_consume_token(PRECEDES);
     } else if (jj_2_1254(2)) {
-      jj_consume_token(SQLWARNING);
+      jj_consume_token(PRESERVE);
     } else if (jj_2_1255(2)) {
-      jj_consume_token(STATE);
+      jj_consume_token(PRIVILEGES);
     } else if (jj_2_1256(2)) {
-      jj_consume_token(STDDEV_SAMP);
+      jj_consume_token(QUARTER);
     } else if (jj_2_1257(2)) {
-      jj_consume_token(SUBSTRING);
+      jj_consume_token(READS);
     } else if (jj_2_1258(2)) {
-      jj_consume_token(SUM);
+      jj_consume_token(REF);
     } else if (jj_2_1259(2)) {
-      jj_consume_token(SYSTEM_TIME);
+      jj_consume_token(REGR_AVGX);
     } else if (jj_2_1260(2)) {
-      jj_consume_token(GROUP_CONCAT);
+      jj_consume_token(REGR_INTERCEPT);
     } else if (jj_2_1261(2)) {
-      jj_consume_token(TIMEZONE_MINUTE);
+      jj_consume_token(REGR_SXX);
     } else if (jj_2_1262(2)) {
-      jj_consume_token(TRAILING);
+      jj_consume_token(RELATIVE);
     } else if (jj_2_1263(2)) {
-      jj_consume_token(TRANSLATE_REGEX);
+      jj_consume_token(RESET);
     } else if (jj_2_1264(2)) {
-      jj_consume_token(TRIGGER);
+      jj_consume_token(RETURN);
     } else if (jj_2_1265(2)) {
-      jj_consume_token(TRUE);
+      jj_consume_token(ROLE);
     } else if (jj_2_1266(2)) {
-      jj_consume_token(UNDER);
+      jj_consume_token(ROW_NUMBER);
     } else if (jj_2_1267(2)) {
-      jj_consume_token(UPPER);
+      jj_consume_token(SCHEMA);
     } else if (jj_2_1268(2)) {
-      jj_consume_token(USER);
+      jj_consume_token(SEARCH);
     } else if (jj_2_1269(2)) {
-      jj_consume_token(VARBINARY);
+      jj_consume_token(SEEK);
     } else if (jj_2_1270(2)) {
-      jj_consume_token(VAR_POP);
+      jj_consume_token(SESSION_USER);
     } else if (jj_2_1271(2)) {
-      jj_consume_token(VERSIONING);
+      jj_consume_token(SIZE);
     } else if (jj_2_1272(2)) {
-      jj_consume_token(WHENEVER);
+      jj_consume_token(SPECIFIC);
     } else if (jj_2_1273(2)) {
-      jj_consume_token(WITHOUT);
+      jj_consume_token(SQLEXCEPTION);
     } else if (jj_2_1274(2)) {
-      jj_consume_token(YEAR);
-    } else {
-      jj_consume_token(-1);
-      throw new ParseException();
-    }
-  }
-
-/** @see #NonReservedKeyWord */
-  final public void NonReservedKeyWord2of3() throws ParseException {
-    if (jj_2_1275(2)) {
-      jj_consume_token(BACKUPS);
+      jj_consume_token(SQRT);
+    } else if (jj_2_1275(2)) {
+      jj_consume_token(STATIC);
     } else if (jj_2_1276(2)) {
-      jj_consume_token(WRITE_SYNCHRONIZATION_MODE);
+      jj_consume_token(SUBMULTISET);
     } else if (jj_2_1277(2)) {
-      jj_consume_token(DATA_REGION);
+      jj_consume_token(SUBSTRING_REGEX);
     } else if (jj_2_1278(2)) {
-      jj_consume_token(PARALLEL);
+      jj_consume_token(SYMMETRIC);
     } else if (jj_2_1279(2)) {
-      jj_consume_token(NOLOGGING);
+      jj_consume_token(SYSTEM_USER);
     } else if (jj_2_1280(2)) {
-      jj_consume_token(SCAN);
+      jj_consume_token(TEMPORARY);
     } else if (jj_2_1281(2)) {
-      jj_consume_token(COMPUTE);
+      jj_consume_token(TINYINT);
     } else if (jj_2_1282(2)) {
-      jj_consume_token(A);
+      jj_consume_token(TRANSACTION);
     } else if (jj_2_1283(2)) {
-      jj_consume_token(ACTION);
+      jj_consume_token(TRANSLATION);
     } else if (jj_2_1284(2)) {
-      jj_consume_token(ALLOCATE);
+      jj_consume_token(TRIM);
     } else if (jj_2_1285(2)) {
-      jj_consume_token(AND);
+      jj_consume_token(TRUNCATE);
     } else if (jj_2_1286(2)) {
-      jj_consume_token(ARRAY_AGG);
+      jj_consume_token(UNIQUE);
     } else if (jj_2_1287(2)) {
-      jj_consume_token(AS);
+      jj_consume_token(UPSERT);
     } else if (jj_2_1288(2)) {
-      jj_consume_token(ASSERTION);
+      jj_consume_token(VALUE);
     } else if (jj_2_1289(2)) {
-      jj_consume_token(ATOMIC);
+      jj_consume_token(VARCHAR);
     } else if (jj_2_1290(2)) {
-      jj_consume_token(BEFORE);
+      jj_consume_token(VAR_SAMP);
     } else if (jj_2_1291(2)) {
-      jj_consume_token(BEGIN_PARTITION);
+      jj_consume_token(VIEW);
     } else if (jj_2_1292(2)) {
-      jj_consume_token(BINARY);
+      jj_consume_token(WIDTH_BUCKET);
     } else if (jj_2_1293(2)) {
-      jj_consume_token(BOOLEAN);
+      jj_consume_token(WORK);
     } else if (jj_2_1294(2)) {
-      jj_consume_token(BY);
-    } else if (jj_2_1295(2)) {
-      jj_consume_token(CARDINALITY);
+      jj_consume_token(ZONE);
+    } else {
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+/** @see #NonReservedKeyWord */
+  final public void NonReservedKeyWord2of3() throws ParseException {
+    if (jj_2_1295(2)) {
+      jj_consume_token(BACKUPS);
     } else if (jj_2_1296(2)) {
-      jj_consume_token(CAST);
+      jj_consume_token(WRITE_SYNCHRONIZATION_MODE);
     } else if (jj_2_1297(2)) {
-      jj_consume_token(CEILING);
+      jj_consume_token(DATA_REGION);
     } else if (jj_2_1298(2)) {
-      jj_consume_token(CHARACTER_LENGTH);
+      jj_consume_token(PARALLEL);
     } else if (jj_2_1299(2)) {
-      jj_consume_token(CLASSIFIER);
+      jj_consume_token(NOLOGGING);
     } else if (jj_2_1300(2)) {
-      jj_consume_token(COALESCE);
+      jj_consume_token(SCAN);
     } else if (jj_2_1301(2)) {
-      jj_consume_token(COLLECT);
+      jj_consume_token(COMPUTE);
     } else if (jj_2_1302(2)) {
-      jj_consume_token(CONDITION);
+      jj_consume_token(STATISTICS);
     } else if (jj_2_1303(2)) {
-      jj_consume_token(CONSTRAINTS);
+      jj_consume_token(MAX_CHANGED_PARTITION_ROWS_PERCENT);
     } else if (jj_2_1304(2)) {
-      jj_consume_token(CONTINUE);
+      jj_consume_token(ABS);
     } else if (jj_2_1305(2)) {
-      jj_consume_token(CORRESPONDING);
+      jj_consume_token(ADD);
     } else if (jj_2_1306(2)) {
-      jj_consume_token(COVAR_SAMP);
+      jj_consume_token(ALLOW);
     } else if (jj_2_1307(2)) {
-      jj_consume_token(CURRENT_CATALOG);
+      jj_consume_token(ARE);
     } else if (jj_2_1308(2)) {
-      jj_consume_token(CURRENT_PATH);
+      jj_consume_token(ARRAY_CONCAT_AGG);
     } else if (jj_2_1309(2)) {
-      jj_consume_token(CURRENT_SCHEMA);
+      jj_consume_token(ASC);
     } else if (jj_2_1310(2)) {
-      jj_consume_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE);
+      jj_consume_token(ASYMMETRIC);
     } else if (jj_2_1311(2)) {
-      jj_consume_token(DATA);
+      jj_consume_token(AUTHORIZATION);
     } else if (jj_2_1312(2)) {
-      jj_consume_token(DEALLOCATE);
+      jj_consume_token(BEGIN);
     } else if (jj_2_1313(2)) {
-      jj_consume_token(DECLARE);
+      jj_consume_token(BETWEEN);
     } else if (jj_2_1314(2)) {
-      jj_consume_token(DENSE_RANK);
+      jj_consume_token(BIT);
     } else if (jj_2_1315(2)) {
-      jj_consume_token(DESC);
+      jj_consume_token(BOTH);
     } else if (jj_2_1316(2)) {
-      jj_consume_token(DIAGNOSTICS);
+      jj_consume_token(C);
     } else if (jj_2_1317(2)) {
-      jj_consume_token(DOMAIN);
+      jj_consume_token(CASCADE);
     } else if (jj_2_1318(2)) {
-      jj_consume_token(EACH);
+      jj_consume_token(CATALOG);
     } else if (jj_2_1319(2)) {
-      jj_consume_token(EMPTY);
+      jj_consume_token(CHAR);
     } else if (jj_2_1320(2)) {
-      jj_consume_token(END_PARTITION);
+      jj_consume_token(CHAR_LENGTH);
     } else if (jj_2_1321(2)) {
-      jj_consume_token(EVERY);
+      jj_consume_token(CLOB);
     } else if (jj_2_1322(2)) {
-      jj_consume_token(EXECUTE);
+      jj_consume_token(COLLATE);
     } else if (jj_2_1323(2)) {
-      jj_consume_token(EXTEND);
+      jj_consume_token(COLUMN);
     } else if (jj_2_1324(2)) {
-      jj_consume_token(FALSE);
+      jj_consume_token(CONNECT);
     } else if (jj_2_1325(2)) {
-      jj_consume_token(FIRST_VALUE);
+      jj_consume_token(CONSTRUCTOR);
     } else if (jj_2_1326(2)) {
-      jj_consume_token(FOR);
+      jj_consume_token(CONVERT);
     } else if (jj_2_1327(2)) {
-      jj_consume_token(FRAME_ROW);
+      jj_consume_token(COUNT);
     } else if (jj_2_1328(2)) {
-      jj_consume_token(FUSION);
+      jj_consume_token(CUBE);
     } else if (jj_2_1329(2)) {
-      jj_consume_token(GET);
+      jj_consume_token(CURRENT_DATE);
     } else if (jj_2_1330(2)) {
-      jj_consume_token(GOTO);
+      jj_consume_token(CURRENT_ROLE);
     } else if (jj_2_1331(2)) {
-      jj_consume_token(HOUR);
+      jj_consume_token(CURRENT_TIME);
     } else if (jj_2_1332(2)) {
-      jj_consume_token(IMMEDIATELY);
+      jj_consume_token(CURRENT_USER);
     } else if (jj_2_1333(2)) {
-      jj_consume_token(INITIAL);
+      jj_consume_token(DATE);
     } else if (jj_2_1334(2)) {
-      jj_consume_token(INPUT);
+      jj_consume_token(DEC);
     } else if (jj_2_1335(2)) {
-      jj_consume_token(INTEGER);
+      jj_consume_token(DEFERRABLE);
     } else if (jj_2_1336(2)) {
-      jj_consume_token(ISOLATION);
+      jj_consume_token(DEPTH);
     } else if (jj_2_1337(2)) {
-      jj_consume_token(JSON_EXISTS);
+      jj_consume_token(DESCRIPTOR);
     } else if (jj_2_1338(2)) {
-      jj_consume_token(JSON_QUERY);
+      jj_consume_token(DISALLOW);
     } else if (jj_2_1339(2)) {
-      jj_consume_token(KEY);
+      jj_consume_token(DOUBLE);
     } else if (jj_2_1340(2)) {
-      jj_consume_token(LARGE);
+      jj_consume_token(ELEMENT);
     } else if (jj_2_1341(2)) {
-      jj_consume_token(LEAD);
+      jj_consume_token(END);
     } else if (jj_2_1342(2)) {
-      jj_consume_token(LEVEL);
+      jj_consume_token(EQUALS);
     } else if (jj_2_1343(2)) {
-      jj_consume_token(LN);
+      jj_consume_token(EXCEPTION);
     } else if (jj_2_1344(2)) {
-      jj_consume_token(LOCALTIMESTAMP);
+      jj_consume_token(EXISTS);
     } else if (jj_2_1345(2)) {
-      jj_consume_token(M);
+      jj_consume_token(EXTERNAL);
     } else if (jj_2_1346(2)) {
-      jj_consume_token(MATCHES);
+      jj_consume_token(FILTER);
     } else if (jj_2_1347(2)) {
-      jj_consume_token(MEASURES);
+      jj_consume_token(FLOAT);
     } else if (jj_2_1348(2)) {
-      jj_consume_token(MIN);
+      jj_consume_token(FOREIGN);
     } else if (jj_2_1349(2)) {
-      jj_consume_token(MODIFIES);
+      jj_consume_token(FREE);
     } else if (jj_2_1350(2)) {
-      jj_consume_token(MULTISET);
+      jj_consume_token(G);
     } else if (jj_2_1351(2)) {
-      jj_consume_token(NATIONAL);
+      jj_consume_token(GLOBAL);
     } else if (jj_2_1352(2)) {
-      jj_consume_token(NO);
+      jj_consume_token(GROUPS);
     } else if (jj_2_1353(2)) {
-      jj_consume_token(NOT);
+      jj_consume_token(IDENTITY);
     } else if (jj_2_1354(2)) {
-      jj_consume_token(NULLIF);
+      jj_consume_token(IMPORT);
     } else if (jj_2_1355(2)) {
-      jj_consume_token(OCCURRENCES_REGEX);
+      jj_consume_token(INITIALLY);
     } else if (jj_2_1356(2)) {
-      jj_consume_token(OLD);
+      jj_consume_token(INSENSITIVE);
     } else if (jj_2_1357(2)) {
-      jj_consume_token(ONLY);
+      jj_consume_token(INTERSECTION);
     } else if (jj_2_1358(2)) {
-      jj_consume_token(OR);
+      jj_consume_token(JSON_ARRAY);
     } else if (jj_2_1359(2)) {
-      jj_consume_token(OUTPUT);
+      jj_consume_token(JSON_OBJECT);
     } else if (jj_2_1360(2)) {
-      jj_consume_token(PAD);
+      jj_consume_token(JSON_VALUE);
     } else if (jj_2_1361(2)) {
-      jj_consume_token(PATH);
+      jj_consume_token(LAG);
     } else if (jj_2_1362(2)) {
-      jj_consume_token(PERCENTILE_CONT);
+      jj_consume_token(LAST);
     } else if (jj_2_1363(2)) {
-      jj_consume_token(PERIOD);
+      jj_consume_token(LEADING);
     } else if (jj_2_1364(2)) {
-      jj_consume_token(POSITION);
+      jj_consume_token(LIKE);
     } else if (jj_2_1365(2)) {
-      jj_consume_token(PRECEDES);
+      jj_consume_token(LOCAL);
     } else if (jj_2_1366(2)) {
-      jj_consume_token(PRESERVE);
+      jj_consume_token(LOCATOR);
     } else if (jj_2_1367(2)) {
-      jj_consume_token(PRIVILEGES);
+      jj_consume_token(MAP);
     } else if (jj_2_1368(2)) {
-      jj_consume_token(QUARTER);
+      jj_consume_token(MATCH_NUMBER);
     } else if (jj_2_1369(2)) {
-      jj_consume_token(READS);
+      jj_consume_token(MEMBER);
     } else if (jj_2_1370(2)) {
-      jj_consume_token(REF);
+      jj_consume_token(MINUTE);
     } else if (jj_2_1371(2)) {
-      jj_consume_token(REGR_AVGX);
+      jj_consume_token(MODULE);
     } else if (jj_2_1372(2)) {
-      jj_consume_token(REGR_INTERCEPT);
+      jj_consume_token(NAME);
     } else if (jj_2_1373(2)) {
-      jj_consume_token(REGR_SXX);
+      jj_consume_token(NCHAR);
     } else if (jj_2_1374(2)) {
-      jj_consume_token(RELATIVE);
+      jj_consume_token(NONE);
     } else if (jj_2_1375(2)) {
-      jj_consume_token(RESET);
+      jj_consume_token(NTH_VALUE);
     } else if (jj_2_1376(2)) {
-      jj_consume_token(RETURN);
+      jj_consume_token(NUMERIC);
     } else if (jj_2_1377(2)) {
-      jj_consume_token(ROLE);
+      jj_consume_token(OCTET_LENGTH);
     } else if (jj_2_1378(2)) {
-      jj_consume_token(ROW_NUMBER);
+      jj_consume_token(OMIT);
     } else if (jj_2_1379(2)) {
-      jj_consume_token(SCHEMA);
+      jj_consume_token(OPEN);
     } else if (jj_2_1380(2)) {
-      jj_consume_token(SEARCH);
+      jj_consume_token(ORDINALITY);
     } else if (jj_2_1381(2)) {
-      jj_consume_token(SEEK);
+      jj_consume_token(OVERLAPS);
     } else if (jj_2_1382(2)) {
-      jj_consume_token(SESSION_USER);
+      jj_consume_token(PARAMETER);
     } else if (jj_2_1383(2)) {
-      jj_consume_token(SIZE);
+      jj_consume_token(PER);
     } else if (jj_2_1384(2)) {
-      jj_consume_token(SPECIFIC);
+      jj_consume_token(PERCENTILE_DISC);
     } else if (jj_2_1385(2)) {
-      jj_consume_token(SQLEXCEPTION);
+      jj_consume_token(PERMUTE);
     } else if (jj_2_1386(2)) {
-      jj_consume_token(SQRT);
+      jj_consume_token(POSITION_REGEX);
     } else if (jj_2_1387(2)) {
-      jj_consume_token(STATIC);
+      jj_consume_token(PRECISION);
     } else if (jj_2_1388(2)) {
-      jj_consume_token(SUBMULTISET);
+      jj_consume_token(PREV);
     } else if (jj_2_1389(2)) {
-      jj_consume_token(SUBSTRING_REGEX);
+      jj_consume_token(PROCEDURE);
     } else if (jj_2_1390(2)) {
-      jj_consume_token(SYMMETRIC);
+      jj_consume_token(RANK);
     } else if (jj_2_1391(2)) {
-      jj_consume_token(SYSTEM_USER);
+      jj_consume_token(REAL);
     } else if (jj_2_1392(2)) {
-      jj_consume_token(TEMPORARY);
+      jj_consume_token(REFERENCES);
     } else if (jj_2_1393(2)) {
-      jj_consume_token(TINYINT);
+      jj_consume_token(REGR_AVGY);
     } else if (jj_2_1394(2)) {
-      jj_consume_token(TRANSACTION);
+      jj_consume_token(REGR_R2);
     } else if (jj_2_1395(2)) {
-      jj_consume_token(TRANSLATION);
+      jj_consume_token(REGR_SXY);
     } else if (jj_2_1396(2)) {
-      jj_consume_token(TRIM);
+      jj_consume_token(RELEASE);
     } else if (jj_2_1397(2)) {
-      jj_consume_token(TRUNCATE);
+      jj_consume_token(RESTRICT);
     } else if (jj_2_1398(2)) {
-      jj_consume_token(UNIQUE);
+      jj_consume_token(RETURNS);
     } else if (jj_2_1399(2)) {
-      jj_consume_token(UPSERT);
+      jj_consume_token(ROLLBACK);
     } else if (jj_2_1400(2)) {
-      jj_consume_token(VALUE);
+      jj_consume_token(RUNNING);
     } else if (jj_2_1401(2)) {
-      jj_consume_token(VARCHAR);
+      jj_consume_token(SCOPE);
     } else if (jj_2_1402(2)) {
-      jj_consume_token(VAR_SAMP);
+      jj_consume_token(SECOND);
     } else if (jj_2_1403(2)) {
-      jj_consume_token(VIEW);
+      jj_consume_token(SENSITIVE);
     } else if (jj_2_1404(2)) {
-      jj_consume_token(WIDTH_BUCKET);
+      jj_consume_token(SHOW);
     } else if (jj_2_1405(2)) {
-      jj_consume_token(WORK);
+      jj_consume_token(SMALLINT);
     } else if (jj_2_1406(2)) {
-      jj_consume_token(ZONE);
+      jj_consume_token(SPECIFICTYPE);
+    } else if (jj_2_1407(2)) {
+      jj_consume_token(SQLSTATE);
+    } else if (jj_2_1408(2)) {
+      jj_consume_token(START);
+    } else if (jj_2_1409(2)) {
+      jj_consume_token(STDDEV_POP);
+    } else if (jj_2_1410(2)) {
+      jj_consume_token(SUBSET);
+    } else if (jj_2_1411(2)) {
+      jj_consume_token(SUCCEEDS);
+    } else if (jj_2_1412(2)) {
+      jj_consume_token(SYSTEM);
+    } else if (jj_2_1413(2)) {
+      jj_consume_token(STRING_AGG);
+    } else if (jj_2_1414(2)) {
+      jj_consume_token(TIMEZONE_HOUR);
+    } else if (jj_2_1415(2)) {
+      jj_consume_token(TO);
+    } else if (jj_2_1416(2)) {
+      jj_consume_token(TRANSLATE);
+    } else if (jj_2_1417(2)) {
+      jj_consume_token(TREAT);
+    } else if (jj_2_1418(2)) {
+      jj_consume_token(TRIM_ARRAY);
+    } else if (jj_2_1419(2)) {
+      jj_consume_token(UESCAPE);
+    } else if (jj_2_1420(2)) {
+      jj_consume_token(UNKNOWN);
+    } else if (jj_2_1421(2)) {
+      jj_consume_token(USAGE);
+    } else if (jj_2_1422(2)) {
+      jj_consume_token(VALUE_OF);
+    } else if (jj_2_1423(2)) {
+      jj_consume_token(VARYING);
+    } else if (jj_2_1424(2)) {
+      jj_consume_token(VERSION);
+    } else if (jj_2_1425(2)) {
+      jj_consume_token(WEEK);
+    } else if (jj_2_1426(2)) {
+      jj_consume_token(WITHIN);
+    } else if (jj_2_1427(2)) {
+      jj_consume_token(WRITE);
     } else {
       jj_consume_token(-1);
       throw new ParseException();
@@ -19574,1798 +19738,1318 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     finally { jj_save(1405, xla); }
   }
 
-  final private boolean jj_3R_312() {
-    if (jj_3R_66()) return true;
-    return false;
+  final private boolean jj_2_1407(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1407(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1406, xla); }
   }
 
-  final private boolean jj_3R_139() {
-    return false;
+  final private boolean jj_2_1408(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1408(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1407, xla); }
   }
 
-  final private boolean jj_3_240() {
-    if (jj_3R_61()) return true;
-    return false;
+  final private boolean jj_2_1409(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1409(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1408, xla); }
   }
 
-  final private boolean jj_3_237() {
-    if (jj_scan_token(ROW)) return true;
-    return false;
+  final private boolean jj_2_1410(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1410(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1409, xla); }
   }
 
-  final private boolean jj_3_239() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_237()) {
-    jj_scanpos = xsp;
-    if (jj_3R_139()) return true;
-    }
-    if (jj_3R_138()) return true;
-    return false;
+  final private boolean jj_2_1411(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1411(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1410, xla); }
   }
 
-  final private boolean jj_3_687() {
-    if (jj_scan_token(NOT)) return true;
-    if (jj_scan_token(NULL)) return true;
-    return false;
+  final private boolean jj_2_1412(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1412(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1411, xla); }
   }
 
-  final private boolean jj_3_686() {
-    if (jj_scan_token(NULL)) return true;
-    return false;
+  final private boolean jj_2_1413(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1413(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1412, xla); }
   }
 
-  final private boolean jj_3_238() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_scan_token(ROW)) return true;
-    if (jj_3R_138()) return true;
-    return false;
+  final private boolean jj_2_1414(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1414(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1413, xla); }
   }
 
-  final private boolean jj_3R_137() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_238()) {
-    jj_scanpos = xsp;
-    if (jj_3_239()) {
-    jj_scanpos = xsp;
-    if (jj_3_240()) return true;
-    }
-    }
-    return false;
+  final private boolean jj_2_1415(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1415(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1414, xla); }
   }
 
-  final private boolean jj_3_685() {
-    if (jj_scan_token(NOT)) return true;
-    if (jj_scan_token(NULL)) return true;
-    return false;
+  final private boolean jj_2_1416(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1416(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1415, xla); }
   }
 
-  final private boolean jj_3_684() {
-    if (jj_scan_token(NULL)) return true;
-    return false;
+  final private boolean jj_2_1417(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1417(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1416, xla); }
   }
 
-  final private boolean jj_3_236() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_137()) return true;
-    return false;
+  final private boolean jj_2_1418(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1418(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1417, xla); }
   }
 
-  final private boolean jj_3_683() {
-    if (jj_scan_token(ARRAY)) return true;
-    return false;
+  final private boolean jj_2_1419(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1419(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1418, xla); }
   }
 
-  final private boolean jj_3_682() {
-    if (jj_scan_token(MULTISET)) return true;
-    return false;
+  final private boolean jj_2_1420(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1420(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1419, xla); }
   }
 
-  final private boolean jj_3R_270() {
-    if (jj_3R_137()) return true;
-    return false;
+  final private boolean jj_2_1421(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1421(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1420, xla); }
   }
 
-  final private boolean jj_3R_216() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_682()) {
-    jj_scanpos = xsp;
-    if (jj_3_683()) return true;
-    }
-    return false;
+  final private boolean jj_2_1422(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1422(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1421, xla); }
   }
 
-  final private boolean jj_3R_59() {
-    if (jj_scan_token(VALUES)) return true;
-    if (jj_3R_270()) return true;
-    return false;
+  final private boolean jj_2_1423(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1423(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1422, xla); }
   }
 
-  final private boolean jj_3_649() {
-    if (jj_scan_token(DOUBLE)) return true;
-    return false;
+  final private boolean jj_2_1424(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1424(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1423, xla); }
   }
 
-  final private boolean jj_3_651() {
-    if (jj_scan_token(FLOAT)) return true;
-    return false;
+  final private boolean jj_2_1425(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1425(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1424, xla); }
   }
 
-  final private boolean jj_3_643() {
-    if (jj_scan_token(SMALLINT)) return true;
-    return false;
+  final private boolean jj_2_1426(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1426(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1425, xla); }
   }
 
-  final private boolean jj_3_639() {
-    if (jj_scan_token(VARBINARY)) return true;
-    return false;
+  final private boolean jj_2_1427(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1427(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1426, xla); }
   }
 
-  final private boolean jj_3_645() {
-    if (jj_scan_token(BIGINT)) return true;
+  final private boolean jj_3_250() {
+    if (jj_3R_96()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_249()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_681() {
-    if (jj_scan_token(SQL_INTERVAL_SECOND)) return true;
+  final private boolean jj_3_626() {
+    if (jj_scan_token(VARBINARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_641() {
-    if (jj_scan_token(TINYINT)) return true;
+  final private boolean jj_3_624() {
+    if (jj_scan_token(VARYING)) return true;
     return false;
   }
 
-  final private boolean jj_3_680() {
-    if (jj_scan_token(SQL_INTERVAL_MINUTE_TO_SECOND)) return true;
+  final private boolean jj_3R_222() {
+    if (jj_3R_122()) return true;
     return false;
   }
 
-  final private boolean jj_3_647() {
-    if (jj_scan_token(REAL)) return true;
+  final private boolean jj_3_625() {
+    if (jj_scan_token(BINARY)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_624()) {
+    jj_scanpos = xsp;
+    if (jj_3R_231()) return true;
+    }
     return false;
   }
 
-  final private boolean jj_3_679() {
-    if (jj_scan_token(SQL_INTERVAL_MINUTE)) return true;
+  final private boolean jj_3R_227() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_625()) {
+    jj_scanpos = xsp;
+    if (jj_3_626()) return true;
+    }
+    if (jj_3R_215()) return true;
     return false;
   }
 
-  final private boolean jj_3_678() {
-    if (jj_scan_token(SQL_INTERVAL_HOUR_TO_SECOND)) return true;
+  final private boolean jj_3_613() {
+    if (jj_scan_token(INT)) return true;
     return false;
   }
 
-  final private boolean jj_3_635() {
-    if (jj_scan_token(INTEGER)) return true;
+  final private boolean jj_3_248() {
+    if (jj_scan_token(NOT)) return true;
+    if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  final private boolean jj_3_637() {
-    if (jj_scan_token(BINARY)) return true;
+  final private boolean jj_3_614() {
+    if (jj_scan_token(PRECISION)) return true;
     return false;
   }
 
-  final private boolean jj_3_677() {
-    if (jj_scan_token(SQL_INTERVAL_HOUR_TO_MINUTE)) return true;
+  final private boolean jj_3_623() {
+    if (jj_scan_token(FLOAT)) return true;
     return false;
   }
 
-  final private boolean jj_3_633() {
-    if (jj_scan_token(BOOLEAN)) return true;
+  final private boolean jj_3_622() {
+    if (jj_scan_token(DOUBLE)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_614()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_676() {
-    if (jj_scan_token(SQL_INTERVAL_HOUR)) return true;
+  final private boolean jj_3_621() {
+    if (jj_scan_token(REAL)) return true;
     return false;
   }
 
-  final private boolean jj_3R_60() {
-    if (jj_scan_token(TABLE)) return true;
-    if (jj_3R_115()) return true;
+  final private boolean jj_3R_143() {
+    if (jj_3R_122()) return true;
+    if (jj_3R_96()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_248()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_627() {
-    if (jj_scan_token(TIMESTAMP)) return true;
+  final private boolean jj_3_620() {
+    if (jj_scan_token(BIGINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_631() {
-    if (jj_scan_token(NUMERIC)) return true;
+  final private boolean jj_3_619() {
+    if (jj_scan_token(SMALLINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_675() {
-    if (jj_scan_token(SQL_INTERVAL_DAY_TO_SECOND)) return true;
+  final private boolean jj_3_612() {
+    if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
-  final private boolean jj_3_629() {
-    if (jj_scan_token(DECIMAL)) return true;
+  final private boolean jj_3_618() {
+    if (jj_scan_token(TINYINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_674() {
-    if (jj_scan_token(SQL_INTERVAL_DAY_TO_MINUTE)) return true;
+  final private boolean jj_3_617() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_612()) {
+    jj_scanpos = xsp;
+    if (jj_3_613()) return true;
+    }
     return false;
   }
 
-  final private boolean jj_3_673() {
-    if (jj_scan_token(SQL_INTERVAL_DAY_TO_HOUR)) return true;
+  final private boolean jj_3_616() {
+    if (jj_scan_token(BOOLEAN)) return true;
     return false;
   }
 
-  final private boolean jj_3_672() {
-    if (jj_scan_token(SQL_INTERVAL_DAY)) return true;
+  final private boolean jj_3_247() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_143()) return true;
     return false;
   }
 
-  final private boolean jj_3_671() {
-    if (jj_scan_token(SQL_INTERVAL_MONTH)) return true;
+  final private boolean jj_3_615() {
+    if (jj_scan_token(GEOMETRY)) return true;
     return false;
   }
 
-  final private boolean jj_3_621() {
-    if (jj_scan_token(VARCHAR)) return true;
+  final private boolean jj_3R_125() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_143()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_247()) { jj_scanpos = xsp; break; }
+    }
+    if (jj_scan_token(RPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_670() {
-    if (jj_scan_token(SQL_INTERVAL_YEAR_TO_MONTH)) return true;
+  final private boolean jj_3R_226() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_615()) {
+    jj_scanpos = xsp;
+    if (jj_3_616()) {
+    jj_scanpos = xsp;
+    if (jj_3_617()) {
+    jj_scanpos = xsp;
+    if (jj_3_618()) {
+    jj_scanpos = xsp;
+    if (jj_3_619()) {
+    jj_scanpos = xsp;
+    if (jj_3_620()) {
+    jj_scanpos = xsp;
+    if (jj_3_621()) {
+    jj_scanpos = xsp;
+    if (jj_3_622()) {
+    jj_scanpos = xsp;
+    if (jj_3_623()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
     return false;
   }
 
-  final private boolean jj_3_625() {
-    if (jj_scan_token(TIME)) return true;
+  final private boolean jj_3_611() {
+    if (jj_3R_230()) return true;
     return false;
   }
 
-  final private boolean jj_3_650() {
-    if (jj_scan_token(SQL_FLOAT)) return true;
+  final private boolean jj_3_610() {
+    if (jj_3R_229()) return true;
     return false;
   }
 
-  final private boolean jj_3_669() {
-    if (jj_scan_token(SQL_INTERVAL_YEAR)) return true;
+  final private boolean jj_3_609() {
+    if (jj_3R_228()) return true;
     return false;
   }
 
-  final private boolean jj_3_623() {
-    if (jj_scan_token(DATE)) return true;
+  final private boolean jj_3_608() {
+    if (jj_3R_227()) return true;
     return false;
   }
 
-  final private boolean jj_3_648() {
-    if (jj_scan_token(SQL_DOUBLE)) return true;
+  final private boolean jj_3_607() {
+    if (jj_3R_226()) return true;
     return false;
   }
 
-  final private boolean jj_3_668() {
+  final private boolean jj_3R_224() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_650()) {
+    if (jj_3_607()) {
     jj_scanpos = xsp;
-    if (jj_3_651()) return true;
+    if (jj_3_608()) {
+    jj_scanpos = xsp;
+    if (jj_3_609()) {
+    jj_scanpos = xsp;
+    if (jj_3_610()) {
+    jj_scanpos = xsp;
+    if (jj_3_611()) return true;
+    }
+    }
+    }
     }
     return false;
   }
 
-  final private boolean jj_3_646() {
-    if (jj_scan_token(SQL_REAL)) return true;
+  final private boolean jj_3_1427() {
+    if (jj_scan_token(WRITE)) return true;
     return false;
   }
 
-  final private boolean jj_3_667() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_648()) {
-    jj_scanpos = xsp;
-    if (jj_3_649()) return true;
-    }
+  final private boolean jj_3_1426() {
+    if (jj_scan_token(WITHIN)) return true;
     return false;
   }
 
-  final private boolean jj_3_619() {
-    if (jj_scan_token(CHAR)) return true;
+  final private boolean jj_3_1425() {
+    if (jj_scan_token(WEEK)) return true;
     return false;
   }
 
-  final private boolean jj_3_644() {
-    if (jj_scan_token(SQL_BIGINT)) return true;
+  final private boolean jj_3_1424() {
+    if (jj_scan_token(VERSION)) return true;
     return false;
   }
 
-  final private boolean jj_3_666() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_646()) {
-    jj_scanpos = xsp;
-    if (jj_3_647()) return true;
-    }
+  final private boolean jj_3_1423() {
+    if (jj_scan_token(VARYING)) return true;
     return false;
   }
 
-  final private boolean jj_3_642() {
-    if (jj_scan_token(SQL_SMALLINT)) return true;
+  final private boolean jj_3_1422() {
+    if (jj_scan_token(VALUE_OF)) return true;
     return false;
   }
 
-  final private boolean jj_3_665() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_644()) {
-    jj_scanpos = xsp;
-    if (jj_3_645()) return true;
-    }
+  final private boolean jj_3_1421() {
+    if (jj_scan_token(USAGE)) return true;
     return false;
   }
 
-  final private boolean jj_3_640() {
-    if (jj_scan_token(SQL_TINYINT)) return true;
+  final private boolean jj_3_1420() {
+    if (jj_scan_token(UNKNOWN)) return true;
     return false;
   }
 
-  final private boolean jj_3_664() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_642()) {
-    jj_scanpos = xsp;
-    if (jj_3_643()) return true;
-    }
+  final private boolean jj_3_1419() {
+    if (jj_scan_token(UESCAPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_638() {
-    if (jj_scan_token(SQL_VARBINARY)) return true;
+  final private boolean jj_3_243() {
+    if (jj_scan_token(REPEATABLE)) return true;
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_663() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_640()) {
-    jj_scanpos = xsp;
-    if (jj_3_641()) return true;
-    }
+  final private boolean jj_3_1418() {
+    if (jj_scan_token(TRIM_ARRAY)) return true;
     return false;
   }
 
-  final private boolean jj_3_636() {
-    if (jj_scan_token(SQL_BINARY)) return true;
+  final private boolean jj_3_1417() {
+    if (jj_scan_token(TREAT)) return true;
     return false;
   }
 
-  final private boolean jj_3_662() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_638()) {
-    jj_scanpos = xsp;
-    if (jj_3_639()) return true;
-    }
+  final private boolean jj_3_1416() {
+    if (jj_scan_token(TRANSLATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_634() {
-    if (jj_scan_token(SQL_INTEGER)) return true;
+  final private boolean jj_3_606() {
+    if (jj_3R_122()) return true;
     return false;
   }
 
-  final private boolean jj_3_661() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_636()) {
-    jj_scanpos = xsp;
-    if (jj_3_637()) return true;
-    }
+  final private boolean jj_3_1415() {
+    if (jj_scan_token(TO)) return true;
     return false;
   }
 
-  final private boolean jj_3_632() {
-    if (jj_scan_token(SQL_BOOLEAN)) return true;
+  final private boolean jj_3_1414() {
+    if (jj_scan_token(TIMEZONE_HOUR)) return true;
     return false;
   }
 
-  final private boolean jj_3_660() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_634()) {
-    jj_scanpos = xsp;
-    if (jj_3_635()) return true;
-    }
+  final private boolean jj_3_605() {
+    if (jj_3R_225()) return true;
     return false;
   }
 
-  final private boolean jj_3_630() {
-    if (jj_scan_token(SQL_NUMERIC)) return true;
+  final private boolean jj_3_1413() {
+    if (jj_scan_token(STRING_AGG)) return true;
     return false;
   }
 
-  final private boolean jj_3_659() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_632()) {
-    jj_scanpos = xsp;
-    if (jj_3_633()) return true;
-    }
+  final private boolean jj_3_1412() {
+    if (jj_scan_token(SYSTEM)) return true;
     return false;
   }
 
-  final private boolean jj_3_628() {
-    if (jj_scan_token(SQL_DECIMAL)) return true;
+  final private boolean jj_3_242() {
+    if (jj_scan_token(SYSTEM)) return true;
     return false;
   }
 
-  final private boolean jj_3_658() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_630()) {
-    jj_scanpos = xsp;
-    if (jj_3_631()) return true;
-    }
+  final private boolean jj_3_1411() {
+    if (jj_scan_token(SUCCEEDS)) return true;
     return false;
   }
 
-  final private boolean jj_3_626() {
-    if (jj_scan_token(SQL_TIMESTAMP)) return true;
+  final private boolean jj_3_604() {
+    if (jj_3R_224()) return true;
     return false;
   }
 
-  final private boolean jj_3_657() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_628()) {
-    jj_scanpos = xsp;
-    if (jj_3_629()) return true;
-    }
+  final private boolean jj_3_1410() {
+    if (jj_scan_token(SUBSET)) return true;
     return false;
   }
 
-  final private boolean jj_3_624() {
-    if (jj_scan_token(SQL_TIME)) return true;
+  final private boolean jj_3_1409() {
+    if (jj_scan_token(STDDEV_POP)) return true;
     return false;
   }
 
-  final private boolean jj_3_656() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_626()) {
-    jj_scanpos = xsp;
-    if (jj_3_627()) return true;
-    }
+  final private boolean jj_3_1408() {
+    if (jj_scan_token(START)) return true;
     return false;
   }
 
-  final private boolean jj_3_622() {
-    if (jj_scan_token(SQL_DATE)) return true;
+  final private boolean jj_3_1407() {
+    if (jj_scan_token(SQLSTATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_655() {
+  final private boolean jj_3_241() {
+    if (jj_scan_token(BERNOULLI)) return true;
+    return false;
+  }
+
+  final private boolean jj_3R_285() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_624()) {
+    if (jj_3_604()) {
     jj_scanpos = xsp;
-    if (jj_3_625()) return true;
+    if (jj_3_605()) {
+    jj_scanpos = xsp;
+    if (jj_3_606()) return true;
+    }
     }
     return false;
   }
 
-  final private boolean jj_3_613() {
-    if (jj_scan_token(NUMERIC)) return true;
+  final private boolean jj_3_1406() {
+    if (jj_scan_token(SPECIFICTYPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_620() {
-    if (jj_scan_token(SQL_VARCHAR)) return true;
+  final private boolean jj_3_1405() {
+    if (jj_scan_token(SMALLINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_654() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_622()) {
-    jj_scanpos = xsp;
-    if (jj_3_623()) return true;
-    }
+  final private boolean jj_3_1404() {
+    if (jj_scan_token(SHOW)) return true;
     return false;
   }
 
-  final private boolean jj_3_618() {
-    if (jj_scan_token(SQL_CHAR)) return true;
+  final private boolean jj_3_1403() {
+    if (jj_scan_token(SENSITIVE)) return true;
     return false;
   }
 
-  final private boolean jj_3_653() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_620()) {
-    jj_scanpos = xsp;
-    if (jj_3_621()) return true;
-    }
+  final private boolean jj_3_1402() {
+    if (jj_scan_token(SECOND)) return true;
     return false;
   }
 
-  final private boolean jj_3_652() {
+  final private boolean jj_3_245() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_618()) {
+    if (jj_3_241()) {
     jj_scanpos = xsp;
-    if (jj_3_619()) return true;
+    if (jj_3_242()) return true;
     }
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_612() {
-    if (jj_scan_token(DEC)) return true;
+  final private boolean jj_3_1401() {
+    if (jj_scan_token(SCOPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_616() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_209()) return true;
+  final private boolean jj_3_1400() {
+    if (jj_scan_token(RUNNING)) return true;
     return false;
   }
 
-  final private boolean jj_3_235() {
-    if (jj_scan_token(SPECIFIC)) return true;
+  final private boolean jj_3_1399() {
+    if (jj_scan_token(ROLLBACK)) return true;
     return false;
   }
 
-  final private boolean jj_3_617() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_209()) return true;
+  final private boolean jj_3_1398() {
+    if (jj_scan_token(RETURNS)) return true;
     return false;
   }
 
-  final private boolean jj_3_615() {
-    if (jj_scan_token(ANY)) return true;
+  final private boolean jj_3_1397() {
+    if (jj_scan_token(RESTRICT)) return true;
     return false;
   }
 
-  final private boolean jj_3_611() {
-    if (jj_scan_token(DECIMAL)) return true;
+  final private boolean jj_3_1396() {
+    if (jj_scan_token(RELEASE)) return true;
     return false;
   }
 
-  final private boolean jj_3_614() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_611()) {
-    jj_scanpos = xsp;
-    if (jj_3_612()) {
-    jj_scanpos = xsp;
-    if (jj_3_613()) return true;
-    }
-    }
+  final private boolean jj_3_1395() {
+    if (jj_scan_token(REGR_SXY)) return true;
     return false;
   }
 
-  final private boolean jj_3R_221() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_614()) {
-    jj_scanpos = xsp;
-    if (jj_3_615()) return true;
-    }
-    xsp = jj_scanpos;
-    if (jj_3_617()) jj_scanpos = xsp;
+  final private boolean jj_3_1394() {
+    if (jj_scan_token(REGR_R2)) return true;
     return false;
   }
 
-  final private boolean jj_3_233() {
-    if (jj_scan_token(NOT)) return true;
-    if (jj_scan_token(NULL)) return true;
+  final private boolean jj_3_603() {
+    if (jj_3R_223()) return true;
     return false;
   }
 
-  final private boolean jj_3R_224() {
+  final private boolean jj_3_1393() {
+    if (jj_scan_token(REGR_AVGY)) return true;
     return false;
   }
 
-  final private boolean jj_3_234() {
-    if (jj_3R_91()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_233()) jj_scanpos = xsp;
+  final private boolean jj_3_1392() {
+    if (jj_scan_token(REFERENCES)) return true;
     return false;
   }
 
-  final private boolean jj_3_610() {
-    if (jj_scan_token(VARBINARY)) return true;
+  final private boolean jj_3_1391() {
+    if (jj_scan_token(REAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_608() {
-    if (jj_scan_token(VARYING)) return true;
+  final private boolean jj_3_244() {
+    if (jj_scan_token(SUBSTITUTE)) return true;
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3R_215() {
-    if (jj_3R_115()) return true;
+  final private boolean jj_3_1390() {
+    if (jj_scan_token(RANK)) return true;
     return false;
   }
 
-  final private boolean jj_3_609() {
-    if (jj_scan_token(BINARY)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_608()) {
-    jj_scanpos = xsp;
-    if (jj_3R_224()) return true;
-    }
+  final private boolean jj_3_1389() {
+    if (jj_scan_token(PROCEDURE)) return true;
     return false;
   }
 
-  final private boolean jj_3R_220() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_609()) {
-    jj_scanpos = xsp;
-    if (jj_3_610()) return true;
-    }
-    if (jj_3R_208()) return true;
+  final private boolean jj_3_1388() {
+    if (jj_scan_token(PREV)) return true;
     return false;
   }
 
-  final private boolean jj_3_597() {
-    if (jj_scan_token(INT)) return true;
+  final private boolean jj_3_1387() {
+    if (jj_scan_token(PRECISION)) return true;
     return false;
   }
 
-  final private boolean jj_3_232() {
-    if (jj_scan_token(NOT)) return true;
-    if (jj_scan_token(NULL)) return true;
+  final private boolean jj_3R_96() {
+    if (jj_3R_285()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_603()) { jj_scanpos = xsp; break; }
+    }
     return false;
   }
 
-  final private boolean jj_3_598() {
-    if (jj_scan_token(PRECISION)) return true;
+  final private boolean jj_3_1386() {
+    if (jj_scan_token(POSITION_REGEX)) return true;
     return false;
   }
 
-  final private boolean jj_3_607() {
-    if (jj_scan_token(FLOAT)) return true;
+  final private boolean jj_3_1385() {
+    if (jj_scan_token(PERMUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_606() {
-    if (jj_scan_token(DOUBLE)) return true;
+  final private boolean jj_3_246() {
+    if (jj_scan_token(TABLESAMPLE)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_598()) jj_scanpos = xsp;
+    if (jj_3_244()) {
+    jj_scanpos = xsp;
+    if (jj_3_245()) return true;
+    }
     return false;
   }
 
-  final private boolean jj_3_605() {
-    if (jj_scan_token(REAL)) return true;
+  final private boolean jj_3_1384() {
+    if (jj_scan_token(PERCENTILE_DISC)) return true;
     return false;
   }
 
-  final private boolean jj_3R_136() {
-    if (jj_3R_115()) return true;
-    if (jj_3R_91()) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_232()) jj_scanpos = xsp;
+  final private boolean jj_3_1383() {
+    if (jj_scan_token(PER)) return true;
     return false;
   }
 
-  final private boolean jj_3_604() {
-    if (jj_scan_token(BIGINT)) return true;
+  final private boolean jj_3_1382() {
+    if (jj_scan_token(PARAMETER)) return true;
     return false;
   }
 
-  final private boolean jj_3_603() {
-    if (jj_scan_token(SMALLINT)) return true;
+  final private boolean jj_3_1381() {
+    if (jj_scan_token(OVERLAPS)) return true;
     return false;
   }
 
-  final private boolean jj_3_596() {
-    if (jj_scan_token(INTEGER)) return true;
+  final private boolean jj_3_1380() {
+    if (jj_scan_token(ORDINALITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_602() {
-    if (jj_scan_token(TINYINT)) return true;
+  final private boolean jj_3_1379() {
+    if (jj_scan_token(OPEN)) return true;
     return false;
   }
 
-  final private boolean jj_3_601() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_596()) {
-    jj_scanpos = xsp;
-    if (jj_3_597()) return true;
-    }
+  final private boolean jj_3_1378() {
+    if (jj_scan_token(OMIT)) return true;
     return false;
   }
 
-  final private boolean jj_3_600() {
-    if (jj_scan_token(BOOLEAN)) return true;
+  final private boolean jj_3_1377() {
+    if (jj_scan_token(OCTET_LENGTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_231() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_136()) return true;
+  final private boolean jj_3_1376() {
+    if (jj_scan_token(NUMERIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_599() {
-    if (jj_scan_token(GEOMETRY)) return true;
+  final private boolean jj_3_1375() {
+    if (jj_scan_token(NTH_VALUE)) return true;
     return false;
   }
 
-  final private boolean jj_3R_118() {
-    if (jj_scan_token(LPAREN)) return true;
-    if (jj_3R_136()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_231()) { jj_scanpos = xsp; break; }
-    }
-    if (jj_scan_token(RPAREN)) return true;
+  final private boolean jj_3_1374() {
+    if (jj_scan_token(NONE)) return true;
     return false;
   }
 
-  final private boolean jj_3R_219() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_599()) {
-    jj_scanpos = xsp;
-    if (jj_3_600()) {
-    jj_scanpos = xsp;
-    if (jj_3_601()) {
-    jj_scanpos = xsp;
-    if (jj_3_602()) {
-    jj_scanpos = xsp;
-    if (jj_3_603()) {
-    jj_scanpos = xsp;
-    if (jj_3_604()) {
-    jj_scanpos = xsp;
-    if (jj_3_605()) {
-    jj_scanpos = xsp;
-    if (jj_3_606()) {
-    jj_scanpos = xsp;
-    if (jj_3_607()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
+  final private boolean jj_3_1373() {
+    if (jj_scan_token(NCHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_595() {
-    if (jj_3R_223()) return true;
+  final private boolean jj_3_1372() {
+    if (jj_scan_token(NAME)) return true;
     return false;
   }
 
-  final private boolean jj_3_594() {
-    if (jj_3R_222()) return true;
+  final private boolean jj_3_1371() {
+    if (jj_scan_token(MODULE)) return true;
     return false;
   }
 
-  final private boolean jj_3_593() {
-    if (jj_3R_221()) return true;
+  final private boolean jj_3_239() {
+    if (jj_3R_100()) return true;
     return false;
   }
 
-  final private boolean jj_3_592() {
-    if (jj_3R_220()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_591() {
-    if (jj_3R_219()) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_217() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_591()) {
-    jj_scanpos = xsp;
-    if (jj_3_592()) {
-    jj_scanpos = xsp;
-    if (jj_3_593()) {
-    jj_scanpos = xsp;
-    if (jj_3_594()) {
-    jj_scanpos = xsp;
-    if (jj_3_595()) return true;
-    }
-    }
-    }
-    }
+  final private boolean jj_3_1370() {
+    if (jj_scan_token(MINUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_227() {
-    if (jj_scan_token(REPEATABLE)) return true;
-    if (jj_scan_token(LPAREN)) return true;
+  final private boolean jj_3_238() {
+    if (jj_scan_token(AS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1406() {
-    if (jj_scan_token(ZONE)) return true;
+  final private boolean jj_3_1369() {
+    if (jj_scan_token(MEMBER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1405() {
-    if (jj_scan_token(WORK)) return true;
+  final private boolean jj_3_602() {
+    if (jj_scan_token(MINUS)) return true;
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_590() {
-    if (jj_3R_115()) return true;
+  final private boolean jj_3_1368() {
+    if (jj_scan_token(MATCH_NUMBER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1404() {
-    if (jj_scan_token(WIDTH_BUCKET)) return true;
+  final private boolean jj_3_240() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_238()) jj_scanpos = xsp;
+    if (jj_3R_68()) return true;
+    xsp = jj_scanpos;
+    if (jj_3_239()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_1403() {
-    if (jj_scan_token(VIEW)) return true;
+  final private boolean jj_3_1367() {
+    if (jj_scan_token(MAP)) return true;
     return false;
   }
 
-  final private boolean jj_3_589() {
-    if (jj_3R_218()) return true;
+  final private boolean jj_3_1366() {
+    if (jj_scan_token(LOCATOR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1402() {
-    if (jj_scan_token(VAR_SAMP)) return true;
+  final private boolean jj_3_1365() {
+    if (jj_scan_token(LOCAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1401() {
-    if (jj_scan_token(VARCHAR)) return true;
+  final private boolean jj_3_1364() {
+    if (jj_scan_token(LIKE)) return true;
     return false;
   }
 
-  final private boolean jj_3_226() {
-    if (jj_scan_token(SYSTEM)) return true;
+  final private boolean jj_3_237() {
+    if (jj_3R_142()) return true;
     return false;
   }
 
-  final private boolean jj_3_1400() {
-    if (jj_scan_token(VALUE)) return true;
+  final private boolean jj_3_1363() {
+    if (jj_scan_token(LEADING)) return true;
     return false;
   }
 
-  final private boolean jj_3_588() {
-    if (jj_3R_217()) return true;
+  final private boolean jj_3_1362() {
+    if (jj_scan_token(LAST)) return true;
     return false;
   }
 
-  final private boolean jj_3_1399() {
-    if (jj_scan_token(UPSERT)) return true;
+  final private boolean jj_3_600() {
+    if (jj_scan_token(PLUS)) return true;
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1398() {
-    if (jj_scan_token(UNIQUE)) return true;
+  final private boolean jj_3_1361() {
+    if (jj_scan_token(LAG)) return true;
     return false;
   }
 
-  final private boolean jj_3_1397() {
-    if (jj_scan_token(TRUNCATE)) return true;
+  final private boolean jj_3_1360() {
+    if (jj_scan_token(JSON_VALUE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1396() {
-    if (jj_scan_token(TRIM)) return true;
+  final private boolean jj_3_236() {
+    if (jj_3R_141()) return true;
     return false;
   }
 
-  final private boolean jj_3_225() {
-    if (jj_scan_token(BERNOULLI)) return true;
+  final private boolean jj_3_599() {
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3R_277() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_588()) {
-    jj_scanpos = xsp;
-    if (jj_3_589()) {
-    jj_scanpos = xsp;
-    if (jj_3_590()) return true;
-    }
-    }
+  final private boolean jj_3_1359() {
+    if (jj_scan_token(JSON_OBJECT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1395() {
-    if (jj_scan_token(TRANSLATION)) return true;
+  final private boolean jj_3_1358() {
+    if (jj_scan_token(JSON_ARRAY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1394() {
-    if (jj_scan_token(TRANSACTION)) return true;
+  final private boolean jj_3_1357() {
+    if (jj_scan_token(INTERSECTION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1393() {
-    if (jj_scan_token(TINYINT)) return true;
+  final private boolean jj_3_235() {
+    if (jj_3R_140()) return true;
     return false;
   }
 
-  final private boolean jj_3_1392() {
-    if (jj_scan_token(TEMPORARY)) return true;
+  final private boolean jj_3_1356() {
+    if (jj_scan_token(INSENSITIVE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1391() {
-    if (jj_scan_token(SYSTEM_USER)) return true;
+  final private boolean jj_3_1355() {
+    if (jj_scan_token(INITIALLY)) return true;
     return false;
   }
 
-  final private boolean jj_3_229() {
+  final private boolean jj_3_601() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_225()) {
+    if (jj_3_599()) {
     jj_scanpos = xsp;
-    if (jj_3_226()) return true;
+    if (jj_3_600()) return true;
     }
-    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1390() {
-    if (jj_scan_token(SYMMETRIC)) return true;
+  final private boolean jj_3_1354() {
+    if (jj_scan_token(IMPORT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1389() {
-    if (jj_scan_token(SUBSTRING_REGEX)) return true;
+  final private boolean jj_3_1353() {
+    if (jj_scan_token(IDENTITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1388() {
-    if (jj_scan_token(SUBMULTISET)) return true;
+  final private boolean jj_3_1352() {
+    if (jj_scan_token(GROUPS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1387() {
-    if (jj_scan_token(STATIC)) return true;
+  final private boolean jj_3_1351() {
+    if (jj_scan_token(GLOBAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1386() {
-    if (jj_scan_token(SQRT)) return true;
+  final private boolean jj_3_1350() {
+    if (jj_scan_token(G)) return true;
     return false;
   }
 
-  final private boolean jj_3_1385() {
-    if (jj_scan_token(SQLEXCEPTION)) return true;
+  final private boolean jj_3_1349() {
+    if (jj_scan_token(FREE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1384() {
-    if (jj_scan_token(SPECIFIC)) return true;
+  final private boolean jj_3_1348() {
+    if (jj_scan_token(FOREIGN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1383() {
-    if (jj_scan_token(SIZE)) return true;
+  final private boolean jj_3_1347() {
+    if (jj_scan_token(FLOAT)) return true;
     return false;
   }
 
-  final private boolean jj_3_587() {
-    if (jj_3R_216()) return true;
+  final private boolean jj_3_230() {
+    if (jj_scan_token(LATERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1382() {
-    if (jj_scan_token(SESSION_USER)) return true;
+  final private boolean jj_3_1346() {
+    if (jj_scan_token(FILTER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1381() {
-    if (jj_scan_token(SEEK)) return true;
+  final private boolean jj_3_234() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_230()) jj_scanpos = xsp;
+    if (jj_scan_token(TABLE)) return true;
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1380() {
-    if (jj_scan_token(SEARCH)) return true;
+  final private boolean jj_3_1345() {
+    if (jj_scan_token(EXTERNAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_228() {
-    if (jj_scan_token(SUBSTITUTE)) return true;
-    if (jj_scan_token(LPAREN)) return true;
+  final private boolean jj_3_1344() {
+    if (jj_scan_token(EXISTS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1379() {
-    if (jj_scan_token(SCHEMA)) return true;
+  final private boolean jj_3_1343() {
+    if (jj_scan_token(EXCEPTION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1378() {
-    if (jj_scan_token(ROW_NUMBER)) return true;
+  final private boolean jj_3_1342() {
+    if (jj_scan_token(EQUALS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1377() {
-    if (jj_scan_token(ROLE)) return true;
+  final private boolean jj_3_229() {
+    if (jj_scan_token(WITH)) return true;
+    if (jj_scan_token(ORDINALITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1376() {
-    if (jj_scan_token(RETURN)) return true;
+  final private boolean jj_3_1341() {
+    if (jj_scan_token(END)) return true;
     return false;
   }
 
-  final private boolean jj_3R_91() {
-    if (jj_3R_277()) return true;
-    Token xsp;
-    while (true) {
-      xsp = jj_scanpos;
-      if (jj_3_587()) { jj_scanpos = xsp; break; }
-    }
+  final private boolean jj_3_1340() {
+    if (jj_scan_token(ELEMENT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1375() {
-    if (jj_scan_token(RESET)) return true;
+  final private boolean jj_3R_216() {
+    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1374() {
-    if (jj_scan_token(RELATIVE)) return true;
+  final private boolean jj_3_1339() {
+    if (jj_scan_token(DOUBLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_230() {
-    if (jj_scan_token(TABLESAMPLE)) return true;
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_228()) {
-    jj_scanpos = xsp;
-    if (jj_3_229()) return true;
-    }
+  final private boolean jj_3_1338() {
+    if (jj_scan_token(DISALLOW)) return true;
     return false;
   }
 
-  final private boolean jj_3_1373() {
-    if (jj_scan_token(REGR_SXX)) return true;
+  final private boolean jj_3_1337() {
+    if (jj_scan_token(DESCRIPTOR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1372() {
-    if (jj_scan_token(REGR_INTERCEPT)) return true;
+  final private boolean jj_3_1336() {
+    if (jj_scan_token(DEPTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1371() {
-    if (jj_scan_token(REGR_AVGX)) return true;
+  final private boolean jj_3_228() {
+    if (jj_3R_135()) return true;
     return false;
   }
 
-  final private boolean jj_3_1370() {
-    if (jj_scan_token(REF)) return true;
+  final private boolean jj_3_1335() {
+    if (jj_scan_token(DEFERRABLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1369() {
-    if (jj_scan_token(READS)) return true;
+  final private boolean jj_3_233() {
+    if (jj_scan_token(UNNEST)) return true;
+    if (jj_3R_139()) return true;
     return false;
   }
 
-  final private boolean jj_3_1368() {
-    if (jj_scan_token(QUARTER)) return true;
+  final private boolean jj_3_1334() {
+    if (jj_scan_token(DEC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1367() {
-    if (jj_scan_token(PRIVILEGES)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1366() {
-    if (jj_scan_token(PRESERVE)) return true;
+  final private boolean jj_3_1333() {
+    if (jj_scan_token(DATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1365() {
-    if (jj_scan_token(PRECEDES)) return true;
+  final private boolean jj_3_1332() {
+    if (jj_scan_token(CURRENT_USER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1364() {
-    if (jj_scan_token(POSITION)) return true;
+  final private boolean jj_3_1331() {
+    if (jj_scan_token(CURRENT_TIME)) return true;
     return false;
   }
 
-  final private boolean jj_3_1363() {
-    if (jj_scan_token(PERIOD)) return true;
+  final private boolean jj_3_1330() {
+    if (jj_scan_token(CURRENT_ROLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1362() {
-    if (jj_scan_token(PERCENTILE_CONT)) return true;
+  final private boolean jj_3_1329() {
+    if (jj_scan_token(CURRENT_DATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1361() {
-    if (jj_scan_token(PATH)) return true;
+  final private boolean jj_3_1328() {
+    if (jj_scan_token(CUBE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1360() {
-    if (jj_scan_token(PAD)) return true;
+  final private boolean jj_3_1327() {
+    if (jj_scan_token(COUNT)) return true;
     return false;
   }
 
-  final private boolean jj_3_223() {
-    if (jj_3R_95()) return true;
+  final private boolean jj_3_1326() {
+    if (jj_scan_token(CONVERT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1359() {
-    if (jj_scan_token(OUTPUT)) return true;
+  final private boolean jj_3R_191() {
+    if (jj_scan_token(NEW)) return true;
+    if (jj_3R_283()) return true;
     return false;
   }
 
-  final private boolean jj_3_222() {
-    if (jj_scan_token(AS)) return true;
+  final private boolean jj_3_1325() {
+    if (jj_scan_token(CONSTRUCTOR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1358() {
-    if (jj_scan_token(OR)) return true;
+  final private boolean jj_3_1324() {
+    if (jj_scan_token(CONNECT)) return true;
     return false;
   }
 
-  final private boolean jj_3_586() {
-    if (jj_scan_token(MINUS)) return true;
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
+  final private boolean jj_3_1323() {
+    if (jj_scan_token(COLUMN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1357() {
-    if (jj_scan_token(ONLY)) return true;
+  final private boolean jj_3_1322() {
+    if (jj_scan_token(COLLATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_224() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_222()) jj_scanpos = xsp;
-    if (jj_3R_66()) return true;
-    xsp = jj_scanpos;
-    if (jj_3_223()) jj_scanpos = xsp;
+  final private boolean jj_3_1321() {
+    if (jj_scan_token(CLOB)) return true;
     return false;
   }
 
-  final private boolean jj_3_1356() {
-    if (jj_scan_token(OLD)) return true;
+  final private boolean jj_3_1320() {
+    if (jj_scan_token(CHAR_LENGTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1355() {
-    if (jj_scan_token(OCCURRENCES_REGEX)) return true;
+  final private boolean jj_3_227() {
+    if (jj_scan_token(LATERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1354() {
-    if (jj_scan_token(NULLIF)) return true;
+  final private boolean jj_3_1319() {
+    if (jj_scan_token(CHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1353() {
-    if (jj_scan_token(NOT)) return true;
+  final private boolean jj_3_1318() {
+    if (jj_scan_token(CATALOG)) return true;
     return false;
   }
 
-  final private boolean jj_3_221() {
+  final private boolean jj_3_226() {
     if (jj_3R_135()) return true;
     return false;
   }
 
-  final private boolean jj_3_1352() {
-    if (jj_scan_token(NO)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1351() {
-    if (jj_scan_token(NATIONAL)) return true;
+  final private boolean jj_3_1317() {
+    if (jj_scan_token(CASCADE)) return true;
     return false;
   }
 
-  final private boolean jj_3_584() {
-    if (jj_scan_token(PLUS)) return true;
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
+  final private boolean jj_3_232() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_227()) jj_scanpos = xsp;
+    if (jj_3R_138()) return true;
     return false;
   }
 
-  final private boolean jj_3_1350() {
-    if (jj_scan_token(MULTISET)) return true;
+  final private boolean jj_3_1316() {
+    if (jj_scan_token(C)) return true;
     return false;
   }
 
-  final private boolean jj_3_1349() {
-    if (jj_scan_token(MODIFIES)) return true;
+  final private boolean jj_3_1315() {
+    if (jj_scan_token(BOTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_220() {
+  final private boolean jj_3_225() {
     if (jj_3R_134()) return true;
     return false;
   }
 
-  final private boolean jj_3_583() {
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1348() {
-    if (jj_scan_token(MIN)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1347() {
-    if (jj_scan_token(MEASURES)) return true;
+  final private boolean jj_3_1314() {
+    if (jj_scan_token(BIT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1346() {
-    if (jj_scan_token(MATCHES)) return true;
+  final private boolean jj_3_1313() {
+    if (jj_scan_token(BETWEEN)) return true;
     return false;
   }
 
-  final private boolean jj_3_219() {
-    if (jj_3R_133()) return true;
+  final private boolean jj_3_1312() {
+    if (jj_scan_token(BEGIN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1345() {
-    if (jj_scan_token(M)) return true;
+  final private boolean jj_3_1311() {
+    if (jj_scan_token(AUTHORIZATION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1344() {
-    if (jj_scan_token(LOCALTIMESTAMP)) return true;
+  final private boolean jj_3_1310() {
+    if (jj_scan_token(ASYMMETRIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_585() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_583()) {
-    jj_scanpos = xsp;
-    if (jj_3_584()) return true;
-    }
+  final private boolean jj_3R_126() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_290()) return true;
     return false;
   }
 
-  final private boolean jj_3_1343() {
-    if (jj_scan_token(LN)) return true;
+  final private boolean jj_3_1309() {
+    if (jj_scan_token(ASC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1342() {
-    if (jj_scan_token(LEVEL)) return true;
+  final private boolean jj_3_1308() {
+    if (jj_scan_token(ARRAY_CONCAT_AGG)) return true;
     return false;
   }
 
-  final private boolean jj_3_1341() {
-    if (jj_scan_token(LEAD)) return true;
+  final private boolean jj_3_1307() {
+    if (jj_scan_token(ARE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1340() {
-    if (jj_scan_token(LARGE)) return true;
+  final private boolean jj_3_1306() {
+    if (jj_scan_token(ALLOW)) return true;
     return false;
   }
 
-  final private boolean jj_3_1339() {
-    if (jj_scan_token(KEY)) return true;
+  final private boolean jj_3_1305() {
+    if (jj_scan_token(ADD)) return true;
     return false;
   }
 
-  final private boolean jj_3_1338() {
-    if (jj_scan_token(JSON_QUERY)) return true;
+  final private boolean jj_3_223() {
+    if (jj_scan_token(EXTEND)) return true;
     return false;
   }
 
-  final private boolean jj_3_1337() {
-    if (jj_scan_token(JSON_EXISTS)) return true;
+  final private boolean jj_3_1304() {
+    if (jj_scan_token(ABS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1336() {
-    if (jj_scan_token(ISOLATION)) return true;
+  final private boolean jj_3_1303() {
+    if (jj_scan_token(MAX_CHANGED_PARTITION_ROWS_PERCENT)) return true;
     return false;
   }
 
-  final private boolean jj_3_214() {
-    if (jj_scan_token(LATERAL)) return true;
+  final private boolean jj_3_224() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_223()) jj_scanpos = xsp;
+    if (jj_3R_125()) return true;
     return false;
   }
 
-  final private boolean jj_3_1335() {
-    if (jj_scan_token(INTEGER)) return true;
+  final private boolean jj_3_1302() {
+    if (jj_scan_token(STATISTICS)) return true;
     return false;
   }
 
-  final private boolean jj_3_218() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_214()) jj_scanpos = xsp;
-    if (jj_scan_token(TABLE)) return true;
-    if (jj_scan_token(LPAREN)) return true;
+  final private boolean jj_3_1301() {
+    if (jj_scan_token(COMPUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1334() {
-    if (jj_scan_token(INPUT)) return true;
+  final private boolean jj_3_1300() {
+    if (jj_scan_token(SCAN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1333() {
-    if (jj_scan_token(INITIAL)) return true;
+  final private boolean jj_3_1299() {
+    if (jj_scan_token(NOLOGGING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1332() {
-    if (jj_scan_token(IMMEDIATELY)) return true;
+  final private boolean jj_3_1298() {
+    if (jj_scan_token(PARALLEL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1331() {
-    if (jj_scan_token(HOUR)) return true;
+  final private boolean jj_3_1297() {
+    if (jj_scan_token(DATA_REGION)) return true;
     return false;
   }
 
-  final private boolean jj_3_213() {
-    if (jj_scan_token(WITH)) return true;
-    if (jj_scan_token(ORDINALITY)) return true;
+  final private boolean jj_3_1296() {
+    if (jj_scan_token(WRITE_SYNCHRONIZATION_MODE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1330() {
-    if (jj_scan_token(GOTO)) return true;
+  final private boolean jj_3_231() {
+    if (jj_3R_136()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_224()) jj_scanpos = xsp;
+    if (jj_3R_137()) return true;
+    xsp = jj_scanpos;
+    if (jj_3_225()) jj_scanpos = xsp;
+    xsp = jj_scanpos;
+    if (jj_3_226()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_1329() {
-    if (jj_scan_token(GET)) return true;
+  final private boolean jj_3_598() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_222()) return true;
     return false;
   }
 
-  final private boolean jj_3R_209() {
-    if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
+  final private boolean jj_3_1295() {
+    if (jj_scan_token(BACKUPS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1328() {
-    if (jj_scan_token(FUSION)) return true;
+  final private boolean jj_3R_290() {
+    if (jj_3R_222()) return true;
     return false;
   }
 
-  final private boolean jj_3_1327() {
-    if (jj_scan_token(FRAME_ROW)) return true;
+  final private boolean jj_3R_294() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_231()) {
+    jj_scanpos = xsp;
+    if (jj_3_232()) {
+    jj_scanpos = xsp;
+    if (jj_3_233()) {
+    jj_scanpos = xsp;
+    if (jj_3_234()) {
+    jj_scanpos = xsp;
+    if (jj_3_235()) return true;
+    }
+    }
+    }
+    }
     return false;
   }
 
-  final private boolean jj_3_1326() {
-    if (jj_scan_token(FOR)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1325() {
-    if (jj_scan_token(FIRST_VALUE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_212() {
-    if (jj_3R_128()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1324() {
-    if (jj_scan_token(FALSE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_217() {
-    if (jj_scan_token(UNNEST)) return true;
-    if (jj_3R_132()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1323() {
-    if (jj_scan_token(EXTEND)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1322() {
-    if (jj_scan_token(EXECUTE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1321() {
-    if (jj_scan_token(EVERY)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1320() {
-    if (jj_scan_token(END_PARTITION)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1319() {
-    if (jj_scan_token(EMPTY)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1318() {
-    if (jj_scan_token(EACH)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1317() {
-    if (jj_scan_token(DOMAIN)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1316() {
-    if (jj_scan_token(DIAGNOSTICS)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1315() {
-    if (jj_scan_token(DESC)) return true;
-    return false;
-  }
-
-  final private boolean jj_3R_184() {
-    if (jj_scan_token(NEW)) return true;
-    if (jj_3R_275()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1314() {
-    if (jj_scan_token(DENSE_RANK)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1313() {
-    if (jj_scan_token(DECLARE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1312() {
-    if (jj_scan_token(DEALLOCATE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1311() {
-    if (jj_scan_token(DATA)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1310() {
-    if (jj_scan_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1309() {
-    if (jj_scan_token(CURRENT_SCHEMA)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_211() {
-    if (jj_scan_token(LATERAL)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1308() {
-    if (jj_scan_token(CURRENT_PATH)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1307() {
-    if (jj_scan_token(CURRENT_CATALOG)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_210() {
-    if (jj_3R_128()) return true;
-    return false;
-  }
-
-  final private boolean jj_3_1306() {
-    if (jj_scan_token(COVAR_SAMP)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_216() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_211()) jj_scanpos = xsp;
-    if (jj_3R_131()) return true;
-    return false;
-  }
... 45110 lines suppressed ...