You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2022/04/08 14:45:29 UTC

[ignite] branch master updated: IGNITE-16826 SQL Calcite: Support H2-based engine's options syntax for CREATE TABLE - Fixes #9957.

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

alexpl 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 86068595360 IGNITE-16826 SQL Calcite: Support H2-based engine's options syntax for CREATE TABLE - Fixes #9957.
86068595360 is described below

commit 8606859536089d1a5e7214e9b81d969933cd1e3d
Author: Aleksey Plekhanov <pl...@gmail.com>
AuthorDate: Fri Apr 8 17:32:59 2022 +0300

    IGNITE-16826 SQL Calcite: Support H2-based engine's options syntax for CREATE TABLE - Fixes #9957.
    
    Signed-off-by: Aleksey Plekhanov <pl...@gmail.com>
---
 .../src/main/codegen/includes/parserImpls.ftl      |   22 +-
 .../prepare/ddl/DdlSqlToCommandConverter.java      |   22 +
 .../query/calcite/sql/IgniteSqlCreateTable.java    |   37 +
 .../calcite/sql/generated/IgniteSqlParserImpl.java | 7147 ++++++++++----------
 .../query/calcite/util/IgniteResource.java         |    8 +
 .../integration/TableDdlIntegrationTest.java       |   47 +
 .../query/calcite/sql/SqlCustomParserTest.java     |   45 +-
 7 files changed, 3769 insertions(+), 3559 deletions(-)

diff --git a/modules/calcite/src/main/codegen/includes/parserImpls.ftl b/modules/calcite/src/main/codegen/includes/parserImpls.ftl
index 34670b23965..2341cd9c0da 100644
--- a/modules/calcite/src/main/codegen/includes/parserImpls.ftl
+++ b/modules/calcite/src/main/codegen/includes/parserImpls.ftl
@@ -32,13 +32,23 @@ SqlNodeList WithCreateTableOptionList() :
 {
     [
         <WITH> { s = span(); }
-        CreateTableOption(list)
         (
-            <COMMA> { s.add(this); } CreateTableOption(list)
-        )*
-        {
-            return new SqlNodeList(list, s.end(this));
-        }
+            <QUOTED_IDENTIFIER>
+            {
+                return IgniteSqlCreateTable.parseOptionList(
+                    SqlParserUtil.stripQuotes(token.image, DQ, DQ, DQDQ, quotedCasing),
+                    getPos().withQuoting(true)
+                );
+            }
+        |
+            CreateTableOption(list)
+            (
+                <COMMA> { s.add(this); } CreateTableOption(list)
+            )*
+            {
+                return new SqlNodeList(list, s.end(this));
+            }
+        )
     ]
     { return null; }
 }
diff --git a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/DdlSqlToCommandConverter.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/DdlSqlToCommandConverter.java
index 16649710856..1c8121445ff 100644
--- a/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/DdlSqlToCommandConverter.java
+++ b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/prepare/ddl/DdlSqlToCommandConverter.java
@@ -108,6 +108,22 @@ public class DdlSqlToCommandConverter {
         new TableOptionProcessor<>(WRITE_SYNCHRONIZATION_MODE, validatorForEnumValue(CacheWriteSynchronizationMode.class),
             CreateTableCommand::writeSynchronizationMode),
         new TableOptionProcessor<>(BACKUPS, (opt, ctx) -> {
+            if (opt.value() instanceof SqlIdentifier) {
+                String val = VALUE_IS_IDENTIFIER_VALIDATOR.apply(opt, ctx);
+
+                try {
+                    int intVal = Integer.parseInt(val);
+
+                    if (intVal < 0)
+                        throwOptionParsingException(opt, "a non-negative integer", ctx.query());
+
+                    return intVal;
+                }
+                catch (NumberFormatException e) {
+                    throwOptionParsingException(opt, "a non-negative integer", ctx.query());
+                }
+            }
+
             if (!(opt.value() instanceof SqlNumericLiteral)
                 || !((SqlNumericLiteral)opt.value()).isInteger()
                 || ((SqlLiteral)opt.value()).intValue(true) < 0
@@ -117,6 +133,12 @@ public class DdlSqlToCommandConverter {
             return ((SqlLiteral)opt.value()).intValue(true);
         }, CreateTableCommand::backups),
         new TableOptionProcessor<>(ENCRYPTED, (opt, ctx) -> {
+            if (opt.value() instanceof SqlIdentifier) {
+                String val = VALUE_IS_IDENTIFIER_VALIDATOR.apply(opt, ctx);
+
+                return Boolean.parseBoolean(val);
+            }
+
             if (!(opt.value() instanceof SqlLiteral) && ((SqlLiteral)opt.value()).getTypeName() != BOOLEAN)
                 throwOptionParsingException(opt, "a boolean", ctx.query());
 
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 f00b1cabfdb..4a183f859de 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,13 +21,16 @@ 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;
 
 /**
@@ -131,4 +134,38 @@ 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/generated/IgniteSqlParserImpl.java b/modules/calcite/src/main/java/org/apache/ignite/internal/processors/query/calcite/sql/generated/IgniteSqlParserImpl.java
index 74ad5541362..fed5a313753 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
@@ -1009,22 +1009,33 @@ 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_60(2)) {
+    if (jj_2_62(2)) {
       jj_consume_token(WITH);
                  s = span();
-      CreateTableOption(list);
-      label_5:
-      while (true) {
-        if (jj_2_59(2)) {
-          ;
-        } else {
-          break label_5;
-        }
-        jj_consume_token(COMMA);
-                      s.add(this);
+      if (jj_2_60(2)) {
+        jj_consume_token(QUOTED_IDENTIFIER);
+                {if (true) return IgniteSqlCreateTable.parseOptionList(
+                    SqlParserUtil.stripQuotes(token.image, DQ, DQ, DQDQ, quotedCasing),
+                    getPos().withQuoting(true)
+                );}
+      } else if (jj_2_61(2)) {
         CreateTableOption(list);
+        label_5:
+        while (true) {
+          if (jj_2_59(2)) {
+            ;
+          } else {
+            break label_5;
+          }
+          jj_consume_token(COMMA);
+                          s.add(this);
+          CreateTableOption(list);
+        }
+                {if (true) return new SqlNodeList(list, s.end(this));}
+      } else {
+        jj_consume_token(-1);
+        throw new ParseException();
       }
-            {if (true) return new SqlNodeList(list, s.end(this));}
     } else {
       ;
     }
@@ -1033,37 +1044,37 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlLiteral CreateTableOptionKey() throws ParseException {
-    if (jj_2_61(2)) {
+    if (jj_2_63(2)) {
       jj_consume_token(TEMPLATE);
                  {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.TEMPLATE, getPos());}
-    } else if (jj_2_62(2)) {
+    } else if (jj_2_64(2)) {
       jj_consume_token(BACKUPS);
                 {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.BACKUPS, getPos());}
-    } else if (jj_2_63(2)) {
+    } else if (jj_2_65(2)) {
       jj_consume_token(AFFINITY_KEY);
                      {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.AFFINITY_KEY, getPos());}
-    } else if (jj_2_64(2)) {
+    } else if (jj_2_66(2)) {
       jj_consume_token(ATOMICITY);
                   {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.ATOMICITY, getPos());}
-    } else if (jj_2_65(2)) {
+    } else if (jj_2_67(2)) {
       jj_consume_token(WRITE_SYNCHRONIZATION_MODE);
                                    {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.WRITE_SYNCHRONIZATION_MODE, getPos());}
-    } else if (jj_2_66(2)) {
+    } else if (jj_2_68(2)) {
       jj_consume_token(CACHE_GROUP);
                     {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.CACHE_GROUP, getPos());}
-    } else if (jj_2_67(2)) {
+    } else if (jj_2_69(2)) {
       jj_consume_token(CACHE_NAME);
                    {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.CACHE_NAME, getPos());}
-    } else if (jj_2_68(2)) {
+    } else if (jj_2_70(2)) {
       jj_consume_token(DATA_REGION);
                     {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.DATA_REGION, getPos());}
-    } else if (jj_2_69(2)) {
+    } else if (jj_2_71(2)) {
       jj_consume_token(KEY_TYPE);
                  {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.KEY_TYPE, getPos());}
-    } else if (jj_2_70(2)) {
+    } else if (jj_2_72(2)) {
       jj_consume_token(VALUE_TYPE);
                    {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.VALUE_TYPE, getPos());}
-    } else if (jj_2_71(2)) {
+    } else if (jj_2_73(2)) {
       jj_consume_token(ENCRYPTED);
                   {if (true) return SqlLiteral.createSymbol(IgniteSqlCreateTableOptionEnum.ENCRYPTED, getPos());}
     } else {
@@ -1080,9 +1091,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     key = CreateTableOptionKey();
                                    s = span();
     jj_consume_token(EQ);
-    if (jj_2_72(2)) {
+    if (jj_2_74(2)) {
       val = Literal();
-    } else if (jj_2_73(2)) {
+    } else if (jj_2_75(2)) {
       val = SimpleIdentifier();
     } else {
       jj_consume_token(-1);
@@ -1093,9 +1104,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlDataTypeSpec DataTypeEx() throws ParseException {
     final SqlDataTypeSpec dt;
-    if (jj_2_74(2)) {
+    if (jj_2_76(2)) {
       dt = DataType();
-    } else if (jj_2_75(2)) {
+    } else if (jj_2_77(2)) {
       dt = IntervalType();
     } else {
       jj_consume_token(-1);
@@ -1123,11 +1134,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final ColumnStrategy strategy;
     final SqlNode dflt;
     SqlIdentifier id = null;
-    if (jj_2_79(2)) {
+    if (jj_2_81(2)) {
       id = SimpleIdentifier();
       type = DataTypeEx();
       nullable = NullableOptDefaultTrue();
-      if (jj_2_76(2)) {
+      if (jj_2_78(2)) {
         jj_consume_token(DEFAULT_);
                      s.add(this);
         dflt = Literal();
@@ -1137,7 +1148,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             strategy = nullable ? ColumnStrategy.NULLABLE
                 : ColumnStrategy.NOT_NULLABLE;
       }
-      if (jj_2_77(2)) {
+      if (jj_2_79(2)) {
         jj_consume_token(PRIMARY);
                     s.add(this);
         jj_consume_token(KEY);
@@ -1149,8 +1160,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_80(2)) {
-      if (jj_2_78(2)) {
+    } else if (jj_2_82(2)) {
+      if (jj_2_80(2)) {
         jj_consume_token(CONSTRAINT);
                      s.add(this);
         id = SimpleIdentifier();
@@ -1176,7 +1187,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     TableElement(list);
     label_6:
     while (true) {
-      if (jj_2_81(2)) {
+      if (jj_2_83(2)) {
         ;
       } else {
         break label_6;
@@ -1198,12 +1209,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(TABLE);
     ifNotExists = IfNotExistsOpt();
     id = CompoundIdentifier();
-    if (jj_2_83(3)) {
+    if (jj_2_85(3)) {
       columnList = TableElementList();
       optionList = WithCreateTableOptionList();
           query = null;
-    } else if (jj_2_84(2)) {
-      if (jj_2_82(2)) {
+    } else if (jj_2_86(2)) {
+      if (jj_2_84(2)) {
         columnList = ParenthesizedSimpleIdentifierList();
       } else {
               columnList = null;
@@ -1224,10 +1235,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     SqlNode col;
     col = SimpleIdentifier();
-    if (jj_2_87(2)) {
-      if (jj_2_85(2)) {
+    if (jj_2_89(2)) {
+      if (jj_2_87(2)) {
         jj_consume_token(ASC);
-      } else if (jj_2_86(2)) {
+      } else if (jj_2_88(2)) {
         jj_consume_token(DESC);
             col = SqlStdOperatorTable.DESC.createCall(getPos(), col);
       } else {
@@ -1251,7 +1262,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                             list.add(col);
     label_7:
     while (true) {
-      if (jj_2_88(2)) {
+      if (jj_2_90(2)) {
         ;
       } else {
         break label_7;
@@ -1280,19 +1291,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     columnList = IndexedColumnList();
     label_8:
     while (true) {
-      if (jj_2_89(2)) {
+      if (jj_2_91(2)) {
         ;
       } else {
         break label_8;
       }
-      if (jj_2_90(2)) {
+      if (jj_2_92(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_91(2)) {
+      } else if (jj_2_93(2)) {
         jj_consume_token(INLINE_SIZE);
         jj_consume_token(UNSIGNED_INTEGER_LITERAL);
             if (inlineSize != null)
@@ -1309,7 +1320,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public boolean IfExistsOpt() throws ParseException {
-    if (jj_2_92(2)) {
+    if (jj_2_94(2)) {
       jj_consume_token(IF);
       jj_consume_token(EXISTS);
                     {if (true) return true;}
@@ -1360,7 +1371,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                              list.add(col);
     label_9:
     while (true) {
-      if (jj_2_93(2)) {
+      if (jj_2_95(2)) {
         ;
       } else {
         break label_9;
@@ -1381,7 +1392,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s = Span.of();
     id = SimpleIdentifier();
     type = DataTypeEx();
-    if (jj_2_94(2)) {
+    if (jj_2_96(2)) {
       jj_consume_token(NOT);
       jj_consume_token(NULL);
             nullable = false;
@@ -1395,10 +1406,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNodeList ColumnWithTypeOrList() throws ParseException {
     SqlNode col;
     SqlNodeList list;
-    if (jj_2_95(2)) {
+    if (jj_2_97(2)) {
       col = ColumnWithType();
                              {if (true) return new SqlNodeList(Collections.singletonList(col), col.getParserPosition());}
-    } else if (jj_2_96(2)) {
+    } else if (jj_2_98(2)) {
       list = ColumnWithTypeList();
                                   {if (true) return list;}
     } else {
@@ -1420,15 +1431,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(TABLE);
     ifExists = IfExistsOpt();
     id = CompoundIdentifier();
-    if (jj_2_99(2)) {
+    if (jj_2_101(2)) {
       jj_consume_token(LOGGING);
                     {if (true) return new IgniteSqlAlterTable(s.end(this), ifExists, id, true);}
-    } else if (jj_2_100(2)) {
+    } else if (jj_2_102(2)) {
       jj_consume_token(NOLOGGING);
                        {if (true) return new IgniteSqlAlterTable(s.end(this), ifExists, id, false);}
-    } else if (jj_2_101(2)) {
+    } else if (jj_2_103(2)) {
       jj_consume_token(ADD);
-      if (jj_2_97(2)) {
+      if (jj_2_99(2)) {
         jj_consume_token(COLUMN);
       } else {
         ;
@@ -1436,9 +1447,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_102(2)) {
+    } else if (jj_2_104(2)) {
       jj_consume_token(DROP);
-      if (jj_2_98(2)) {
+      if (jj_2_100(2)) {
         jj_consume_token(COLUMN);
       } else {
         ;
@@ -1490,16 +1501,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlNumericLiteral SignedIntegerLiteral() throws ParseException {
     final Span s;
-    if (jj_2_103(2)) {
+    if (jj_2_105(2)) {
       jj_consume_token(PLUS);
       jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         {if (true) return SqlLiteral.createExactNumeric(token.image, getPos());}
-    } else if (jj_2_104(2)) {
+    } else if (jj_2_106(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_105(2)) {
+    } else if (jj_2_107(2)) {
       jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         {if (true) return SqlLiteral.createExactNumeric(token.image, getPos());}
     } else {
@@ -1603,7 +1614,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public boolean IsAsyncOpt() throws ParseException {
-    if (jj_2_106(2)) {
+    if (jj_2_108(2)) {
       jj_consume_token(ASYNC);
               {if (true) return true;}
     } else {
@@ -1634,7 +1645,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(COMMIT);
                s = span();
-    if (jj_2_107(2)) {
+    if (jj_2_109(2)) {
       jj_consume_token(TRANSACTION);
     } else {
       ;
@@ -1647,7 +1658,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(ROLLBACK);
                  s = span();
-    if (jj_2_108(2)) {
+    if (jj_2_110(2)) {
       jj_consume_token(TRANSACTION);
     } else {
       ;
@@ -1664,7 +1675,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     KeyValueOption(list);
     label_10:
     while (true) {
-      if (jj_2_109(2)) {
+      if (jj_2_111(2)) {
         ;
       } else {
         break label_10;
@@ -1684,9 +1695,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_110(2)) {
+    if (jj_2_112(2)) {
       key = SimpleIdentifier();
-    } else if (jj_2_111(2)) {
+    } else if (jj_2_113(2)) {
       key = StringLiteral();
     } else {
       jj_consume_token(-1);
@@ -1703,9 +1714,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 */
   final public SqlNode OptionValue() throws ParseException {
     final SqlNode value;
-    if (jj_2_112(2)) {
+    if (jj_2_114(2)) {
       value = NumericLiteral();
-    } else if (jj_2_113(2)) {
+    } else if (jj_2_115(2)) {
       value = StringLiteral();
     } else {
       jj_consume_token(-1);
@@ -1728,7 +1739,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         list.add(optionVal);
     label_11:
     while (true) {
-      if (jj_2_114(2)) {
+      if (jj_2_116(2)) {
         ;
       } else {
         break label_11;
@@ -1748,17 +1759,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode optionVal;
     SqlHint.HintOptionFormat optionFormat;
     hintName = SimpleIdentifier();
-    if (jj_2_116(5)) {
+    if (jj_2_118(5)) {
       hintOptions = ParenthesizedKeyValueOptionCommaList();
             optionFormat = SqlHint.HintOptionFormat.KV_LIST;
-    } else if (jj_2_117(3)) {
+    } else if (jj_2_119(3)) {
       hintOptions = ParenthesizedSimpleIdentifierList();
             optionFormat = SqlHint.HintOptionFormat.ID_LIST;
-    } else if (jj_2_118(3)) {
+    } else if (jj_2_120(3)) {
       hintOptions = ParenthesizedLiteralOptionCommaList();
             optionFormat = SqlHint.HintOptionFormat.LITERAL_LIST;
     } else {
-      if (jj_2_115(2)) {
+      if (jj_2_117(2)) {
         jj_consume_token(LPAREN);
         jj_consume_token(RPAREN);
       } else {
@@ -1770,24 +1781,24 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         hints.add(new SqlHint(Span.of(hintOptions).end(this), hintName, hintOptions, optionFormat));
     label_12:
     while (true) {
-      if (jj_2_119(2)) {
+      if (jj_2_121(2)) {
         ;
       } else {
         break label_12;
       }
       jj_consume_token(COMMA);
       hintName = SimpleIdentifier();
-      if (jj_2_121(5)) {
+      if (jj_2_123(5)) {
         hintOptions = ParenthesizedKeyValueOptionCommaList();
                 optionFormat = SqlHint.HintOptionFormat.KV_LIST;
-      } else if (jj_2_122(3)) {
+      } else if (jj_2_124(3)) {
         hintOptions = ParenthesizedSimpleIdentifierList();
                 optionFormat = SqlHint.HintOptionFormat.ID_LIST;
-      } else if (jj_2_123(3)) {
+      } else if (jj_2_125(3)) {
         hintOptions = ParenthesizedLiteralOptionCommaList();
                 optionFormat = SqlHint.HintOptionFormat.LITERAL_LIST;
       } else {
-        if (jj_2_120(2)) {
+        if (jj_2_122(2)) {
           jj_consume_token(LPAREN);
           jj_consume_token(RPAREN);
         } else {
@@ -1810,7 +1821,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
       s = span();
     tableRef = CompoundTableIdentifier();
-    if (jj_2_124(2)) {
+    if (jj_2_126(2)) {
       jj_consume_token(HINT_BEG);
       CommaSeparatedSqlHints(hints);
       jj_consume_token(COMMENT_END);
@@ -1841,7 +1852,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(SELECT);
         s = span();
-    if (jj_2_125(2)) {
+    if (jj_2_127(2)) {
       jj_consume_token(HINT_BEG);
       CommaSeparatedSqlHints(hints);
       jj_consume_token(COMMENT_END);
@@ -1849,13 +1860,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       ;
     }
     SqlSelectKeywords(keywords);
-    if (jj_2_126(2)) {
+    if (jj_2_128(2)) {
       jj_consume_token(STREAM);
             keywords.add(SqlSelectKeyword.STREAM.symbol(getPos()));
     } else {
       ;
     }
-    if (jj_2_127(2)) {
+    if (jj_2_129(2)) {
       keyword = AllOrDistinct();
                                     keywords.add(keyword);
     } else {
@@ -1863,7 +1874,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
         keywordList = new SqlNodeList(keywords, s.addAll(keywords).pos());
     selectList = SelectList();
-    if (jj_2_128(2)) {
+    if (jj_2_130(2)) {
       jj_consume_token(FROM);
       fromClause = FromClause();
       where = WhereOpt();
@@ -1903,21 +1914,21 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlExplainFormat format;
     jj_consume_token(EXPLAIN);
     jj_consume_token(PLAN);
-    if (jj_2_129(2)) {
+    if (jj_2_131(2)) {
       detailLevel = ExplainDetailLevel();
     } else {
       ;
     }
     depth = ExplainDepth();
-    if (jj_2_130(2)) {
+    if (jj_2_132(2)) {
       jj_consume_token(AS);
       jj_consume_token(XML);
                      format = SqlExplainFormat.XML;
-    } else if (jj_2_131(2)) {
+    } else if (jj_2_133(2)) {
       jj_consume_token(AS);
       jj_consume_token(JSON);
                       format = SqlExplainFormat.JSON;
-    } else if (jj_2_132(2)) {
+    } else if (jj_2_134(2)) {
       jj_consume_token(AS);
       jj_consume_token(DOT_FORMAT);
                             format = SqlExplainFormat.DOT;
@@ -1939,15 +1950,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_133(2)) {
+    if (jj_2_135(2)) {
       stmt = OrderedQueryOrExpr(ExprContext.ACCEPT_QUERY);
-    } else if (jj_2_134(2)) {
+    } else if (jj_2_136(2)) {
       stmt = SqlInsert();
-    } else if (jj_2_135(2)) {
+    } else if (jj_2_137(2)) {
       stmt = SqlDelete();
-    } else if (jj_2_136(2)) {
+    } else if (jj_2_138(2)) {
       stmt = SqlUpdate();
-    } else if (jj_2_137(2)) {
+    } else if (jj_2_139(2)) {
       stmt = SqlMerge();
     } else {
       jj_consume_token(-1);
@@ -1962,15 +1973,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * EXPLAIN PLAN.
  */
   final public SqlExplain.Depth ExplainDepth() throws ParseException {
-    if (jj_2_138(2)) {
+    if (jj_2_140(2)) {
       jj_consume_token(WITH);
       jj_consume_token(TYPE);
             {if (true) return SqlExplain.Depth.TYPE;}
-    } else if (jj_2_139(2)) {
+    } else if (jj_2_141(2)) {
       jj_consume_token(WITH);
       jj_consume_token(IMPLEMENTATION);
             {if (true) return SqlExplain.Depth.PHYSICAL;}
-    } else if (jj_2_140(2)) {
+    } else if (jj_2_142(2)) {
       jj_consume_token(WITHOUT);
       jj_consume_token(IMPLEMENTATION);
             {if (true) return SqlExplain.Depth.LOGICAL;}
@@ -1985,13 +1996,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlExplainLevel ExplainDetailLevel() throws ParseException {
     SqlExplainLevel level = SqlExplainLevel.EXPPLAN_ATTRIBUTES;
-    if (jj_2_142(2)) {
+    if (jj_2_144(2)) {
       jj_consume_token(EXCLUDING);
       jj_consume_token(ATTRIBUTES);
             level = SqlExplainLevel.NO_ATTRIBUTES;
-    } else if (jj_2_143(2)) {
+    } else if (jj_2_145(2)) {
       jj_consume_token(INCLUDING);
-      if (jj_2_141(2)) {
+      if (jj_2_143(2)) {
         jj_consume_token(ALL);
                   level = SqlExplainLevel.ALL_ATTRIBUTES;
       } else {
@@ -2018,12 +2029,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
    final SqlNode stmt;
     jj_consume_token(DESCRIBE);
                  s = span();
-    if (jj_2_149(2)) {
-      if (jj_2_144(2)) {
+    if (jj_2_151(2)) {
+      if (jj_2_146(2)) {
         jj_consume_token(DATABASE);
-      } else if (jj_2_145(2)) {
+      } else if (jj_2_147(2)) {
         jj_consume_token(CATALOG);
-      } else if (jj_2_146(2)) {
+      } else if (jj_2_148(2)) {
         jj_consume_token(SCHEMA);
       } else {
         jj_consume_token(-1);
@@ -2034,14 +2045,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_150(2147483647)) {
-      if (jj_2_147(2)) {
+    } else if (jj_2_152(2147483647)) {
+      if (jj_2_149(2)) {
         jj_consume_token(TABLE);
       } else {
         ;
       }
       table = CompoundIdentifier();
-      if (jj_2_148(2)) {
+      if (jj_2_150(2)) {
         column = SimpleIdentifier();
       } else {
         E();
@@ -2049,7 +2060,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_151(2)) {
+    } else if (jj_2_153(2)) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case STATEMENT:
         jj_consume_token(STATEMENT);
@@ -2100,11 +2111,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     name = CompoundIdentifier();
         s = span();
     jj_consume_token(LPAREN);
-    if (jj_2_153(2)) {
+    if (jj_2_155(2)) {
       Arg0(list, exprContext);
       label_13:
       while (true) {
-        if (jj_2_152(2)) {
+        if (jj_2_154(2)) {
           ;
         } else {
           break label_13;
@@ -2133,9 +2144,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode source;
     SqlNodeList columnList = null;
     final Span s;
-    if (jj_2_154(2)) {
+    if (jj_2_156(2)) {
       jj_consume_token(INSERT);
-    } else if (jj_2_155(2)) {
+    } else if (jj_2_157(2)) {
       jj_consume_token(UPSERT);
                    keywords.add(SqlInsertKeyword.UPSERT.symbol(getPos()));
     } else {
@@ -2147,8 +2158,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_157(5)) {
-      if (jj_2_156(2)) {
+    if (jj_2_159(5)) {
+      if (jj_2_158(2)) {
         jj_consume_token(EXTEND);
       } else {
         ;
@@ -2158,7 +2169,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_158(2)) {
+    if (jj_2_160(2)) {
           final Pair<SqlNodeList, SqlNodeList> p;
       p = ParenthesizedCompoundIdentifierList();
             if (p.right.size() > 0) {
@@ -2197,8 +2208,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         s = span();
     jj_consume_token(FROM);
     table = TableRefWithHintsOpt();
-    if (jj_2_160(2)) {
-      if (jj_2_159(2)) {
+    if (jj_2_162(2)) {
+      if (jj_2_161(2)) {
         jj_consume_token(EXTEND);
       } else {
         ;
@@ -2208,8 +2219,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_162(2)) {
-      if (jj_2_161(2)) {
+    if (jj_2_164(2)) {
+      if (jj_2_163(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -2242,8 +2253,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     table = TableRefWithHintsOpt();
         targetColumnList = new SqlNodeList(s.pos());
         sourceExpressionList = new SqlNodeList(s.pos());
-    if (jj_2_164(2)) {
-      if (jj_2_163(2)) {
+    if (jj_2_166(2)) {
+      if (jj_2_165(2)) {
         jj_consume_token(EXTEND);
       } else {
         ;
@@ -2253,8 +2264,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_166(2)) {
-      if (jj_2_165(2)) {
+    if (jj_2_168(2)) {
+      if (jj_2_167(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -2272,7 +2283,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         sourceExpressionList.add(exp);
     label_14:
     while (true) {
-      if (jj_2_167(2)) {
+      if (jj_2_169(2)) {
         ;
       } else {
         break label_14;
@@ -2307,8 +2318,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
               s = span();
     jj_consume_token(INTO);
     table = TableRefWithHintsOpt();
-    if (jj_2_169(2)) {
-      if (jj_2_168(2)) {
+    if (jj_2_171(2)) {
+      if (jj_2_170(2)) {
         jj_consume_token(EXTEND);
       } else {
         ;
@@ -2318,8 +2329,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_171(2)) {
-      if (jj_2_170(2)) {
+    if (jj_2_173(2)) {
+      if (jj_2_172(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -2332,14 +2343,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     sourceTableRef = TableRef();
     jj_consume_token(ON);
     condition = Expression(ExprContext.ACCEPT_SUB_QUERY);
-    if (jj_2_173(2)) {
+    if (jj_2_175(2)) {
       updateCall = WhenMatchedClause(table, alias);
-      if (jj_2_172(2)) {
+      if (jj_2_174(2)) {
         insertCall = WhenNotMatchedClause(table);
       } else {
         ;
       }
-    } else if (jj_2_174(2)) {
+    } else if (jj_2_176(2)) {
       insertCall = WhenNotMatchedClause(table);
     } else {
       jj_consume_token(-1);
@@ -2369,7 +2380,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         updateExprList.add(exp);
     label_15:
     while (true) {
-      if (jj_2_175(2)) {
+      if (jj_2_177(2)) {
         ;
       } else {
         break label_15;
@@ -2401,12 +2412,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         insertSpan = span();
     SqlInsertKeywords(keywords);
         keywordList = new SqlNodeList(keywords, insertSpan.end(this));
-    if (jj_2_176(2)) {
+    if (jj_2_178(2)) {
       insertColumnList = ParenthesizedSimpleIdentifierList();
     } else {
       ;
     }
-    if (jj_2_177(2)) {
+    if (jj_2_179(2)) {
       jj_consume_token(LPAREN);
     } else {
       ;
@@ -2414,7 +2425,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(VALUES);
                valuesSpan = span();
     rowConstructor = RowConstructor();
-    if (jj_2_178(2)) {
+    if (jj_2_180(2)) {
       jj_consume_token(RPAREN);
     } else {
       ;
@@ -2439,7 +2450,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         list.add(item);
     label_16:
     while (true) {
-      if (jj_2_179(2)) {
+      if (jj_2_181(2)) {
         ;
       } else {
         break label_16;
@@ -2459,13 +2470,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode e;
     final SqlIdentifier id;
     e = SelectExpression();
-    if (jj_2_182(2)) {
-      if (jj_2_180(2)) {
+    if (jj_2_184(2)) {
+      if (jj_2_182(2)) {
         jj_consume_token(AS);
       } else {
         ;
       }
-      if (jj_2_181(2)) {
+      if (jj_2_183(2)) {
         id = SimpleIdentifier();
       } else {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -2491,10 +2502,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode SelectExpression() throws ParseException {
     SqlNode e;
-    if (jj_2_183(2)) {
+    if (jj_2_185(2)) {
       jj_consume_token(STAR);
         {if (true) return SqlIdentifier.star(getPos());}
-    } else if (jj_2_184(2)) {
+    } else if (jj_2_186(2)) {
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
         {if (true) return e;}
     } else {
@@ -2505,7 +2516,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlLiteral Natural() throws ParseException {
-    if (jj_2_185(2)) {
+    if (jj_2_187(2)) {
       jj_consume_token(NATURAL);
                 {if (true) return SqlLiteral.createBoolean(true, getPos());}
     } else {
@@ -2516,41 +2527,41 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlLiteral JoinType() throws ParseException {
     JoinType joinType;
-    if (jj_2_189(3)) {
+    if (jj_2_191(3)) {
       jj_consume_token(JOIN);
                  joinType = JoinType.INNER;
-    } else if (jj_2_190(2)) {
+    } else if (jj_2_192(2)) {
       jj_consume_token(INNER);
       jj_consume_token(JOIN);
                          joinType = JoinType.INNER;
-    } else if (jj_2_191(2)) {
+    } else if (jj_2_193(2)) {
       jj_consume_token(LEFT);
-      if (jj_2_186(2)) {
+      if (jj_2_188(2)) {
         jj_consume_token(OUTER);
       } else {
         ;
       }
       jj_consume_token(JOIN);
                                     joinType = JoinType.LEFT;
-    } else if (jj_2_192(2)) {
+    } else if (jj_2_194(2)) {
       jj_consume_token(RIGHT);
-      if (jj_2_187(2)) {
+      if (jj_2_189(2)) {
         jj_consume_token(OUTER);
       } else {
         ;
       }
       jj_consume_token(JOIN);
                                      joinType = JoinType.RIGHT;
-    } else if (jj_2_193(2)) {
+    } else if (jj_2_195(2)) {
       jj_consume_token(FULL);
-      if (jj_2_188(2)) {
+      if (jj_2_190(2)) {
         jj_consume_token(OUTER);
       } else {
         ;
       }
       jj_consume_token(JOIN);
                                     joinType = JoinType.FULL;
-    } else if (jj_2_194(2)) {
+    } else if (jj_2_196(2)) {
       jj_consume_token(CROSS);
       jj_consume_token(JOIN);
                          joinType = JoinType.CROSS;
@@ -2570,7 +2581,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     natural = Natural();
     joinType = JoinType();
     e2 = TableRef();
-    if (jj_2_195(2)) {
+    if (jj_2_197(2)) {
       jj_consume_token(ON);
                on = JoinConditionType.ON.symbol(getPos());
       condition = Expression(ExprContext.ACCEPT_SUB_QUERY);
@@ -2581,7 +2592,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 e2,
                 on,
                 condition);}
-    } else if (jj_2_196(2)) {
+    } else if (jj_2_198(2)) {
       jj_consume_token(USING);
                   using = JoinConditionType.USING.symbol(getPos());
       list = ParenthesizedSimpleIdentifierList();
@@ -2627,16 +2638,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     e = TableRef();
     label_17:
     while (true) {
-      if (jj_2_197(2)) {
+      if (jj_2_199(2)) {
         ;
       } else {
         break label_17;
       }
-      if (jj_2_200(3)) {
+      if (jj_2_202(3)) {
         natural = Natural();
         joinType = JoinType();
         e2 = TableRef();
-        if (jj_2_198(2)) {
+        if (jj_2_200(2)) {
           jj_consume_token(ON);
                     joinConditionType = JoinConditionType.ON.symbol(getPos());
           condition = Expression(ExprContext.ACCEPT_SUB_QUERY);
@@ -2647,7 +2658,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                         e2,
                         joinConditionType,
                         condition);
-        } else if (jj_2_199(2)) {
+        } else if (jj_2_201(2)) {
           jj_consume_token(USING);
                     joinConditionType = JoinConditionType.USING.symbol(getPos());
           list = ParenthesizedSimpleIdentifierList();
@@ -2667,7 +2678,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                         JoinConditionType.NONE.symbol(joinType.getParserPosition()),
                         null);
         }
-      } else if (jj_2_201(2)) {
+      } else if (jj_2_203(2)) {
         jj_consume_token(COMMA);
                       joinType = JoinType.COMMA.symbol(getPos());
         e2 = TableRef();
@@ -2678,7 +2689,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     e2,
                     JoinConditionType.NONE.symbol(SqlParserPos.ZERO),
                     null);
-      } else if (jj_2_202(2)) {
+      } else if (jj_2_204(2)) {
         jj_consume_token(CROSS);
                       joinType = JoinType.CROSS.symbol(getPos());
         jj_consume_token(APPLY);
@@ -2693,7 +2704,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     e2,
                     JoinConditionType.NONE.symbol(SqlParserPos.ZERO),
                     null);
-      } else if (jj_2_203(2)) {
+      } else if (jj_2_205(2)) {
         jj_consume_token(OUTER);
                       joinType = JoinType.LEFT.symbol(getPos());
         jj_consume_token(APPLY);
@@ -2747,10 +2758,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     int repeatableSeed = 0;
     SqlNodeList columnAliasList = null;
     SqlUnnestOperator unnestOp = SqlStdOperatorTable.UNNEST;
-    if (jj_2_212(2)) {
+    if (jj_2_214(2)) {
       tableRef = TableRefWithHintsOpt();
-      if (jj_2_205(2)) {
-        if (jj_2_204(2)) {
+      if (jj_2_207(2)) {
+        if (jj_2_206(2)) {
           jj_consume_token(EXTEND);
         } else {
           ;
@@ -2765,18 +2776,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 tableRef = SqlStdOperatorTable.OVER.createCall(
                     getPos(), tableRef, over);
             }
-      if (jj_2_206(2)) {
+      if (jj_2_208(2)) {
         tableRef = Snapshot(tableRef);
       } else {
         ;
       }
-      if (jj_2_207(2)) {
+      if (jj_2_209(2)) {
         tableRef = MatchRecognize(tableRef);
       } else {
         ;
       }
-    } else if (jj_2_213(2)) {
-      if (jj_2_208(2)) {
+    } else if (jj_2_215(2)) {
+      if (jj_2_210(2)) {
         jj_consume_token(LATERAL);
                       lateral = true;
       } else {
@@ -2792,16 +2803,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 tableRef = SqlStdOperatorTable.LATERAL.createCall(
                     getPos(), tableRef);
             }
-      if (jj_2_209(2)) {
+      if (jj_2_211(2)) {
         tableRef = MatchRecognize(tableRef);
       } else {
         ;
       }
-    } else if (jj_2_214(2)) {
+    } else if (jj_2_216(2)) {
       jj_consume_token(UNNEST);
                    s = span();
       args = ParenthesizedQueryOrCommaList(ExprContext.ACCEPT_SUB_QUERY);
-      if (jj_2_210(2)) {
+      if (jj_2_212(2)) {
         jj_consume_token(WITH);
         jj_consume_token(ORDINALITY);
                 unnestOp = SqlStdOperatorTable.UNNEST_WITH_ORDINALITY;
@@ -2809,8 +2820,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         ;
       }
             tableRef = unnestOp.createCall(s.end(this), (List<SqlNode>) args);
-    } else if (jj_2_215(2)) {
-      if (jj_2_211(2)) {
+    } else if (jj_2_217(2)) {
+      if (jj_2_213(2)) {
         jj_consume_token(LATERAL);
                      lateral = true;
       } else {
@@ -2825,30 +2836,30 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 tableRef = SqlStdOperatorTable.LATERAL.createCall(
                     s.end(this), tableRef);
             }
-    } else if (jj_2_216(2)) {
+    } else if (jj_2_218(2)) {
       tableRef = ExtendedTableRef();
     } else {
       jj_consume_token(-1);
       throw new ParseException();
     }
-    if (jj_2_217(2)) {
+    if (jj_2_219(2)) {
       tableRef = Pivot(tableRef);
     } else {
       ;
     }
-    if (jj_2_218(2)) {
+    if (jj_2_220(2)) {
       tableRef = Unpivot(tableRef);
     } else {
       ;
     }
-    if (jj_2_221(2)) {
-      if (jj_2_219(2)) {
+    if (jj_2_223(2)) {
+      if (jj_2_221(2)) {
         jj_consume_token(AS);
       } else {
         ;
       }
       alias = SimpleIdentifier();
-      if (jj_2_220(2)) {
+      if (jj_2_222(2)) {
         columnAliasList = ParenthesizedSimpleIdentifierList();
       } else {
         ;
@@ -2867,10 +2878,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_227(2)) {
+    if (jj_2_229(2)) {
       jj_consume_token(TABLESAMPLE);
                         s2 = span();
-      if (jj_2_225(2)) {
+      if (jj_2_227(2)) {
         jj_consume_token(SUBSTITUTE);
         jj_consume_token(LPAREN);
         sample = StringLiteral();
@@ -2882,11 +2893,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_226(2)) {
-        if (jj_2_222(2)) {
+      } else if (jj_2_228(2)) {
+        if (jj_2_224(2)) {
           jj_consume_token(BERNOULLI);
                     isBernoulli = true;
-        } else if (jj_2_223(2)) {
+        } else if (jj_2_225(2)) {
           jj_consume_token(SYSTEM);
                     isBernoulli = false;
         } else {
@@ -2896,7 +2907,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(LPAREN);
         samplePercentage = UnsignedNumericLiteral();
         jj_consume_token(RPAREN);
-        if (jj_2_224(2)) {
+        if (jj_2_226(2)) {
           jj_consume_token(REPEATABLE);
           jj_consume_token(LPAREN);
           repeatableSeed = IntLiteral();
@@ -2951,7 +2962,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     ColumnType(list);
     label_18:
     while (true) {
-      if (jj_2_228(2)) {
+      if (jj_2_230(2)) {
         ;
       } else {
         break label_18;
@@ -2970,7 +2981,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     boolean nullable = true;
     name = CompoundIdentifier();
     type = DataType();
-    if (jj_2_229(2)) {
+    if (jj_2_231(2)) {
       jj_consume_token(NOT);
       jj_consume_token(NULL);
             nullable = false;
@@ -2989,9 +3000,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlDataTypeSpec type = null;
     boolean nullable = true;
     name = CompoundIdentifier();
-    if (jj_2_231(2)) {
+    if (jj_2_233(2)) {
       type = DataType();
-      if (jj_2_230(2)) {
+      if (jj_2_232(2)) {
         jj_consume_token(NOT);
         jj_consume_token(NULL);
                 nullable = false;
@@ -3015,7 +3026,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_232(2)) {
+    if (jj_2_234(2)) {
       jj_consume_token(SPECIFIC);
             funcType = SqlFunctionCategory.USER_DEFINED_TABLE_SPECIFIC_FUNCTION;
     } else {
@@ -3077,7 +3088,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                                         list.add(rowConstructor);
     label_19:
     while (true) {
-      if (jj_2_233(2)) {
+      if (jj_2_235(2)) {
         ;
       } else {
         break label_19;
@@ -3095,22 +3106,22 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNodeList valueList;
     SqlNode value;
     final Span s;
-    if (jj_2_235(3)) {
+    if (jj_2_237(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_236(3)) {
-      if (jj_2_234(2)) {
+    } else if (jj_2_238(3)) {
+      if (jj_2_236(2)) {
         jj_consume_token(ROW);
                     s = span();
       } else {
               s = Span.of();
       }
       valueList = ParenthesizedQueryOrCommaListWithDefault(ExprContext.ACCEPT_NONCURSOR);
-    } else if (jj_2_237(2)) {
+    } else if (jj_2_239(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
@@ -3138,7 +3149,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode WhereOpt() throws ParseException {
     SqlNode condition;
-    if (jj_2_238(2)) {
+    if (jj_2_240(2)) {
       jj_consume_token(WHERE);
       condition = Expression(ExprContext.ACCEPT_SUB_QUERY);
         {if (true) return condition;}
@@ -3154,7 +3165,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_239(2)) {
+    if (jj_2_241(2)) {
       jj_consume_token(GROUP);
               s = span();
       jj_consume_token(BY);
@@ -3173,7 +3184,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                             list.add(e);
     label_20:
     while (true) {
-      if (jj_2_240(2)) {
+      if (jj_2_242(2)) {
         ;
       } else {
         break label_20;
@@ -3191,7 +3202,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNodeList nodes;
     final SqlNode e;
     final Span s;
-    if (jj_2_241(2)) {
+    if (jj_2_243(2)) {
       jj_consume_token(GROUPING);
                  s = span();
       jj_consume_token(SETS);
@@ -3199,7 +3210,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_242(2)) {
+    } else if (jj_2_244(2)) {
       jj_consume_token(ROLLUP);
                s = span();
       jj_consume_token(LPAREN);
@@ -3207,7 +3218,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_243(2)) {
+    } else if (jj_2_245(2)) {
       jj_consume_token(CUBE);
              s = span();
       jj_consume_token(LPAREN);
@@ -3215,11 +3226,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_244(3)) {
+    } else if (jj_2_246(3)) {
       jj_consume_token(LPAREN);
       jj_consume_token(RPAREN);
         {if (true) return new SqlNodeList(getPos());}
-    } else if (jj_2_245(2)) {
+    } else if (jj_2_247(2)) {
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
         {if (true) return e;}
     } else {
@@ -3250,7 +3261,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                                   list.add(e);
     label_21:
     while (true) {
-      if (jj_2_246(2)) {
+      if (jj_2_248(2)) {
         ;
       } else {
         break label_21;
@@ -3266,7 +3277,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode HavingOpt() throws ParseException {
     SqlNode e;
-    if (jj_2_247(2)) {
+    if (jj_2_249(2)) {
       jj_consume_token(HAVING);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                                                             {if (true) return e;}
@@ -3284,7 +3295,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlWindow e;
     List<SqlNode> list;
     final Span s;
-    if (jj_2_249(2)) {
+    if (jj_2_251(2)) {
       jj_consume_token(WINDOW);
                s = span();
       id = SimpleIdentifier();
@@ -3294,7 +3305,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         list = startList(e);
       label_22:
       while (true) {
-        if (jj_2_248(2)) {
+        if (jj_2_250(2)) {
           ;
         } else {
           break label_22;
@@ -3328,12 +3339,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlLiteral allowPartial = null;
     jj_consume_token(LPAREN);
                s = span();
-    if (jj_2_250(2)) {
+    if (jj_2_252(2)) {
       id = SimpleIdentifier();
     } else {
           id = null;
     }
-    if (jj_2_251(2)) {
+    if (jj_2_253(2)) {
       jj_consume_token(PARTITION);
                       s1 = span();
       jj_consume_token(BY);
@@ -3341,28 +3352,28 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
           partitionList = SqlNodeList.EMPTY;
     }
-    if (jj_2_252(2)) {
+    if (jj_2_254(2)) {
       orderList = OrderBy(true);
     } else {
           orderList = SqlNodeList.EMPTY;
     }
-    if (jj_2_257(2)) {
-      if (jj_2_253(2)) {
+    if (jj_2_259(2)) {
+      if (jj_2_255(2)) {
         jj_consume_token(ROWS);
                      isRows = SqlLiteral.createBoolean(true, getPos());
-      } else if (jj_2_254(2)) {
+      } else if (jj_2_256(2)) {
         jj_consume_token(RANGE);
                       isRows = SqlLiteral.createBoolean(false, getPos());
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
-      if (jj_2_255(2)) {
+      if (jj_2_257(2)) {
         jj_consume_token(BETWEEN);
         lowerBound = WindowRange();
         jj_consume_token(AND);
         upperBound = WindowRange();
-      } else if (jj_2_256(2)) {
+      } else if (jj_2_258(2)) {
         lowerBound = WindowRange();
       } else {
         jj_consume_token(-1);
@@ -3371,13 +3382,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_260(2)) {
-      if (jj_2_258(2)) {
+    if (jj_2_262(2)) {
+      if (jj_2_260(2)) {
         jj_consume_token(ALLOW);
                   s2 = span();
         jj_consume_token(PARTIAL);
             allowPartial = SqlLiteral.createBoolean(true, s2.end(this));
-      } else if (jj_2_259(2)) {
+      } else if (jj_2_261(2)) {
         jj_consume_token(DISALLOW);
                      s2 = span();
         jj_consume_token(PARTIAL);
@@ -3399,30 +3410,30 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNode WindowRange() throws ParseException {
     final SqlNode e;
     final Span s;
-    if (jj_2_265(2)) {
+    if (jj_2_267(2)) {
       jj_consume_token(CURRENT);
                 s = span();
       jj_consume_token(ROW);
         {if (true) return SqlWindow.createCurrentRow(s.end(this));}
-    } else if (jj_2_266(2)) {
+    } else if (jj_2_268(2)) {
       jj_consume_token(UNBOUNDED);
                   s = span();
-      if (jj_2_261(2)) {
+      if (jj_2_263(2)) {
         jj_consume_token(PRECEDING);
             {if (true) return SqlWindow.createUnboundedPreceding(s.end(this));}
-      } else if (jj_2_262(2)) {
+      } else if (jj_2_264(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_267(2)) {
+    } else if (jj_2_269(2)) {
       e = Expression(ExprContext.ACCEPT_NON_QUERY);
-      if (jj_2_263(2)) {
+      if (jj_2_265(2)) {
         jj_consume_token(PRECEDING);
             {if (true) return SqlWindow.createPreceding(e, getPos());}
-      } else if (jj_2_264(2)) {
+      } else if (jj_2_266(2)) {
         jj_consume_token(FOLLOWING);
             {if (true) return SqlWindow.createFollowing(e, getPos());}
       } else {
@@ -3456,7 +3467,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         list = startList(e);
     label_23:
     while (true) {
-      if (jj_2_268(2)) {
+      if (jj_2_270(2)) {
         ;
       } else {
         break label_23;
@@ -3475,10 +3486,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_271(2)) {
-      if (jj_2_269(2)) {
+    if (jj_2_273(2)) {
+      if (jj_2_271(2)) {
         jj_consume_token(ASC);
-      } else if (jj_2_270(2)) {
+      } else if (jj_2_272(2)) {
         jj_consume_token(DESC);
             e = SqlStdOperatorTable.DESC.createCall(getPos(), e);
       } else {
@@ -3488,12 +3499,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_274(2)) {
-      if (jj_2_272(2)) {
+    if (jj_2_276(2)) {
+      if (jj_2_274(2)) {
         jj_consume_token(NULLS);
         jj_consume_token(FIRST);
             e = SqlStdOperatorTable.NULLS_FIRST.createCall(getPos(), e);
-      } else if (jj_2_273(2)) {
+      } else if (jj_2_275(2)) {
         jj_consume_token(NULLS);
         jj_consume_token(LAST);
             e = SqlStdOperatorTable.NULLS_LAST.createCall(getPos(), e);
@@ -3547,7 +3558,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     PivotAgg(aggList);
     label_24:
     while (true) {
-      if (jj_2_275(2)) {
+      if (jj_2_277(2)) {
         ;
       } else {
         break label_24;
@@ -3560,11 +3571,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(IN);
     jj_consume_token(LPAREN);
                     s2 = span();
-    if (jj_2_277(2)) {
+    if (jj_2_279(2)) {
       PivotValue(valueList);
       label_25:
       while (true) {
-        if (jj_2_276(2)) {
+        if (jj_2_278(2)) {
           ;
         } else {
           break label_25;
@@ -3588,8 +3599,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNode e;
     final SqlIdentifier alias;
     e = NamedFunctionCall();
-    if (jj_2_279(2)) {
-      if (jj_2_278(2)) {
+    if (jj_2_281(2)) {
+      if (jj_2_280(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -3609,8 +3620,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlIdentifier alias;
     e = RowConstructor();
                            tuple = SqlParserUtil.stripRow(e);
-    if (jj_2_281(2)) {
-      if (jj_2_280(2)) {
+    if (jj_2_283(2)) {
+      if (jj_2_282(2)) {
         jj_consume_token(AS);
       } else {
         ;
@@ -3635,11 +3646,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNodeList inList;
     jj_consume_token(UNPIVOT);
                 s = span();
-    if (jj_2_282(2)) {
+    if (jj_2_284(2)) {
       jj_consume_token(INCLUDE);
       jj_consume_token(NULLS);
                             includeNulls = true;
-    } else if (jj_2_283(2)) {
+    } else if (jj_2_285(2)) {
       jj_consume_token(EXCLUDE);
       jj_consume_token(NULLS);
                             includeNulls = false;
@@ -3656,7 +3667,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     UnpivotValue(values);
     label_26:
     while (true) {
-      if (jj_2_284(2)) {
+      if (jj_2_286(2)) {
         ;
       } else {
         break label_26;
@@ -3676,7 +3687,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNodeList columnList;
     final SqlNode values;
     columnList = SimpleIdentifierOrList();
-    if (jj_2_285(2)) {
+    if (jj_2_287(2)) {
       jj_consume_token(AS);
       values = RowConstructor();
             final SqlNodeList valueList = SqlParserUtil.stripRow(values);
@@ -3709,7 +3720,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(MATCH_RECOGNIZE);
                         s = span();
     jj_consume_token(LPAREN);
-    if (jj_2_286(2)) {
+    if (jj_2_288(2)) {
       jj_consume_token(PARTITION);
                       s2 = span();
       jj_consume_token(BY);
@@ -3717,25 +3728,25 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_287(2)) {
+    if (jj_2_289(2)) {
       orderList = OrderBy(true);
     } else {
       ;
     }
-    if (jj_2_288(2)) {
+    if (jj_2_290(2)) {
       jj_consume_token(MEASURES);
       measureList = MeasureColumnCommaList(span());
     } else {
       ;
     }
-    if (jj_2_289(2)) {
+    if (jj_2_291(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_290(2)) {
+    } else if (jj_2_292(2)) {
       jj_consume_token(ALL);
                 s0 = span();
       jj_consume_token(ROWS);
@@ -3745,25 +3756,25 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
             rowsPerMatch = null;
     }
-    if (jj_2_296(2)) {
+    if (jj_2_298(2)) {
       jj_consume_token(AFTER);
                   s1 = span();
       jj_consume_token(MATCH);
       jj_consume_token(SKIP_);
-      if (jj_2_294(2)) {
+      if (jj_2_296(2)) {
         jj_consume_token(TO);
-        if (jj_2_292(2)) {
+        if (jj_2_294(2)) {
           jj_consume_token(NEXT);
           jj_consume_token(ROW);
                     after = SqlMatchRecognize.AfterOption.SKIP_TO_NEXT_ROW
                         .symbol(s1.end(this));
-        } else if (jj_2_293(2)) {
+        } else if (jj_2_295(2)) {
           jj_consume_token(FIRST);
           var = SimpleIdentifier();
                     after = SqlMatchRecognize.SKIP_TO_FIRST.createCall(
                         s1.end(var), var);
         } else if (true) {
-          if (jj_2_291(2)) {
+          if (jj_2_293(2)) {
             jj_consume_token(LAST);
           } else {
             ;
@@ -3775,7 +3786,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           jj_consume_token(-1);
           throw new ParseException();
         }
-      } else if (jj_2_295(2)) {
+      } else if (jj_2_297(2)) {
         jj_consume_token(PAST);
         jj_consume_token(LAST);
         jj_consume_token(ROW);
@@ -3790,27 +3801,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     jj_consume_token(PATTERN);
     jj_consume_token(LPAREN);
-    if (jj_2_297(2)) {
+    if (jj_2_299(2)) {
       jj_consume_token(CARET);
                   isStrictStarts = SqlLiteral.createBoolean(true, getPos());
     } else {
           isStrictStarts = SqlLiteral.createBoolean(false, getPos());
     }
     pattern = PatternExpression();
-    if (jj_2_298(2)) {
+    if (jj_2_300(2)) {
       jj_consume_token(DOLLAR);
                    isStrictEnds = SqlLiteral.createBoolean(true, getPos());
     } else {
           isStrictEnds = SqlLiteral.createBoolean(false, getPos());
     }
     jj_consume_token(RPAREN);
-    if (jj_2_299(2)) {
+    if (jj_2_301(2)) {
       jj_consume_token(WITHIN);
       interval = IntervalLiteral();
     } else {
           interval = null;
     }
-    if (jj_2_300(2)) {
+    if (jj_2_302(2)) {
       jj_consume_token(SUBSET);
       subsetList = SubsetDefinitionCommaList(span());
     } else {
@@ -3832,7 +3843,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         eList.add(e);
     label_27:
     while (true) {
-      if (jj_2_301(2)) {
+      if (jj_2_303(2)) {
         ;
       } else {
         break label_27;
@@ -3861,7 +3872,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     left = PatternTerm();
     label_28:
     while (true) {
-      if (jj_2_302(2)) {
+      if (jj_2_304(2)) {
         ;
       } else {
         break label_28;
@@ -3881,7 +3892,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     left = PatternFactor();
     label_29:
     while (true) {
-      if (jj_2_303(2)) {
+      if (jj_2_305(2)) {
         ;
       } else {
         break label_29;
@@ -3906,27 +3917,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     case HOOK:
     case PLUS:
     case STAR:
-      if (jj_2_309(2)) {
+      if (jj_2_311(2)) {
         jj_consume_token(STAR);
                 startNum = SqlLiteral.createExactNumeric("0", SqlParserPos.ZERO);
                 endNum = SqlLiteral.createExactNumeric("-1", SqlParserPos.ZERO);
-      } else if (jj_2_310(2)) {
+      } else if (jj_2_312(2)) {
         jj_consume_token(PLUS);
                 startNum = SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO);
                 endNum = SqlLiteral.createExactNumeric("-1", SqlParserPos.ZERO);
-      } else if (jj_2_311(2)) {
+      } else if (jj_2_313(2)) {
         jj_consume_token(HOOK);
                 startNum = SqlLiteral.createExactNumeric("0", SqlParserPos.ZERO);
                 endNum = SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO);
-      } else if (jj_2_312(2)) {
+      } else if (jj_2_314(2)) {
         jj_consume_token(LBRACE);
-        if (jj_2_306(2)) {
+        if (jj_2_308(2)) {
           startNum = UnsignedNumericLiteral();
                                                       endNum = startNum;
-          if (jj_2_305(2)) {
+          if (jj_2_307(2)) {
             jj_consume_token(COMMA);
                         endNum = SqlLiteral.createExactNumeric("-1", SqlParserPos.ZERO);
-            if (jj_2_304(2)) {
+            if (jj_2_306(2)) {
               endNum = UnsignedNumericLiteral();
             } else {
               ;
@@ -3935,12 +3946,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             ;
           }
           jj_consume_token(RBRACE);
-        } else if (jj_2_307(2)) {
+        } else if (jj_2_309(2)) {
                     startNum = SqlLiteral.createExactNumeric("-1", SqlParserPos.ZERO);
           jj_consume_token(COMMA);
           endNum = UnsignedNumericLiteral();
           jj_consume_token(RBRACE);
-        } else if (jj_2_308(2)) {
+        } else if (jj_2_310(2)) {
           jj_consume_token(MINUS);
           extra = PatternExpression();
           jj_consume_token(MINUS);
@@ -3958,7 +3969,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(-1);
         throw new ParseException();
       }
-      if (jj_2_313(2)) {
+      if (jj_2_315(2)) {
         jj_consume_token(HOOK);
                 if (startNum.intValue(true) != endNum.intValue(true)) {
                     reluctant = SqlLiteral.createBoolean(true, SqlParserPos.ZERO);
@@ -3984,13 +3995,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     SqlNode e;
     List<SqlNode> eList;
-    if (jj_2_315(2)) {
+    if (jj_2_317(2)) {
       e = SimpleIdentifier();
-    } else if (jj_2_316(2)) {
+    } else if (jj_2_318(2)) {
       jj_consume_token(LPAREN);
       e = PatternExpression();
       jj_consume_token(RPAREN);
-    } else if (jj_2_317(2)) {
+    } else if (jj_2_319(2)) {
       jj_consume_token(LBRACE);
                    s = span();
       jj_consume_token(MINUS);
@@ -3998,7 +4009,7 @@ 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_318(2)) {
+    } else if (jj_2_320(2)) {
       jj_consume_token(PERMUTE);
                         s = span();
       jj_consume_token(LPAREN);
@@ -4007,7 +4018,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 eList.add(e);
       label_30:
       while (true) {
-        if (jj_2_314(2)) {
+        if (jj_2_316(2)) {
           ;
         } else {
           break label_30;
@@ -4034,7 +4045,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         eList.add(e);
     label_31:
     while (true) {
-      if (jj_2_319(2)) {
+      if (jj_2_321(2)) {
         ;
       } else {
         break label_31;
@@ -4067,7 +4078,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         eList.add(e);
     label_32:
     while (true) {
-      if (jj_2_320(2)) {
+      if (jj_2_322(2)) {
         ;
       } else {
         break label_32;
@@ -4115,7 +4126,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlParserPos pos;
     SqlParserPos withPos;
     List<Object> list;
-    if (jj_2_321(2)) {
+    if (jj_2_323(2)) {
       withList = WithList();
     } else {
       ;
@@ -4124,7 +4135,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         list = startList(e);
     label_33:
     while (true) {
-      if (jj_2_322(2)) {
+      if (jj_2_324(2)) {
         ;
       } else {
         break label_33;
@@ -4161,7 +4172,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                            list.add(withItem);
     label_34:
     while (true) {
-      if (jj_2_323(2)) {
+      if (jj_2_325(2)) {
         ;
       } else {
         break label_34;
@@ -4179,7 +4190,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNodeList columnList = null;
     SqlNode definition;
     id = SimpleIdentifier();
-    if (jj_2_324(2)) {
+    if (jj_2_326(2)) {
       columnList = ParenthesizedSimpleIdentifierList();
     } else {
       ;
@@ -4197,10 +4208,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode LeafQueryOrExpr(ExprContext exprContext) throws ParseException {
     SqlNode e;
-    if (jj_2_325(2)) {
+    if (jj_2_327(2)) {
       e = Expression(exprContext);
                                   {if (true) return e;}
-    } else if (jj_2_326(2)) {
+    } else if (jj_2_328(2)) {
       e = LeafQuery(exprContext);
                                  {if (true) return e;}
     } else {
@@ -4249,7 +4260,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         list.add(e);
     label_36:
     while (true) {
-      if (jj_2_327(2)) {
+      if (jj_2_329(2)) {
         ;
       } else {
         break label_36;
@@ -4287,28 +4298,28 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlIdentifier p;
     final Span s = span();
     Expression2b(exprContext, list);
-    if (jj_2_366(2)) {
+    if (jj_2_368(2)) {
       label_37:
       while (true) {
-        if (jj_2_358(2)) {
+        if (jj_2_360(2)) {
                     checkNonQueryExpression(exprContext);
-          if (jj_2_331(2)) {
+          if (jj_2_333(2)) {
             jj_consume_token(NOT);
             jj_consume_token(IN);
                                  op = SqlStdOperatorTable.NOT_IN;
-          } else if (jj_2_332(2)) {
+          } else if (jj_2_334(2)) {
             jj_consume_token(IN);
                            op = SqlStdOperatorTable.IN;
-          } else if (jj_2_333(2)) {
+          } else if (jj_2_335(2)) {
                       final SqlKind k;
             k = comp();
-            if (jj_2_328(2)) {
+            if (jj_2_330(2)) {
               jj_consume_token(SOME);
                                  op = SqlStdOperatorTable.some(k);
-            } else if (jj_2_329(2)) {
+            } else if (jj_2_331(2)) {
               jj_consume_token(ANY);
                                 op = SqlStdOperatorTable.some(k);
-            } else if (jj_2_330(2)) {
+            } else if (jj_2_332(2)) {
               jj_consume_token(ALL);
                                 op = SqlStdOperatorTable.all(k);
             } else {
@@ -4334,18 +4345,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     } else {
                         list.add(nodeList);
                     }
-        } else if (jj_2_359(2)) {
+        } else if (jj_2_361(2)) {
                     checkNonQueryExpression(exprContext);
-          if (jj_2_340(2)) {
+          if (jj_2_342(2)) {
             jj_consume_token(NOT);
             jj_consume_token(BETWEEN);
                         op = SqlStdOperatorTable.NOT_BETWEEN;
                         s.clear().add(this);
-            if (jj_2_336(2)) {
-              if (jj_2_334(2)) {
+            if (jj_2_338(2)) {
+              if (jj_2_336(2)) {
                 jj_consume_token(SYMMETRIC);
                                       op = SqlStdOperatorTable.SYMMETRIC_NOT_BETWEEN;
-              } else if (jj_2_335(2)) {
+              } else if (jj_2_337(2)) {
                 jj_consume_token(ASYMMETRIC);
               } else {
                 jj_consume_token(-1);
@@ -4354,15 +4365,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             } else {
               ;
             }
-          } else if (jj_2_341(2)) {
+          } else if (jj_2_343(2)) {
             jj_consume_token(BETWEEN);
                         op = SqlStdOperatorTable.BETWEEN;
                         s.clear().add(this);
-            if (jj_2_339(2)) {
-              if (jj_2_337(2)) {
+            if (jj_2_341(2)) {
+              if (jj_2_339(2)) {
                 jj_consume_token(SYMMETRIC);
                                       op = SqlStdOperatorTable.SYMMETRIC_BETWEEN;
-              } else if (jj_2_338(2)) {
+              } else if (jj_2_340(2)) {
                 jj_consume_token(ASYMMETRIC);
               } else {
                 jj_consume_token(-1);
@@ -4379,22 +4390,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_360(2)) {
+        } else if (jj_2_362(2)) {
                     checkNonQueryExpression(exprContext);
                     s.clear().add(this);
-          if (jj_2_353(2)) {
-            if (jj_2_346(2)) {
+          if (jj_2_355(2)) {
+            if (jj_2_348(2)) {
               jj_consume_token(NOT);
-              if (jj_2_342(2)) {
+              if (jj_2_344(2)) {
                 jj_consume_token(LIKE);
                                      op = SqlStdOperatorTable.NOT_LIKE;
-              } else if (jj_2_343(2)) {
+              } else if (jj_2_345(2)) {
                 jj_consume_token(ILIKE);
                                       op = SqlLibraryOperators.NOT_ILIKE;
-              } else if (jj_2_344(2)) {
+              } else if (jj_2_346(2)) {
                 jj_consume_token(RLIKE);
                                       op = SqlLibraryOperators.NOT_RLIKE;
-              } else if (jj_2_345(2)) {
+              } else if (jj_2_347(2)) {
                 jj_consume_token(SIMILAR);
                 jj_consume_token(TO);
                                              op = SqlStdOperatorTable.NOT_SIMILAR_TO;
@@ -4402,16 +4413,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 jj_consume_token(-1);
                 throw new ParseException();
               }
-            } else if (jj_2_347(2)) {
+            } else if (jj_2_349(2)) {
               jj_consume_token(LIKE);
                                  op = SqlStdOperatorTable.LIKE;
-            } else if (jj_2_348(2)) {
+            } else if (jj_2_350(2)) {
               jj_consume_token(ILIKE);
                                   op = SqlLibraryOperators.ILIKE;
-            } else if (jj_2_349(2)) {
+            } else if (jj_2_351(2)) {
               jj_consume_token(RLIKE);
                                   op = SqlLibraryOperators.RLIKE;
-            } else if (jj_2_350(2)) {
+            } else if (jj_2_352(2)) {
               jj_consume_token(SIMILAR);
               jj_consume_token(TO);
                                          op = SqlStdOperatorTable.SIMILAR_TO;
@@ -4419,20 +4430,20 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
               jj_consume_token(-1);
               throw new ParseException();
             }
-          } else if (jj_2_354(2)) {
+          } else if (jj_2_356(2)) {
             jj_consume_token(NEGATE);
             jj_consume_token(TILDE);
                                        op = SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_SENSITIVE;
-            if (jj_2_351(2)) {
+            if (jj_2_353(2)) {
               jj_consume_token(STAR);
                                op = SqlStdOperatorTable.NEGATED_POSIX_REGEX_CASE_INSENSITIVE;
             } else {
               ;
             }
-          } else if (jj_2_355(2)) {
+          } else if (jj_2_357(2)) {
             jj_consume_token(TILDE);
                               op = SqlStdOperatorTable.POSIX_REGEX_CASE_SENSITIVE;
-            if (jj_2_352(2)) {
+            if (jj_2_354(2)) {
               jj_consume_token(STAR);
                                op = SqlStdOperatorTable.POSIX_REGEX_CASE_INSENSITIVE;
             } else {
@@ -4445,7 +4456,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_356(2)) {
+          if (jj_2_358(2)) {
             jj_consume_token(ESCAPE);
             e = Expression3(ExprContext.ACCEPT_SUB_QUERY);
                         s.clear().add(this);
@@ -4456,14 +4467,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           } else {
             ;
           }
-        } else if (jj_2_361(2)) {
+        } else if (jj_2_363(2)) {
           InfixCast(list, exprContext, s);
-        } else if (jj_2_362(3)) {
+        } else if (jj_2_364(3)) {
           op = BinaryRowOperator();
                     checkNonQueryExpression(exprContext);
                     list.add(new SqlParserUtil.ToTreeListItem(op, getPos()));
           Expression2b(ExprContext.ACCEPT_SUB_QUERY, list);
-        } else if (jj_2_363(2)) {
+        } else if (jj_2_365(2)) {
           jj_consume_token(LBRACKET);
           e = Expression(ExprContext.ACCEPT_SUB_QUERY);
           jj_consume_token(RBRACKET);
@@ -4473,7 +4484,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                     list.add(e);
           label_38:
           while (true) {
-            if (jj_2_357(2)) {
+            if (jj_2_359(2)) {
               ;
             } else {
               break label_38;
@@ -4485,7 +4496,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                                 SqlStdOperatorTable.DOT, getPos()));
                         list.add(p);
           }
-        } else if (jj_2_364(2)) {
+        } else if (jj_2_366(2)) {
                     checkNonQueryExpression(exprContext);
           op = PostfixRowOperator();
                     list.add(new SqlParserUtil.ToTreeListItem(op, getPos()));
@@ -4493,7 +4504,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           jj_consume_token(-1);
           throw new ParseException();
         }
-        if (jj_2_365(2)) {
+        if (jj_2_367(2)) {
           ;
         } else {
           break label_37;
@@ -4508,25 +4519,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_367(2)) {
+    if (jj_2_369(2)) {
       jj_consume_token(LT);
            {if (true) return SqlKind.LESS_THAN;}
-    } else if (jj_2_368(2)) {
+    } else if (jj_2_370(2)) {
       jj_consume_token(LE);
            {if (true) return SqlKind.LESS_THAN_OR_EQUAL;}
-    } else if (jj_2_369(2)) {
+    } else if (jj_2_371(2)) {
       jj_consume_token(GT);
            {if (true) return SqlKind.GREATER_THAN;}
-    } else if (jj_2_370(2)) {
+    } else if (jj_2_372(2)) {
       jj_consume_token(GE);
            {if (true) return SqlKind.GREATER_THAN_OR_EQUAL;}
-    } else if (jj_2_371(2)) {
+    } else if (jj_2_373(2)) {
       jj_consume_token(EQ);
            {if (true) return SqlKind.EQUALS;}
-    } else if (jj_2_372(2)) {
+    } else if (jj_2_374(2)) {
       jj_consume_token(NE);
            {if (true) return SqlKind.NOT_EQUALS;}
-    } else if (jj_2_373(2)) {
+    } else if (jj_2_375(2)) {
       jj_consume_token(NE2);
         if (!this.conformance.isBangEqualAllowed()) {
             {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.bangEqualNotAllowed());}
@@ -4551,14 +4562,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlOperator op;
     final Span s;
     Span rowSpan = null;
-    if (jj_2_376(2)) {
+    if (jj_2_378(2)) {
       e = AtomicRowExpression();
         checkNonQueryExpression(exprContext);
         {if (true) return e;}
-    } else if (jj_2_377(2)) {
+    } else if (jj_2_379(2)) {
       e = CursorExpression(exprContext);
                                         {if (true) return e;}
-    } else if (jj_2_378(3)) {
+    } else if (jj_2_380(3)) {
       jj_consume_token(ROW);
         s = span();
       list = ParenthesizedQueryOrCommaList(exprContext);
@@ -4570,8 +4581,8 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                 RESOURCE.illegalRowExpression());}
         }
         {if (true) return SqlStdOperatorTable.ROW.createCall(list);}
-    } else if (jj_2_379(2)) {
-      if (jj_2_374(2)) {
+    } else if (jj_2_381(2)) {
+      if (jj_2_376(2)) {
         jj_consume_token(ROW);
                 rowSpan = span();
       } else {
@@ -4583,7 +4594,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             {if (true) return SqlStdOperatorTable.ROW.createCall(rowSpan.end(list1),
                 (List<SqlNode>) list1);}
         }
-      if (jj_2_375(2)) {
+      if (jj_2_377(2)) {
         e = IntervalQualifier();
                 if ((list1.size() == 1)
                     && list1.get(0) instanceof SqlCall)
@@ -4619,24 +4630,24 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlOperator periodOperator() throws ParseException {
-    if (jj_2_380(2)) {
+    if (jj_2_382(2)) {
       jj_consume_token(OVERLAPS);
                   {if (true) return SqlStdOperatorTable.OVERLAPS;}
-    } else if (jj_2_381(2)) {
+    } else if (jj_2_383(2)) {
       jj_consume_token(IMMEDIATELY);
       jj_consume_token(PRECEDES);
                                 {if (true) return SqlStdOperatorTable.IMMEDIATELY_PRECEDES;}
-    } else if (jj_2_382(2)) {
+    } else if (jj_2_384(2)) {
       jj_consume_token(PRECEDES);
                   {if (true) return SqlStdOperatorTable.PRECEDES;}
-    } else if (jj_2_383(2)) {
+    } else if (jj_2_385(2)) {
       jj_consume_token(IMMEDIATELY);
       jj_consume_token(SUCCEEDS);
                                 {if (true) return SqlStdOperatorTable.IMMEDIATELY_SUCCEEDS;}
-    } else if (jj_2_384(2)) {
+    } else if (jj_2_386(2)) {
       jj_consume_token(SUCCEEDS);
                   {if (true) return SqlStdOperatorTable.SUCCEEDS;}
-    } else if (jj_2_385(2)) {
+    } else if (jj_2_387(2)) {
       jj_consume_token(EQUALS);
                 {if (true) return SqlStdOperatorTable.PERIOD_EQUALS;}
     } else {
@@ -4662,9 +4673,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode UnsignedNumericLiteralOrParam() throws ParseException {
     final SqlNode e;
-    if (jj_2_386(2)) {
+    if (jj_2_388(2)) {
       e = UnsignedNumericLiteral();
-    } else if (jj_2_387(2)) {
+    } else if (jj_2_389(2)) {
       e = DynamicParam();
     } else {
       jj_consume_token(-1);
@@ -4688,19 +4699,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlLiteral quantifier = null;
     p = SimpleIdentifier();
         e = p;
-    if (jj_2_391(2147483647)) {
+    if (jj_2_393(2147483647)) {
                                 s = span();
             funcType = SqlFunctionCategory.USER_DEFINED_FUNCTION;
-      if (jj_2_388(2)) {
+      if (jj_2_390(2)) {
         jj_consume_token(LPAREN);
         jj_consume_token(STAR);
                 args = startList(SqlIdentifier.star(getPos()));
         jj_consume_token(RPAREN);
-      } else if (jj_2_389(2)) {
+      } else if (jj_2_391(2)) {
         jj_consume_token(LPAREN);
         jj_consume_token(RPAREN);
                 args = Collections.emptyList();
-      } else if (jj_2_390(2)) {
+      } else if (jj_2_392(2)) {
         args = FunctionParameterList(ExprContext.ACCEPT_SUB_QUERY);
                 quantifier = (SqlLiteral) args.get(0);
                 args.remove(0);
@@ -4729,16 +4740,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlNodeList orderBy;
     final Pair<SqlParserPos, SqlOperator> nullTreatment;
     final SqlNode separator;
-    if (jj_2_392(2)) {
+    if (jj_2_394(2)) {
       jj_consume_token(ARRAY_AGG);
                       s = span(); op = SqlLibraryOperators.ARRAY_AGG;
-    } else if (jj_2_393(2)) {
+    } else if (jj_2_395(2)) {
       jj_consume_token(ARRAY_CONCAT_AGG);
                              s = span(); op = SqlLibraryOperators.ARRAY_CONCAT_AGG;
-    } else if (jj_2_394(2)) {
+    } else if (jj_2_396(2)) {
       jj_consume_token(GROUP_CONCAT);
                          s = span(); op = SqlLibraryOperators.GROUP_CONCAT;
-    } else if (jj_2_395(2)) {
+    } else if (jj_2_397(2)) {
       jj_consume_token(STRING_AGG);
                        s = span(); op = SqlLibraryOperators.STRING_AGG;
     } else {
@@ -4746,7 +4757,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       throw new ParseException();
     }
     jj_consume_token(LPAREN);
-    if (jj_2_396(2)) {
+    if (jj_2_398(2)) {
       qualifier = AllOrDistinct();
     } else {
           qualifier = null;
@@ -4754,7 +4765,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     Arg(args, ExprContext.ACCEPT_SUB_QUERY);
     label_39:
     while (true) {
-      if (jj_2_397(2)) {
+      if (jj_2_399(2)) {
         ;
       } else {
         break label_39;
@@ -4764,18 +4775,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             checkNonQueryExpression(ExprContext.ACCEPT_SUB_QUERY);
       Arg(args, ExprContext.ACCEPT_SUB_QUERY);
     }
-    if (jj_2_398(2)) {
+    if (jj_2_400(2)) {
       nullTreatment = NullTreatment();
     } else {
           nullTreatment = null;
     }
-    if (jj_2_399(2)) {
+    if (jj_2_401(2)) {
       orderBy = OrderBy(true);
             args.add(orderBy);
     } else {
       ;
     }
-    if (jj_2_400(2)) {
+    if (jj_2_402(2)) {
       jj_consume_token(SEPARATOR);
                       s2 = span();
       separator = StringLiteral();
@@ -4798,33 +4809,33 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode AtomicRowExpression() throws ParseException {
     final SqlNode e;
-    if (jj_2_401(2)) {
+    if (jj_2_403(2)) {
       e = LiteralOrIntervalExpression();
-    } else if (jj_2_402(2)) {
+    } else if (jj_2_404(2)) {
       e = DynamicParam();
-    } else if (jj_2_403(2)) {
+    } else if (jj_2_405(2)) {
       e = BuiltinFunctionCall();
-    } else if (jj_2_404(2)) {
+    } else if (jj_2_406(2)) {
       e = JdbcFunctionCall();
-    } else if (jj_2_405(2)) {
+    } else if (jj_2_407(2)) {
       e = MultisetConstructor();
-    } else if (jj_2_406(2)) {
+    } else if (jj_2_408(2)) {
       e = ArrayConstructor();
-    } else if (jj_2_407(3)) {
+    } else if (jj_2_409(3)) {
       e = MapConstructor();
-    } else if (jj_2_408(2)) {
+    } else if (jj_2_410(2)) {
       e = PeriodConstructor();
-    } else if (jj_2_409(2147483647)) {
+    } else if (jj_2_411(2147483647)) {
       e = NamedFunctionCall();
-    } else if (jj_2_410(2)) {
+    } else if (jj_2_412(2)) {
       e = ContextVariable();
-    } else if (jj_2_411(2)) {
+    } else if (jj_2_413(2)) {
       e = CompoundIdentifier();
-    } else if (jj_2_412(2)) {
+    } else if (jj_2_414(2)) {
       e = NewSpecification();
-    } else if (jj_2_413(2)) {
+    } else if (jj_2_415(2)) {
       e = CaseExpression();
-    } else if (jj_2_414(2)) {
+    } else if (jj_2_416(2)) {
       e = SequenceExpression();
     } else {
       jj_consume_token(-1);
@@ -4845,7 +4856,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     List<SqlNode> thenList = new ArrayList<SqlNode>();
     jj_consume_token(CASE);
              s = span();
-    if (jj_2_415(2)) {
+    if (jj_2_417(2)) {
       caseIdentifier = Expression(ExprContext.ACCEPT_SUB_QUERY);
     } else {
       ;
@@ -4863,13 +4874,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                  thenSpan.add(this);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
             thenList.add(e);
-      if (jj_2_416(2)) {
+      if (jj_2_418(2)) {
         ;
       } else {
         break label_40;
       }
     }
-    if (jj_2_417(2)) {
+    if (jj_2_419(2)) {
       jj_consume_token(ELSE);
       elseClause = Expression(ExprContext.ACCEPT_SUB_QUERY);
     } else {
@@ -4887,10 +4898,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     final SqlOperator f;
     final SqlNode sequenceRef;
-    if (jj_2_418(2)) {
+    if (jj_2_420(2)) {
       jj_consume_token(NEXT);
                  f = SqlStdOperatorTable.NEXT_VALUE; s = span();
-    } else if (jj_2_419(3)) {
+    } else if (jj_2_421(3)) {
       jj_consume_token(CURRENT);
                     f = SqlStdOperatorTable.CURRENT_VALUE; s = span();
     } else {
@@ -4911,16 +4922,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_425(2)) {
+    if (jj_2_427(2)) {
       jj_consume_token(SET);
             s.add(this);
       name = CompoundIdentifier();
       jj_consume_token(EQ);
-      if (jj_2_420(2)) {
+      if (jj_2_422(2)) {
         val = Literal();
-      } else if (jj_2_421(2)) {
+      } else if (jj_2_423(2)) {
         val = SimpleIdentifier();
-      } else if (jj_2_422(2)) {
+      } else if (jj_2_424(2)) {
         jj_consume_token(ON);
                 // OFF is handled by SimpleIdentifier, ON handled here.
                 val = new SqlIdentifier(token.image.toUpperCase(Locale.ROOT),
@@ -4930,12 +4941,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_426(2)) {
+    } else if (jj_2_428(2)) {
       jj_consume_token(RESET);
             s.add(this);
-      if (jj_2_423(2)) {
+      if (jj_2_425(2)) {
         name = CompoundIdentifier();
-      } else if (jj_2_424(2)) {
+      } else if (jj_2_426(2)) {
         jj_consume_token(ALL);
                 name = new SqlIdentifier(token.image.toUpperCase(Locale.ROOT),
                     getPos());
@@ -4968,9 +4979,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public String Scope() throws ParseException {
-    if (jj_2_427(2)) {
+    if (jj_2_429(2)) {
       jj_consume_token(SYSTEM);
-    } else if (jj_2_428(2)) {
+    } else if (jj_2_430(2)) {
       jj_consume_token(SESSION);
     } else {
       jj_consume_token(-1);
@@ -4989,18 +5000,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlCreate create;
     jj_consume_token(CREATE);
                s = span();
-    if (jj_2_429(2)) {
+    if (jj_2_431(2)) {
       jj_consume_token(OR);
       jj_consume_token(REPLACE);
             replace = true;
     } else {
       ;
     }
-    if (jj_2_430(2)) {
+    if (jj_2_432(2)) {
       create = SqlCreateTable(s, replace);
-    } else if (jj_2_431(2)) {
+    } else if (jj_2_433(2)) {
       create = SqlCreateIndex(s, replace);
-    } else if (jj_2_432(2)) {
+    } else if (jj_2_434(2)) {
       create = SqlCreateUser(s, replace);
     } else {
       jj_consume_token(-1);
@@ -5019,11 +5030,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlDrop drop;
     jj_consume_token(DROP);
              s = span();
-    if (jj_2_433(2)) {
+    if (jj_2_435(2)) {
       drop = SqlDropTable(s, replace);
-    } else if (jj_2_434(2)) {
+    } else if (jj_2_436(2)) {
       drop = SqlDropIndex(s, replace);
-    } else if (jj_2_435(2)) {
+    } else if (jj_2_437(2)) {
       drop = SqlDropUser(s, replace);
     } else {
       jj_consume_token(-1);
@@ -5045,9 +5056,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlNode Literal() throws ParseException {
     SqlNode e;
-    if (jj_2_436(2)) {
+    if (jj_2_438(2)) {
       e = NonIntervalLiteral();
-    } else if (jj_2_437(2)) {
+    } else if (jj_2_439(2)) {
       e = IntervalLiteral();
     } else {
       jj_consume_token(-1);
@@ -5060,13 +5071,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_438(2)) {
+    if (jj_2_440(2)) {
       e = NumericLiteral();
-    } else if (jj_2_439(2)) {
+    } else if (jj_2_441(2)) {
       e = StringLiteral();
-    } else if (jj_2_440(2)) {
+    } else if (jj_2_442(2)) {
       e = SpecialLiteral();
-    } else if (jj_2_441(2)) {
+    } else if (jj_2_443(2)) {
       e = DateTimeLiteral();
     } else {
       jj_consume_token(-1);
@@ -5084,9 +5095,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * LOOKAHEAD. */
   final public SqlNode LiteralOrIntervalExpression() throws ParseException {
     final SqlNode e;
-    if (jj_2_442(2)) {
+    if (jj_2_444(2)) {
       e = IntervalLiteralOrExpression();
-    } else if (jj_2_443(2)) {
+    } else if (jj_2_445(2)) {
       e = NonIntervalLiteral();
     } else {
       jj_consume_token(-1);
@@ -5098,13 +5109,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** Parses a unsigned numeric literal */
   final public SqlNumericLiteral UnsignedNumericLiteral() throws ParseException {
-    if (jj_2_444(2)) {
+    if (jj_2_446(2)) {
       jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         {if (true) return SqlLiteral.createExactNumeric(token.image, getPos());}
-    } else if (jj_2_445(2)) {
+    } else if (jj_2_447(2)) {
       jj_consume_token(DECIMAL_NUMERIC_LITERAL);
         {if (true) return SqlLiteral.createExactNumeric(token.image, getPos());}
-    } else if (jj_2_446(2)) {
+    } else if (jj_2_448(2)) {
       jj_consume_token(APPROX_NUMERIC_LITERAL);
         {if (true) return SqlLiteral.createApproxNumeric(token.image, getPos());}
     } else {
@@ -5118,16 +5129,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlLiteral NumericLiteral() throws ParseException {
     final SqlNumericLiteral num;
     final Span s;
-    if (jj_2_447(2)) {
+    if (jj_2_449(2)) {
       jj_consume_token(PLUS);
       num = UnsignedNumericLiteral();
         {if (true) return num;}
-    } else if (jj_2_448(2)) {
+    } else if (jj_2_450(2)) {
       jj_consume_token(MINUS);
               s = span();
       num = UnsignedNumericLiteral();
         {if (true) return SqlLiteral.createNegative(num, s.end(this));}
-    } else if (jj_2_449(2)) {
+    } else if (jj_2_451(2)) {
       num = UnsignedNumericLiteral();
         {if (true) return num;}
     } else {
@@ -5139,16 +5150,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** Parse a special literal keyword */
   final public SqlLiteral SpecialLiteral() throws ParseException {
-    if (jj_2_450(2)) {
+    if (jj_2_452(2)) {
       jj_consume_token(TRUE);
              {if (true) return SqlLiteral.createBoolean(true, getPos());}
-    } else if (jj_2_451(2)) {
+    } else if (jj_2_453(2)) {
       jj_consume_token(FALSE);
               {if (true) return SqlLiteral.createBoolean(false, getPos());}
-    } else if (jj_2_452(2)) {
+    } else if (jj_2_454(2)) {
       jj_consume_token(UNKNOWN);
                 {if (true) return SqlLiteral.createUnknown(getPos());}
-    } else if (jj_2_453(2)) {
+    } else if (jj_2_455(2)) {
       jj_consume_token(NULL);
              {if (true) return SqlLiteral.createNull(getPos());}
     } else {
@@ -5176,7 +5187,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     char unicodeEscapeChar = 0;
     String charSet = null;
     SqlCharStringLiteral literal;
-    if (jj_2_458(2)) {
+    if (jj_2_460(2)) {
       jj_consume_token(BINARY_STRING_LITERAL);
         try {
             p = SqlParserUtil.trim(token.image, "xX'");
@@ -5213,13 +5224,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_459(2)) {
-      if (jj_2_454(2)) {
+    } else if (jj_2_461(2)) {
+      if (jj_2_456(2)) {
         jj_consume_token(PREFIXED_STRING_LITERAL);
           charSet = SqlParserUtil.getCharacterSet(token.image);
-      } else if (jj_2_455(2)) {
+      } else if (jj_2_457(2)) {
         jj_consume_token(QUOTED_STRING);
-      } else if (jj_2_456(2)) {
+      } else if (jj_2_458(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
@@ -5259,7 +5270,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             frags.add(literal);
             nfrags++;
       }
-      if (jj_2_457(2)) {
+      if (jj_2_459(2)) {
         jj_consume_token(UESCAPE);
         jj_consume_token(QUOTED_STRING);
             if (unicodeEscapeChar == 0) {
@@ -5285,7 +5296,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_460(2)) {
+    } else if (jj_2_462(2)) {
       jj_consume_token(BIG_QUERY_DOUBLE_QUOTED_STRING);
         p = SqlParserUtil.stripQuotes(getToken(0).image, DQ, DQ, "\\\"",
             Casing.UNCHANGED);
@@ -5295,7 +5306,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             {if (true) throw SqlUtil.newContextException(getPos(),
                 RESOURCE.unknownCharacterSet(charSet));}
         }
-    } else if (jj_2_461(2)) {
+    } else if (jj_2_463(2)) {
       jj_consume_token(BIG_QUERY_QUOTED_STRING);
         p = SqlParserUtil.stripQuotes(getToken(0).image, "'", "'", "\\'",
             Casing.UNCHANGED);
@@ -5318,36 +5329,36 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlLiteral DateTimeLiteral() throws ParseException {
     final String  p;
     final Span s;
-    if (jj_2_462(2)) {
+    if (jj_2_464(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_463(2)) {
+    } else if (jj_2_465(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_464(2)) {
+    } else if (jj_2_466(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_465(2)) {
+    } else if (jj_2_467(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_466(2)) {
+    } else if (jj_2_468(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_467(2)) {
+    } else if (jj_2_469(2)) {
       jj_consume_token(TIMESTAMP);
                   s = span();
       jj_consume_token(QUOTED_STRING);
@@ -5366,21 +5377,21 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(MULTISET);
                  s = span();
-    if (jj_2_469(2)) {
+    if (jj_2_471(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_470(2)) {
+    } else if (jj_2_472(2)) {
       jj_consume_token(LBRACKET);
       // TODO: do trigraph as well ??( ??)
               e = Expression(ExprContext.ACCEPT_NON_QUERY);
                                                        args = startList(e);
       label_43:
       while (true) {
-        if (jj_2_468(2)) {
+        if (jj_2_470(2)) {
           ;
         } else {
           break label_43;
@@ -5417,9 +5428,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       break;
     default:
       jj_la1[6] = jj_gen;
-      if (jj_2_472(2)) {
+      if (jj_2_474(2)) {
         jj_consume_token(LBRACKET);
-        if (jj_2_471(2)) {
+        if (jj_2_473(2)) {
           args = ExpressionCommaList(s, ExprContext.ACCEPT_NON_QUERY);
         } else {
               args = SqlNodeList.EMPTY;
@@ -5453,9 +5464,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       break;
     default:
       jj_la1[7] = jj_gen;
-      if (jj_2_474(2)) {
+      if (jj_2_476(2)) {
         jj_consume_token(LBRACKET);
-        if (jj_2_473(2)) {
+        if (jj_2_475(2)) {
           args = ExpressionCommaList(s, ExprContext.ACCEPT_NON_QUERY);
         } else {
               args = SqlNodeList.EMPTY;
@@ -5496,11 +5507,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     jj_consume_token(INTERVAL);
                  s = span();
-    if (jj_2_477(2)) {
-      if (jj_2_475(2)) {
+    if (jj_2_479(2)) {
+      if (jj_2_477(2)) {
         jj_consume_token(MINUS);
                   sign = -1;
-      } else if (jj_2_476(2)) {
+      } else if (jj_2_478(2)) {
         jj_consume_token(PLUS);
                  sign = 1;
       } else {
@@ -5529,11 +5540,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlNode e;
     jj_consume_token(INTERVAL);
                  s = span();
-    if (jj_2_480(2)) {
-      if (jj_2_478(2)) {
+    if (jj_2_482(2)) {
+      if (jj_2_480(2)) {
         jj_consume_token(MINUS);
                   sign = -1;
-      } else if (jj_2_479(2)) {
+      } else if (jj_2_481(2)) {
         jj_consume_token(PLUS);
                  sign = 1;
       } else {
@@ -5543,20 +5554,20 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_484(2)) {
+    if (jj_2_486(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_485(2)) {
-      if (jj_2_481(2)) {
+    } else if (jj_2_487(2)) {
+      if (jj_2_483(2)) {
         jj_consume_token(LPAREN);
         e = Expression(ExprContext.ACCEPT_SUB_QUERY);
         jj_consume_token(RPAREN);
-      } else if (jj_2_482(2)) {
+      } else if (jj_2_484(2)) {
         e = UnsignedNumericLiteral();
-      } else if (jj_2_483(2)) {
+      } else if (jj_2_485(2)) {
         e = CompoundIdentifier();
       } else {
         jj_consume_token(-1);
@@ -5576,10 +5587,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Year() throws ParseException {
-    if (jj_2_486(2)) {
+    if (jj_2_488(2)) {
       jj_consume_token(YEAR);
              {if (true) return TimeUnit.YEAR;}
-    } else if (jj_2_487(2)) {
+    } else if (jj_2_489(2)) {
       jj_consume_token(YEARS);
               {if (true) return warn(TimeUnit.YEAR);}
     } else {
@@ -5590,10 +5601,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Month() throws ParseException {
-    if (jj_2_488(2)) {
+    if (jj_2_490(2)) {
       jj_consume_token(MONTH);
               {if (true) return TimeUnit.MONTH;}
-    } else if (jj_2_489(2)) {
+    } else if (jj_2_491(2)) {
       jj_consume_token(MONTHS);
                {if (true) return warn(TimeUnit.MONTH);}
     } else {
@@ -5604,10 +5615,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Day() throws ParseException {
-    if (jj_2_490(2)) {
+    if (jj_2_492(2)) {
       jj_consume_token(DAY);
             {if (true) return TimeUnit.DAY;}
-    } else if (jj_2_491(2)) {
+    } else if (jj_2_493(2)) {
       jj_consume_token(DAYS);
              {if (true) return warn(TimeUnit.DAY);}
     } else {
@@ -5618,10 +5629,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Hour() throws ParseException {
-    if (jj_2_492(2)) {
+    if (jj_2_494(2)) {
       jj_consume_token(HOUR);
              {if (true) return TimeUnit.HOUR;}
-    } else if (jj_2_493(2)) {
+    } else if (jj_2_495(2)) {
       jj_consume_token(HOURS);
               {if (true) return warn(TimeUnit.HOUR);}
     } else {
@@ -5632,10 +5643,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Minute() throws ParseException {
-    if (jj_2_494(2)) {
+    if (jj_2_496(2)) {
       jj_consume_token(MINUTE);
                {if (true) return TimeUnit.MINUTE;}
-    } else if (jj_2_495(2)) {
+    } else if (jj_2_497(2)) {
       jj_consume_token(MINUTES);
                 {if (true) return warn(TimeUnit.MINUTE);}
     } else {
@@ -5646,10 +5657,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit Second() throws ParseException {
-    if (jj_2_496(2)) {
+    if (jj_2_498(2)) {
       jj_consume_token(SECOND);
                {if (true) return TimeUnit.SECOND;}
-    } else if (jj_2_497(2)) {
+    } else if (jj_2_499(2)) {
       jj_consume_token(SECONDS);
                 {if (true) return warn(TimeUnit.SECOND);}
     } else {
@@ -5665,31 +5676,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_511(2)) {
+    if (jj_2_513(2)) {
       start = Year();
                          s = span();
       startPrec = PrecisionOpt();
-      if (jj_2_498(2)) {
+      if (jj_2_500(2)) {
         jj_consume_token(TO);
         end = Month();
       } else {
         ;
       }
-    } else if (jj_2_512(2)) {
+    } else if (jj_2_514(2)) {
       start = Month();
                           s = span();
       startPrec = PrecisionOpt();
-    } else if (jj_2_513(2)) {
+    } else if (jj_2_515(2)) {
       start = Day();
                         s = span();
       startPrec = PrecisionOpt();
-      if (jj_2_502(2)) {
+      if (jj_2_504(2)) {
         jj_consume_token(TO);
-        if (jj_2_499(2)) {
+        if (jj_2_501(2)) {
           end = Hour();
-        } else if (jj_2_500(2)) {
+        } else if (jj_2_502(2)) {
           end = Minute();
-        } else if (jj_2_501(2)) {
+        } else if (jj_2_503(2)) {
           end = Second();
           secondFracPrec = PrecisionOpt();
         } else {
@@ -5699,17 +5710,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       } else {
         ;
       }
-    } else if (jj_2_514(2)) {
+    } else if (jj_2_516(2)) {
       start = Hour();
                          s = span();
       startPrec = PrecisionOpt();
-      if (jj_2_506(2)) {
+      if (jj_2_508(2)) {
         jj_consume_token(TO);
-        if (jj_2_504(2)) {
+        if (jj_2_506(2)) {
           end = Minute();
-        } else if (jj_2_505(2)) {
+        } else if (jj_2_507(2)) {
           end = Second();
-          if (jj_2_503(2)) {
+          if (jj_2_505(2)) {
             jj_consume_token(LPAREN);
             secondFracPrec = UnsignedIntLiteral();
             jj_consume_token(RPAREN);
@@ -5723,14 +5734,14 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       } else {
         ;
       }
-    } else if (jj_2_515(2)) {
+    } else if (jj_2_517(2)) {
       start = Minute();
                            s = span();
       startPrec = PrecisionOpt();
-      if (jj_2_508(2)) {
+      if (jj_2_510(2)) {
         jj_consume_token(TO);
         end = Second();
-        if (jj_2_507(2)) {
+        if (jj_2_509(2)) {
           jj_consume_token(LPAREN);
           secondFracPrec = UnsignedIntLiteral();
           jj_consume_token(RPAREN);
@@ -5740,13 +5751,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       } else {
         ;
       }
-    } else if (jj_2_516(2)) {
+    } else if (jj_2_518(2)) {
       start = Second();
                            s = span();
-      if (jj_2_510(2)) {
+      if (jj_2_512(2)) {
         jj_consume_token(LPAREN);
         startPrec = UnsignedIntLiteral();
-        if (jj_2_509(2)) {
+        if (jj_2_511(2)) {
           jj_consume_token(COMMA);
           secondFracPrec = UnsignedIntLiteral();
         } else {
@@ -5771,16 +5782,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_524(2)) {
-      if (jj_2_517(2)) {
+    if (jj_2_526(2)) {
+      if (jj_2_519(2)) {
         start = Year();
-      } else if (jj_2_518(2)) {
+      } else if (jj_2_520(2)) {
         start = Month();
-      } else if (jj_2_519(2)) {
+      } else if (jj_2_521(2)) {
         start = Day();
-      } else if (jj_2_520(2)) {
+      } else if (jj_2_522(2)) {
         start = Hour();
-      } else if (jj_2_521(2)) {
+      } else if (jj_2_523(2)) {
         start = Minute();
       } else {
         jj_consume_token(-1);
@@ -5788,13 +5799,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       }
           s = span();
       startPrec = PrecisionOpt();
-    } else if (jj_2_525(2)) {
+    } else if (jj_2_527(2)) {
       start = Second();
                            s = span();
-      if (jj_2_523(2)) {
+      if (jj_2_525(2)) {
         jj_consume_token(LPAREN);
         startPrec = UnsignedIntLiteral();
-        if (jj_2_522(2)) {
+        if (jj_2_524(2)) {
           jj_consume_token(COMMA);
           secondFracPrec = UnsignedIntLiteral();
         } else {
@@ -5818,55 +5829,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_526(2)) {
+    if (jj_2_528(2)) {
       jj_consume_token(MILLISECOND);
                     {if (true) return TimeUnit.MILLISECOND;}
-    } else if (jj_2_527(2)) {
+    } else if (jj_2_529(2)) {
       jj_consume_token(SECOND);
                {if (true) return TimeUnit.SECOND;}
-    } else if (jj_2_528(2)) {
+    } else if (jj_2_530(2)) {
       jj_consume_token(MINUTE);
                {if (true) return TimeUnit.MINUTE;}
-    } else if (jj_2_529(2)) {
+    } else if (jj_2_531(2)) {
       jj_consume_token(HOUR);
              {if (true) return TimeUnit.HOUR;}
-    } else if (jj_2_530(2)) {
+    } else if (jj_2_532(2)) {
       jj_consume_token(DAY);
             {if (true) return TimeUnit.DAY;}
-    } else if (jj_2_531(2)) {
+    } else if (jj_2_533(2)) {
       jj_consume_token(DOW);
             {if (true) return TimeUnit.DOW;}
-    } else if (jj_2_532(2)) {
+    } else if (jj_2_534(2)) {
       jj_consume_token(DOY);
             {if (true) return TimeUnit.DOY;}
-    } else if (jj_2_533(2)) {
+    } else if (jj_2_535(2)) {
       jj_consume_token(ISODOW);
                {if (true) return TimeUnit.ISODOW;}
-    } else if (jj_2_534(2)) {
+    } else if (jj_2_536(2)) {
       jj_consume_token(ISOYEAR);
                 {if (true) return TimeUnit.ISOYEAR;}
-    } else if (jj_2_535(2)) {
+    } else if (jj_2_537(2)) {
       jj_consume_token(WEEK);
              {if (true) return TimeUnit.WEEK;}
-    } else if (jj_2_536(2)) {
+    } else if (jj_2_538(2)) {
       jj_consume_token(MONTH);
               {if (true) return TimeUnit.MONTH;}
-    } else if (jj_2_537(2)) {
+    } else if (jj_2_539(2)) {
       jj_consume_token(QUARTER);
                 {if (true) return TimeUnit.QUARTER;}
-    } else if (jj_2_538(2)) {
+    } else if (jj_2_540(2)) {
       jj_consume_token(YEAR);
              {if (true) return TimeUnit.YEAR;}
-    } else if (jj_2_539(2)) {
+    } else if (jj_2_541(2)) {
       jj_consume_token(EPOCH);
               {if (true) return TimeUnit.EPOCH;}
-    } else if (jj_2_540(2)) {
+    } else if (jj_2_542(2)) {
       jj_consume_token(DECADE);
                {if (true) return TimeUnit.DECADE;}
-    } else if (jj_2_541(2)) {
+    } else if (jj_2_543(2)) {
       jj_consume_token(CENTURY);
                 {if (true) return TimeUnit.CENTURY;}
-    } else if (jj_2_542(2)) {
+    } else if (jj_2_544(2)) {
       jj_consume_token(MILLENNIUM);
                    {if (true) return TimeUnit.MILLENNIUM;}
     } else {
@@ -5877,67 +5888,67 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public TimeUnit TimestampInterval() throws ParseException {
-    if (jj_2_543(2)) {
+    if (jj_2_545(2)) {
       jj_consume_token(FRAC_SECOND);
                     {if (true) return TimeUnit.MICROSECOND;}
-    } else if (jj_2_544(2)) {
+    } else if (jj_2_546(2)) {
       jj_consume_token(MICROSECOND);
                     {if (true) return TimeUnit.MICROSECOND;}
-    } else if (jj_2_545(2)) {
+    } else if (jj_2_547(2)) {
       jj_consume_token(NANOSECOND);
                    {if (true) return TimeUnit.NANOSECOND;}
-    } else if (jj_2_546(2)) {
+    } else if (jj_2_548(2)) {
       jj_consume_token(SQL_TSI_FRAC_SECOND);
                             {if (true) return TimeUnit.NANOSECOND;}
-    } else if (jj_2_547(2)) {
+    } else if (jj_2_549(2)) {
       jj_consume_token(SQL_TSI_MICROSECOND);
                             {if (true) return TimeUnit.MICROSECOND;}
-    } else if (jj_2_548(2)) {
+    } else if (jj_2_550(2)) {
       jj_consume_token(SECOND);
                {if (true) return TimeUnit.SECOND;}
-    } else if (jj_2_549(2)) {
+    } else if (jj_2_551(2)) {
       jj_consume_token(SQL_TSI_SECOND);
                        {if (true) return TimeUnit.SECOND;}
-    } else if (jj_2_550(2)) {
+    } else if (jj_2_552(2)) {
       jj_consume_token(MINUTE);
                {if (true) return TimeUnit.MINUTE;}
-    } else if (jj_2_551(2)) {
+    } else if (jj_2_553(2)) {
       jj_consume_token(SQL_TSI_MINUTE);
                        {if (true) return TimeUnit.MINUTE;}
-    } else if (jj_2_552(2)) {
+    } else if (jj_2_554(2)) {
       jj_consume_token(HOUR);
              {if (true) return TimeUnit.HOUR;}
-    } else if (jj_2_553(2)) {
+    } else if (jj_2_555(2)) {
       jj_consume_token(SQL_TSI_HOUR);
                      {if (true) return TimeUnit.HOUR;}
-    } else if (jj_2_554(2)) {
+    } else if (jj_2_556(2)) {
       jj_consume_token(DAY);
             {if (true) return TimeUnit.DAY;}
-    } else if (jj_2_555(2)) {
+    } else if (jj_2_557(2)) {
       jj_consume_token(SQL_TSI_DAY);
                     {if (true) return TimeUnit.DAY;}
-    } else if (jj_2_556(2)) {
+    } else if (jj_2_558(2)) {
       jj_consume_token(WEEK);
              {if (true) return TimeUnit.WEEK;}
-    } else if (jj_2_557(2)) {
+    } else if (jj_2_559(2)) {
       jj_consume_token(SQL_TSI_WEEK);
                      {if (true) return TimeUnit.WEEK;}
-    } else if (jj_2_558(2)) {
+    } else if (jj_2_560(2)) {
       jj_consume_token(MONTH);
               {if (true) return TimeUnit.MONTH;}
-    } else if (jj_2_559(2)) {
+    } else if (jj_2_561(2)) {
       jj_consume_token(SQL_TSI_MONTH);
                       {if (true) return TimeUnit.MONTH;}
-    } else if (jj_2_560(2)) {
+    } else if (jj_2_562(2)) {
       jj_consume_token(QUARTER);
                 {if (true) return TimeUnit.QUARTER;}
-    } else if (jj_2_561(2)) {
+    } else if (jj_2_563(2)) {
       jj_consume_token(SQL_TSI_QUARTER);
                         {if (true) return TimeUnit.QUARTER;}
-    } else if (jj_2_562(2)) {
+    } else if (jj_2_564(2)) {
       jj_consume_token(YEAR);
              {if (true) return TimeUnit.YEAR;}
-    } else if (jj_2_563(2)) {
+    } else if (jj_2_565(2)) {
       jj_consume_token(SQL_TSI_YEAR);
                      {if (true) return TimeUnit.YEAR;}
     } else {
@@ -5968,41 +5979,41 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     char unicodeEscapeChar = BACKSLASH;
     final SqlParserPos pos;
     final Span span;
-    if (jj_2_565(2)) {
+    if (jj_2_567(2)) {
       jj_consume_token(IDENTIFIER);
             id = unquotedIdentifier();
             pos = getPos();
-    } else if (jj_2_566(2)) {
+    } else if (jj_2_568(2)) {
       jj_consume_token(HYPHENATED_IDENTIFIER);
             id = unquotedIdentifier();
             pos = getPos();
-    } else if (jj_2_567(2)) {
+    } else if (jj_2_569(2)) {
       jj_consume_token(QUOTED_IDENTIFIER);
             id = SqlParserUtil.stripQuotes(getToken(0).image, DQ, DQ, DQDQ,
                 quotedCasing);
             pos = getPos().withQuoting(true);
-    } else if (jj_2_568(2)) {
+    } else if (jj_2_570(2)) {
       jj_consume_token(BACK_QUOTED_IDENTIFIER);
             id = SqlParserUtil.stripQuotes(getToken(0).image, "`", "`", "``",
                 quotedCasing);
             pos = getPos().withQuoting(true);
-    } else if (jj_2_569(2)) {
+    } else if (jj_2_571(2)) {
       jj_consume_token(BIG_QUERY_BACK_QUOTED_IDENTIFIER);
             id = SqlParserUtil.stripQuotes(getToken(0).image, "`", "`", "\\`",
                 quotedCasing);
             pos = getPos().withQuoting(true);
-    } else if (jj_2_570(2)) {
+    } else if (jj_2_572(2)) {
       jj_consume_token(BRACKET_QUOTED_IDENTIFIER);
             id = SqlParserUtil.stripQuotes(getToken(0).image, "[", "]", "]]",
                 quotedCasing);
             pos = getPos().withQuoting(true);
-    } else if (jj_2_571(2)) {
+    } else if (jj_2_573(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_564(2)) {
+      if (jj_2_566(2)) {
         jj_consume_token(UESCAPE);
         jj_consume_token(QUOTED_STRING);
                 String s = SqlParserUtil.parseString(token.image);
@@ -6014,7 +6025,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_572(2)) {
+    } else if (jj_2_574(2)) {
       id = NonReservedKeyWord();
             pos = getPos();
     } else {
@@ -6099,7 +6110,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                              list.add(id);
     label_44:
     while (true) {
-      if (jj_2_573(2)) {
+      if (jj_2_575(2)) {
         ;
       } else {
         break label_44;
@@ -6135,10 +6146,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlNodeList SimpleIdentifierOrList() throws ParseException {
     SqlIdentifier id;
     SqlNodeList list;
-    if (jj_2_574(2)) {
+    if (jj_2_576(2)) {
       id = SimpleIdentifier();
         {if (true) return new SqlNodeList(Collections.singletonList(id), id.getParserPosition());}
-    } else if (jj_2_575(2)) {
+    } else if (jj_2_577(2)) {
       list = ParenthesizedSimpleIdentifierList();
         {if (true) return list;}
     } else {
@@ -6158,7 +6169,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     IdentifierSegment(nameList, posList);
     label_45:
     while (true) {
-      if (jj_2_576(2)) {
+      if (jj_2_578(2)) {
         ;
       } else {
         break label_45;
@@ -6166,7 +6177,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(DOT);
       IdentifierSegment(nameList, posList);
     }
-    if (jj_2_577(2)) {
+    if (jj_2_579(2)) {
       jj_consume_token(DOT);
       jj_consume_token(STAR);
             star = true;
@@ -6192,7 +6203,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     TableIdentifierSegment(nameList, posList);
     label_46:
     while (true) {
-      if (jj_2_578(2)) {
+      if (jj_2_580(2)) {
         ;
       } else {
         break label_46;
@@ -6212,7 +6223,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     CompoundIdentifierType(list, extendList);
     label_47:
     while (true) {
-      if (jj_2_579(2)) {
+      if (jj_2_581(2)) {
         ;
       } else {
         break label_47;
@@ -6267,10 +6278,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public int IntLiteral() throws ParseException {
     Token t;
-    if (jj_2_582(2)) {
-      if (jj_2_580(2)) {
+    if (jj_2_584(2)) {
+      if (jj_2_582(2)) {
         t = jj_consume_token(UNSIGNED_INTEGER_LITERAL);
-      } else if (jj_2_581(2)) {
+      } else if (jj_2_583(2)) {
         jj_consume_token(PLUS);
         t = jj_consume_token(UNSIGNED_INTEGER_LITERAL);
       } else {
@@ -6283,7 +6294,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_583(2)) {
+    } else if (jj_2_585(2)) {
       jj_consume_token(MINUS);
       t = jj_consume_token(UNSIGNED_INTEGER_LITERAL);
         try {
@@ -6307,7 +6318,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         s = Span.of(typeName.getParserPos());
     label_48:
     while (true) {
-      if (jj_2_584(2)) {
+      if (jj_2_586(2)) {
         ;
       } else {
         break label_48;
@@ -6324,11 +6335,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlTypeNameSpec typeNameSpec;
     final SqlIdentifier typeName;
     final Span s = Span.of();
-    if (jj_2_585(2)) {
+    if (jj_2_587(2)) {
       typeNameSpec = SqlTypeName(s);
-    } else if (jj_2_586(2)) {
+    } else if (jj_2_588(2)) {
       typeNameSpec = RowTypeName();
-    } else if (jj_2_587(2)) {
+    } else if (jj_2_589(2)) {
       typeName = CompoundIdentifier();
             typeNameSpec = new SqlUserDefinedTypeNameSpec(typeName, s.end(this));
     } else {
@@ -6342,15 +6353,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_588(2)) {
+    if (jj_2_590(2)) {
       sqlTypeNameSpec = SqlTypeName1(s);
-    } else if (jj_2_589(2)) {
+    } else if (jj_2_591(2)) {
       sqlTypeNameSpec = SqlTypeName2(s);
-    } else if (jj_2_590(2)) {
+    } else if (jj_2_592(2)) {
       sqlTypeNameSpec = SqlTypeName3(s);
-    } else if (jj_2_591(2)) {
+    } else if (jj_2_593(2)) {
       sqlTypeNameSpec = CharacterTypeName(s);
-    } else if (jj_2_592(2)) {
+    } else if (jj_2_594(2)) {
       sqlTypeNameSpec = DateTimeTypeName();
     } else {
       jj_consume_token(-1);
@@ -6364,48 +6375,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_596(2)) {
+    if (jj_2_598(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_597(2)) {
+    } else if (jj_2_599(2)) {
       jj_consume_token(BOOLEAN);
                     s.add(this); sqlTypeName = SqlTypeName.BOOLEAN;
-    } else if (jj_2_598(2)) {
-      if (jj_2_593(2)) {
+    } else if (jj_2_600(2)) {
+      if (jj_2_595(2)) {
         jj_consume_token(INTEGER);
-      } else if (jj_2_594(2)) {
+      } else if (jj_2_596(2)) {
         jj_consume_token(INT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                 s.add(this); sqlTypeName = SqlTypeName.INTEGER;
-    } else if (jj_2_599(2)) {
+    } else if (jj_2_601(2)) {
       jj_consume_token(TINYINT);
                     s.add(this); sqlTypeName = SqlTypeName.TINYINT;
-    } else if (jj_2_600(2)) {
+    } else if (jj_2_602(2)) {
       jj_consume_token(SMALLINT);
                      s.add(this); sqlTypeName = SqlTypeName.SMALLINT;
-    } else if (jj_2_601(2)) {
+    } else if (jj_2_603(2)) {
       jj_consume_token(BIGINT);
                    s.add(this); sqlTypeName = SqlTypeName.BIGINT;
-    } else if (jj_2_602(2)) {
+    } else if (jj_2_604(2)) {
       jj_consume_token(REAL);
                  s.add(this); sqlTypeName = SqlTypeName.REAL;
-    } else if (jj_2_603(2)) {
+    } else if (jj_2_605(2)) {
       jj_consume_token(DOUBLE);
                    s.add(this);
-      if (jj_2_595(2)) {
+      if (jj_2_597(2)) {
         jj_consume_token(PRECISION);
       } else {
         ;
       }
                           sqlTypeName = SqlTypeName.DOUBLE;
-    } else if (jj_2_604(2)) {
+    } else if (jj_2_606(2)) {
       jj_consume_token(FLOAT);
                   s.add(this); sqlTypeName = SqlTypeName.FLOAT;
     } else {
@@ -6420,16 +6431,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_606(2)) {
+    if (jj_2_608(2)) {
       jj_consume_token(BINARY);
                    s.add(this);
-      if (jj_2_605(2)) {
+      if (jj_2_607(2)) {
         jj_consume_token(VARYING);
                         sqlTypeName = SqlTypeName.VARBINARY;
       } else {
               sqlTypeName = SqlTypeName.BINARY;
       }
-    } else if (jj_2_607(2)) {
+    } else if (jj_2_609(2)) {
       jj_consume_token(VARBINARY);
                       s.add(this); sqlTypeName = SqlTypeName.VARBINARY;
     } else {
@@ -6446,29 +6457,29 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlTypeName sqlTypeName;
     int precision = -1;
     int scale = -1;
-    if (jj_2_611(2)) {
-      if (jj_2_608(2)) {
+    if (jj_2_613(2)) {
+      if (jj_2_610(2)) {
         jj_consume_token(DECIMAL);
-      } else if (jj_2_609(2)) {
+      } else if (jj_2_611(2)) {
         jj_consume_token(DEC);
-      } else if (jj_2_610(2)) {
+      } else if (jj_2_612(2)) {
         jj_consume_token(NUMERIC);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                           s.add(this); sqlTypeName = SqlTypeName.DECIMAL;
-    } else if (jj_2_612(2)) {
+    } else if (jj_2_614(2)) {
       jj_consume_token(ANY);
                 s.add(this); sqlTypeName = SqlTypeName.ANY;
     } else {
       jj_consume_token(-1);
       throw new ParseException();
     }
-    if (jj_2_614(2)) {
+    if (jj_2_616(2)) {
       jj_consume_token(LPAREN);
       precision = UnsignedIntLiteral();
-      if (jj_2_613(2)) {
+      if (jj_2_615(2)) {
         jj_consume_token(COMMA);
         scale = UnsignedIntLiteral();
       } else {
@@ -6484,213 +6495,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_649(2)) {
-      if (jj_2_615(2)) {
+    if (jj_2_651(2)) {
+      if (jj_2_617(2)) {
         jj_consume_token(SQL_CHAR);
-      } else if (jj_2_616(2)) {
+      } else if (jj_2_618(2)) {
         jj_consume_token(CHAR);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                             {if (true) return SqlJdbcDataTypeName.SQL_CHAR;}
-    } else if (jj_2_650(2)) {
-      if (jj_2_617(2)) {
+    } else if (jj_2_652(2)) {
+      if (jj_2_619(2)) {
         jj_consume_token(SQL_VARCHAR);
-      } else if (jj_2_618(2)) {
+      } else if (jj_2_620(2)) {
         jj_consume_token(VARCHAR);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_VARCHAR;}
-    } else if (jj_2_651(2)) {
-      if (jj_2_619(2)) {
+    } else if (jj_2_653(2)) {
+      if (jj_2_621(2)) {
         jj_consume_token(SQL_DATE);
-      } else if (jj_2_620(2)) {
+      } else if (jj_2_622(2)) {
         jj_consume_token(DATE);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                             {if (true) return SqlJdbcDataTypeName.SQL_DATE;}
-    } else if (jj_2_652(2)) {
-      if (jj_2_621(2)) {
+    } else if (jj_2_654(2)) {
+      if (jj_2_623(2)) {
         jj_consume_token(SQL_TIME);
-      } else if (jj_2_622(2)) {
+      } else if (jj_2_624(2)) {
         jj_consume_token(TIME);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                             {if (true) return SqlJdbcDataTypeName.SQL_TIME;}
-    } else if (jj_2_653(2)) {
-      if (jj_2_623(2)) {
+    } else if (jj_2_655(2)) {
+      if (jj_2_625(2)) {
         jj_consume_token(SQL_TIMESTAMP);
-      } else if (jj_2_624(2)) {
+      } else if (jj_2_626(2)) {
         jj_consume_token(TIMESTAMP);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                       {if (true) return SqlJdbcDataTypeName.SQL_TIMESTAMP;}
-    } else if (jj_2_654(2)) {
-      if (jj_2_625(2)) {
+    } else if (jj_2_656(2)) {
+      if (jj_2_627(2)) {
         jj_consume_token(SQL_DECIMAL);
-      } else if (jj_2_626(2)) {
+      } else if (jj_2_628(2)) {
         jj_consume_token(DECIMAL);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_DECIMAL;}
-    } else if (jj_2_655(2)) {
-      if (jj_2_627(2)) {
+    } else if (jj_2_657(2)) {
+      if (jj_2_629(2)) {
         jj_consume_token(SQL_NUMERIC);
-      } else if (jj_2_628(2)) {
+      } else if (jj_2_630(2)) {
         jj_consume_token(NUMERIC);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_NUMERIC;}
-    } else if (jj_2_656(2)) {
-      if (jj_2_629(2)) {
+    } else if (jj_2_658(2)) {
+      if (jj_2_631(2)) {
         jj_consume_token(SQL_BOOLEAN);
-      } else if (jj_2_630(2)) {
+      } else if (jj_2_632(2)) {
         jj_consume_token(BOOLEAN);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_BOOLEAN;}
-    } else if (jj_2_657(2)) {
-      if (jj_2_631(2)) {
+    } else if (jj_2_659(2)) {
+      if (jj_2_633(2)) {
         jj_consume_token(SQL_INTEGER);
-      } else if (jj_2_632(2)) {
+      } else if (jj_2_634(2)) {
         jj_consume_token(INTEGER);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_INTEGER;}
-    } else if (jj_2_658(2)) {
-      if (jj_2_633(2)) {
+    } else if (jj_2_660(2)) {
+      if (jj_2_635(2)) {
         jj_consume_token(SQL_BINARY);
-      } else if (jj_2_634(2)) {
+      } else if (jj_2_636(2)) {
         jj_consume_token(BINARY);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                 {if (true) return SqlJdbcDataTypeName.SQL_BINARY;}
-    } else if (jj_2_659(2)) {
-      if (jj_2_635(2)) {
+    } else if (jj_2_661(2)) {
+      if (jj_2_637(2)) {
         jj_consume_token(SQL_VARBINARY);
-      } else if (jj_2_636(2)) {
+      } else if (jj_2_638(2)) {
         jj_consume_token(VARBINARY);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                       {if (true) return SqlJdbcDataTypeName.SQL_VARBINARY;}
-    } else if (jj_2_660(2)) {
-      if (jj_2_637(2)) {
+    } else if (jj_2_662(2)) {
+      if (jj_2_639(2)) {
         jj_consume_token(SQL_TINYINT);
-      } else if (jj_2_638(2)) {
+      } else if (jj_2_640(2)) {
         jj_consume_token(TINYINT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                   {if (true) return SqlJdbcDataTypeName.SQL_TINYINT;}
-    } else if (jj_2_661(2)) {
-      if (jj_2_639(2)) {
+    } else if (jj_2_663(2)) {
+      if (jj_2_641(2)) {
         jj_consume_token(SQL_SMALLINT);
-      } else if (jj_2_640(2)) {
+      } else if (jj_2_642(2)) {
         jj_consume_token(SMALLINT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                     {if (true) return SqlJdbcDataTypeName.SQL_SMALLINT;}
-    } else if (jj_2_662(2)) {
-      if (jj_2_641(2)) {
+    } else if (jj_2_664(2)) {
+      if (jj_2_643(2)) {
         jj_consume_token(SQL_BIGINT);
-      } else if (jj_2_642(2)) {
+      } else if (jj_2_644(2)) {
         jj_consume_token(BIGINT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                 {if (true) return SqlJdbcDataTypeName.SQL_BIGINT;}
-    } else if (jj_2_663(2)) {
-      if (jj_2_643(2)) {
+    } else if (jj_2_665(2)) {
+      if (jj_2_645(2)) {
         jj_consume_token(SQL_REAL);
-      } else if (jj_2_644(2)) {
+      } else if (jj_2_646(2)) {
         jj_consume_token(REAL);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                            {if (true) return SqlJdbcDataTypeName.SQL_REAL;}
-    } else if (jj_2_664(2)) {
-      if (jj_2_645(2)) {
+    } else if (jj_2_666(2)) {
+      if (jj_2_647(2)) {
         jj_consume_token(SQL_DOUBLE);
-      } else if (jj_2_646(2)) {
+      } else if (jj_2_648(2)) {
         jj_consume_token(DOUBLE);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                 {if (true) return SqlJdbcDataTypeName.SQL_DOUBLE;}
-    } else if (jj_2_665(2)) {
-      if (jj_2_647(2)) {
+    } else if (jj_2_667(2)) {
+      if (jj_2_649(2)) {
         jj_consume_token(SQL_FLOAT);
-      } else if (jj_2_648(2)) {
+      } else if (jj_2_650(2)) {
         jj_consume_token(FLOAT);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                               {if (true) return SqlJdbcDataTypeName.SQL_FLOAT;}
-    } else if (jj_2_666(2)) {
+    } else if (jj_2_668(2)) {
       jj_consume_token(SQL_INTERVAL_YEAR);
                           {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_YEAR;}
-    } else if (jj_2_667(2)) {
+    } else if (jj_2_669(2)) {
       jj_consume_token(SQL_INTERVAL_YEAR_TO_MONTH);
                                    {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_YEAR_TO_MONTH;}
-    } else if (jj_2_668(2)) {
+    } else if (jj_2_670(2)) {
       jj_consume_token(SQL_INTERVAL_MONTH);
                            {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_MONTH;}
-    } else if (jj_2_669(2)) {
+    } else if (jj_2_671(2)) {
       jj_consume_token(SQL_INTERVAL_DAY);
                          {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_DAY;}
-    } else if (jj_2_670(2)) {
+    } else if (jj_2_672(2)) {
       jj_consume_token(SQL_INTERVAL_DAY_TO_HOUR);
                                  {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_DAY_TO_HOUR;}
-    } else if (jj_2_671(2)) {
+    } else if (jj_2_673(2)) {
       jj_consume_token(SQL_INTERVAL_DAY_TO_MINUTE);
                                    {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_DAY_TO_MINUTE;}
-    } else if (jj_2_672(2)) {
+    } else if (jj_2_674(2)) {
       jj_consume_token(SQL_INTERVAL_DAY_TO_SECOND);
                                    {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_DAY_TO_SECOND;}
-    } else if (jj_2_673(2)) {
+    } else if (jj_2_675(2)) {
       jj_consume_token(SQL_INTERVAL_HOUR);
                           {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_HOUR;}
-    } else if (jj_2_674(2)) {
+    } else if (jj_2_676(2)) {
       jj_consume_token(SQL_INTERVAL_HOUR_TO_MINUTE);
                                     {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_HOUR_TO_MINUTE;}
-    } else if (jj_2_675(2)) {
+    } else if (jj_2_677(2)) {
       jj_consume_token(SQL_INTERVAL_HOUR_TO_SECOND);
                                     {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_HOUR_TO_SECOND;}
-    } else if (jj_2_676(2)) {
+    } else if (jj_2_678(2)) {
       jj_consume_token(SQL_INTERVAL_MINUTE);
                             {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_MINUTE;}
-    } else if (jj_2_677(2)) {
+    } else if (jj_2_679(2)) {
       jj_consume_token(SQL_INTERVAL_MINUTE_TO_SECOND);
                                       {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_MINUTE_TO_SECOND;}
-    } else if (jj_2_678(2)) {
+    } else if (jj_2_680(2)) {
       jj_consume_token(SQL_INTERVAL_SECOND);
                             {if (true) return SqlJdbcDataTypeName.SQL_INTERVAL_SECOND;}
     } else {
@@ -6713,10 +6724,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 */
   final public SqlTypeNameSpec CollectionsTypeName(SqlTypeNameSpec elementTypeName) throws ParseException {
     final SqlTypeName collectionTypeName;
-    if (jj_2_679(2)) {
+    if (jj_2_681(2)) {
       jj_consume_token(MULTISET);
                      collectionTypeName = SqlTypeName.MULTISET;
-    } else if (jj_2_680(2)) {
+    } else if (jj_2_682(2)) {
       jj_consume_token(ARRAY);
                   collectionTypeName = SqlTypeName.ARRAY;
     } else {
@@ -6732,10 +6743,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 * Parse a nullable option, default is true.
 */
   final public boolean NullableOptDefaultTrue() throws ParseException {
-    if (jj_2_681(2)) {
+    if (jj_2_683(2)) {
       jj_consume_token(NULL);
              {if (true) return true;}
-    } else if (jj_2_682(2)) {
+    } else if (jj_2_684(2)) {
       jj_consume_token(NOT);
       jj_consume_token(NULL);
                    {if (true) return false;}
@@ -6749,10 +6760,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 * Parse a nullable option, default is false.
 */
   final public boolean NullableOptDefaultFalse() throws ParseException {
-    if (jj_2_683(2)) {
+    if (jj_2_685(2)) {
       jj_consume_token(NULL);
              {if (true) return true;}
-    } else if (jj_2_684(2)) {
+    } else if (jj_2_686(2)) {
       jj_consume_token(NOT);
       jj_consume_token(NULL);
                    {if (true) return false;}
@@ -6778,7 +6789,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         fieldTypes.add(fType.withNullable(nullable, getPos()));
     label_49:
     while (true) {
-      if (jj_2_685(2)) {
+      if (jj_2_687(2)) {
         ;
       } else {
         break label_49;
@@ -6815,23 +6826,23 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     int precision = -1;
     final SqlTypeName sqlTypeName;
     String charSetName = null;
-    if (jj_2_689(2)) {
-      if (jj_2_686(2)) {
+    if (jj_2_691(2)) {
+      if (jj_2_688(2)) {
         jj_consume_token(CHARACTER);
-      } else if (jj_2_687(2)) {
+      } else if (jj_2_689(2)) {
         jj_consume_token(CHAR);
       } else {
         jj_consume_token(-1);
         throw new ParseException();
       }
                                  s.add(this);
-      if (jj_2_688(2)) {
+      if (jj_2_690(2)) {
         jj_consume_token(VARYING);
                         sqlTypeName = SqlTypeName.VARCHAR;
       } else {
               sqlTypeName = SqlTypeName.CHAR;
       }
-    } else if (jj_2_690(2)) {
+    } else if (jj_2_692(2)) {
       jj_consume_token(VARCHAR);
                     s.add(this); sqlTypeName = SqlTypeName.VARCHAR;
     } else {
@@ -6839,7 +6850,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       throw new ParseException();
     }
     precision = PrecisionOpt();
-    if (jj_2_691(2)) {
+    if (jj_2_693(2)) {
       jj_consume_token(CHARACTER);
       jj_consume_token(SET);
       charSetName = Identifier();
@@ -6858,11 +6869,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlTypeName typeName;
     boolean withLocalTimeZone = false;
     final Span s;
-    if (jj_2_692(2)) {
+    if (jj_2_694(2)) {
       jj_consume_token(DATE);
         typeName = SqlTypeName.DATE;
         {if (true) return new SqlBasicTypeNameSpec(typeName, getPos());}
-    } else if (jj_2_693(2)) {
+    } else if (jj_2_695(2)) {
       jj_consume_token(TIME);
              s = span();
       precision = PrecisionOpt();
@@ -6873,7 +6884,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_694(2)) {
+    } else if (jj_2_696(2)) {
       jj_consume_token(TIMESTAMP);
                   s = span();
       precision = PrecisionOpt();
@@ -6894,7 +6905,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_695(2)) {
+    if (jj_2_697(2)) {
       jj_consume_token(LPAREN);
       precision = UnsignedIntLiteral();
       jj_consume_token(RPAREN);
@@ -6915,12 +6926,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_696(3)) {
+    if (jj_2_698(3)) {
       jj_consume_token(WITHOUT);
       jj_consume_token(TIME);
       jj_consume_token(ZONE);
                               {if (true) return false;}
-    } else if (jj_2_697(2)) {
+    } else if (jj_2_699(2)) {
       jj_consume_token(WITH);
       jj_consume_token(LOCAL);
       jj_consume_token(TIME);
@@ -6964,17 +6975,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     TimeUnit interval;
     final TimeUnit unit;
     final SqlNode node;
-    if (jj_2_723(2)) {
+    if (jj_2_725(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_698(2)) {
+      if (jj_2_700(2)) {
         dt = DataType();
                               args.add(dt);
-      } else if (jj_2_699(2)) {
+      } else if (jj_2_701(2)) {
         jj_consume_token(INTERVAL);
         e = IntervalQualifier();
                                                  args.add(e);
@@ -6984,17 +6995,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_724(2)) {
+    } else if (jj_2_726(2)) {
       jj_consume_token(EXTRACT);
             s = span();
       jj_consume_token(LPAREN);
-      if (jj_2_700(2)) {
+      if (jj_2_702(2)) {
         jj_consume_token(NANOSECOND);
                            unit = TimeUnit.NANOSECOND;
-      } else if (jj_2_701(2)) {
+      } else if (jj_2_703(2)) {
         jj_consume_token(MICROSECOND);
                             unit = TimeUnit.MICROSECOND;
-      } else if (jj_2_702(2)) {
+      } else if (jj_2_704(2)) {
         unit = TimeUnit();
       } else {
         jj_consume_token(-1);
@@ -7006,7 +7017,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_725(2)) {
+    } else if (jj_2_727(2)) {
       jj_consume_token(POSITION);
                      s = span();
       jj_consume_token(LPAREN);
@@ -7018,7 +7029,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(IN);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                                                        args.add(e);
-      if (jj_2_703(2)) {
+      if (jj_2_705(2)) {
         jj_consume_token(FROM);
         e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                                                            args.add(e);
@@ -7027,7 +7038,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_726(2)) {
+    } else if (jj_2_728(2)) {
       jj_consume_token(CONVERT);
                     s = span();
       jj_consume_token(LPAREN);
@@ -7038,23 +7049,23 @@ 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_727(2)) {
+    } else if (jj_2_729(2)) {
       jj_consume_token(TRANSLATE);
                       s = span();
       jj_consume_token(LPAREN);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
             args = startList(e);
-      if (jj_2_705(2)) {
+      if (jj_2_707(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_706(2)) {
+      } else if (jj_2_708(2)) {
         label_50:
         while (true) {
-          if (jj_2_704(2)) {
+          if (jj_2_706(2)) {
             ;
           } else {
             break label_50;
@@ -7070,7 +7081,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(-1);
         throw new ParseException();
       }
-    } else if (jj_2_728(2)) {
+    } else if (jj_2_730(2)) {
       jj_consume_token(OVERLAY);
                     s = span();
       jj_consume_token(LPAREN);
@@ -7082,7 +7093,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       jj_consume_token(FROM);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
             args.add(e);
-      if (jj_2_707(2)) {
+      if (jj_2_709(2)) {
         jj_consume_token(FOR);
         e = Expression(ExprContext.ACCEPT_SUB_QUERY);
                 args.add(e);
@@ -7091,15 +7102,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_729(2)) {
+    } else if (jj_2_731(2)) {
       jj_consume_token(FLOOR);
                   s = span();
       e = FloorCeilOptions(s, true);
             {if (true) return e;}
-    } else if (jj_2_730(2)) {
-      if (jj_2_708(2)) {
+    } else if (jj_2_732(2)) {
+      if (jj_2_710(2)) {
         jj_consume_token(CEIL);
-      } else if (jj_2_709(2)) {
+      } else if (jj_2_711(2)) {
         jj_consume_token(CEILING);
       } else {
         jj_consume_token(-1);
@@ -7108,15 +7119,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
                                 s = span();
       e = FloorCeilOptions(s, false);
             {if (true) return e;}
-    } else if (jj_2_731(2)) {
+    } else if (jj_2_733(2)) {
       jj_consume_token(SUBSTRING);
                       s = span();
       jj_consume_token(LPAREN);
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
           args = startList(e);
-      if (jj_2_710(2)) {
+      if (jj_2_712(2)) {
         jj_consume_token(FROM);
-      } else if (jj_2_711(2)) {
+      } else if (jj_2_713(2)) {
         jj_consume_token(COMMA);
       } else {
         jj_consume_token(-1);
@@ -7124,10 +7135,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       }
       e = Expression(ExprContext.ACCEPT_SUB_QUERY);
           args.add(e);
-      if (jj_2_714(2)) {
-        if (jj_2_712(2)) {
+      if (jj_2_716(2)) {
+        if (jj_2_714(2)) {
           jj_consume_token(FOR);
-        } else if (jj_2_713(2)) {
+        } else if (jj_2_715(2)) {
           jj_consume_token(COMMA);
         } else {
           jj_consume_token(-1);
@@ -7141,23 +7152,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_732(2)) {
+    } else if (jj_2_734(2)) {
       jj_consume_token(TRIM);
             SqlLiteral flag = null;
             SqlNode trimChars = null;
             s = span();
       jj_consume_token(LPAREN);
-      if (jj_2_722(2)) {
-        if (jj_2_718(2)) {
-          if (jj_2_715(2)) {
+      if (jj_2_724(2)) {
+        if (jj_2_720(2)) {
+          if (jj_2_717(2)) {
             jj_consume_token(BOTH);
                     s.add(this);
                     flag = SqlTrimFunction.Flag.BOTH.symbol(getPos());
-          } else if (jj_2_716(2)) {
+          } else if (jj_2_718(2)) {
             jj_consume_token(TRAILING);
                     s.add(this);
                     flag = SqlTrimFunction.Flag.TRAILING.symbol(getPos());
-          } else if (jj_2_717(2)) {
+          } else if (jj_2_719(2)) {
             jj_consume_token(LEADING);
                     s.add(this);
                     flag = SqlTrimFunction.Flag.LEADING.symbol(getPos());
@@ -7168,18 +7179,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         } else {
           ;
         }
-        if (jj_2_719(2)) {
+        if (jj_2_721(2)) {
           trimChars = Expression(ExprContext.ACCEPT_SUB_QUERY);
         } else {
           ;
         }
-        if (jj_2_720(2)) {
+        if (jj_2_722(2)) {
           jj_consume_token(FROM);
                     if (null == flag && null == trimChars) {
                         {if (true) throw SqlUtil.newContextException(getPos(),
                             RESOURCE.illegalFromEmpty());}
                     }
-        } else if (jj_2_721(2)) {
+        } else if (jj_2_723(2)) {
           jj_consume_token(RPAREN);
                     // This is to handle the case of TRIM(x)
                     // (FRG-191).
@@ -7207,37 +7218,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_733(2)) {
+    } else if (jj_2_735(2)) {
       node = TimestampAddFunctionCall();
                                             {if (true) return node;}
-    } else if (jj_2_734(2)) {
+    } else if (jj_2_736(2)) {
       node = TimestampDiffFunctionCall();
                                              {if (true) return node;}
-    } else if (jj_2_735(2)) {
+    } else if (jj_2_737(2)) {
       node = MatchRecognizeFunctionCall();
                                               {if (true) return node;}
-    } else if (jj_2_736(2)) {
+    } else if (jj_2_738(2)) {
       node = JsonExistsFunctionCall();
                                           {if (true) return node;}
-    } else if (jj_2_737(2)) {
+    } else if (jj_2_739(2)) {
       node = JsonValueFunctionCall();
                                          {if (true) return node;}
-    } else if (jj_2_738(2)) {
+    } else if (jj_2_740(2)) {
       node = JsonQueryFunctionCall();
                                          {if (true) return node;}
-    } else if (jj_2_739(2)) {
+    } else if (jj_2_741(2)) {
       node = JsonObjectFunctionCall();
                                           {if (true) return node;}
-    } else if (jj_2_740(2)) {
+    } else if (jj_2_742(2)) {
       node = JsonObjectAggFunctionCall();
                                              {if (true) return node;}
-    } else if (jj_2_741(2)) {
+    } else if (jj_2_743(2)) {
       node = JsonArrayFunctionCall();
                                          {if (true) return node;}
-    } else if (jj_2_742(2)) {
+    } else if (jj_2_744(2)) {
       node = JsonArrayAggFunctionCall();
                                             {if (true) return node;}
-    } else if (jj_2_743(2)) {
+    } else if (jj_2_745(2)) {
       node = GroupByWindowingCall();
                                         {if (true) return node;}
     } else {
@@ -7249,15 +7260,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlJsonEncoding JsonRepresentation() throws ParseException {
     jj_consume_token(JSON);
-    if (jj_2_747(2)) {
+    if (jj_2_749(2)) {
       jj_consume_token(ENCODING);
-      if (jj_2_744(2)) {
+      if (jj_2_746(2)) {
         jj_consume_token(UTF8);
                      {if (true) return SqlJsonEncoding.UTF8;}
-      } else if (jj_2_745(2)) {
+      } else if (jj_2_747(2)) {
         jj_consume_token(UTF16);
                       {if (true) return SqlJsonEncoding.UTF16;}
-      } else if (jj_2_746(2)) {
+      } else if (jj_2_748(2)) {
         jj_consume_token(UTF32);
                       {if (true) return SqlJsonEncoding.UTF32;}
       } else {
@@ -7287,7 +7298,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlDataTypeSpec JsonOutputClause() throws ParseException {
     SqlDataTypeSpec dataType;
     dataType = JsonReturningClause();
-    if (jj_2_748(2)) {
+    if (jj_2_750(2)) {
       jj_consume_token(FORMAT);
       JsonRepresentation();
     } else {
@@ -7312,7 +7323,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(COMMA);
     e = Expression(ExprContext.ACCEPT_NON_QUERY);
             args.add(e);
-    if (jj_2_750(2)) {
+    if (jj_2_752(2)) {
       jj_consume_token(PASSING);
       e = Expression(ExprContext.ACCEPT_NON_QUERY);
 
@@ -7321,7 +7332,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
       label_51:
       while (true) {
-        if (jj_2_749(2)) {
+        if (jj_2_751(2)) {
           ;
         } else {
           break label_51;
@@ -7341,16 +7352,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlJsonExistsErrorBehavior JsonExistsErrorBehavior() throws ParseException {
-    if (jj_2_751(2)) {
+    if (jj_2_753(2)) {
       jj_consume_token(TRUE);
              {if (true) return SqlJsonExistsErrorBehavior.TRUE;}
-    } else if (jj_2_752(2)) {
+    } else if (jj_2_754(2)) {
       jj_consume_token(FALSE);
               {if (true) return SqlJsonExistsErrorBehavior.FALSE;}
-    } else if (jj_2_753(2)) {
+    } else if (jj_2_755(2)) {
       jj_consume_token(UNKNOWN);
                 {if (true) return SqlJsonExistsErrorBehavior.UNKNOWN;}
-    } else if (jj_2_754(2)) {
+    } else if (jj_2_756(2)) {
       jj_consume_token(ERROR);
               {if (true) return SqlJsonExistsErrorBehavior.ERROR;}
     } else {
@@ -7370,7 +7381,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
     commonSyntax = JsonApiCommonSyntax();
         args.addAll(commonSyntax);
-    if (jj_2_755(2)) {
+    if (jj_2_757(2)) {
       errorBehavior = JsonExistsErrorBehavior();
                                                     args.add(errorBehavior.symbol(getPos()));
       jj_consume_token(ON);
@@ -7386,13 +7397,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_756(2)) {
+    if (jj_2_758(2)) {
       jj_consume_token(ERROR);
             list.add(SqlJsonValueEmptyOrErrorBehavior.ERROR.symbol(getPos()));
-    } else if (jj_2_757(2)) {
+    } else if (jj_2_759(2)) {
       jj_consume_token(NULL);
             list.add(SqlJsonValueEmptyOrErrorBehavior.NULL.symbol(getPos()));
-    } else if (jj_2_758(2)) {
+    } else if (jj_2_760(2)) {
       jj_consume_token(DEFAULT_);
       e = Expression(ExprContext.ACCEPT_NON_QUERY);
             list.add(SqlJsonValueEmptyOrErrorBehavior.DEFAULT.symbol(getPos()));
@@ -7402,10 +7413,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       throw new ParseException();
     }
     jj_consume_token(ON);
-    if (jj_2_759(2)) {
+    if (jj_2_761(2)) {
       jj_consume_token(EMPTY);
             list.add(SqlJsonEmptyOrError.EMPTY.symbol(getPos()));
-    } else if (jj_2_760(2)) {
+    } else if (jj_2_762(2)) {
       jj_consume_token(ERROR);
             list.add(SqlJsonEmptyOrError.ERROR.symbol(getPos()));
     } else {
@@ -7427,7 +7438,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
     commonSyntax = JsonApiCommonSyntax();
         args.addAll(commonSyntax);
-    if (jj_2_761(2)) {
+    if (jj_2_763(2)) {
       e = JsonReturningClause();
             args.add(SqlJsonValueReturning.RETURNING.symbol(getPos()));
             args.add(e);
@@ -7436,7 +7447,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     label_52:
     while (true) {
-      if (jj_2_762(2)) {
+      if (jj_2_764(2)) {
         ;
       } else {
         break label_52;
@@ -7452,17 +7463,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_763(2)) {
+    if (jj_2_765(2)) {
       jj_consume_token(ERROR);
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.ERROR, getPos()));
-    } else if (jj_2_764(2)) {
+    } else if (jj_2_766(2)) {
       jj_consume_token(NULL);
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.NULL, getPos()));
-    } else if (jj_2_765(2)) {
+    } else if (jj_2_767(2)) {
       jj_consume_token(EMPTY);
       jj_consume_token(ARRAY);
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.EMPTY_ARRAY, getPos()));
-    } else if (jj_2_766(2)) {
+    } else if (jj_2_768(2)) {
       jj_consume_token(EMPTY);
       jj_consume_token(OBJECT);
             list.add(SqlLiteral.createSymbol(SqlJsonQueryEmptyOrErrorBehavior.EMPTY_OBJECT, getPos()));
@@ -7471,10 +7482,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       throw new ParseException();
     }
     jj_consume_token(ON);
-    if (jj_2_767(2)) {
+    if (jj_2_769(2)) {
       jj_consume_token(EMPTY);
             list.add(SqlLiteral.createSymbol(SqlJsonEmptyOrError.EMPTY, getPos()));
-    } else if (jj_2_768(2)) {
+    } else if (jj_2_770(2)) {
       jj_consume_token(ERROR);
             list.add(SqlLiteral.createSymbol(SqlJsonEmptyOrError.ERROR, getPos()));
     } else {
@@ -7487,31 +7498,31 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlNode JsonQueryWrapperBehavior() throws ParseException {
     SqlNode e;
-    if (jj_2_773(2)) {
+    if (jj_2_775(2)) {
       jj_consume_token(WITHOUT);
-      if (jj_2_769(2)) {
+      if (jj_2_771(2)) {
         jj_consume_token(ARRAY);
       } else {
         ;
       }
         {if (true) return SqlLiteral.createSymbol(SqlJsonQueryWrapperBehavior.WITHOUT_ARRAY, getPos());}
-    } else if (jj_2_774(2)) {
+    } else if (jj_2_776(2)) {
       jj_consume_token(WITH);
       jj_consume_token(CONDITIONAL);
-      if (jj_2_770(2)) {
+      if (jj_2_772(2)) {
         jj_consume_token(ARRAY);
       } else {
         ;
       }
         {if (true) return SqlLiteral.createSymbol(SqlJsonQueryWrapperBehavior.WITH_CONDITIONAL_ARRAY, getPos());}
-    } else if (jj_2_775(2)) {
+    } else if (jj_2_777(2)) {
       jj_consume_token(WITH);
-      if (jj_2_771(2)) {
+      if (jj_2_773(2)) {
         jj_consume_token(UNCONDITIONAL);
       } else {
         ;
       }
-      if (jj_2_772(2)) {
+      if (jj_2_774(2)) {
         jj_consume_token(ARRAY);
       } else {
         ;
@@ -7536,7 +7547,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     commonSyntax = JsonApiCommonSyntax();
         args[0] = commonSyntax.get(0);
         args[1] = commonSyntax.get(1);
-    if (jj_2_776(2)) {
+    if (jj_2_778(2)) {
       e = JsonQueryWrapperBehavior();
       jj_consume_token(WRAPPER);
             args[2] = e;
@@ -7545,7 +7556,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     label_53:
     while (true) {
-      if (jj_2_777(2)) {
+      if (jj_2_779(2)) {
         ;
       } else {
         break label_53;
@@ -7578,7 +7589,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final List<SqlNode> list = new ArrayList<SqlNode>();
     SqlNode e;
     boolean kvMode = false;
-    if (jj_2_778(2)) {
+    if (jj_2_780(2)) {
       jj_consume_token(KEY);
                 kvMode = true;
     } else {
@@ -7586,9 +7597,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     e = JsonName();
         list.add(e);
-    if (jj_2_779(2)) {
+    if (jj_2_781(2)) {
       jj_consume_token(VALUE);
-    } else if (jj_2_780(2)) {
+    } else if (jj_2_782(2)) {
       jj_consume_token(COLON);
             if (kvMode) {
                 {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.illegalColon());}
@@ -7604,12 +7615,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlNode JsonConstructorNullClause() throws ParseException {
-    if (jj_2_781(2)) {
+    if (jj_2_783(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_782(2)) {
+    } else if (jj_2_784(2)) {
       jj_consume_token(ABSENT);
       jj_consume_token(ON);
       jj_consume_token(NULL);
@@ -7630,12 +7641,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(JSON_OBJECT);
                     span = span();
     jj_consume_token(LPAREN);
-    if (jj_2_784(2)) {
+    if (jj_2_786(2)) {
       list = JsonNameAndValue();
             nvArgs.addAll(list);
       label_54:
       while (true) {
-        if (jj_2_783(2)) {
+        if (jj_2_785(2)) {
           ;
         } else {
           break label_54;
@@ -7647,7 +7658,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_785(2)) {
+    if (jj_2_787(2)) {
       e = JsonConstructorNullClause();
             otherArgs[0] = e;
     } else {
@@ -7674,7 +7685,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     list = JsonNameAndValue();
         args[0] = list.get(0);
         args[1] = list.get(1);
-    if (jj_2_786(2)) {
+    if (jj_2_788(2)) {
       e = JsonConstructorNullClause();
             nullClause = (SqlJsonConstructorNullClause) ((SqlLiteral) e).getValue();
     } else {
@@ -7694,12 +7705,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(JSON_ARRAY);
                    span = span();
     jj_consume_token(LPAREN);
-    if (jj_2_788(2)) {
+    if (jj_2_790(2)) {
       e = Expression(ExprContext.ACCEPT_NON_QUERY);
             elements.add(e);
       label_55:
       while (true) {
-        if (jj_2_787(2)) {
+        if (jj_2_789(2)) {
           ;
         } else {
           break label_55;
@@ -7711,7 +7722,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_789(2)) {
+    if (jj_2_791(2)) {
       e = JsonConstructorNullClause();
             otherArgs[0] = e;
     } else {
@@ -7727,7 +7738,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public SqlNodeList JsonArrayAggOrderByClause() throws ParseException {
     final SqlNodeList orderList;
-    if (jj_2_790(2)) {
+    if (jj_2_792(2)) {
       orderList = OrderBy(true);
     } else {
           orderList = null;
@@ -7751,7 +7762,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     e = Expression(ExprContext.ACCEPT_NON_QUERY);
         valueExpr = e;
     orderList = JsonArrayAggOrderByClause();
-    if (jj_2_791(2)) {
+    if (jj_2_793(2)) {
       e = JsonConstructorNullClause();
             nullClause = (SqlJsonConstructorNullClause) ((SqlLiteral) e).getValue();
     } else {
@@ -7760,7 +7771,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_792(2)) {
+    if (jj_2_794(2)) {
       e = withinGroup(aggCall);
             if (orderList != null) {
                 {if (true) throw SqlUtil.newContextException(span.pos().plus(e.getParserPosition()),
@@ -7839,13 +7850,13 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     final List<SqlNode> args;
     final SqlOperator op;
-    if (jj_2_793(2)) {
+    if (jj_2_795(2)) {
       jj_consume_token(TUMBLE);
             op = SqlStdOperatorTable.TUMBLE_OLD;
-    } else if (jj_2_794(2)) {
+    } else if (jj_2_796(2)) {
       jj_consume_token(HOP);
             op = SqlStdOperatorTable.HOP_OLD;
-    } else if (jj_2_795(2)) {
+    } else if (jj_2_797(2)) {
       jj_consume_token(SESSION);
             op = SqlStdOperatorTable.SESSION_OLD;
     } else {
@@ -7861,23 +7872,23 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final public SqlCall MatchRecognizeFunctionCall() throws ParseException {
     final SqlCall func;
     final Span s;
-    if (jj_2_796(2)) {
+    if (jj_2_798(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_797(2)) {
+    } else if (jj_2_799(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_798(3)) {
+    } else if (jj_2_800(3)) {
       func = MatchRecognizeNavigationLogical();
-    } else if (jj_2_799(2)) {
+    } else if (jj_2_801(2)) {
       func = MatchRecognizeNavigationPhysical();
-    } else if (jj_2_800(2)) {
+    } else if (jj_2_802(2)) {
       func = MatchRecognizeCallWithModifier();
     } else {
       jj_consume_token(-1);
@@ -7891,10 +7902,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     final SqlOperator runningOp;
     final SqlNode func;
-    if (jj_2_801(2)) {
+    if (jj_2_803(2)) {
       jj_consume_token(RUNNING);
                     runningOp = SqlStdOperatorTable.RUNNING;
-    } else if (jj_2_802(2)) {
+    } else if (jj_2_804(2)) {
       jj_consume_token(FINAL);
                   runningOp = SqlStdOperatorTable.FINAL;
     } else {
@@ -7914,19 +7925,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final SqlOperator runningOp;
     SqlNode arg0;
     SqlNode arg1 = SqlLiteral.createExactNumeric("0", SqlParserPos.ZERO);
-    if (jj_2_803(2)) {
+    if (jj_2_805(2)) {
       jj_consume_token(RUNNING);
                     runningOp = SqlStdOperatorTable.RUNNING; s.add(this);
-    } else if (jj_2_804(2)) {
+    } else if (jj_2_806(2)) {
       jj_consume_token(FINAL);
                   runningOp = SqlStdOperatorTable.FINAL; s.add(this);
     } else {
           runningOp = null;
     }
-    if (jj_2_805(2)) {
+    if (jj_2_807(2)) {
       jj_consume_token(FIRST);
                   funcOp = SqlStdOperatorTable.FIRST;
-    } else if (jj_2_806(2)) {
+    } else if (jj_2_808(2)) {
       jj_consume_token(LAST);
                  funcOp = SqlStdOperatorTable.LAST;
     } else {
@@ -7936,7 +7947,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       s.add(this);
     jj_consume_token(LPAREN);
     arg0 = Expression(ExprContext.ACCEPT_SUB_QUERY);
-    if (jj_2_807(2)) {
+    if (jj_2_809(2)) {
       jj_consume_token(COMMA);
       arg1 = NumericLiteral();
     } else {
@@ -7958,10 +7969,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     SqlOperator funcOp;
     SqlNode arg0;
     SqlNode arg1 = SqlLiteral.createExactNumeric("1", SqlParserPos.ZERO);
-    if (jj_2_808(2)) {
+    if (jj_2_810(2)) {
       jj_consume_token(PREV);
                  funcOp = SqlStdOperatorTable.PREV;
-    } else if (jj_2_809(2)) {
+    } else if (jj_2_811(2)) {
       jj_consume_token(NEXT);
                  funcOp = SqlStdOperatorTable.NEXT;
     } else {
@@ -7971,7 +7982,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       s = span();
     jj_consume_token(LPAREN);
     arg0 = Expression(ExprContext.ACCEPT_SUB_QUERY);
-    if (jj_2_810(2)) {
+    if (jj_2_812(2)) {
       jj_consume_token(COMMA);
       arg1 = NumericLiteral();
     } else {
@@ -8012,12 +8023,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
   final public Pair<SqlParserPos, SqlOperator> NullTreatment() throws ParseException {
     final Span span;
-    if (jj_2_811(2)) {
+    if (jj_2_813(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_812(2)) {
+    } else if (jj_2_814(2)) {
       jj_consume_token(RESPECT);
                 span = span();
       jj_consume_token(NULLS);
@@ -8058,31 +8069,31 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span overSpan;
     final SqlNode over;
     final Span withinGroupSpan;
-    if (jj_2_813(2)) {
+    if (jj_2_815(2)) {
       call = StringAggFunctionCall();
-    } else if (jj_2_814(2)) {
+    } else if (jj_2_816(2)) {
       call = NamedCall();
     } else {
       jj_consume_token(-1);
       throw new ParseException();
     }
-    if (jj_2_815(2)) {
+    if (jj_2_817(2)) {
       call = nullTreatment(call);
     } else {
       ;
     }
-    if (jj_2_816(2)) {
+    if (jj_2_818(2)) {
       // decide between WITHIN DISTINCT and WITHIN GROUP
               call = withinDistinct(call);
     } else {
       ;
     }
-    if (jj_2_817(2)) {
+    if (jj_2_819(2)) {
       call = withinGroup(call);
     } else {
       ;
     }
-    if (jj_2_818(2)) {
+    if (jj_2_820(2)) {
       jj_consume_token(FILTER);
                    filterSpan = span();
       jj_consume_token(LPAREN);
@@ -8094,12 +8105,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     } else {
       ;
     }
-    if (jj_2_821(2)) {
+    if (jj_2_823(2)) {
       jj_consume_token(OVER);
                  overSpan = span();
-      if (jj_2_819(2)) {
+      if (jj_2_821(2)) {
         over = SimpleIdentifier();
-      } else if (jj_2_820(2)) {
+      } else if (jj_2_822(2)) {
         over = WindowSpecification();
       } else {
         jj_consume_token(-1);
@@ -8119,7 +8130,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     final Span s;
     final List<SqlNode> args;
     SqlLiteral quantifier = null;
-    if (jj_2_822(2)) {
+    if (jj_2_824(2)) {
       jj_consume_token(SPECIFIC);
             funcType = SqlFunctionCategory.USER_DEFINED_SPECIFIC_FUNCTION;
     } else {
@@ -8127,16 +8138,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     }
     qualifiedName = FunctionName();
         s = span();
-    if (jj_2_823(2)) {
+    if (jj_2_825(2)) {
       jj_consume_token(LPAREN);
       jj_consume_token(STAR);
             args = startList(SqlIdentifier.star(getPos()));
       jj_consume_token(RPAREN);
-    } else if (jj_2_824(2)) {
+    } else if (jj_2_826(2)) {
       jj_consume_token(LPAREN);
       jj_consume_token(RPAREN);
             args = Collections.emptyList();
-    } else if (jj_2_825(2)) {
+    } else if (jj_2_827(2)) {
       args = FunctionParameterList(ExprContext.ACCEPT_SUB_QUERY);
             quantifier = (SqlLiteral) args.get(0);
             args.remove(0);
@@ -8160,7 +8171,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_consume_token(LPAREN);
     e = Expression(ExprContext.ACCEPT_SUB_QUERY);
         args = startList(e);
-    if (jj_2_826(2)) {
+    if (jj_2_828(2)) {
       jj_consume_token(TO);
       unit = TimeUnit();
             args.add(new SqlIntervalQualifier(unit, null, getPos()));
@@ -8172,12 +8183,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
             ? SqlStdOperatorTable.FLOOR
             : SqlStdOperatorTable.CEIL;
         function =  op.createCall(s.end(this), args);
-    if (jj_2_829(2)) {
+    if (jj_2_831(2)) {
       jj_consume_token(OVER);
                  s1 = span();
-      if (jj_2_827(2)) {
+      if (jj_2_829(2)) {
         e = SimpleIdentifier();
-      } else if (jj_2_828(2)) {
+      } else if (jj_2_830(2)) {
         e = WindowSpecification();
       } else {
         jj_consume_token(-1);
@@ -8205,9 +8216,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlIdentifier FunctionName() throws ParseException {
     SqlIdentifier qualifiedName;
-    if (jj_2_830(2)) {
+    if (jj_2_832(2)) {
       qualifiedName = CompoundIdentifier();
-    } else if (jj_2_831(2)) {
+    } else if (jj_2_833(2)) {
       qualifiedName = ReservedFunctionName();
     } else {
       jj_consume_token(-1);
@@ -8221,133 +8232,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_832(2)) {
+    if (jj_2_834(2)) {
       jj_consume_token(ABS);
-    } else if (jj_2_833(2)) {
+    } else if (jj_2_835(2)) {
       jj_consume_token(AVG);
-    } else if (jj_2_834(2)) {
+    } else if (jj_2_836(2)) {
       jj_consume_token(CARDINALITY);
-    } else if (jj_2_835(2)) {
+    } else if (jj_2_837(2)) {
       jj_consume_token(CEILING);
-    } else if (jj_2_836(2)) {
+    } else if (jj_2_838(2)) {
       jj_consume_token(CHAR_LENGTH);
-    } else if (jj_2_837(2)) {
+    } else if (jj_2_839(2)) {
       jj_consume_token(CHARACTER_LENGTH);
-    } else if (jj_2_838(2)) {
+    } else if (jj_2_840(2)) {
       jj_consume_token(COALESCE);
-    } else if (jj_2_839(2)) {
+    } else if (jj_2_841(2)) {
       jj_consume_token(COLLECT);
-    } else if (jj_2_840(2)) {
+    } else if (jj_2_842(2)) {
       jj_consume_token(COVAR_POP);
-    } else if (jj_2_841(2)) {
+    } else if (jj_2_843(2)) {
       jj_consume_token(COVAR_SAMP);
-    } else if (jj_2_842(2)) {
+    } else if (jj_2_844(2)) {
       jj_consume_token(CUME_DIST);
-    } else if (jj_2_843(2)) {
+    } else if (jj_2_845(2)) {
       jj_consume_token(COUNT);
-    } else if (jj_2_844(2)) {
+    } else if (jj_2_846(2)) {
       jj_consume_token(CURRENT_DATE);
-    } else if (jj_2_845(2)) {
+    } else if (jj_2_847(2)) {
       jj_consume_token(CURRENT_TIME);
-    } else if (jj_2_846(2)) {
+    } else if (jj_2_848(2)) {
       jj_consume_token(CURRENT_TIMESTAMP);
-    } else if (jj_2_847(2)) {
+    } else if (jj_2_849(2)) {
       jj_consume_token(DENSE_RANK);
-    } else if (jj_2_848(2)) {
+    } else if (jj_2_850(2)) {
       jj_consume_token(ELEMENT);
-    } else if (jj_2_849(2)) {
+    } else if (jj_2_851(2)) {
       jj_consume_token(EVERY);
-    } else if (jj_2_850(2)) {
+    } else if (jj_2_852(2)) {
       jj_consume_token(EXP);
-    } else if (jj_2_851(2)) {
+    } else if (jj_2_853(2)) {
       jj_consume_token(FIRST_VALUE);
-    } else if (jj_2_852(2)) {
+    } else if (jj_2_854(2)) {
       jj_consume_token(FLOOR);
-    } else if (jj_2_853(2)) {
+    } else if (jj_2_855(2)) {
       jj_consume_token(FUSION);
-    } else if (jj_2_854(2)) {
+    } else if (jj_2_856(2)) {
       jj_consume_token(INTERSECTION);
-    } else if (jj_2_855(2)) {
+    } else if (jj_2_857(2)) {
       jj_consume_token(GROUPING);
-    } else if (jj_2_856(2)) {
+    } else if (jj_2_858(2)) {
       jj_consume_token(HOUR);
-    } else if (jj_2_857(2)) {
+    } else if (jj_2_859(2)) {
       jj_consume_token(LAG);
-    } else if (jj_2_858(2)) {
+    } else if (jj_2_860(2)) {
       jj_consume_token(LEAD);
-    } else if (jj_2_859(2)) {
+    } else if (jj_2_861(2)) {
       jj_consume_token(LEFT);
-    } else if (jj_2_860(2)) {
+    } else if (jj_2_862(2)) {
       jj_consume_token(LAST_VALUE);
-    } else if (jj_2_861(2)) {
+    } else if (jj_2_863(2)) {
       jj_consume_token(LN);
-    } else if (jj_2_862(2)) {
+    } else if (jj_2_864(2)) {
       jj_consume_token(LOCALTIME);
-    } else if (jj_2_863(2)) {
+    } else if (jj_2_865(2)) {
       jj_consume_token(LOCALTIMESTAMP);
-    } else if (jj_2_864(2)) {
+    } else if (jj_2_866(2)) {
       jj_consume_token(LOWER);
-    } else if (jj_2_865(2)) {
+    } else if (jj_2_867(2)) {
       jj_consume_token(MAX);
-    } else if (jj_2_866(2)) {
+    } else if (jj_2_868(2)) {
       jj_consume_token(MIN);
-    } else if (jj_2_867(2)) {
+    } else if (jj_2_869(2)) {
       jj_consume_token(MINUTE);
-    } else if (jj_2_868(2)) {
+    } else if (jj_2_870(2)) {
       jj_consume_token(MOD);
-    } else if (jj_2_869(2)) {
+    } else if (jj_2_871(2)) {
       jj_consume_token(MONTH);
-    } else if (jj_2_870(2)) {
+    } else if (jj_2_872(2)) {
       jj_consume_token(NTH_VALUE);
-    } else if (jj_2_871(2)) {
+    } else if (jj_2_873(2)) {
       jj_consume_token(NTILE);
-    } else if (jj_2_872(2)) {
+    } else if (jj_2_874(2)) {
       jj_consume_token(NULLIF);
-    } else if (jj_2_873(2)) {
+    } else if (jj_2_875(2)) {
       jj_consume_token(OCTET_LENGTH);
-    } else if (jj_2_874(2)) {
+    } else if (jj_2_876(2)) {
       jj_consume_token(PERCENT_RANK);
-    } else if (jj_2_875(2)) {
+    } else if (jj_2_877(2)) {
       jj_consume_token(PERCENTILE_CONT);
-    } else if (jj_2_876(2)) {
+    } else if (jj_2_878(2)) {
       jj_consume_token(PERCENTILE_DISC);
-    } else if (jj_2_877(2)) {
+    } else if (jj_2_879(2)) {
       jj_consume_token(POWER);
-    } else if (jj_2_878(2)) {
+    } else if (jj_2_880(2)) {
       jj_consume_token(RANK);
-    } else if (jj_2_879(2)) {
+    } else if (jj_2_881(2)) {
       jj_consume_token(REGR_COUNT);
-    } else if (jj_2_880(2)) {
+    } else if (jj_2_882(2)) {
       jj_consume_token(REGR_SXX);
-    } else if (jj_2_881(2)) {
+    } else if (jj_2_883(2)) {
       jj_consume_token(REGR_SYY);
-    } else if (jj_2_882(2)) {
+    } else if (jj_2_884(2)) {
       jj_consume_token(RIGHT);
-    } else if (jj_2_883(2)) {
+    } else if (jj_2_885(2)) {
       jj_consume_token(ROW_NUMBER);
-    } else if (jj_2_884(2)) {
+    } else if (jj_2_886(2)) {
       jj_consume_token(SECOND);
-    } else if (jj_2_885(2)) {
+    } else if (jj_2_887(2)) {
       jj_consume_token(SOME);
-    } else if (jj_2_886(2)) {
+    } else if (jj_2_888(2)) {
       jj_consume_token(SQRT);
-    } else if (jj_2_887(2)) {
+    } else if (jj_2_889(2)) {
       jj_consume_token(STDDEV_POP);
-    } else if (jj_2_888(2)) {
+    } else if (jj_2_890(2)) {
       jj_consume_token(STDDEV_SAMP);
-    } else if (jj_2_889(2)) {
+    } else if (jj_2_891(2)) {
       jj_consume_token(SUM);
-    } else if (jj_2_890(2)) {
+    } else if (jj_2_892(2)) {
       jj_consume_token(UPPER);
-    } else if (jj_2_891(2)) {
+    } else if (jj_2_893(2)) {
       jj_consume_token(TRUNCATE);
-    } else if (jj_2_892(2)) {
+    } else if (jj_2_894(2)) {
       jj_consume_token(USER);
-    } else if (jj_2_893(2)) {
+    } else if (jj_2_895(2)) {
       jj_consume_token(VAR_POP);
-    } else if (jj_2_894(2)) {
+    } else if (jj_2_896(2)) {
       jj_consume_token(VAR_SAMP);
-    } else if (jj_2_895(2)) {
+    } else if (jj_2_897(2)) {
       jj_consume_token(YEAR);
     } else {
       jj_consume_token(-1);
@@ -8358,33 +8369,33 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final public SqlIdentifier ContextVariable() throws ParseException {
-    if (jj_2_896(2)) {
+    if (jj_2_898(2)) {
       jj_consume_token(CURRENT_CATALOG);
-    } else if (jj_2_897(2)) {
+    } else if (jj_2_899(2)) {
       jj_consume_token(CURRENT_DATE);
-    } else if (jj_2_898(2)) {
+    } else if (jj_2_900(2)) {
       jj_consume_token(CURRENT_DEFAULT_TRANSFORM_GROUP);
-    } else if (jj_2_899(2)) {
+    } else if (jj_2_901(2)) {
       jj_consume_token(CURRENT_PATH);
-    } else if (jj_2_900(2)) {
+    } else if (jj_2_902(2)) {
       jj_consume_token(CURRENT_ROLE);
-    } else if (jj_2_901(2)) {
+    } else if (jj_2_903(2)) {
       jj_consume_token(CURRENT_SCHEMA);
-    } else if (jj_2_902(2)) {
+    } else if (jj_2_904(2)) {
       jj_consume_token(CURRENT_TIME);
-    } else if (jj_2_903(2)) {
+    } else if (jj_2_905(2)) {
       jj_consume_token(CURRENT_TIMESTAMP);
-    } else if (jj_2_904(2)) {
+    } else if (jj_2_906(2)) {
       jj_consume_token(CURRENT_USER);
-    } else if (jj_2_905(2)) {
+    } else if (jj_2_907(2)) {
       jj_consume_token(LOCALTIME);
-    } else if (jj_2_906(2)) {
+    } else if (jj_2_908(2)) {
       jj_consume_token(LOCALTIMESTAMP);
-    } else if (jj_2_907(2)) {
+    } else if (jj_2_909(2)) {
       jj_consume_token(SESSION_USER);
-    } else if (jj_2_908(2)) {
+    } else if (jj_2_910(2)) {
       jj_consume_token(SYSTEM_USER);
-    } else if (jj_2_909(2)) {
+    } else if (jj_2_911(2)) {
       jj_consume_token(USER);
     } else {
       jj_consume_token(-1);
@@ -8415,11 +8426,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
       break;
     default:
       jj_la1[9] = jj_gen;
-      if (jj_2_920(3)) {
+      if (jj_2_922(3)) {
         call = TimestampDiffFunctionCall();
             name = call.getOperator().getName();
             args = new SqlNodeList(call.getOperandList(), getPos());
-      } else if (jj_2_921(2)) {
+      } else if (jj_2_923(2)) {
         jj_consume_token(CONVERT);
                     name = unquotedIdentifier();
         jj_consume_token(LPAREN);
@@ -8430,19 +8441,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         tl = JdbcOdbcDataType();
                                   args.add(tl);
         jj_consume_token(RPAREN);
-      } else if (jj_2_922(2)) {
+      } else if (jj_2_924(2)) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
         case INSERT:
         case LEFT:
         case RIGHT:
         case TRUNCATE:
-          if (jj_2_910(2)) {
+          if (jj_2_912(2)) {
             jj_consume_token(INSERT);
-          } else if (jj_2_911(2)) {
+          } else if (jj_2_913(2)) {
             jj_consume_token(LEFT);
-          } else if (jj_2_912(2)) {
+          } else if (jj_2_914(2)) {
             jj_consume_token(RIGHT);
-          } else if (jj_2_913(2)) {
+          } else if (jj_2_915(2)) {
             jj_consume_token(TRUNCATE);
           } else {
             jj_consume_token(-1);
@@ -8452,32 +8463,32 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
           break;
         default:
           jj_la1[8] = jj_gen;
-          if (jj_2_914(2)) {
+          if (jj_2_916(2)) {
             // For cases like {fn power(1,2)} and {fn lower('a')}
                         id = ReservedFunctionName();
                                           name = id.getSimple();
-          } else if (jj_2_915(2)) {
+          } else if (jj_2_917(2)) {
             // For cases like {fn substring('foo', 1,2)}
                         name = NonReservedJdbcFunctionName();
-          } else if (jj_2_916(2)) {
+          } else if (jj_2_918(2)) {
             name = Identifier();
           } else {
             jj_consume_token(-1);
             throw new ParseException();
           }
         }
-        if (jj_2_917(2)) {
+        if (jj_2_919(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_918(2)) {
+        } else if (jj_2_920(2)) {
           jj_consume_token(LPAREN);
           jj_consume_token(RPAREN);
                                              args = SqlNodeList.EMPTY;
-        } else if (jj_2_919(2)) {
+        } else if (jj_2_921(2)) {
           args = ParenthesizedQueryOrCommaList(ExprContext.ACCEPT_SUB_QUERY);
         } else {
           jj_consume_token(-1);
@@ -8498,32 +8509,32 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * Parses a binary query operator like UNION.
  */
   final public SqlBinaryOperator BinaryQueryOperator() throws ParseException {
-    if (jj_2_931(2)) {
+    if (jj_2_933(2)) {
       jj_consume_token(UNION);
-      if (jj_2_923(2)) {
+      if (jj_2_925(2)) {
         jj_consume_token(ALL);
                     {if (true) return SqlStdOperatorTable.UNION_ALL;}
-      } else if (jj_2_924(2)) {
+      } else if (jj_2_926(2)) {
         jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.UNION;}
       } else {
               {if (true) return SqlStdOperatorTable.UNION;}
       }
-    } else if (jj_2_932(2)) {
+    } else if (jj_2_934(2)) {
       jj_consume_token(INTERSECT);
-      if (jj_2_925(2)) {
+      if (jj_2_927(2)) {
         jj_consume_token(ALL);
                     {if (true) return SqlStdOperatorTable.INTERSECT_ALL;}
-      } else if (jj_2_926(2)) {
+      } else if (jj_2_928(2)) {
         jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.INTERSECT;}
       } else {
               {if (true) return SqlStdOperatorTable.INTERSECT;}
       }
-    } else if (jj_2_933(2)) {
-      if (jj_2_927(2)) {
+    } else if (jj_2_935(2)) {
+      if (jj_2_929(2)) {
         jj_consume_token(EXCEPT);
-      } else if (jj_2_928(2)) {
+      } else if (jj_2_930(2)) {
         jj_consume_token(SET_MINUS);
                 if (!this.conformance.isMinusAllowed()) {
                     {if (true) throw SqlUtil.newContextException(getPos(), RESOURCE.minusNotAllowed());}
@@ -8532,10 +8543,10 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(-1);
         throw new ParseException();
       }
-      if (jj_2_929(2)) {
+      if (jj_2_931(2)) {
         jj_consume_token(ALL);
                     {if (true) return SqlStdOperatorTable.EXCEPT_ALL;}
-      } else if (jj_2_930(2)) {
+      } else if (jj_2_932(2)) {
         jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.EXCEPT;}
       } else {
@@ -8553,12 +8564,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlBinaryOperator BinaryMultisetOperator() throws ParseException {
     jj_consume_token(MULTISET);
-    if (jj_2_943(2)) {
+    if (jj_2_945(2)) {
       jj_consume_token(UNION);
-      if (jj_2_936(2)) {
-        if (jj_2_934(2)) {
+      if (jj_2_938(2)) {
+        if (jj_2_936(2)) {
           jj_consume_token(ALL);
-        } else if (jj_2_935(2)) {
+        } else if (jj_2_937(2)) {
           jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.MULTISET_UNION_DISTINCT;}
         } else {
@@ -8569,12 +8580,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         ;
       }
           {if (true) return SqlStdOperatorTable.MULTISET_UNION;}
-    } else if (jj_2_944(2)) {
+    } else if (jj_2_946(2)) {
       jj_consume_token(INTERSECT);
-      if (jj_2_939(2)) {
-        if (jj_2_937(2)) {
+      if (jj_2_941(2)) {
+        if (jj_2_939(2)) {
           jj_consume_token(ALL);
-        } else if (jj_2_938(2)) {
+        } else if (jj_2_940(2)) {
           jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.MULTISET_INTERSECT_DISTINCT;}
         } else {
@@ -8585,12 +8596,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         ;
       }
           {if (true) return SqlStdOperatorTable.MULTISET_INTERSECT;}
-    } else if (jj_2_945(2)) {
+    } else if (jj_2_947(2)) {
       jj_consume_token(EXCEPT);
-      if (jj_2_942(2)) {
-        if (jj_2_940(2)) {
+      if (jj_2_944(2)) {
+        if (jj_2_942(2)) {
           jj_consume_token(ALL);
-        } else if (jj_2_941(2)) {
+        } else if (jj_2_943(2)) {
           jj_consume_token(DISTINCT);
                          {if (true) return SqlStdOperatorTable.MULTISET_EXCEPT_DISTINCT;}
         } else {
@@ -8613,105 +8624,105 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  */
   final public SqlBinaryOperator BinaryRowOperator() throws ParseException {
     SqlBinaryOperator op;
-    if (jj_2_946(2)) {
+    if (jj_2_948(2)) {
       jj_consume_token(EQ);
            {if (true) return SqlStdOperatorTable.EQUALS;}
-    } else if (jj_2_947(2)) {
+    } else if (jj_2_949(2)) {
       jj_consume_token(GT);
            {if (true) return SqlStdOperatorTable.GREATER_THAN;}
-    } else if (jj_2_948(2)) {
+    } else if (jj_2_950(2)) {
       jj_consume_token(LT);
            {if (true) return SqlStdOperatorTable.LESS_THAN;}
-    } else if (jj_2_949(2)) {
+    } else if (jj_2_951(2)) {
       jj_consume_token(LE);
            {if (true) return SqlStdOperatorTable.LESS_THAN_OR_EQUAL;}
-    } else if (jj_2_950(2)) {
+    } else if (jj_2_952(2)) {
       jj_consume_token(GE);
            {if (true) return SqlStdOperatorTable.GREATER_THAN_OR_EQUAL;}
-    } else if (jj_2_951(2)) {
+    } else if (jj_2_953(2)) {
       jj_consume_token(NE);
            {if (true) return SqlStdOperatorTable.NOT_EQUALS;}
-    } else if (jj_2_952(2)) {
+    } else if (jj_2_954(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_953(2)) {
+    } else if (jj_2_955(2)) {
       jj_consume_token(PLUS);
              {if (true) return SqlStdOperatorTable.PLUS;}
-    } else if (jj_2_954(2)) {
+    } else if (jj_2_956(2)) {
       jj_consume_token(MINUS);
               {if (true) return SqlStdOperatorTable.MINUS;}
-    } else if (jj_2_955(2)) {
+    } else if (jj_2_957(2)) {
       jj_consume_token(STAR);
              {if (true) return SqlStdOperatorTable.MULTIPLY;}
-    } else if (jj_2_956(2)) {
+    } else if (jj_2_958(2)) {
       jj_consume_token(SLASH);
               {if (true) return SqlStdOperatorTable.DIVIDE;}
-    } else if (jj_2_957(2)) {
+    } else if (jj_2_959(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_958(2)) {
+    } else if (jj_2_960(2)) {
       jj_consume_token(CONCAT);
                {if (true) return SqlStdOperatorTable.CONCAT;}
-    } else if (jj_2_959(2)) {
+    } else if (jj_2_961(2)) {
       jj_consume_token(AND);
             {if (true) return SqlStdOperatorTable.AND;}
-    } else if (jj_2_960(2)) {
+    } else if (jj_2_962(2)) {
       jj_consume_token(OR);
            {if (true) return SqlStdOperatorTable.OR;}
-    } else if (jj_2_961(2)) {
+    } else if (jj_2_963(2)) {
       jj_consume_token(IS);
       jj_consume_token(DISTINCT);
       jj_consume_token(FROM);
                                           {if (true) return SqlStdOperatorTable.IS_DISTINCT_FROM;}
-    } else if (jj_2_962(2)) {
+    } else if (jj_2_964(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_963(2)) {
+    } else if (jj_2_965(2)) {
       jj_consume_token(MEMBER);
       jj_consume_token(OF);
                     {if (true) return SqlStdOperatorTable.MEMBER_OF;}
-    } else if (jj_2_964(2)) {
+    } else if (jj_2_966(2)) {
       jj_consume_token(SUBMULTISET);
       jj_consume_token(OF);
                                       {if (true) return SqlStdOperatorTable.SUBMULTISET_OF;}
-    } else if (jj_2_965(2)) {
+    } else if (jj_2_967(2)) {
       jj_consume_token(NOT);
       jj_consume_token(SUBMULTISET);
       jj_consume_token(OF);
                                {if (true) return SqlStdOperatorTable.NOT_SUBMULTISET_OF;}
-    } else if (jj_2_966(2)) {
+    } else if (jj_2_968(2)) {
       jj_consume_token(CONTAINS);
                  {if (true) return SqlStdOperatorTable.CONTAINS;}
-    } else if (jj_2_967(2)) {
+    } else if (jj_2_969(2)) {
       jj_consume_token(OVERLAPS);
                  {if (true) return SqlStdOperatorTable.OVERLAPS;}
-    } else if (jj_2_968(2)) {
+    } else if (jj_2_970(2)) {
       jj_consume_token(EQUALS);
                {if (true) return SqlStdOperatorTable.PERIOD_EQUALS;}
-    } else if (jj_2_969(2)) {
+    } else if (jj_2_971(2)) {
       jj_consume_token(PRECEDES);
                  {if (true) return SqlStdOperatorTable.PRECEDES;}
-    } else if (jj_2_970(2)) {
+    } else if (jj_2_972(2)) {
       jj_consume_token(SUCCEEDS);
                  {if (true) return SqlStdOperatorTable.SUCCEEDS;}
-    } else if (jj_2_971(2)) {
+    } else if (jj_2_973(2)) {
       jj_consume_token(IMMEDIATELY);
       jj_consume_token(PRECEDES);
                                             {if (true) return SqlStdOperatorTable.IMMEDIATELY_PRECEDES;}
-    } else if (jj_2_972(2)) {
+    } else if (jj_2_974(2)) {
       jj_consume_token(IMMEDIATELY);
       jj_consume_token(SUCCEEDS);
                                {if (true) return SqlStdOperatorTable.IMMEDIATELY_SUCCEEDS;}
-    } else if (jj_2_973(2)) {
+    } else if (jj_2_975(2)) {
       op = BinaryMultisetOperator();
                                     {if (true) return op;}
     } else {
@@ -8725,19 +8736,19 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
  * Parses a prefix row operator like NOT.
  */
   final public SqlPrefixOperator PrefixRowOperator() throws ParseException {
-    if (jj_2_974(2)) {
+    if (jj_2_976(2)) {
       jj_consume_token(PLUS);
              {if (true) return SqlStdOperatorTable.UNARY_PLUS;}
-    } else if (jj_2_975(2)) {
+    } else if (jj_2_977(2)) {
       jj_consume_token(MINUS);
               {if (true) return SqlStdOperatorTable.UNARY_MINUS;}
-    } else if (jj_2_976(2)) {
+    } else if (jj_2_978(2)) {
       jj_consume_token(NOT);
             {if (true) return SqlStdOperatorTable.NOT;}
-    } else if (jj_2_977(2)) {
+    } else if (jj_2_979(2)) {
       jj_consume_token(EXISTS);
                {if (true) return SqlStdOperatorTable.EXISTS;}
-    } else if (jj_2_978(2)) {
+    } else if (jj_2_980(2)) {
       jj_consume_token(UNIQUE);
                {if (true) return SqlStdOperatorTable.UNIQUE;}
     } else {
@@ -8751,89 +8762,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_1003(2)) {
+    if (jj_2_1005(2)) {
       jj_consume_token(IS);
-      if (jj_2_1000(2)) {
+      if (jj_2_1002(2)) {
         jj_consume_token(A);
         jj_consume_token(SET);
                     {if (true) return SqlStdOperatorTable.IS_A_SET;}
-      } else if (jj_2_1001(2)) {
+      } else if (jj_2_1003(2)) {
         jj_consume_token(NOT);
-        if (jj_2_979(2)) {
+        if (jj_2_981(2)) {
           jj_consume_token(NULL);
                      {if (true) return SqlStdOperatorTable.IS_NOT_NULL;}
-        } else if (jj_2_980(2)) {
+        } else if (jj_2_982(2)) {
           jj_consume_token(TRUE);
                      {if (true) return SqlStdOperatorTable.IS_NOT_TRUE;}
-        } else if (jj_2_981(2)) {
+        } else if (jj_2_983(2)) {
           jj_consume_token(FALSE);
                       {if (true) return SqlStdOperatorTable.IS_NOT_FALSE;}
-        } else if (jj_2_982(2)) {
+        } else if (jj_2_984(2)) {
           jj_consume_token(UNKNOWN);
                         {if (true) return SqlStdOperatorTable.IS_NOT_UNKNOWN;}
-        } else if (jj_2_983(2)) {
+        } else if (jj_2_985(2)) {
           jj_consume_token(A);
           jj_consume_token(SET);
                         {if (true) return SqlStdOperatorTable.IS_NOT_A_SET;}
-        } else if (jj_2_984(2)) {
+        } else if (jj_2_986(2)) {
           jj_consume_token(EMPTY);
                       {if (true) return SqlStdOperatorTable.IS_NOT_EMPTY;}
-        } else if (jj_2_985(2)) {
+        } else if (jj_2_987(2)) {
           jj_consume_token(JSON);
           jj_consume_token(VALUE);
                                           {if (true) return SqlStdOperatorTable.IS_NOT_JSON_VALUE;}
-        } else if (jj_2_986(2)) {
+        } else if (jj_2_988(2)) {
           jj_consume_token(JSON);
           jj_consume_token(OBJECT);
                                            {if (true) return SqlStdOperatorTable.IS_NOT_JSON_OBJECT;}
-        } else if (jj_2_987(2)) {
+        } else if (jj_2_989(2)) {
           jj_consume_token(JSON);
           jj_consume_token(ARRAY);
                                           {if (true) return SqlStdOperatorTable.IS_NOT_JSON_ARRAY;}
-        } else if (jj_2_988(2)) {
+        } else if (jj_2_990(2)) {
           jj_consume_token(JSON);
           jj_consume_token(SCALAR);
                                            {if (true) return SqlStdOperatorTable.IS_NOT_JSON_SCALAR;}
-        } else if (jj_2_989(2)) {
+        } else if (jj_2_991(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_1002(2)) {
-        if (jj_2_990(2)) {
+      } else if (jj_2_1004(2)) {
+        if (jj_2_992(2)) {
           jj_consume_token(NULL);
                      {if (true) return SqlStdOperatorTable.IS_NULL;}
-        } else if (jj_2_991(2)) {
+        } else if (jj_2_993(2)) {
           jj_consume_token(TRUE);
                      {if (true) return SqlStdOperatorTable.IS_TRUE;}
-        } else if (jj_2_992(2)) {
+        } else if (jj_2_994(2)) {
           jj_consume_token(FALSE);
                       {if (true) return SqlStdOperatorTable.IS_FALSE;}
-        } else if (jj_2_993(2)) {
+        } else if (jj_2_995(2)) {
           jj_consume_token(UNKNOWN);
                         {if (true) return SqlStdOperatorTable.IS_UNKNOWN;}
-        } else if (jj_2_994(2)) {
+        } else if (jj_2_996(2)) {
           jj_consume_token(EMPTY);
                       {if (true) return SqlStdOperatorTable.IS_EMPTY;}
-        } else if (jj_2_995(2)) {
+        } else if (jj_2_997(2)) {
           jj_consume_token(JSON);
           jj_consume_token(VALUE);
                                           {if (true) return SqlStdOperatorTable.IS_JSON_VALUE;}
-        } else if (jj_2_996(2)) {
+        } else if (jj_2_998(2)) {
           jj_consume_token(JSON);
           jj_consume_token(OBJECT);
                                            {if (true) return SqlStdOperatorTable.IS_JSON_OBJECT;}
-        } else if (jj_2_997(2)) {
+        } else if (jj_2_999(2)) {
           jj_consume_token(JSON);
           jj_consume_token(ARRAY);
                                           {if (true) return SqlStdOperatorTable.IS_JSON_ARRAY;}
-        } else if (jj_2_998(2)) {
+        } else if (jj_2_1000(2)) {
           jj_consume_token(JSON);
           jj_consume_token(SCALAR);
                                            {if (true) return SqlStdOperatorTable.IS_JSON_SCALAR;}
-        } else if (jj_2_999(2)) {
+        } else if (jj_2_1001(2)) {
           jj_consume_token(JSON);
                      {if (true) return SqlStdOperatorTable.IS_JSON_VALUE;}
         } else {
@@ -8844,7 +8855,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
         jj_consume_token(-1);
         throw new ParseException();
       }
-    } else if (jj_2_1004(2)) {
+    } else if (jj_2_1006(2)) {
       jj_consume_token(FORMAT);
       JsonRepresentation();
             {if (true) return SqlStdOperatorTable.JSON_VALUE_EXPRESSION;}
@@ -8870,11 +8881,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_1005(2)) {
+    if (jj_2_1007(2)) {
       NonReservedKeyWord0of3();
-    } else if (jj_2_1006(2)) {
+    } else if (jj_2_1008(2)) {
       NonReservedKeyWord1of3();
-    } else if (jj_2_1007(2)) {
+    } else if (jj_2_1009(2)) {
       NonReservedKeyWord2of3();
     } else {
       jj_consume_token(-1);
@@ -8886,267 +8897,267 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** @see #NonReservedKeyWord */
   final public void NonReservedKeyWord0of3() throws ParseException {
-    if (jj_2_1008(2)) {
+    if (jj_2_1010(2)) {
       jj_consume_token(SEMI);
-    } else if (jj_2_1009(2)) {
+    } else if (jj_2_1011(2)) {
       jj_consume_token(AFFINITY_KEY);
-    } else if (jj_2_1010(2)) {
+    } else if (jj_2_1012(2)) {
       jj_consume_token(CACHE_GROUP);
-    } else if (jj_2_1011(2)) {
+    } else if (jj_2_1013(2)) {
       jj_consume_token(VALUE_TYPE);
-    } else if (jj_2_1012(2)) {
+    } else if (jj_2_1014(2)) {
       jj_consume_token(INLINE_SIZE);
-    } else if (jj_2_1013(2)) {
+    } else if (jj_2_1015(2)) {
       jj_consume_token(PASSWORD);
-    } else if (jj_2_1014(2)) {
+    } else if (jj_2_1016(2)) {
       jj_consume_token(CONTINUOUS);
-    } else if (jj_2_1015(2)) {
+    } else if (jj_2_1017(2)) {
       jj_consume_token(ASYNC);
-    } else if (jj_2_1016(2)) {
+    } else if (jj_2_1018(2)) {
       jj_consume_token(A);
-    } else if (jj_2_1017(2)) {
+    } else if (jj_2_1019(2)) {
       jj_consume_token(ACTION);
-    } else if (jj_2_1018(2)) {
+    } else if (jj_2_1020(2)) {
       jj_consume_token(ALLOCATE);
-    } else if (jj_2_1019(2)) {
+    } else if (jj_2_1021(2)) {
       jj_consume_token(AND);
-    } else if (jj_2_1020(2)) {
+    } else if (jj_2_1022(2)) {
       jj_consume_token(ARRAY_MAX_CARDINALITY);
-    } else if (jj_2_1021(2)) {
+    } else if (jj_2_1023(2)) {
       jj_consume_token(ASENSITIVE);
-    } else if (jj_2_1022(2)) {
+    } else if (jj_2_1024(2)) {
       jj_consume_token(AT);
-    } else if (jj_2_1023(2)) {
+    } else if (jj_2_1025(2)) {
       jj_consume_token(AVG);
-    } else if (jj_2_1024(2)) {
+    } else if (jj_2_1026(2)) {
       jj_consume_token(BEGIN_FRAME);
-    } else if (jj_2_1025(2)) {
+    } else if (jj_2_1027(2)) {
       jj_consume_token(BIGINT);
-    } else if (jj_2_1026(2)) {
+    } else if (jj_2_1028(2)) {
       jj_consume_token(BLOB);
-    } else if (jj_2_1027(2)) {
+    } else if (jj_2_1029(2)) {
       jj_consume_token(BREADTH);
-    } else if (jj_2_1028(2)) {
+    } else if (jj_2_1030(2)) {
       jj_consume_token(CALLED);
-    } else if (jj_2_1029(2)) {
+    } else if (jj_2_1031(2)) {
       jj_consume_token(CASCADED);
-    } else if (jj_2_1030(2)) {
+    } else if (jj_2_1032(2)) {
       jj_consume_token(CEIL);
-    } else if (jj_2_1031(2)) {
+    } else if (jj_2_1033(2)) {
       jj_consume_token(CHARACTER);
-    } else if (jj_2_1032(2)) {
+    } else if (jj_2_1034(2)) {
       jj_consume_token(CHECK);
-    } else if (jj_2_1033(2)) {
+    } else if (jj_2_1035(2)) {
       jj_consume_token(CLOSE);
-    } else if (jj_2_1034(2)) {
+    } else if (jj_2_1036(2)) {
       jj_consume_token(COLLATION);
-    } else if (jj_2_1035(2)) {
+    } else if (jj_2_1037(2)) {
       jj_consume_token(COMMIT);
-    } else if (jj_2_1036(2)) {
+    } else if (jj_2_1038(2)) {
       jj_consume_token(CONNECTION);
-    } else if (jj_2_1037(2)) {
+    } else if (jj_2_1039(2)) {
       jj_consume_token(CONTAINS);
-    } else if (jj_2_1038(2)) {
+    } else if (jj_2_1040(2)) {
       jj_consume_token(CORR);
-    } else if (jj_2_1039(2)) {
+    } else if (jj_2_1041(2)) {
       jj_consume_token(COVAR_POP);
-    } else if (jj_2_1040(2)) {
+    } else if (jj_2_1042(2)) {
       jj_consume_token(CUME_DIST);
-    } else if (jj_2_1041(2)) {
+    } else if (jj_2_1043(2)) {
       jj_consume_token(CURRENT_DEFAULT_TRANSFORM_GROUP);
-    } else if (jj_2_1042(2)) {
+    } else if (jj_2_1044(2)) {
       jj_consume_token(CURRENT_ROW);
-    } else if (jj_2_1043(2)) {
+    } else if (jj_2_1045(2)) {
       jj_consume_token(CURRENT_TIMESTAMP);
-    } else if (jj_2_1044(2)) {
+    } else if (jj_2_1046(2)) {
       jj_consume_token(CYCLE);
-    } else if (jj_2_1045(2)) {
+    } else if (jj_2_1047(2)) {
       jj_consume_token(DAY);
-    } else if (jj_2_1046(2)) {
+    } else if (jj_2_1048(2)) {
       jj_consume_token(DECIMAL);
-    } else if (jj_2_1047(2)) {
+    } else if (jj_2_1049(2)) {
       jj_consume_token(DEFERRED);
-    } else if (jj_2_1048(2)) {
+    } else if (jj_2_1050(2)) {
       jj_consume_token(DEREF);
-    } else if (jj_2_1049(2)) {
+    } else if (jj_2_1051(2)) {
       jj_consume_token(DETERMINISTIC);
-    } else if (jj_2_1050(2)) {
+    } else if (jj_2_1052(2)) {
       jj_consume_token(DISCONNECT);
-    } else if (jj_2_1051(2)) {
+    } else if (jj_2_1053(2)) {
       jj_consume_token(DYNAMIC);
-    } else if (jj_2_1052(2)) {
+    } else if (jj_2_1054(2)) {
       jj_consume_token(ELSE);
-    } else if (jj_2_1053(2)) {
+    } else if (jj_2_1055(2)) {
       jj_consume_token(END_FRAME);
-    } else if (jj_2_1054(2)) {
+    } else if (jj_2_1056(2)) {
       jj_consume_token(ESCAPE);
-    } else if (jj_2_1055(2)) {
+    } else if (jj_2_1057(2)) {
       jj_consume_token(EXEC);
-    } else if (jj_2_1056(2)) {
+    } else if (jj_2_1058(2)) {
       jj_consume_token(EXP);
-    } else if (jj_2_1057(2)) {
+    } else if (jj_2_1059(2)) {
       jj_consume_token(EXTRACT);
-    } else if (jj_2_1058(2)) {
+    } else if (jj_2_1060(2)) {
       jj_consume_token(FIRST);
-    } else if (jj_2_1059(2)) {
+    } else if (jj_2_1061(2)) {
       jj_consume_token(FLOOR);
-    } else if (jj_2_1060(2)) {
+    } else if (jj_2_1062(2)) {
       jj_consume_token(FOUND);
-    } else if (jj_2_1061(2)) {
+    } else if (jj_2_1063(2)) {
       jj_consume_token(FUNCTION);
-    } else if (jj_2_1062(2)) {
+    } else if (jj_2_1064(2)) {
       jj_consume_token(GENERAL);
-    } else if (jj_2_1063(2)) {
+    } else if (jj_2_1065(2)) {
       jj_consume_token(GO);
-    } else if (jj_2_1064(2)) {
+    } else if (jj_2_1066(2)) {
       jj_consume_token(HOLD);
-    } else if (jj_2_1065(2)) {
+    } else if (jj_2_1067(2)) {
       jj_consume_token(IMMEDIATE);
-    } else if (jj_2_1066(2)) {
+    } else if (jj_2_1068(2)) {
       jj_consume_token(INDICATOR);
-    } else if (jj_2_1067(2)) {
+    } else if (jj_2_1069(2)) {
       jj_consume_token(INOUT);
-    } else if (jj_2_1068(2)) {
+    } else if (jj_2_1070(2)) {
       jj_consume_token(INT);
-    } else if (jj_2_1069(2)) {
+    } else if (jj_2_1071(2)) {
       jj_consume_token(IS);
-    } else if (jj_2_1070(2)) {
+    } else if (jj_2_1072(2)) {
       jj_consume_token(JSON_ARRAYAGG);
-    } else if (jj_2_1071(2)) {
+    } else if (jj_2_1073(2)) {
       jj_consume_token(JSON_OBJECTAGG);
-    } else if (jj_2_1072(2)) {
+    } else if (jj_2_1074(2)) {
       jj_consume_token(K);
-    } else if (jj_2_1073(2)) {
+    } else if (jj_2_1075(2)) {
       jj_consume_token(LANGUAGE);
-    } else if (jj_2_1074(2)) {
+    } else if (jj_2_1076(2)) {
       jj_consume_token(LAST_VALUE);
-    } else if (jj_2_1075(2)) {
+    } else if (jj_2_1077(2)) {
       jj_consume_token(LENGTH);
-    } else if (jj_2_1076(2)) {
+    } else if (jj_2_1078(2)) {
       jj_consume_token(LIKE_REGEX);
-    } else if (jj_2_1077(2)) {
+    } else if (jj_2_1079(2)) {
       jj_consume_token(LOCALTIME);
-    } else if (jj_2_1078(2)) {
+    } else if (jj_2_1080(2)) {
       jj_consume_token(LOWER);
-    } else if (jj_2_1079(2)) {
+    } else if (jj_2_1081(2)) {
       jj_consume_token(MATCH);
-    } else if (jj_2_1080(2)) {
+    } else if (jj_2_1082(2)) {
       jj_consume_token(MAX);
-    } else if (jj_2_1081(2)) {
+    } else if (jj_2_1083(2)) {
       jj_consume_token(METHOD);
-    } else if (jj_2_1082(2)) {
+    } else if (jj_2_1084(2)) {
       jj_consume_token(MOD);
-    } else if (jj_2_1083(2)) {
+    } else if (jj_2_1085(2)) {
       jj_consume_token(MONTH);
-    } else if (jj_2_1084(2)) {
+    } else if (jj_2_1086(2)) {
       jj_consume_token(NAMES);
-    } else if (jj_2_1085(2)) {
+    } else if (jj_2_1087(2)) {
       jj_consume_token(NCLOB);
-    } else if (jj_2_1086(2)) {
+    } else if (jj_2_1088(2)) {
       jj_consume_token(NORMALIZE);
-    } else if (jj_2_1087(2)) {
+    } else if (jj_2_1089(2)) {
       jj_consume_token(NTILE);
-    } else if (jj_2_1088(2)) {
+    } else if (jj_2_1090(2)) {
       jj_consume_token(OBJECT);
-    } else if (jj_2_1089(2)) {
+    } else if (jj_2_1091(2)) {
       jj_consume_token(OF);
-    } else if (jj_2_1090(2)) {
+    } else if (jj_2_1092(2)) {
       jj_consume_token(ONE);
-    } else if (jj_2_1091(2)) {
+    } else if (jj_2_1093(2)) {
       jj_consume_token(OPTION);
-    } else if (jj_2_1092(2)) {
+    } else if (jj_2_1094(2)) {
       jj_consume_token(OUT);
-    } else if (jj_2_1093(2)) {
+    } else if (jj_2_1095(2)) {
       jj_consume_token(OVERLAY);
-    } else if (jj_2_1094(2)) {
+    } else if (jj_2_1096(2)) {
       jj_consume_token(PARTIAL);
-    } else if (jj_2_1095(2)) {
+    } else if (jj_2_1097(2)) {
       jj_consume_token(PERCENT);
-    } else if (jj_2_1096(2)) {
+    } else if (jj_2_1098(2)) {
       jj_consume_token(PERCENT_RANK);
-    } else if (jj_2_1097(2)) {
+    } else if (jj_2_1099(2)) {
       jj_consume_token(PORTION);
-    } else if (jj_2_1098(2)) {
+    } else if (jj_2_1100(2)) {
       jj_consume_token(POWER);
-    } else if (jj_2_1099(2)) {
+    } else if (jj_2_1101(2)) {
       jj_consume_token(PREPARE);
-    } else if (jj_2_1100(2)) {
+    } else if (jj_2_1102(2)) {
       jj_consume_token(PRIOR);
-    } else if (jj_2_1101(2)) {
+    } else if (jj_2_1103(2)) {
       jj_consume_token(PUBLIC);
-    } else if (jj_2_1102(2)) {
+    } else if (jj_2_1104(2)) {
       jj_consume_token(READ);
-    } else if (jj_2_1103(2)) {
+    } else if (jj_2_1105(2)) {
       jj_consume_token(RECURSIVE);
-    } else if (jj_2_1104(2)) {
+    } else if (jj_2_1106(2)) {
       jj_consume_token(REFERENCING);
-    } else if (jj_2_1105(2)) {
+    } else if (jj_2_1107(2)) {
       jj_consume_token(REGR_COUNT);
-    } else if (jj_2_1106(2)) {
+    } else if (jj_2_1108(2)) {
       jj_consume_token(REGR_SLOPE);
-    } else if (jj_2_1107(2)) {
+    } else if (jj_2_1109(2)) {
       jj_consume_token(REGR_SYY);
-    } else if (jj_2_1108(2)) {
+    } else if (jj_2_1110(2)) {
       jj_consume_token(REPLACE);
-    } else if (jj_2_1109(2)) {
+    } else if (jj_2_1111(2)) {
       jj_consume_token(RESULT);
-    } else if (jj_2_1110(2)) {
+    } else if (jj_2_1112(2)) {
       jj_consume_token(REVOKE);
-    } else if (jj_2_1111(2)) {
+    } else if (jj_2_1113(2)) {
       jj_consume_token(ROUTINE);
-    } else if (jj_2_1112(2)) {
+    } else if (jj_2_1114(2)) {
       jj_consume_token(SAVEPOINT);
-    } else if (jj_2_1113(2)) {
+    } else if (jj_2_1115(2)) {
       jj_consume_token(SCROLL);
-    } else if (jj_2_1114(2)) {
+    } else if (jj_2_1116(2)) {
       jj_consume_token(SECTION);
-    } else if (jj_2_1115(2)) {
+    } else if (jj_2_1117(2)) {
       jj_consume_token(SESSION);
-    } else if (jj_2_1116(2)) {
+    } else if (jj_2_1118(2)) {
       jj_consume_token(SIMILAR);
-    } else if (jj_2_1117(2)) {
+    } else if (jj_2_1119(2)) {
       jj_consume_token(SPACE);
-    } else if (jj_2_1118(2)) {
+    } else if (jj_2_1120(2)) {
       jj_consume_token(SQL);
-    } else if (jj_2_1119(2)) {
+    } else if (jj_2_1121(2)) {
       jj_consume_token(SQLWARNING);
-    } else if (jj_2_1120(2)) {
+    } else if (jj_2_1122(2)) {
       jj_consume_token(STATE);
-    } else if (jj_2_1121(2)) {
+    } else if (jj_2_1123(2)) {
       jj_consume_token(STDDEV_SAMP);
-    } else if (jj_2_1122(2)) {
+    } else if (jj_2_1124(2)) {
       jj_consume_token(SUBSTRING);
-    } else if (jj_2_1123(2)) {
+    } else if (jj_2_1125(2)) {
       jj_consume_token(SUM);
-    } else if (jj_2_1124(2)) {
+    } else if (jj_2_1126(2)) {
       jj_consume_token(SYSTEM_TIME);
-    } else if (jj_2_1125(2)) {
+    } else if (jj_2_1127(2)) {
       jj_consume_token(TIMEZONE_HOUR);
-    } else if (jj_2_1126(2)) {
+    } else if (jj_2_1128(2)) {
       jj_consume_token(TO);
-    } else if (jj_2_1127(2)) {
+    } else if (jj_2_1129(2)) {
       jj_consume_token(TRANSLATE);
-    } else if (jj_2_1128(2)) {
+    } else if (jj_2_1130(2)) {
       jj_consume_token(TREAT);
-    } else if (jj_2_1129(2)) {
+    } else if (jj_2_1131(2)) {
       jj_consume_token(TRIM_ARRAY);
-    } else if (jj_2_1130(2)) {
+    } else if (jj_2_1132(2)) {
       jj_consume_token(UESCAPE);
-    } else if (jj_2_1131(2)) {
+    } else if (jj_2_1133(2)) {
       jj_consume_token(UNKNOWN);
-    } else if (jj_2_1132(2)) {
+    } else if (jj_2_1134(2)) {
       jj_consume_token(USAGE);
-    } else if (jj_2_1133(2)) {
+    } else if (jj_2_1135(2)) {
       jj_consume_token(VALUE_OF);
-    } else if (jj_2_1134(2)) {
+    } else if (jj_2_1136(2)) {
       jj_consume_token(VARYING);
-    } else if (jj_2_1135(2)) {
+    } else if (jj_2_1137(2)) {
       jj_consume_token(VERSION);
-    } else if (jj_2_1136(2)) {
+    } else if (jj_2_1138(2)) {
       jj_consume_token(WEEK);
-    } else if (jj_2_1137(2)) {
+    } else if (jj_2_1139(2)) {
       jj_consume_token(WITHIN);
-    } else if (jj_2_1138(2)) {
+    } else if (jj_2_1140(2)) {
       jj_consume_token(WRITE);
     } else {
       jj_consume_token(-1);
@@ -9156,267 +9167,267 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** @see #NonReservedKeyWord */
   final public void NonReservedKeyWord1of3() throws ParseException {
-    if (jj_2_1139(2)) {
+    if (jj_2_1141(2)) {
       jj_consume_token(TEMPLATE);
-    } else if (jj_2_1140(2)) {
+    } else if (jj_2_1142(2)) {
       jj_consume_token(ATOMICITY);
-    } else if (jj_2_1141(2)) {
+    } else if (jj_2_1143(2)) {
       jj_consume_token(CACHE_NAME);
-    } else if (jj_2_1142(2)) {
+    } else if (jj_2_1144(2)) {
       jj_consume_token(ENCRYPTED);
-    } else if (jj_2_1143(2)) {
+    } else if (jj_2_1145(2)) {
       jj_consume_token(LOGGING);
-    } else if (jj_2_1144(2)) {
+    } else if (jj_2_1146(2)) {
       jj_consume_token(KILL);
-    } else if (jj_2_1145(2)) {
+    } else if (jj_2_1147(2)) {
       jj_consume_token(SERVICE);
-    } else if (jj_2_1146(2)) {
+    } else if (jj_2_1148(2)) {
       jj_consume_token(QUERY);
-    } else if (jj_2_1147(2)) {
+    } else if (jj_2_1149(2)) {
       jj_consume_token(ABS);
-    } else if (jj_2_1148(2)) {
+    } else if (jj_2_1150(2)) {
       jj_consume_token(ADD);
-    } else if (jj_2_1149(2)) {
+    } else if (jj_2_1151(2)) {
       jj_consume_token(ALLOW);
-    } else if (jj_2_1150(2)) {
+    } else if (jj_2_1152(2)) {
       jj_consume_token(ARE);
-    } else if (jj_2_1151(2)) {
+    } else if (jj_2_1153(2)) {
       jj_consume_token(AS);
-    } else if (jj_2_1152(2)) {
+    } else if (jj_2_1154(2)) {
       jj_consume_token(ASSERTION);
-    } else if (jj_2_1153(2)) {
+    } else if (jj_2_1155(2)) {
       jj_consume_token(ATOMIC);
-    } else if (jj_2_1154(2)) {
+    } else if (jj_2_1156(2)) {
       jj_consume_token(BEFORE);
-    } else if (jj_2_1155(2)) {
+    } else if (jj_2_1157(2)) {
       jj_consume_token(BEGIN_PARTITION);
-    } else if (jj_2_1156(2)) {
+    } else if (jj_2_1158(2)) {
       jj_consume_token(BINARY);
-    } else if (jj_2_1157(2)) {
+    } else if (jj_2_1159(2)) {
       jj_consume_token(BOOLEAN);
-    } else if (jj_2_1158(2)) {
+    } else if (jj_2_1160(2)) {
       jj_consume_token(BY);
-    } else if (jj_2_1159(2)) {
+    } else if (jj_2_1161(2)) {
       jj_consume_token(CARDINALITY);
-    } else if (jj_2_1160(2)) {
+    } else if (jj_2_1162(2)) {
       jj_consume_token(CAST);
-    } else if (jj_2_1161(2)) {
+    } else if (jj_2_1163(2)) {
       jj_consume_token(CEILING);
-    } else if (jj_2_1162(2)) {
+    } else if (jj_2_1164(2)) {
       jj_consume_token(CHARACTER_LENGTH);
-    } else if (jj_2_1163(2)) {
+    } else if (jj_2_1165(2)) {
       jj_consume_token(CLASSIFIER);
-    } else if (jj_2_1164(2)) {
+    } else if (jj_2_1166(2)) {
       jj_consume_token(COALESCE);
-    } else if (jj_2_1165(2)) {
+    } else if (jj_2_1167(2)) {
       jj_consume_token(COLLECT);
-    } else if (jj_2_1166(2)) {
+    } else if (jj_2_1168(2)) {
       jj_consume_token(CONDITION);
-    } else if (jj_2_1167(2)) {
+    } else if (jj_2_1169(2)) {
       jj_consume_token(CONSTRAINTS);
-    } else if (jj_2_1168(2)) {
+    } else if (jj_2_1170(2)) {
       jj_consume_token(CONTINUE);
-    } else if (jj_2_1169(2)) {
+    } else if (jj_2_1171(2)) {
       jj_consume_token(CORRESPONDING);
-    } else if (jj_2_1170(2)) {
+    } else if (jj_2_1172(2)) {
       jj_consume_token(COVAR_SAMP);
-    } else if (jj_2_1171(2)) {
+    } else if (jj_2_1173(2)) {
       jj_consume_token(CURRENT_CATALOG);
-    } else if (jj_2_1172(2)) {
+    } else if (jj_2_1174(2)) {
       jj_consume_token(CURRENT_PATH);
-    } else if (jj_2_1173(2)) {
+    } else if (jj_2_1175(2)) {
       jj_consume_token(CURRENT_SCHEMA);
-    } else if (jj_2_1174(2)) {
+    } else if (jj_2_1176(2)) {
       jj_consume_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE);
-    } else if (jj_2_1175(2)) {
+    } else if (jj_2_1177(2)) {
       jj_consume_token(DATA);
-    } else if (jj_2_1176(2)) {
+    } else if (jj_2_1178(2)) {
       jj_consume_token(DEALLOCATE);
-    } else if (jj_2_1177(2)) {
+    } else if (jj_2_1179(2)) {
       jj_consume_token(DECLARE);
-    } else if (jj_2_1178(2)) {
+    } else if (jj_2_1180(2)) {
       jj_consume_token(DENSE_RANK);
-    } else if (jj_2_1179(2)) {
+    } else if (jj_2_1181(2)) {
       jj_consume_token(DESC);
-    } else if (jj_2_1180(2)) {
+    } else if (jj_2_1182(2)) {
       jj_consume_token(DIAGNOSTICS);
-    } else if (jj_2_1181(2)) {
+    } else if (jj_2_1183(2)) {
       jj_consume_token(DOMAIN);
-    } else if (jj_2_1182(2)) {
+    } else if (jj_2_1184(2)) {
       jj_consume_token(EACH);
-    } else if (jj_2_1183(2)) {
+    } else if (jj_2_1185(2)) {
       jj_consume_token(EMPTY);
-    } else if (jj_2_1184(2)) {
+    } else if (jj_2_1186(2)) {
       jj_consume_token(END_PARTITION);
-    } else if (jj_2_1185(2)) {
+    } else if (jj_2_1187(2)) {
       jj_consume_token(EVERY);
-    } else if (jj_2_1186(2)) {
+    } else if (jj_2_1188(2)) {
       jj_consume_token(EXECUTE);
-    } else if (jj_2_1187(2)) {
+    } else if (jj_2_1189(2)) {
       jj_consume_token(EXTEND);
-    } else if (jj_2_1188(2)) {
+    } else if (jj_2_1190(2)) {
       jj_consume_token(FALSE);
-    } else if (jj_2_1189(2)) {
+    } else if (jj_2_1191(2)) {
       jj_consume_token(FIRST_VALUE);
-    } else if (jj_2_1190(2)) {
+    } else if (jj_2_1192(2)) {
       jj_consume_token(FOR);
-    } else if (jj_2_1191(2)) {
+    } else if (jj_2_1193(2)) {
       jj_consume_token(FRAME_ROW);
-    } else if (jj_2_1192(2)) {
+    } else if (jj_2_1194(2)) {
       jj_consume_token(FUSION);
-    } else if (jj_2_1193(2)) {
+    } else if (jj_2_1195(2)) {
       jj_consume_token(GET);
-    } else if (jj_2_1194(2)) {
+    } else if (jj_2_1196(2)) {
       jj_consume_token(GOTO);
-    } else if (jj_2_1195(2)) {
+    } else if (jj_2_1197(2)) {
       jj_consume_token(HOUR);
-    } else if (jj_2_1196(2)) {
+    } else if (jj_2_1198(2)) {
       jj_consume_token(IMMEDIATELY);
-    } else if (jj_2_1197(2)) {
+    } else if (jj_2_1199(2)) {
       jj_consume_token(INITIAL);
-    } else if (jj_2_1198(2)) {
+    } else if (jj_2_1200(2)) {
       jj_consume_token(INPUT);
-    } else if (jj_2_1199(2)) {
+    } else if (jj_2_1201(2)) {
       jj_consume_token(INTEGER);
-    } else if (jj_2_1200(2)) {
+    } else if (jj_2_1202(2)) {
       jj_consume_token(ISOLATION);
-    } else if (jj_2_1201(2)) {
+    } else if (jj_2_1203(2)) {
       jj_consume_token(JSON_EXISTS);
-    } else if (jj_2_1202(2)) {
+    } else if (jj_2_1204(2)) {
       jj_consume_token(JSON_QUERY);
-    } else if (jj_2_1203(2)) {
+    } else if (jj_2_1205(2)) {
       jj_consume_token(KEY);
-    } else if (jj_2_1204(2)) {
+    } else if (jj_2_1206(2)) {
       jj_consume_token(LARGE);
-    } else if (jj_2_1205(2)) {
+    } else if (jj_2_1207(2)) {
       jj_consume_token(LEAD);
-    } else if (jj_2_1206(2)) {
+    } else if (jj_2_1208(2)) {
       jj_consume_token(LEVEL);
-    } else if (jj_2_1207(2)) {
+    } else if (jj_2_1209(2)) {
       jj_consume_token(LN);
-    } else if (jj_2_1208(2)) {
+    } else if (jj_2_1210(2)) {
       jj_consume_token(LOCALTIMESTAMP);
-    } else if (jj_2_1209(2)) {
+    } else if (jj_2_1211(2)) {
       jj_consume_token(M);
-    } else if (jj_2_1210(2)) {
+    } else if (jj_2_1212(2)) {
       jj_consume_token(MATCHES);
-    } else if (jj_2_1211(2)) {
+    } else if (jj_2_1213(2)) {
       jj_consume_token(MEASURES);
-    } else if (jj_2_1212(2)) {
+    } else if (jj_2_1214(2)) {
       jj_consume_token(MIN);
-    } else if (jj_2_1213(2)) {
+    } else if (jj_2_1215(2)) {
       jj_consume_token(MODIFIES);
-    } else if (jj_2_1214(2)) {
+    } else if (jj_2_1216(2)) {
       jj_consume_token(MULTISET);
-    } else if (jj_2_1215(2)) {
+    } else if (jj_2_1217(2)) {
       jj_consume_token(NATIONAL);
-    } else if (jj_2_1216(2)) {
+    } else if (jj_2_1218(2)) {
       jj_consume_token(NO);
-    } else if (jj_2_1217(2)) {
+    } else if (jj_2_1219(2)) {
       jj_consume_token(NOT);
-    } else if (jj_2_1218(2)) {
+    } else if (jj_2_1220(2)) {
       jj_consume_token(NULLIF);
-    } else if (jj_2_1219(2)) {
+    } else if (jj_2_1221(2)) {
       jj_consume_token(OCCURRENCES_REGEX);
-    } else if (jj_2_1220(2)) {
+    } else if (jj_2_1222(2)) {
       jj_consume_token(OLD);
-    } else if (jj_2_1221(2)) {
+    } else if (jj_2_1223(2)) {
       jj_consume_token(ONLY);
-    } else if (jj_2_1222(2)) {
+    } else if (jj_2_1224(2)) {
       jj_consume_token(OR);
-    } else if (jj_2_1223(2)) {
+    } else if (jj_2_1225(2)) {
       jj_consume_token(OUTPUT);
-    } else if (jj_2_1224(2)) {
+    } else if (jj_2_1226(2)) {
       jj_consume_token(PAD);
-    } else if (jj_2_1225(2)) {
+    } else if (jj_2_1227(2)) {
       jj_consume_token(PATH);
-    } else if (jj_2_1226(2)) {
+    } else if (jj_2_1228(2)) {
       jj_consume_token(PERCENTILE_CONT);
-    } else if (jj_2_1227(2)) {
+    } else if (jj_2_1229(2)) {
       jj_consume_token(PERIOD);
-    } else if (jj_2_1228(2)) {
+    } else if (jj_2_1230(2)) {
       jj_consume_token(POSITION);
-    } else if (jj_2_1229(2)) {
+    } else if (jj_2_1231(2)) {
       jj_consume_token(PRECEDES);
-    } else if (jj_2_1230(2)) {
+    } else if (jj_2_1232(2)) {
       jj_consume_token(PRESERVE);
-    } else if (jj_2_1231(2)) {
+    } else if (jj_2_1233(2)) {
       jj_consume_token(PRIVILEGES);
-    } else if (jj_2_1232(2)) {
+    } else if (jj_2_1234(2)) {
       jj_consume_token(QUARTER);
-    } else if (jj_2_1233(2)) {
+    } else if (jj_2_1235(2)) {
       jj_consume_token(READS);
-    } else if (jj_2_1234(2)) {
+    } else if (jj_2_1236(2)) {
       jj_consume_token(REF);
-    } else if (jj_2_1235(2)) {
+    } else if (jj_2_1237(2)) {
       jj_consume_token(REGR_AVGX);
-    } else if (jj_2_1236(2)) {
+    } else if (jj_2_1238(2)) {
       jj_consume_token(REGR_INTERCEPT);
-    } else if (jj_2_1237(2)) {
+    } else if (jj_2_1239(2)) {
       jj_consume_token(REGR_SXX);
-    } else if (jj_2_1238(2)) {
+    } else if (jj_2_1240(2)) {
       jj_consume_token(RELATIVE);
-    } else if (jj_2_1239(2)) {
+    } else if (jj_2_1241(2)) {
       jj_consume_token(RESET);
-    } else if (jj_2_1240(2)) {
+    } else if (jj_2_1242(2)) {
       jj_consume_token(RETURN);
-    } else if (jj_2_1241(2)) {
+    } else if (jj_2_1243(2)) {
       jj_consume_token(ROLE);
-    } else if (jj_2_1242(2)) {
+    } else if (jj_2_1244(2)) {
       jj_consume_token(ROW_NUMBER);
-    } else if (jj_2_1243(2)) {
+    } else if (jj_2_1245(2)) {
       jj_consume_token(SCHEMA);
-    } else if (jj_2_1244(2)) {
+    } else if (jj_2_1246(2)) {
       jj_consume_token(SEARCH);
-    } else if (jj_2_1245(2)) {
+    } else if (jj_2_1247(2)) {
       jj_consume_token(SEEK);
-    } else if (jj_2_1246(2)) {
+    } else if (jj_2_1248(2)) {
       jj_consume_token(SESSION_USER);
-    } else if (jj_2_1247(2)) {
+    } else if (jj_2_1249(2)) {
       jj_consume_token(SIZE);
-    } else if (jj_2_1248(2)) {
+    } else if (jj_2_1250(2)) {
       jj_consume_token(SPECIFIC);
-    } else if (jj_2_1249(2)) {
+    } else if (jj_2_1251(2)) {
       jj_consume_token(SQLEXCEPTION);
-    } else if (jj_2_1250(2)) {
+    } else if (jj_2_1252(2)) {
       jj_consume_token(SQRT);
-    } else if (jj_2_1251(2)) {
+    } else if (jj_2_1253(2)) {
       jj_consume_token(STATIC);
-    } else if (jj_2_1252(2)) {
+    } else if (jj_2_1254(2)) {
       jj_consume_token(SUBMULTISET);
-    } else if (jj_2_1253(2)) {
+    } else if (jj_2_1255(2)) {
       jj_consume_token(SUBSTRING_REGEX);
-    } else if (jj_2_1254(2)) {
+    } else if (jj_2_1256(2)) {
       jj_consume_token(SYMMETRIC);
-    } else if (jj_2_1255(2)) {
+    } else if (jj_2_1257(2)) {
       jj_consume_token(SYSTEM_USER);
-    } else if (jj_2_1256(2)) {
+    } else if (jj_2_1258(2)) {
       jj_consume_token(TIMEZONE_MINUTE);
-    } else if (jj_2_1257(2)) {
+    } else if (jj_2_1259(2)) {
       jj_consume_token(TRAILING);
-    } else if (jj_2_1258(2)) {
+    } else if (jj_2_1260(2)) {
       jj_consume_token(TRANSLATE_REGEX);
-    } else if (jj_2_1259(2)) {
+    } else if (jj_2_1261(2)) {
       jj_consume_token(TRIGGER);
-    } else if (jj_2_1260(2)) {
+    } else if (jj_2_1262(2)) {
       jj_consume_token(TRUE);
-    } else if (jj_2_1261(2)) {
+    } else if (jj_2_1263(2)) {
       jj_consume_token(UNDER);
-    } else if (jj_2_1262(2)) {
+    } else if (jj_2_1264(2)) {
       jj_consume_token(UPPER);
-    } else if (jj_2_1263(2)) {
+    } else if (jj_2_1265(2)) {
       jj_consume_token(USER);
-    } else if (jj_2_1264(2)) {
+    } else if (jj_2_1266(2)) {
       jj_consume_token(VARBINARY);
-    } else if (jj_2_1265(2)) {
+    } else if (jj_2_1267(2)) {
       jj_consume_token(VAR_POP);
-    } else if (jj_2_1266(2)) {
+    } else if (jj_2_1268(2)) {
       jj_consume_token(VERSIONING);
-    } else if (jj_2_1267(2)) {
+    } else if (jj_2_1269(2)) {
       jj_consume_token(WHENEVER);
-    } else if (jj_2_1268(2)) {
+    } else if (jj_2_1270(2)) {
       jj_consume_token(WITHOUT);
-    } else if (jj_2_1269(2)) {
+    } else if (jj_2_1271(2)) {
       jj_consume_token(YEAR);
     } else {
       jj_consume_token(-1);
@@ -9426,267 +9437,267 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
 
 /** @see #NonReservedKeyWord */
   final public void NonReservedKeyWord2of3() throws ParseException {
-    if (jj_2_1270(2)) {
+    if (jj_2_1272(2)) {
       jj_consume_token(BACKUPS);
-    } else if (jj_2_1271(2)) {
+    } else if (jj_2_1273(2)) {
       jj_consume_token(WRITE_SYNCHRONIZATION_MODE);
-    } else if (jj_2_1272(2)) {
+    } else if (jj_2_1274(2)) {
       jj_consume_token(DATA_REGION);
-    } else if (jj_2_1273(2)) {
+    } else if (jj_2_1275(2)) {
       jj_consume_token(PARALLEL);
-    } else if (jj_2_1274(2)) {
+    } else if (jj_2_1276(2)) {
       jj_consume_token(NOLOGGING);
-    } else if (jj_2_1275(2)) {
+    } else if (jj_2_1277(2)) {
       jj_consume_token(SCAN);
-    } else if (jj_2_1276(2)) {
+    } else if (jj_2_1278(2)) {
       jj_consume_token(COMPUTE);
-    } else if (jj_2_1277(2)) {
+    } else if (jj_2_1279(2)) {
       jj_consume_token(UUID);
-    } else if (jj_2_1278(2)) {
+    } else if (jj_2_1280(2)) {
       jj_consume_token(ABSOLUTE);
-    } else if (jj_2_1279(2)) {
+    } else if (jj_2_1281(2)) {
       jj_consume_token(AFTER);
-    } else if (jj_2_1280(2)) {
+    } else if (jj_2_1282(2)) {
       jj_consume_token(ALTER);
-    } else if (jj_2_1281(2)) {
+    } else if (jj_2_1283(2)) {
       jj_consume_token(ARRAY);
-    } else if (jj_2_1282(2)) {
+    } else if (jj_2_1284(2)) {
       jj_consume_token(ASC);
-    } else if (jj_2_1283(2)) {
+    } else if (jj_2_1285(2)) {
       jj_consume_token(ASYMMETRIC);
-    } else if (jj_2_1284(2)) {
+    } else if (jj_2_1286(2)) {
       jj_consume_token(AUTHORIZATION);
-    } else if (jj_2_1285(2)) {
+    } else if (jj_2_1287(2)) {
       jj_consume_token(BEGIN);
-    } else if (jj_2_1286(2)) {
+    } else if (jj_2_1288(2)) {
       jj_consume_token(BETWEEN);
-    } else if (jj_2_1287(2)) {
+    } else if (jj_2_1289(2)) {
       jj_consume_token(BIT);
-    } else if (jj_2_1288(2)) {
+    } else if (jj_2_1290(2)) {
       jj_consume_token(BOTH);
-    } else if (jj_2_1289(2)) {
+    } else if (jj_2_1291(2)) {
       jj_consume_token(C);
-    } else if (jj_2_1290(2)) {
+    } else if (jj_2_1292(2)) {
       jj_consume_token(CASCADE);
-    } else if (jj_2_1291(2)) {
+    } else if (jj_2_1293(2)) {
       jj_consume_token(CATALOG);
-    } else if (jj_2_1292(2)) {
+    } else if (jj_2_1294(2)) {
       jj_consume_token(CHAR);
-    } else if (jj_2_1293(2)) {
+    } else if (jj_2_1295(2)) {
       jj_consume_token(CHAR_LENGTH);
-    } else if (jj_2_1294(2)) {
+    } else if (jj_2_1296(2)) {
       jj_consume_token(CLOB);
-    } else if (jj_2_1295(2)) {
+    } else if (jj_2_1297(2)) {
       jj_consume_token(COLLATE);
-    } else if (jj_2_1296(2)) {
+    } else if (jj_2_1298(2)) {
       jj_consume_token(COLUMN);
-    } else if (jj_2_1297(2)) {
+    } else if (jj_2_1299(2)) {
       jj_consume_token(CONNECT);
-    } else if (jj_2_1298(2)) {
+    } else if (jj_2_1300(2)) {
       jj_consume_token(CONSTRUCTOR);
-    } else if (jj_2_1299(2)) {
+    } else if (jj_2_1301(2)) {
       jj_consume_token(CONVERT);
-    } else if (jj_2_1300(2)) {
+    } else if (jj_2_1302(2)) {
       jj_consume_token(COUNT);
-    } else if (jj_2_1301(2)) {
+    } else if (jj_2_1303(2)) {
       jj_consume_token(CUBE);
-    } else if (jj_2_1302(2)) {
+    } else if (jj_2_1304(2)) {
       jj_consume_token(CURRENT_DATE);
-    } else if (jj_2_1303(2)) {
+    } else if (jj_2_1305(2)) {
       jj_consume_token(CURRENT_ROLE);
-    } else if (jj_2_1304(2)) {
+    } else if (jj_2_1306(2)) {
       jj_consume_token(CURRENT_TIME);
-    } else if (jj_2_1305(2)) {
+    } else if (jj_2_1307(2)) {
       jj_consume_token(CURRENT_USER);
-    } else if (jj_2_1306(2)) {
+    } else if (jj_2_1308(2)) {
       jj_consume_token(DATE);
-    } else if (jj_2_1307(2)) {
+    } else if (jj_2_1309(2)) {
       jj_consume_token(DEC);
-    } else if (jj_2_1308(2)) {
+    } else if (jj_2_1310(2)) {
       jj_consume_token(DEFERRABLE);
-    } else if (jj_2_1309(2)) {
+    } else if (jj_2_1311(2)) {
       jj_consume_token(DEPTH);
-    } else if (jj_2_1310(2)) {
+    } else if (jj_2_1312(2)) {
       jj_consume_token(DESCRIPTOR);
-    } else if (jj_2_1311(2)) {
+    } else if (jj_2_1313(2)) {
       jj_consume_token(DISALLOW);
-    } else if (jj_2_1312(2)) {
+    } else if (jj_2_1314(2)) {
       jj_consume_token(DOUBLE);
-    } else if (jj_2_1313(2)) {
+    } else if (jj_2_1315(2)) {
       jj_consume_token(ELEMENT);
-    } else if (jj_2_1314(2)) {
+    } else if (jj_2_1316(2)) {
       jj_consume_token(END);
-    } else if (jj_2_1315(2)) {
+    } else if (jj_2_1317(2)) {
       jj_consume_token(EQUALS);
-    } else if (jj_2_1316(2)) {
+    } else if (jj_2_1318(2)) {
       jj_consume_token(EXCEPTION);
-    } else if (jj_2_1317(2)) {
+    } else if (jj_2_1319(2)) {
       jj_consume_token(EXISTS);
-    } else if (jj_2_1318(2)) {
+    } else if (jj_2_1320(2)) {
       jj_consume_token(EXTERNAL);
-    } else if (jj_2_1319(2)) {
+    } else if (jj_2_1321(2)) {
       jj_consume_token(FILTER);
-    } else if (jj_2_1320(2)) {
+    } else if (jj_2_1322(2)) {
       jj_consume_token(FLOAT);
-    } else if (jj_2_1321(2)) {
+    } else if (jj_2_1323(2)) {
       jj_consume_token(FOREIGN);
-    } else if (jj_2_1322(2)) {
+    } else if (jj_2_1324(2)) {
       jj_consume_token(FREE);
-    } else if (jj_2_1323(2)) {
+    } else if (jj_2_1325(2)) {
       jj_consume_token(G);
-    } else if (jj_2_1324(2)) {
+    } else if (jj_2_1326(2)) {
       jj_consume_token(GLOBAL);
-    } else if (jj_2_1325(2)) {
+    } else if (jj_2_1327(2)) {
       jj_consume_token(GROUPS);
-    } else if (jj_2_1326(2)) {
+    } else if (jj_2_1328(2)) {
       jj_consume_token(IDENTITY);
-    } else if (jj_2_1327(2)) {
+    } else if (jj_2_1329(2)) {
       jj_consume_token(IMPORT);
-    } else if (jj_2_1328(2)) {
+    } else if (jj_2_1330(2)) {
       jj_consume_token(INITIALLY);
-    } else if (jj_2_1329(2)) {
+    } else if (jj_2_1331(2)) {
       jj_consume_token(INSENSITIVE);
-    } else if (jj_2_1330(2)) {
+    } else if (jj_2_1332(2)) {
       jj_consume_token(INTERSECTION);
-    } else if (jj_2_1331(2)) {
+    } else if (jj_2_1333(2)) {
       jj_consume_token(JSON_ARRAY);
-    } else if (jj_2_1332(2)) {
+    } else if (jj_2_1334(2)) {
       jj_consume_token(JSON_OBJECT);
-    } else if (jj_2_1333(2)) {
+    } else if (jj_2_1335(2)) {
       jj_consume_token(JSON_VALUE);
-    } else if (jj_2_1334(2)) {
+    } else if (jj_2_1336(2)) {
       jj_consume_token(LAG);
-    } else if (jj_2_1335(2)) {
+    } else if (jj_2_1337(2)) {
       jj_consume_token(LAST);
-    } else if (jj_2_1336(2)) {
+    } else if (jj_2_1338(2)) {
       jj_consume_token(LEADING);
-    } else if (jj_2_1337(2)) {
+    } else if (jj_2_1339(2)) {
       jj_consume_token(LIKE);
-    } else if (jj_2_1338(2)) {
+    } else if (jj_2_1340(2)) {
       jj_consume_token(LOCAL);
-    } else if (jj_2_1339(2)) {
+    } else if (jj_2_1341(2)) {
       jj_consume_token(LOCATOR);
-    } else if (jj_2_1340(2)) {
+    } else if (jj_2_1342(2)) {
       jj_consume_token(MAP);
-    } else if (jj_2_1341(2)) {
+    } else if (jj_2_1343(2)) {
       jj_consume_token(MATCH_NUMBER);
-    } else if (jj_2_1342(2)) {
+    } else if (jj_2_1344(2)) {
       jj_consume_token(MEMBER);
-    } else if (jj_2_1343(2)) {
+    } else if (jj_2_1345(2)) {
       jj_consume_token(MINUTE);
-    } else if (jj_2_1344(2)) {
+    } else if (jj_2_1346(2)) {
       jj_consume_token(MODULE);
-    } else if (jj_2_1345(2)) {
+    } else if (jj_2_1347(2)) {
       jj_consume_token(NAME);
-    } else if (jj_2_1346(2)) {
+    } else if (jj_2_1348(2)) {
       jj_consume_token(NCHAR);
-    } else if (jj_2_1347(2)) {
+    } else if (jj_2_1349(2)) {
       jj_consume_token(NONE);
-    } else if (jj_2_1348(2)) {
+    } else if (jj_2_1350(2)) {
       jj_consume_token(NTH_VALUE);
-    } else if (jj_2_1349(2)) {
+    } else if (jj_2_1351(2)) {
       jj_consume_token(NUMERIC);
-    } else if (jj_2_1350(2)) {
+    } else if (jj_2_1352(2)) {
       jj_consume_token(OCTET_LENGTH);
-    } else if (jj_2_1351(2)) {
+    } else if (jj_2_1353(2)) {
       jj_consume_token(OMIT);
-    } else if (jj_2_1352(2)) {
+    } else if (jj_2_1354(2)) {
       jj_consume_token(OPEN);
-    } else if (jj_2_1353(2)) {
+    } else if (jj_2_1355(2)) {
       jj_consume_token(ORDINALITY);
-    } else if (jj_2_1354(2)) {
+    } else if (jj_2_1356(2)) {
       jj_consume_token(OVERLAPS);
-    } else if (jj_2_1355(2)) {
+    } else if (jj_2_1357(2)) {
       jj_consume_token(PARAMETER);
-    } else if (jj_2_1356(2)) {
+    } else if (jj_2_1358(2)) {
       jj_consume_token(PER);
-    } else if (jj_2_1357(2)) {
+    } else if (jj_2_1359(2)) {
       jj_consume_token(PERCENTILE_DISC);
-    } else if (jj_2_1358(2)) {
+    } else if (jj_2_1360(2)) {
       jj_consume_token(PERMUTE);
-    } else if (jj_2_1359(2)) {
+    } else if (jj_2_1361(2)) {
       jj_consume_token(POSITION_REGEX);
-    } else if (jj_2_1360(2)) {
+    } else if (jj_2_1362(2)) {
       jj_consume_token(PRECISION);
-    } else if (jj_2_1361(2)) {
+    } else if (jj_2_1363(2)) {
       jj_consume_token(PREV);
-    } else if (jj_2_1362(2)) {
+    } else if (jj_2_1364(2)) {
       jj_consume_token(PROCEDURE);
-    } else if (jj_2_1363(2)) {
+    } else if (jj_2_1365(2)) {
       jj_consume_token(RANK);
-    } else if (jj_2_1364(2)) {
+    } else if (jj_2_1366(2)) {
       jj_consume_token(REAL);
-    } else if (jj_2_1365(2)) {
+    } else if (jj_2_1367(2)) {
       jj_consume_token(REFERENCES);
-    } else if (jj_2_1366(2)) {
+    } else if (jj_2_1368(2)) {
       jj_consume_token(REGR_AVGY);
-    } else if (jj_2_1367(2)) {
+    } else if (jj_2_1369(2)) {
       jj_consume_token(REGR_R2);
-    } else if (jj_2_1368(2)) {
+    } else if (jj_2_1370(2)) {
       jj_consume_token(REGR_SXY);
-    } else if (jj_2_1369(2)) {
+    } else if (jj_2_1371(2)) {
       jj_consume_token(RELEASE);
-    } else if (jj_2_1370(2)) {
+    } else if (jj_2_1372(2)) {
       jj_consume_token(RESTRICT);
-    } else if (jj_2_1371(2)) {
+    } else if (jj_2_1373(2)) {
       jj_consume_token(RETURNS);
-    } else if (jj_2_1372(2)) {
+    } else if (jj_2_1374(2)) {
       jj_consume_token(ROLLBACK);
-    } else if (jj_2_1373(2)) {
+    } else if (jj_2_1375(2)) {
       jj_consume_token(RUNNING);
-    } else if (jj_2_1374(2)) {
+    } else if (jj_2_1376(2)) {
       jj_consume_token(SCOPE);
-    } else if (jj_2_1375(2)) {
+    } else if (jj_2_1377(2)) {
       jj_consume_token(SECOND);
-    } else if (jj_2_1376(2)) {
+    } else if (jj_2_1378(2)) {
       jj_consume_token(SENSITIVE);
-    } else if (jj_2_1377(2)) {
+    } else if (jj_2_1379(2)) {
       jj_consume_token(SHOW);
-    } else if (jj_2_1378(2)) {
+    } else if (jj_2_1380(2)) {
       jj_consume_token(SMALLINT);
-    } else if (jj_2_1379(2)) {
+    } else if (jj_2_1381(2)) {
       jj_consume_token(SPECIFICTYPE);
-    } else if (jj_2_1380(2)) {
+    } else if (jj_2_1382(2)) {
       jj_consume_token(SQLSTATE);
-    } else if (jj_2_1381(2)) {
+    } else if (jj_2_1383(2)) {
       jj_consume_token(START);
-    } else if (jj_2_1382(2)) {
+    } else if (jj_2_1384(2)) {
       jj_consume_token(STDDEV_POP);
-    } else if (jj_2_1383(2)) {
+    } else if (jj_2_1385(2)) {
       jj_consume_token(SUBSET);
-    } else if (jj_2_1384(2)) {
+    } else if (jj_2_1386(2)) {
       jj_consume_token(SUCCEEDS);
-    } else if (jj_2_1385(2)) {
+    } else if (jj_2_1387(2)) {
       jj_consume_token(SYSTEM);
-    } else if (jj_2_1386(2)) {
+    } else if (jj_2_1388(2)) {
       jj_consume_token(TEMPORARY);
-    } else if (jj_2_1387(2)) {
+    } else if (jj_2_1389(2)) {
       jj_consume_token(TINYINT);
-    } else if (jj_2_1388(2)) {
+    } else if (jj_2_1390(2)) {
       jj_consume_token(TRANSACTION);
-    } else if (jj_2_1389(2)) {
+    } else if (jj_2_1391(2)) {
       jj_consume_token(TRANSLATION);
-    } else if (jj_2_1390(2)) {
+    } else if (jj_2_1392(2)) {
       jj_consume_token(TRIM);
-    } else if (jj_2_1391(2)) {
+    } else if (jj_2_1393(2)) {
       jj_consume_token(TRUNCATE);
-    } else if (jj_2_1392(2)) {
+    } else if (jj_2_1394(2)) {
       jj_consume_token(UNIQUE);
-    } else if (jj_2_1393(2)) {
+    } else if (jj_2_1395(2)) {
       jj_consume_token(UPSERT);
-    } else if (jj_2_1394(2)) {
+    } else if (jj_2_1396(2)) {
       jj_consume_token(VALUE);
-    } else if (jj_2_1395(2)) {
+    } else if (jj_2_1397(2)) {
       jj_consume_token(VARCHAR);
-    } else if (jj_2_1396(2)) {
+    } else if (jj_2_1398(2)) {
       jj_consume_token(VAR_SAMP);
-    } else if (jj_2_1397(2)) {
+    } else if (jj_2_1399(2)) {
       jj_consume_token(VIEW);
-    } else if (jj_2_1398(2)) {
+    } else if (jj_2_1400(2)) {
       jj_consume_token(WIDTH_BUCKET);
-    } else if (jj_2_1399(2)) {
+    } else if (jj_2_1401(2)) {
       jj_consume_token(WORK);
-    } else if (jj_2_1400(2)) {
+    } else if (jj_2_1402(2)) {
       jj_consume_token(ZONE);
     } else {
       jj_consume_token(-1);
@@ -19511,10 +19522,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     finally { jj_save(1399, xla); }
   }
 
-  final private boolean jj_3_685() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_66()) return true;
-    return false;
+  final private boolean jj_2_1401(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1401(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1400, xla); }
+  }
+
+  final private boolean jj_2_1402(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1402(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1401, xla); }
   }
 
   final private boolean jj_3R_312() {
@@ -19526,20 +19545,20 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_237() {
+  final private boolean jj_3_239() {
     if (jj_3R_61()) return true;
     return false;
   }
 
-  final private boolean jj_3_234() {
+  final private boolean jj_3_236() {
     if (jj_scan_token(ROW)) return true;
     return false;
   }
 
-  final private boolean jj_3_236() {
+  final private boolean jj_3_238() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_234()) {
+    if (jj_3_236()) {
     jj_scanpos = xsp;
     if (jj_3R_139()) return true;
     }
@@ -19547,18 +19566,18 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_684() {
+  final private boolean jj_3_686() {
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  final private boolean jj_3_683() {
+  final private boolean jj_3_685() {
     if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  final private boolean jj_3_235() {
+  final private boolean jj_3_237() {
     if (jj_scan_token(LPAREN)) return true;
     if (jj_scan_token(ROW)) return true;
     if (jj_3R_138()) return true;
@@ -19568,39 +19587,39 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_137() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_235()) {
+    if (jj_3_237()) {
     jj_scanpos = xsp;
-    if (jj_3_236()) {
+    if (jj_3_238()) {
     jj_scanpos = xsp;
-    if (jj_3_237()) return true;
+    if (jj_3_239()) return true;
     }
     }
     return false;
   }
 
-  final private boolean jj_3_682() {
+  final private boolean jj_3_684() {
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  final private boolean jj_3_681() {
+  final private boolean jj_3_683() {
     if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  final private boolean jj_3_233() {
+  final private boolean jj_3_235() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_137()) return true;
     return false;
   }
 
-  final private boolean jj_3_680() {
+  final private boolean jj_3_682() {
     if (jj_scan_token(ARRAY)) return true;
     return false;
   }
 
-  final private boolean jj_3_679() {
+  final private boolean jj_3_681() {
     if (jj_scan_token(MULTISET)) return true;
     return false;
   }
@@ -19613,9 +19632,9 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_216() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_679()) {
+    if (jj_3_681()) {
     jj_scanpos = xsp;
-    if (jj_3_680()) return true;
+    if (jj_3_682()) return true;
     }
     return false;
   }
@@ -19626,82 +19645,82 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_646() {
+  final private boolean jj_3_648() {
     if (jj_scan_token(DOUBLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_648() {
+  final private boolean jj_3_650() {
     if (jj_scan_token(FLOAT)) return true;
     return false;
   }
 
-  final private boolean jj_3_640() {
+  final private boolean jj_3_642() {
     if (jj_scan_token(SMALLINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_636() {
+  final private boolean jj_3_638() {
     if (jj_scan_token(VARBINARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_642() {
+  final private boolean jj_3_644() {
     if (jj_scan_token(BIGINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_678() {
+  final private boolean jj_3_680() {
     if (jj_scan_token(SQL_INTERVAL_SECOND)) return true;
     return false;
   }
 
-  final private boolean jj_3_638() {
+  final private boolean jj_3_640() {
     if (jj_scan_token(TINYINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_677() {
+  final private boolean jj_3_679() {
     if (jj_scan_token(SQL_INTERVAL_MINUTE_TO_SECOND)) return true;
     return false;
   }
 
-  final private boolean jj_3_644() {
+  final private boolean jj_3_646() {
     if (jj_scan_token(REAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_676() {
+  final private boolean jj_3_678() {
     if (jj_scan_token(SQL_INTERVAL_MINUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_675() {
+  final private boolean jj_3_677() {
     if (jj_scan_token(SQL_INTERVAL_HOUR_TO_SECOND)) return true;
     return false;
   }
 
-  final private boolean jj_3_632() {
+  final private boolean jj_3_634() {
     if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
-  final private boolean jj_3_634() {
+  final private boolean jj_3_636() {
     if (jj_scan_token(BINARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_674() {
+  final private boolean jj_3_676() {
     if (jj_scan_token(SQL_INTERVAL_HOUR_TO_MINUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_630() {
+  final private boolean jj_3_632() {
     if (jj_scan_token(BOOLEAN)) return true;
     return false;
   }
 
-  final private boolean jj_3_673() {
+  final private boolean jj_3_675() {
     if (jj_scan_token(SQL_INTERVAL_HOUR)) return true;
     return false;
   }
@@ -19712,117 +19731,132 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_624() {
+  final private boolean jj_3_626() {
     if (jj_scan_token(TIMESTAMP)) return true;
     return false;
   }
 
-  final private boolean jj_3_628() {
+  final private boolean jj_3_630() {
     if (jj_scan_token(NUMERIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_672() {
+  final private boolean jj_3_674() {
     if (jj_scan_token(SQL_INTERVAL_DAY_TO_SECOND)) return true;
     return false;
   }
 
-  final private boolean jj_3_626() {
+  final private boolean jj_3_628() {
     if (jj_scan_token(DECIMAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_671() {
+  final private boolean jj_3_673() {
     if (jj_scan_token(SQL_INTERVAL_DAY_TO_MINUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_670() {
+  final private boolean jj_3_672() {
     if (jj_scan_token(SQL_INTERVAL_DAY_TO_HOUR)) return true;
     return false;
   }
 
-  final private boolean jj_3_669() {
+  final private boolean jj_3_671() {
     if (jj_scan_token(SQL_INTERVAL_DAY)) return true;
     return false;
   }
 
-  final private boolean jj_3_668() {
+  final private boolean jj_3_670() {
     if (jj_scan_token(SQL_INTERVAL_MONTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_618() {
+  final private boolean jj_3_620() {
     if (jj_scan_token(VARCHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_667() {
+  final private boolean jj_3_669() {
     if (jj_scan_token(SQL_INTERVAL_YEAR_TO_MONTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_622() {
+  final private boolean jj_3_624() {
     if (jj_scan_token(TIME)) return true;
     return false;
   }
 
-  final private boolean jj_3_647() {
+  final private boolean jj_3_649() {
     if (jj_scan_token(SQL_FLOAT)) return true;
     return false;
   }
 
-  final private boolean jj_3_666() {
+  final private boolean jj_3_668() {
     if (jj_scan_token(SQL_INTERVAL_YEAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_620() {
+  final private boolean jj_3_622() {
     if (jj_scan_token(DATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_645() {
+  final private boolean jj_3_647() {
     if (jj_scan_token(SQL_DOUBLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_665() {
+  final private boolean jj_3_667() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_647()) {
+    if (jj_3_649()) {
     jj_scanpos = xsp;
-    if (jj_3_648()) return true;
+    if (jj_3_650()) return true;
     }
     return false;
   }
 
-  final private boolean jj_3_643() {
+  final private boolean jj_3_645() {
     if (jj_scan_token(SQL_REAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_664() {
+  final private boolean jj_3_666() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_645()) {
+    if (jj_3_647()) {
     jj_scanpos = xsp;
-    if (jj_3_646()) return true;
+    if (jj_3_648()) return true;
     }
     return false;
   }
 
-  final private boolean jj_3_616() {
+  final private boolean jj_3_618() {
     if (jj_scan_token(CHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_641() {
+  final private boolean jj_3_643() {
     if (jj_scan_token(SQL_BIGINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_663() {
+  final private boolean jj_3_665() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_645()) {
+    jj_scanpos = xsp;
+    if (jj_3_646()) return true;
+    }
+    return false;
+  }
+
+  final private boolean jj_3_641() {
+    if (jj_scan_token(SQL_SMALLINT)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_664() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_643()) {
@@ -19833,11 +19867,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_639() {
-    if (jj_scan_token(SQL_SMALLINT)) return true;
+    if (jj_scan_token(SQL_TINYINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_662() {
+  final private boolean jj_3_663() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_641()) {
@@ -19848,11 +19882,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_637() {
-    if (jj_scan_token(SQL_TINYINT)) return true;
+    if (jj_scan_token(SQL_VARBINARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_661() {
+  final private boolean jj_3_662() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_639()) {
@@ -19863,11 +19897,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_635() {
-    if (jj_scan_token(SQL_VARBINARY)) return true;
+    if (jj_scan_token(SQL_BINARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_660() {
+  final private boolean jj_3_661() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_637()) {
@@ -19878,11 +19912,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_633() {
-    if (jj_scan_token(SQL_BINARY)) return true;
+    if (jj_scan_token(SQL_INTEGER)) return true;
     return false;
   }
 
-  final private boolean jj_3_659() {
+  final private boolean jj_3_660() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_635()) {
@@ -19893,11 +19927,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_631() {
-    if (jj_scan_token(SQL_INTEGER)) return true;
+    if (jj_scan_token(SQL_BOOLEAN)) return true;
     return false;
   }
 
-  final private boolean jj_3_658() {
+  final private boolean jj_3_659() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_633()) {
@@ -19908,11 +19942,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_629() {
-    if (jj_scan_token(SQL_BOOLEAN)) return true;
+    if (jj_scan_token(SQL_NUMERIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_657() {
+  final private boolean jj_3_658() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_631()) {
@@ -19923,11 +19957,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_627() {
-    if (jj_scan_token(SQL_NUMERIC)) return true;
+    if (jj_scan_token(SQL_DECIMAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_656() {
+  final private boolean jj_3_657() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_629()) {
@@ -19938,11 +19972,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_625() {
-    if (jj_scan_token(SQL_DECIMAL)) return true;
+    if (jj_scan_token(SQL_TIMESTAMP)) return true;
     return false;
   }
 
-  final private boolean jj_3_655() {
+  final private boolean jj_3_656() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_627()) {
@@ -19953,11 +19987,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_623() {
-    if (jj_scan_token(SQL_TIMESTAMP)) return true;
+    if (jj_scan_token(SQL_TIME)) return true;
     return false;
   }
 
-  final private boolean jj_3_654() {
+  final private boolean jj_3_655() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_625()) {
@@ -19968,11 +20002,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   }
 
   final private boolean jj_3_621() {
-    if (jj_scan_token(SQL_TIME)) return true;
+    if (jj_scan_token(SQL_DATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_653() {
+  final private boolean jj_3_654() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_623()) {
@@ -19982,12 +20016,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
+  final private boolean jj_3_612() {
+    if (jj_scan_token(NUMERIC)) return true;
+    return false;
+  }
+
   final private boolean jj_3_619() {
-    if (jj_scan_token(SQL_DATE)) return true;
+    if (jj_scan_token(SQL_VARCHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_652() {
+  final private boolean jj_3_653() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_621()) {
@@ -19997,17 +20036,12 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_610() {
-    if (jj_scan_token(NUMERIC)) return true;
-    return false;
-  }
-
   final private boolean jj_3_617() {
-    if (jj_scan_token(SQL_VARCHAR)) return true;
+    if (jj_scan_token(SQL_CHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_651() {
+  final private boolean jj_3_652() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_619()) {
@@ -20017,12 +20051,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_615() {
-    if (jj_scan_token(SQL_CHAR)) return true;
-    return false;
-  }
-
-  final private boolean jj_3_650() {
+  final private boolean jj_3_651() {
     Token xsp;
     xsp = jj_scanpos;
     if (jj_3_617()) {
@@ -20032,56 +20061,46 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_649() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3_615()) {
-    jj_scanpos = xsp;
-    if (jj_3_616()) return true;
-    }
-    return false;
-  }
-
-  final private boolean jj_3_609() {
+  final private boolean jj_3_611() {
     if (jj_scan_token(DEC)) return true;
     return false;
   }
 
-  final private boolean jj_3_613() {
+  final private boolean jj_3_615() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_209()) return true;
     return false;
   }
 
-  final private boolean jj_3_232() {
+  final private boolean jj_3_234() {
     if (jj_scan_token(SPECIFIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_614() {
+  final private boolean jj_3_616() {
     if (jj_scan_token(LPAREN)) return true;
     if (jj_3R_209()) return true;
     return false;
   }
 
-  final private boolean jj_3_612() {
+  final private boolean jj_3_614() {
     if (jj_scan_token(ANY)) return true;
     return false;
   }
 
-  final private boolean jj_3_608() {
+  final private boolean jj_3_610() {
     if (jj_scan_token(DECIMAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_611() {
+  final private boolean jj_3_613() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_608()) {
+    if (jj_3_610()) {
     jj_scanpos = xsp;
-    if (jj_3_609()) {
+    if (jj_3_611()) {
     jj_scanpos = xsp;
-    if (jj_3_610()) return true;
+    if (jj_3_612()) return true;
     }
     }
     return false;
@@ -20090,16 +20109,16 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_221() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_611()) {
+    if (jj_3_613()) {
     jj_scanpos = xsp;
-    if (jj_3_612()) return true;
+    if (jj_3_614()) return true;
     }
     xsp = jj_scanpos;
-    if (jj_3_614()) jj_scanpos = xsp;
+    if (jj_3_616()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_230() {
+  final private boolean jj_3_232() {
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(NULL)) return true;
     return false;
@@ -20109,20 +20128,20 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_231() {
+  final private boolean jj_3_233() {
     if (jj_3R_91()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_230()) jj_scanpos = xsp;
+    if (jj_3_232()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_607() {
+  final private boolean jj_3_609() {
     if (jj_scan_token(VARBINARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_605() {
+  final private boolean jj_3_607() {
     if (jj_scan_token(VARYING)) return true;
     return false;
   }
@@ -20132,11 +20151,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_606() {
+  final private boolean jj_3_608() {
     if (jj_scan_token(BINARY)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_605()) {
+    if (jj_3_607()) {
     jj_scanpos = xsp;
     if (jj_3R_224()) return true;
     }
@@ -20146,44 +20165,44 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_220() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_606()) {
+    if (jj_3_608()) {
     jj_scanpos = xsp;
-    if (jj_3_607()) return true;
+    if (jj_3_609()) return true;
     }
     if (jj_3R_208()) return true;
     return false;
   }
 
-  final private boolean jj_3_594() {
+  final private boolean jj_3_596() {
     if (jj_scan_token(INT)) return true;
     return false;
   }
 
-  final private boolean jj_3_229() {
+  final private boolean jj_3_231() {
     if (jj_scan_token(NOT)) return true;
     if (jj_scan_token(NULL)) return true;
     return false;
   }
 
-  final private boolean jj_3_595() {
+  final private boolean jj_3_597() {
     if (jj_scan_token(PRECISION)) return true;
     return false;
   }
 
-  final private boolean jj_3_604() {
+  final private boolean jj_3_606() {
     if (jj_scan_token(FLOAT)) return true;
     return false;
   }
 
-  final private boolean jj_3_603() {
+  final private boolean jj_3_605() {
     if (jj_scan_token(DOUBLE)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_595()) jj_scanpos = xsp;
+    if (jj_3_597()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_602() {
+  final private boolean jj_3_604() {
     if (jj_scan_token(REAL)) return true;
     return false;
   }
@@ -20193,52 +20212,52 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     if (jj_3R_91()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_229()) jj_scanpos = xsp;
+    if (jj_3_231()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_601() {
+  final private boolean jj_3_603() {
     if (jj_scan_token(BIGINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_600() {
+  final private boolean jj_3_602() {
     if (jj_scan_token(SMALLINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_593() {
+  final private boolean jj_3_595() {
     if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
-  final private boolean jj_3_599() {
+  final private boolean jj_3_601() {
     if (jj_scan_token(TINYINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_598() {
+  final private boolean jj_3_600() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_593()) {
+    if (jj_3_595()) {
     jj_scanpos = xsp;
-    if (jj_3_594()) return true;
+    if (jj_3_596()) return true;
     }
     return false;
   }
 
-  final private boolean jj_3_597() {
+  final private boolean jj_3_599() {
     if (jj_scan_token(BOOLEAN)) return true;
     return false;
   }
 
-  final private boolean jj_3_228() {
+  final private boolean jj_3_230() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_136()) return true;
     return false;
   }
 
-  final private boolean jj_3_596() {
+  final private boolean jj_3_598() {
     if (jj_scan_token(GEOMETRY)) return true;
     return false;
   }
@@ -20249,7 +20268,7 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3_228()) { jj_scanpos = xsp; break; }
+      if (jj_3_230()) { jj_scanpos = xsp; break; }
     }
     if (jj_scan_token(RPAREN)) return true;
     return false;
@@ -20258,10 +20277,6 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_219() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_596()) {
-    jj_scanpos = xsp;
-    if (jj_3_597()) {
-    jj_scanpos = xsp;
     if (jj_3_598()) {
     jj_scanpos = xsp;
     if (jj_3_599()) {
@@ -20274,7 +20289,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_scanpos = xsp;
     if (jj_3_603()) {
     jj_scanpos = xsp;
-    if (jj_3_604()) return true;
+    if (jj_3_604()) {
+    jj_scanpos = xsp;
+    if (jj_3_605()) {
+    jj_scanpos = xsp;
+    if (jj_3_606()) return true;
     }
     }
     }
@@ -20286,27 +20305,27 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_592() {
+  final private boolean jj_3_594() {
     if (jj_3R_223()) return true;
     return false;
   }
 
-  final private boolean jj_3_591() {
+  final private boolean jj_3_593() {
     if (jj_3R_222()) return true;
     return false;
   }
 
-  final private boolean jj_3_590() {
+  final private boolean jj_3_592() {
     if (jj_3R_221()) return true;
     return false;
   }
 
-  final private boolean jj_3_589() {
+  final private boolean jj_3_591() {
     if (jj_3R_220()) return true;
     return false;
   }
 
-  final private boolean jj_3_588() {
+  final private boolean jj_3_590() {
     if (jj_3R_219()) return true;
     return false;
   }
@@ -20314,15 +20333,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_217() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_588()) {
-    jj_scanpos = xsp;
-    if (jj_3_589()) {
-    jj_scanpos = xsp;
     if (jj_3_590()) {
     jj_scanpos = xsp;
     if (jj_3_591()) {
     jj_scanpos = xsp;
-    if (jj_3_592()) return true;
+    if (jj_3_592()) {
+    jj_scanpos = xsp;
+    if (jj_3_593()) {
+    jj_scanpos = xsp;
+    if (jj_3_594()) return true;
     }
     }
     }
@@ -20330,78 +20349,78 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_224() {
+  final private boolean jj_3_226() {
     if (jj_scan_token(REPEATABLE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_587() {
+  final private boolean jj_3_589() {
     if (jj_3R_115()) return true;
     return false;
   }
 
-  final private boolean jj_3_1400() {
+  final private boolean jj_3_1402() {
     if (jj_scan_token(ZONE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1399() {
+  final private boolean jj_3_1401() {
     if (jj_scan_token(WORK)) return true;
     return false;
   }
 
-  final private boolean jj_3_586() {
+  final private boolean jj_3_588() {
     if (jj_3R_218()) return true;
     return false;
   }
 
-  final private boolean jj_3_1398() {
+  final private boolean jj_3_1400() {
     if (jj_scan_token(WIDTH_BUCKET)) return true;
     return false;
   }
 
-  final private boolean jj_3_1397() {
+  final private boolean jj_3_1399() {
     if (jj_scan_token(VIEW)) return true;
     return false;
   }
 
-  final private boolean jj_3_223() {
+  final private boolean jj_3_225() {
     if (jj_scan_token(SYSTEM)) return true;
     return false;
   }
 
-  final private boolean jj_3_1396() {
+  final private boolean jj_3_1398() {
     if (jj_scan_token(VAR_SAMP)) return true;
     return false;
   }
 
-  final private boolean jj_3_585() {
+  final private boolean jj_3_587() {
     if (jj_3R_217()) return true;
     return false;
   }
 
-  final private boolean jj_3_1395() {
+  final private boolean jj_3_1397() {
     if (jj_scan_token(VARCHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1394() {
+  final private boolean jj_3_1396() {
     if (jj_scan_token(VALUE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1393() {
+  final private boolean jj_3_1395() {
     if (jj_scan_token(UPSERT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1392() {
+  final private boolean jj_3_1394() {
     if (jj_scan_token(UNIQUE)) return true;
     return false;
   }
 
-  final private boolean jj_3_222() {
+  final private boolean jj_3_224() {
     if (jj_scan_token(BERNOULLI)) return true;
     return false;
   }
@@ -20409,134 +20428,134 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_277() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_585()) {
+    if (jj_3_587()) {
     jj_scanpos = xsp;
-    if (jj_3_586()) {
+    if (jj_3_588()) {
     jj_scanpos = xsp;
-    if (jj_3_587()) return true;
+    if (jj_3_589()) return true;
     }
     }
     return false;
   }
 
-  final private boolean jj_3_1391() {
+  final private boolean jj_3_1393() {
     if (jj_scan_token(TRUNCATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1390() {
+  final private boolean jj_3_1392() {
     if (jj_scan_token(TRIM)) return true;
     return false;
   }
 
-  final private boolean jj_3_1389() {
+  final private boolean jj_3_1391() {
     if (jj_scan_token(TRANSLATION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1388() {
+  final private boolean jj_3_1390() {
     if (jj_scan_token(TRANSACTION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1387() {
+  final private boolean jj_3_1389() {
     if (jj_scan_token(TINYINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_226() {
+  final private boolean jj_3_228() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_222()) {
+    if (jj_3_224()) {
     jj_scanpos = xsp;
-    if (jj_3_223()) return true;
+    if (jj_3_225()) return true;
     }
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1386() {
+  final private boolean jj_3_1388() {
     if (jj_scan_token(TEMPORARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1385() {
+  final private boolean jj_3_1387() {
     if (jj_scan_token(SYSTEM)) return true;
     return false;
   }
 
-  final private boolean jj_3_1384() {
+  final private boolean jj_3_1386() {
     if (jj_scan_token(SUCCEEDS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1383() {
+  final private boolean jj_3_1385() {
     if (jj_scan_token(SUBSET)) return true;
     return false;
   }
 
-  final private boolean jj_3_1382() {
+  final private boolean jj_3_1384() {
     if (jj_scan_token(STDDEV_POP)) return true;
     return false;
   }
 
-  final private boolean jj_3_1381() {
+  final private boolean jj_3_1383() {
     if (jj_scan_token(START)) return true;
     return false;
   }
 
-  final private boolean jj_3_1380() {
+  final private boolean jj_3_1382() {
     if (jj_scan_token(SQLSTATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1379() {
+  final private boolean jj_3_1381() {
     if (jj_scan_token(SPECIFICTYPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_584() {
+  final private boolean jj_3_586() {
     if (jj_3R_216()) return true;
     return false;
   }
 
-  final private boolean jj_3_1378() {
+  final private boolean jj_3_1380() {
     if (jj_scan_token(SMALLINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1377() {
+  final private boolean jj_3_1379() {
     if (jj_scan_token(SHOW)) return true;
     return false;
   }
 
-  final private boolean jj_3_1376() {
+  final private boolean jj_3_1378() {
     if (jj_scan_token(SENSITIVE)) return true;
     return false;
   }
 
-  final private boolean jj_3_225() {
+  final private boolean jj_3_227() {
     if (jj_scan_token(SUBSTITUTE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1375() {
+  final private boolean jj_3_1377() {
     if (jj_scan_token(SECOND)) return true;
     return false;
   }
 
-  final private boolean jj_3_1374() {
+  final private boolean jj_3_1376() {
     if (jj_scan_token(SCOPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1373() {
+  final private boolean jj_3_1375() {
     if (jj_scan_token(RUNNING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1372() {
+  final private boolean jj_3_1374() {
     if (jj_scan_token(ROLLBACK)) return true;
     return false;
   }
@@ -20546,335 +20565,335 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3_584()) { jj_scanpos = xsp; break; }
+      if (jj_3_586()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  final private boolean jj_3_1371() {
+  final private boolean jj_3_1373() {
     if (jj_scan_token(RETURNS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1370() {
+  final private boolean jj_3_1372() {
     if (jj_scan_token(RESTRICT)) return true;
     return false;
   }
 
-  final private boolean jj_3_227() {
+  final private boolean jj_3_229() {
     if (jj_scan_token(TABLESAMPLE)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_225()) {
+    if (jj_3_227()) {
     jj_scanpos = xsp;
-    if (jj_3_226()) return true;
+    if (jj_3_228()) return true;
     }
     return false;
   }
 
-  final private boolean jj_3_1369() {
+  final private boolean jj_3_1371() {
     if (jj_scan_token(RELEASE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1368() {
+  final private boolean jj_3_1370() {
     if (jj_scan_token(REGR_SXY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1367() {
+  final private boolean jj_3_1369() {
     if (jj_scan_token(REGR_R2)) return true;
     return false;
   }
 
-  final private boolean jj_3_1366() {
+  final private boolean jj_3_1368() {
     if (jj_scan_token(REGR_AVGY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1365() {
+  final private boolean jj_3_1367() {
     if (jj_scan_token(REFERENCES)) return true;
     return false;
   }
 
-  final private boolean jj_3_1364() {
+  final private boolean jj_3_1366() {
     if (jj_scan_token(REAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1363() {
+  final private boolean jj_3_1365() {
     if (jj_scan_token(RANK)) return true;
     return false;
   }
 
-  final private boolean jj_3_1362() {
+  final private boolean jj_3_1364() {
     if (jj_scan_token(PROCEDURE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1361() {
+  final private boolean jj_3_1363() {
     if (jj_scan_token(PREV)) return true;
     return false;
   }
 
-  final private boolean jj_3_1360() {
+  final private boolean jj_3_1362() {
     if (jj_scan_token(PRECISION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1359() {
+  final private boolean jj_3_1361() {
     if (jj_scan_token(POSITION_REGEX)) return true;
     return false;
   }
 
-  final private boolean jj_3_1358() {
+  final private boolean jj_3_1360() {
     if (jj_scan_token(PERMUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1357() {
+  final private boolean jj_3_1359() {
     if (jj_scan_token(PERCENTILE_DISC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1356() {
+  final private boolean jj_3_1358() {
     if (jj_scan_token(PER)) return true;
     return false;
   }
 
-  final private boolean jj_3_220() {
+  final private boolean jj_3_222() {
     if (jj_3R_95()) return true;
     return false;
   }
 
-  final private boolean jj_3_1355() {
+  final private boolean jj_3_1357() {
     if (jj_scan_token(PARAMETER)) return true;
     return false;
   }
 
-  final private boolean jj_3_219() {
+  final private boolean jj_3_221() {
     if (jj_scan_token(AS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1354() {
+  final private boolean jj_3_1356() {
     if (jj_scan_token(OVERLAPS)) return true;
     return false;
   }
 
-  final private boolean jj_3_583() {
+  final private boolean jj_3_585() {
     if (jj_scan_token(MINUS)) return true;
     if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1353() {
+  final private boolean jj_3_1355() {
     if (jj_scan_token(ORDINALITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_221() {
+  final private boolean jj_3_223() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_219()) jj_scanpos = xsp;
+    if (jj_3_221()) jj_scanpos = xsp;
     if (jj_3R_66()) return true;
     xsp = jj_scanpos;
-    if (jj_3_220()) jj_scanpos = xsp;
+    if (jj_3_222()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_1352() {
+  final private boolean jj_3_1354() {
     if (jj_scan_token(OPEN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1351() {
+  final private boolean jj_3_1353() {
     if (jj_scan_token(OMIT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1350() {
+  final private boolean jj_3_1352() {
     if (jj_scan_token(OCTET_LENGTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1349() {
+  final private boolean jj_3_1351() {
     if (jj_scan_token(NUMERIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_218() {
+  final private boolean jj_3_220() {
     if (jj_3R_135()) return true;
     return false;
   }
 
-  final private boolean jj_3_1348() {
+  final private boolean jj_3_1350() {
     if (jj_scan_token(NTH_VALUE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1347() {
+  final private boolean jj_3_1349() {
     if (jj_scan_token(NONE)) return true;
     return false;
   }
 
-  final private boolean jj_3_581() {
+  final private boolean jj_3_583() {
     if (jj_scan_token(PLUS)) return true;
     if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1346() {
+  final private boolean jj_3_1348() {
     if (jj_scan_token(NCHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1345() {
+  final private boolean jj_3_1347() {
     if (jj_scan_token(NAME)) return true;
     return false;
   }
 
-  final private boolean jj_3_217() {
+  final private boolean jj_3_219() {
     if (jj_3R_134()) return true;
     return false;
   }
 
-  final private boolean jj_3_580() {
+  final private boolean jj_3_582() {
     if (jj_scan_token(UNSIGNED_INTEGER_LITERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1344() {
+  final private boolean jj_3_1346() {
     if (jj_scan_token(MODULE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1343() {
+  final private boolean jj_3_1345() {
     if (jj_scan_token(MINUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1342() {
+  final private boolean jj_3_1344() {
     if (jj_scan_token(MEMBER)) return true;
     return false;
   }
 
-  final private boolean jj_3_216() {
+  final private boolean jj_3_218() {
     if (jj_3R_133()) return true;
     return false;
   }
 
-  final private boolean jj_3_1341() {
+  final private boolean jj_3_1343() {
     if (jj_scan_token(MATCH_NUMBER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1340() {
+  final private boolean jj_3_1342() {
     if (jj_scan_token(MAP)) return true;
     return false;
   }
 
-  final private boolean jj_3_582() {
+  final private boolean jj_3_584() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_580()) {
+    if (jj_3_582()) {
     jj_scanpos = xsp;
-    if (jj_3_581()) return true;
+    if (jj_3_583()) return true;
     }
     return false;
   }
 
-  final private boolean jj_3_1339() {
+  final private boolean jj_3_1341() {
     if (jj_scan_token(LOCATOR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1338() {
+  final private boolean jj_3_1340() {
     if (jj_scan_token(LOCAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1337() {
+  final private boolean jj_3_1339() {
     if (jj_scan_token(LIKE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1336() {
+  final private boolean jj_3_1338() {
     if (jj_scan_token(LEADING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1335() {
+  final private boolean jj_3_1337() {
     if (jj_scan_token(LAST)) return true;
     return false;
   }
 
-  final private boolean jj_3_1334() {
+  final private boolean jj_3_1336() {
     if (jj_scan_token(LAG)) return true;
     return false;
   }
 
-  final private boolean jj_3_1333() {
+  final private boolean jj_3_1335() {
     if (jj_scan_token(JSON_VALUE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1332() {
+  final private boolean jj_3_1334() {
     if (jj_scan_token(JSON_OBJECT)) return true;
     return false;
   }
 
-  final private boolean jj_3_211() {
+  final private boolean jj_3_213() {
     if (jj_scan_token(LATERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1331() {
+  final private boolean jj_3_1333() {
     if (jj_scan_token(JSON_ARRAY)) return true;
     return false;
   }
 
-  final private boolean jj_3_215() {
+  final private boolean jj_3_217() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_211()) jj_scanpos = xsp;
+    if (jj_3_213()) jj_scanpos = xsp;
     if (jj_scan_token(TABLE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1330() {
+  final private boolean jj_3_1332() {
     if (jj_scan_token(INTERSECTION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1329() {
+  final private boolean jj_3_1331() {
     if (jj_scan_token(INSENSITIVE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1328() {
+  final private boolean jj_3_1330() {
     if (jj_scan_token(INITIALLY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1327() {
+  final private boolean jj_3_1329() {
     if (jj_scan_token(IMPORT)) return true;
     return false;
   }
 
-  final private boolean jj_3_210() {
+  final private boolean jj_3_212() {
     if (jj_scan_token(WITH)) return true;
     if (jj_scan_token(ORDINALITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1326() {
+  final private boolean jj_3_1328() {
     if (jj_scan_token(IDENTITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1325() {
+  final private boolean jj_3_1327() {
     if (jj_scan_token(GROUPS)) return true;
     return false;
   }
@@ -20884,83 +20903,83 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1324() {
+  final private boolean jj_3_1326() {
     if (jj_scan_token(GLOBAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1323() {
+  final private boolean jj_3_1325() {
     if (jj_scan_token(G)) return true;
     return false;
   }
 
-  final private boolean jj_3_1322() {
+  final private boolean jj_3_1324() {
     if (jj_scan_token(FREE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1321() {
+  final private boolean jj_3_1323() {
     if (jj_scan_token(FOREIGN)) return true;
     return false;
   }
 
-  final private boolean jj_3_209() {
+  final private boolean jj_3_211() {
     if (jj_3R_128()) return true;
     return false;
   }
 
-  final private boolean jj_3_1320() {
+  final private boolean jj_3_1322() {
     if (jj_scan_token(FLOAT)) return true;
     return false;
   }
 
-  final private boolean jj_3_214() {
+  final private boolean jj_3_216() {
     if (jj_scan_token(UNNEST)) return true;
     if (jj_3R_132()) return true;
     return false;
   }
 
-  final private boolean jj_3_1319() {
+  final private boolean jj_3_1321() {
     if (jj_scan_token(FILTER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1318() {
+  final private boolean jj_3_1320() {
     if (jj_scan_token(EXTERNAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1317() {
+  final private boolean jj_3_1319() {
     if (jj_scan_token(EXISTS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1316() {
+  final private boolean jj_3_1318() {
     if (jj_scan_token(EXCEPTION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1315() {
+  final private boolean jj_3_1317() {
     if (jj_scan_token(EQUALS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1314() {
+  final private boolean jj_3_1316() {
     if (jj_scan_token(END)) return true;
     return false;
   }
 
-  final private boolean jj_3_1313() {
+  final private boolean jj_3_1315() {
     if (jj_scan_token(ELEMENT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1312() {
+  final private boolean jj_3_1314() {
     if (jj_scan_token(DOUBLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1311() {
+  final private boolean jj_3_1313() {
     if (jj_scan_token(DISALLOW)) return true;
     return false;
   }
@@ -20971,105 +20990,105 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1310() {
+  final private boolean jj_3_1312() {
     if (jj_scan_token(DESCRIPTOR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1309() {
+  final private boolean jj_3_1311() {
     if (jj_scan_token(DEPTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1308() {
+  final private boolean jj_3_1310() {
     if (jj_scan_token(DEFERRABLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1307() {
+  final private boolean jj_3_1309() {
     if (jj_scan_token(DEC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1306() {
+  final private boolean jj_3_1308() {
     if (jj_scan_token(DATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1305() {
+  final private boolean jj_3_1307() {
     if (jj_scan_token(CURRENT_USER)) return true;
     return false;
   }
 
-  final private boolean jj_3_208() {
+  final private boolean jj_3_210() {
     if (jj_scan_token(LATERAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1304() {
+  final private boolean jj_3_1306() {
     if (jj_scan_token(CURRENT_TIME)) return true;
     return false;
   }
 
-  final private boolean jj_3_1303() {
+  final private boolean jj_3_1305() {
     if (jj_scan_token(CURRENT_ROLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_207() {
+  final private boolean jj_3_209() {
     if (jj_3R_128()) return true;
     return false;
   }
 
-  final private boolean jj_3_1302() {
+  final private boolean jj_3_1304() {
     if (jj_scan_token(CURRENT_DATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_213() {
+  final private boolean jj_3_215() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_208()) jj_scanpos = xsp;
+    if (jj_3_210()) jj_scanpos = xsp;
     if (jj_3R_131()) return true;
     return false;
   }
 
-  final private boolean jj_3_1301() {
+  final private boolean jj_3_1303() {
     if (jj_scan_token(CUBE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1300() {
+  final private boolean jj_3_1302() {
     if (jj_scan_token(COUNT)) return true;
     return false;
   }
 
-  final private boolean jj_3_206() {
+  final private boolean jj_3_208() {
     if (jj_3R_127()) return true;
     return false;
   }
 
-  final private boolean jj_3_1299() {
+  final private boolean jj_3_1301() {
     if (jj_scan_token(CONVERT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1298() {
+  final private boolean jj_3_1300() {
     if (jj_scan_token(CONSTRUCTOR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1297() {
+  final private boolean jj_3_1299() {
     if (jj_scan_token(CONNECT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1296() {
+  final private boolean jj_3_1298() {
     if (jj_scan_token(COLUMN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1295() {
+  final private boolean jj_3_1297() {
     if (jj_scan_token(COLLATE)) return true;
     return false;
   }
@@ -21080,109 +21099,109 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1294() {
+  final private boolean jj_3_1296() {
     if (jj_scan_token(CLOB)) return true;
     return false;
   }
 
-  final private boolean jj_3_1293() {
+  final private boolean jj_3_1295() {
     if (jj_scan_token(CHAR_LENGTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1292() {
+  final private boolean jj_3_1294() {
     if (jj_scan_token(CHAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1291() {
+  final private boolean jj_3_1293() {
     if (jj_scan_token(CATALOG)) return true;
     return false;
   }
 
-  final private boolean jj_3_1290() {
+  final private boolean jj_3_1292() {
     if (jj_scan_token(CASCADE)) return true;
     return false;
   }
 
-  final private boolean jj_3_204() {
+  final private boolean jj_3_206() {
     if (jj_scan_token(EXTEND)) return true;
     return false;
   }
 
-  final private boolean jj_3_1289() {
+  final private boolean jj_3_1291() {
     if (jj_scan_token(C)) return true;
     return false;
   }
 
-  final private boolean jj_3_1288() {
+  final private boolean jj_3_1290() {
     if (jj_scan_token(BOTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_205() {
+  final private boolean jj_3_207() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_204()) jj_scanpos = xsp;
+    if (jj_3_206()) jj_scanpos = xsp;
     if (jj_3R_118()) return true;
     return false;
   }
 
-  final private boolean jj_3_1287() {
+  final private boolean jj_3_1289() {
     if (jj_scan_token(BIT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1286() {
+  final private boolean jj_3_1288() {
     if (jj_scan_token(BETWEEN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1285() {
+  final private boolean jj_3_1287() {
     if (jj_scan_token(BEGIN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1284() {
+  final private boolean jj_3_1286() {
     if (jj_scan_token(AUTHORIZATION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1283() {
+  final private boolean jj_3_1285() {
     if (jj_scan_token(ASYMMETRIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1282() {
+  final private boolean jj_3_1284() {
     if (jj_scan_token(ASC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1281() {
+  final private boolean jj_3_1283() {
     if (jj_scan_token(ARRAY)) return true;
     return false;
   }
 
-  final private boolean jj_3_212() {
+  final private boolean jj_3_214() {
     if (jj_3R_129()) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_205()) jj_scanpos = xsp;
+    if (jj_3_207()) jj_scanpos = xsp;
     if (jj_3R_130()) return true;
     xsp = jj_scanpos;
-    if (jj_3_206()) jj_scanpos = xsp;
+    if (jj_3_208()) jj_scanpos = xsp;
     xsp = jj_scanpos;
-    if (jj_3_207()) jj_scanpos = xsp;
+    if (jj_3_209()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_579() {
+  final private boolean jj_3_581() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_215()) return true;
     return false;
   }
 
-  final private boolean jj_3_1280() {
+  final private boolean jj_3_1282() {
     if (jj_scan_token(ALTER)) return true;
     return false;
   }
@@ -21192,17 +21211,17 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1279() {
+  final private boolean jj_3_1281() {
     if (jj_scan_token(AFTER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1278() {
+  final private boolean jj_3_1280() {
     if (jj_scan_token(ABSOLUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1277() {
+  final private boolean jj_3_1279() {
     if (jj_scan_token(UUID)) return true;
     return false;
   }
@@ -21210,15 +21229,15 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_285() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_212()) {
-    jj_scanpos = xsp;
-    if (jj_3_213()) {
-    jj_scanpos = xsp;
     if (jj_3_214()) {
     jj_scanpos = xsp;
     if (jj_3_215()) {
     jj_scanpos = xsp;
-    if (jj_3_216()) return true;
+    if (jj_3_216()) {
+    jj_scanpos = xsp;
+    if (jj_3_217()) {
+    jj_scanpos = xsp;
+    if (jj_3_218()) return true;
     }
     }
     }
@@ -21226,42 +21245,42 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1276() {
+  final private boolean jj_3_1278() {
     if (jj_scan_token(COMPUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1275() {
+  final private boolean jj_3_1277() {
     if (jj_scan_token(SCAN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1274() {
+  final private boolean jj_3_1276() {
     if (jj_scan_token(NOLOGGING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1273() {
+  final private boolean jj_3_1275() {
     if (jj_scan_token(PARALLEL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1272() {
+  final private boolean jj_3_1274() {
     if (jj_scan_token(DATA_REGION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1271() {
+  final private boolean jj_3_1273() {
     if (jj_scan_token(WRITE_SYNCHRONIZATION_MODE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1270() {
+  final private boolean jj_3_1272() {
     if (jj_scan_token(BACKUPS)) return true;
     return false;
   }
 
-  final private boolean jj_3_578() {
+  final private boolean jj_3_580() {
     if (jj_scan_token(DOT)) return true;
     if (jj_3R_214()) return true;
     return false;
@@ -21270,10 +21289,6 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_268() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_1270()) {
-    jj_scanpos = xsp;
-    if (jj_3_1271()) {
-    jj_scanpos = xsp;
     if (jj_3_1272()) {
     jj_scanpos = xsp;
     if (jj_3_1273()) {
@@ -21530,7 +21545,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_scanpos = xsp;
     if (jj_3_1399()) {
     jj_scanpos = xsp;
-    if (jj_3_1400()) return true;
+    if (jj_3_1400()) {
+    jj_scanpos = xsp;
+    if (jj_3_1401()) {
+    jj_scanpos = xsp;
+    if (jj_3_1402()) return true;
     }
     }
     }
@@ -21669,52 +21688,52 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3_578()) { jj_scanpos = xsp; break; }
+      if (jj_3_580()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  final private boolean jj_3_1269() {
+  final private boolean jj_3_1271() {
     if (jj_scan_token(YEAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1268() {
+  final private boolean jj_3_1270() {
     if (jj_scan_token(WITHOUT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1267() {
+  final private boolean jj_3_1269() {
     if (jj_scan_token(WHENEVER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1266() {
+  final private boolean jj_3_1268() {
     if (jj_scan_token(VERSIONING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1265() {
+  final private boolean jj_3_1267() {
     if (jj_scan_token(VAR_POP)) return true;
     return false;
   }
 
-  final private boolean jj_3_1264() {
+  final private boolean jj_3_1266() {
     if (jj_scan_token(VARBINARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1263() {
+  final private boolean jj_3_1265() {
     if (jj_scan_token(USER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1262() {
+  final private boolean jj_3_1264() {
     if (jj_scan_token(UPPER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1261() {
+  final private boolean jj_3_1263() {
     if (jj_scan_token(UNDER)) return true;
     return false;
   }
@@ -21724,140 +21743,140 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1260() {
+  final private boolean jj_3_1262() {
     if (jj_scan_token(TRUE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1259() {
+  final private boolean jj_3_1261() {
     if (jj_scan_token(TRIGGER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1258() {
+  final private boolean jj_3_1260() {
     if (jj_scan_token(TRANSLATE_REGEX)) return true;
     return false;
   }
 
-  final private boolean jj_3_1257() {
+  final private boolean jj_3_1259() {
     if (jj_scan_token(TRAILING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1256() {
+  final private boolean jj_3_1258() {
     if (jj_scan_token(TIMEZONE_MINUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1255() {
+  final private boolean jj_3_1257() {
     if (jj_scan_token(SYSTEM_USER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1254() {
+  final private boolean jj_3_1256() {
     if (jj_scan_token(SYMMETRIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1253() {
+  final private boolean jj_3_1255() {
     if (jj_scan_token(SUBSTRING_REGEX)) return true;
     return false;
   }
 
-  final private boolean jj_3_1252() {
+  final private boolean jj_3_1254() {
     if (jj_scan_token(SUBMULTISET)) return true;
     return false;
   }
 
-  final private boolean jj_3_1251() {
+  final private boolean jj_3_1253() {
     if (jj_scan_token(STATIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1250() {
+  final private boolean jj_3_1252() {
     if (jj_scan_token(SQRT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1249() {
+  final private boolean jj_3_1251() {
     if (jj_scan_token(SQLEXCEPTION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1248() {
+  final private boolean jj_3_1250() {
     if (jj_scan_token(SPECIFIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1247() {
+  final private boolean jj_3_1249() {
     if (jj_scan_token(SIZE)) return true;
     return false;
   }
 
-  final private boolean jj_3_577() {
+  final private boolean jj_3_579() {
     if (jj_scan_token(DOT)) return true;
     if (jj_scan_token(STAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1246() {
+  final private boolean jj_3_1248() {
     if (jj_scan_token(SESSION_USER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1245() {
+  final private boolean jj_3_1247() {
     if (jj_scan_token(SEEK)) return true;
     return false;
   }
 
-  final private boolean jj_3_1244() {
+  final private boolean jj_3_1246() {
     if (jj_scan_token(SEARCH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1243() {
+  final private boolean jj_3_1245() {
     if (jj_scan_token(SCHEMA)) return true;
     return false;
   }
 
-  final private boolean jj_3_1242() {
+  final private boolean jj_3_1244() {
     if (jj_scan_token(ROW_NUMBER)) return true;
     return false;
   }
 
-  final private boolean jj_3_576() {
+  final private boolean jj_3_578() {
     if (jj_scan_token(DOT)) return true;
     if (jj_3R_213()) return true;
     return false;
   }
 
-  final private boolean jj_3_1241() {
+  final private boolean jj_3_1243() {
     if (jj_scan_token(ROLE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1240() {
+  final private boolean jj_3_1242() {
     if (jj_scan_token(RETURN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1239() {
+  final private boolean jj_3_1241() {
     if (jj_scan_token(RESET)) return true;
     return false;
   }
 
-  final private boolean jj_3_203() {
+  final private boolean jj_3_205() {
     if (jj_scan_token(OUTER)) return true;
     if (jj_scan_token(APPLY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1238() {
+  final private boolean jj_3_1240() {
     if (jj_scan_token(RELATIVE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1237() {
+  final private boolean jj_3_1239() {
     if (jj_scan_token(REGR_SXX)) return true;
     return false;
   }
@@ -21867,115 +21886,115 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3_576()) { jj_scanpos = xsp; break; }
+      if (jj_3_578()) { jj_scanpos = xsp; break; }
     }
     xsp = jj_scanpos;
-    if (jj_3_577()) jj_scanpos = xsp;
+    if (jj_3_579()) jj_scanpos = xsp;
     return false;
   }
 
-  final private boolean jj_3_1236() {
+  final private boolean jj_3_1238() {
     if (jj_scan_token(REGR_INTERCEPT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1235() {
+  final private boolean jj_3_1237() {
     if (jj_scan_token(REGR_AVGX)) return true;
     return false;
   }
 
-  final private boolean jj_3_1234() {
+  final private boolean jj_3_1236() {
     if (jj_scan_token(REF)) return true;
     return false;
   }
 
-  final private boolean jj_3_1233() {
+  final private boolean jj_3_1235() {
     if (jj_scan_token(READS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1232() {
+  final private boolean jj_3_1234() {
     if (jj_scan_token(QUARTER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1231() {
+  final private boolean jj_3_1233() {
     if (jj_scan_token(PRIVILEGES)) return true;
     return false;
   }
 
-  final private boolean jj_3_1230() {
+  final private boolean jj_3_1232() {
     if (jj_scan_token(PRESERVE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1229() {
+  final private boolean jj_3_1231() {
     if (jj_scan_token(PRECEDES)) return true;
     return false;
   }
 
-  final private boolean jj_3_1228() {
+  final private boolean jj_3_1230() {
     if (jj_scan_token(POSITION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1227() {
+  final private boolean jj_3_1229() {
     if (jj_scan_token(PERIOD)) return true;
     return false;
   }
 
-  final private boolean jj_3_1226() {
+  final private boolean jj_3_1228() {
     if (jj_scan_token(PERCENTILE_CONT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1225() {
+  final private boolean jj_3_1227() {
     if (jj_scan_token(PATH)) return true;
     return false;
   }
 
-  final private boolean jj_3_202() {
+  final private boolean jj_3_204() {
     if (jj_scan_token(CROSS)) return true;
     if (jj_scan_token(APPLY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1224() {
+  final private boolean jj_3_1226() {
     if (jj_scan_token(PAD)) return true;
     return false;
   }
 
-  final private boolean jj_3_1223() {
+  final private boolean jj_3_1225() {
     if (jj_scan_token(OUTPUT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1222() {
+  final private boolean jj_3_1224() {
     if (jj_scan_token(OR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1221() {
+  final private boolean jj_3_1223() {
     if (jj_scan_token(ONLY)) return true;
     return false;
   }
 
-  final private boolean jj_3_575() {
+  final private boolean jj_3_577() {
     if (jj_3R_95()) return true;
     return false;
   }
 
-  final private boolean jj_3_1220() {
+  final private boolean jj_3_1222() {
     if (jj_scan_token(OLD)) return true;
     return false;
   }
 
-  final private boolean jj_3_1219() {
+  final private boolean jj_3_1221() {
     if (jj_scan_token(OCCURRENCES_REGEX)) return true;
     return false;
   }
 
-  final private boolean jj_3_1218() {
+  final private boolean jj_3_1220() {
     if (jj_scan_token(NULLIF)) return true;
     return false;
   }
@@ -21983,120 +22002,120 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_105() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_574()) {
+    if (jj_3_576()) {
     jj_scanpos = xsp;
-    if (jj_3_575()) return true;
+    if (jj_3_577()) return true;
     }
     return false;
   }
 
-  final private boolean jj_3_1217() {
+  final private boolean jj_3_1219() {
     if (jj_scan_token(NOT)) return true;
     return false;
   }
 
-  final private boolean jj_3_574() {
+  final private boolean jj_3_576() {
     if (jj_3R_66()) return true;
     return false;
   }
 
-  final private boolean jj_3_1216() {
+  final private boolean jj_3_1218() {
     if (jj_scan_token(NO)) return true;
     return false;
   }
 
-  final private boolean jj_3_1215() {
+  final private boolean jj_3_1217() {
     if (jj_scan_token(NATIONAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1214() {
+  final private boolean jj_3_1216() {
     if (jj_scan_token(MULTISET)) return true;
     return false;
   }
 
-  final private boolean jj_3_201() {
+  final private boolean jj_3_203() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_126()) return true;
     return false;
   }
 
-  final private boolean jj_3_1213() {
+  final private boolean jj_3_1215() {
     if (jj_scan_token(MODIFIES)) return true;
     return false;
   }
 
-  final private boolean jj_3_1212() {
+  final private boolean jj_3_1214() {
     if (jj_scan_token(MIN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1211() {
+  final private boolean jj_3_1213() {
     if (jj_scan_token(MEASURES)) return true;
     return false;
   }
 
-  final private boolean jj_3_1210() {
+  final private boolean jj_3_1212() {
     if (jj_scan_token(MATCHES)) return true;
     return false;
   }
 
-  final private boolean jj_3_1209() {
+  final private boolean jj_3_1211() {
     if (jj_scan_token(M)) return true;
     return false;
   }
 
-  final private boolean jj_3_1208() {
+  final private boolean jj_3_1210() {
     if (jj_scan_token(LOCALTIMESTAMP)) return true;
     return false;
   }
 
-  final private boolean jj_3_1207() {
+  final private boolean jj_3_1209() {
     if (jj_scan_token(LN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1206() {
+  final private boolean jj_3_1208() {
     if (jj_scan_token(LEVEL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1205() {
+  final private boolean jj_3_1207() {
     if (jj_scan_token(LEAD)) return true;
     return false;
   }
 
-  final private boolean jj_3_1204() {
+  final private boolean jj_3_1206() {
     if (jj_scan_token(LARGE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1203() {
+  final private boolean jj_3_1205() {
     if (jj_scan_token(KEY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1202() {
+  final private boolean jj_3_1204() {
     if (jj_scan_token(JSON_QUERY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1201() {
+  final private boolean jj_3_1203() {
     if (jj_scan_token(JSON_EXISTS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1200() {
+  final private boolean jj_3_1202() {
     if (jj_scan_token(ISOLATION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1199() {
+  final private boolean jj_3_1201() {
     if (jj_scan_token(INTEGER)) return true;
     return false;
   }
 
-  final private boolean jj_3_1198() {
+  final private boolean jj_3_1200() {
     if (jj_scan_token(INPUT)) return true;
     return false;
   }
@@ -22108,104 +22127,104 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1197() {
+  final private boolean jj_3_1199() {
     if (jj_scan_token(INITIAL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1196() {
+  final private boolean jj_3_1198() {
     if (jj_scan_token(IMMEDIATELY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1195() {
+  final private boolean jj_3_1197() {
     if (jj_scan_token(HOUR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1194() {
+  final private boolean jj_3_1196() {
     if (jj_scan_token(GOTO)) return true;
     return false;
   }
 
-  final private boolean jj_3_1193() {
+  final private boolean jj_3_1195() {
     if (jj_scan_token(GET)) return true;
     return false;
   }
 
-  final private boolean jj_3_1192() {
+  final private boolean jj_3_1194() {
     if (jj_scan_token(FUSION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1191() {
+  final private boolean jj_3_1193() {
     if (jj_scan_token(FRAME_ROW)) return true;
     return false;
   }
 
-  final private boolean jj_3_1190() {
+  final private boolean jj_3_1192() {
     if (jj_scan_token(FOR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1189() {
+  final private boolean jj_3_1191() {
     if (jj_scan_token(FIRST_VALUE)) return true;
     return false;
   }
 
-  final private boolean jj_3_199() {
+  final private boolean jj_3_201() {
     if (jj_scan_token(USING)) return true;
     if (jj_3R_95()) return true;
     return false;
   }
 
-  final private boolean jj_3_1188() {
+  final private boolean jj_3_1190() {
     if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1187() {
+  final private boolean jj_3_1189() {
     if (jj_scan_token(EXTEND)) return true;
     return false;
   }
 
-  final private boolean jj_3_1186() {
+  final private boolean jj_3_1188() {
     if (jj_scan_token(EXECUTE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1185() {
+  final private boolean jj_3_1187() {
     if (jj_scan_token(EVERY)) return true;
     return false;
   }
 
-  final private boolean jj_3_573() {
+  final private boolean jj_3_575() {
     if (jj_scan_token(COMMA)) return true;
     if (jj_3R_66()) return true;
     return false;
   }
 
-  final private boolean jj_3_1184() {
+  final private boolean jj_3_1186() {
     if (jj_scan_token(END_PARTITION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1183() {
+  final private boolean jj_3_1185() {
     if (jj_scan_token(EMPTY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1182() {
+  final private boolean jj_3_1184() {
     if (jj_scan_token(EACH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1181() {
+  final private boolean jj_3_1183() {
     if (jj_scan_token(DOMAIN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1180() {
+  final private boolean jj_3_1182() {
     if (jj_scan_token(DIAGNOSTICS)) return true;
     return false;
   }
@@ -22215,105 +22234,105 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     Token xsp;
     while (true) {
       xsp = jj_scanpos;
-      if (jj_3_573()) { jj_scanpos = xsp; break; }
+      if (jj_3_575()) { jj_scanpos = xsp; break; }
     }
     return false;
   }
 
-  final private boolean jj_3_1179() {
+  final private boolean jj_3_1181() {
     if (jj_scan_token(DESC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1178() {
+  final private boolean jj_3_1180() {
     if (jj_scan_token(DENSE_RANK)) return true;
     return false;
   }
 
-  final private boolean jj_3_1177() {
+  final private boolean jj_3_1179() {
     if (jj_scan_token(DECLARE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1176() {
+  final private boolean jj_3_1178() {
     if (jj_scan_token(DEALLOCATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_198() {
+  final private boolean jj_3_200() {
     if (jj_scan_token(ON)) return true;
     if (jj_3R_61()) return true;
     return false;
   }
 
-  final private boolean jj_3_1175() {
+  final private boolean jj_3_1177() {
     if (jj_scan_token(DATA)) return true;
     return false;
   }
 
-  final private boolean jj_3_1174() {
+  final private boolean jj_3_1176() {
     if (jj_scan_token(CURRENT_TRANSFORM_GROUP_FOR_TYPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1173() {
+  final private boolean jj_3_1175() {
     if (jj_scan_token(CURRENT_SCHEMA)) return true;
     return false;
   }
 
-  final private boolean jj_3_1172() {
+  final private boolean jj_3_1174() {
     if (jj_scan_token(CURRENT_PATH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1171() {
+  final private boolean jj_3_1173() {
     if (jj_scan_token(CURRENT_CATALOG)) return true;
     return false;
   }
 
-  final private boolean jj_3_1170() {
+  final private boolean jj_3_1172() {
     if (jj_scan_token(COVAR_SAMP)) return true;
     return false;
   }
 
-  final private boolean jj_3_1169() {
+  final private boolean jj_3_1171() {
     if (jj_scan_token(CORRESPONDING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1168() {
+  final private boolean jj_3_1170() {
     if (jj_scan_token(CONTINUE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1167() {
+  final private boolean jj_3_1169() {
     if (jj_scan_token(CONSTRAINTS)) return true;
     return false;
   }
 
-  final private boolean jj_3_200() {
+  final private boolean jj_3_202() {
     if (jj_3R_124()) return true;
     if (jj_3R_125()) return true;
     if (jj_3R_126()) return true;
     return false;
   }
 
-  final private boolean jj_3_1166() {
+  final private boolean jj_3_1168() {
     if (jj_scan_token(CONDITION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1165() {
+  final private boolean jj_3_1167() {
     if (jj_scan_token(COLLECT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1164() {
+  final private boolean jj_3_1166() {
     if (jj_scan_token(COALESCE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1163() {
+  final private boolean jj_3_1165() {
     if (jj_scan_token(CLASSIFIER)) return true;
     return false;
   }
@@ -22323,113 +22342,113 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1162() {
+  final private boolean jj_3_1164() {
     if (jj_scan_token(CHARACTER_LENGTH)) return true;
     return false;
   }
 
-  final private boolean jj_3_1161() {
+  final private boolean jj_3_1163() {
     if (jj_scan_token(CEILING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1160() {
+  final private boolean jj_3_1162() {
     if (jj_scan_token(CAST)) return true;
     return false;
   }
 
-  final private boolean jj_3_1159() {
+  final private boolean jj_3_1161() {
     if (jj_scan_token(CARDINALITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1158() {
+  final private boolean jj_3_1160() {
     if (jj_scan_token(BY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1157() {
+  final private boolean jj_3_1159() {
     if (jj_scan_token(BOOLEAN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1156() {
+  final private boolean jj_3_1158() {
     if (jj_scan_token(BINARY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1155() {
+  final private boolean jj_3_1157() {
     if (jj_scan_token(BEGIN_PARTITION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1154() {
+  final private boolean jj_3_1156() {
     if (jj_scan_token(BEFORE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1153() {
+  final private boolean jj_3_1155() {
     if (jj_scan_token(ATOMIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_1152() {
+  final private boolean jj_3_1154() {
     if (jj_scan_token(ASSERTION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1151() {
+  final private boolean jj_3_1153() {
     if (jj_scan_token(AS)) return true;
     return false;
   }
 
-  final private boolean jj_3_197() {
+  final private boolean jj_3_1152() {
+    if (jj_scan_token(ARE)) return true;
+    return false;
+  }
+
+  final private boolean jj_3_199() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_200()) {
+    if (jj_3_202()) {
     jj_scanpos = xsp;
-    if (jj_3_201()) {
+    if (jj_3_203()) {
     jj_scanpos = xsp;
-    if (jj_3_202()) {
+    if (jj_3_204()) {
     jj_scanpos = xsp;
-    if (jj_3_203()) return true;
+    if (jj_3_205()) return true;
     }
     }
     }
     return false;
   }
 
-  final private boolean jj_3_1150() {
-    if (jj_scan_token(ARE)) return true;
-    return false;
-  }
-
   final private boolean jj_3R_66() {
     if (jj_3R_213()) return true;
     return false;
   }
 
-  final private boolean jj_3_1149() {
+  final private boolean jj_3_1151() {
     if (jj_scan_token(ALLOW)) return true;
     return false;
   }
 
-  final private boolean jj_3_1148() {
+  final private boolean jj_3_1150() {
     if (jj_scan_token(ADD)) return true;
     return false;
   }
 
-  final private boolean jj_3_1147() {
+  final private boolean jj_3_1149() {
     if (jj_scan_token(ABS)) return true;
     return false;
   }
 
-  final private boolean jj_3_1146() {
+  final private boolean jj_3_1148() {
     if (jj_scan_token(QUERY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1145() {
+  final private boolean jj_3_1147() {
     if (jj_scan_token(SERVICE)) return true;
     return false;
   }
@@ -22439,32 +22458,32 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1144() {
+  final private boolean jj_3_1146() {
     if (jj_scan_token(KILL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1143() {
+  final private boolean jj_3_1145() {
     if (jj_scan_token(LOGGING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1142() {
+  final private boolean jj_3_1144() {
     if (jj_scan_token(ENCRYPTED)) return true;
     return false;
   }
 
-  final private boolean jj_3_1141() {
+  final private boolean jj_3_1143() {
     if (jj_scan_token(CACHE_NAME)) return true;
     return false;
   }
 
-  final private boolean jj_3_1140() {
+  final private boolean jj_3_1142() {
     if (jj_scan_token(ATOMICITY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1139() {
+  final private boolean jj_3_1141() {
     if (jj_scan_token(TEMPLATE)) return true;
     return false;
   }
@@ -22477,10 +22496,6 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
   final private boolean jj_3R_267() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3_1139()) {
-    jj_scanpos = xsp;
-    if (jj_3_1140()) {
-    jj_scanpos = xsp;
     if (jj_3_1141()) {
     jj_scanpos = xsp;
     if (jj_3_1142()) {
@@ -22737,7 +22752,11 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     jj_scanpos = xsp;
     if (jj_3_1268()) {
     jj_scanpos = xsp;
-    if (jj_3_1269()) return true;
+    if (jj_3_1269()) {
+    jj_scanpos = xsp;
+    if (jj_3_1270()) {
+    jj_scanpos = xsp;
+    if (jj_3_1271()) return true;
     }
     }
     }
@@ -22871,107 +22890,107 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1138() {
+  final private boolean jj_3_1140() {
     if (jj_scan_token(WRITE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1137() {
+  final private boolean jj_3_1139() {
     if (jj_scan_token(WITHIN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1136() {
+  final private boolean jj_3_1138() {
     if (jj_scan_token(WEEK)) return true;
     return false;
   }
 
-  final private boolean jj_3_1135() {
+  final private boolean jj_3_1137() {
     if (jj_scan_token(VERSION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1134() {
+  final private boolean jj_3_1136() {
     if (jj_scan_token(VARYING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1133() {
+  final private boolean jj_3_1135() {
     if (jj_scan_token(VALUE_OF)) return true;
     return false;
   }
 
-  final private boolean jj_3_1132() {
+  final private boolean jj_3_1134() {
     if (jj_scan_token(USAGE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1131() {
+  final private boolean jj_3_1133() {
     if (jj_scan_token(UNKNOWN)) return true;
     return false;
   }
 
-  final private boolean jj_3_1130() {
+  final private boolean jj_3_1132() {
     if (jj_scan_token(UESCAPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1129() {
+  final private boolean jj_3_1131() {
     if (jj_scan_token(TRIM_ARRAY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1128() {
+  final private boolean jj_3_1130() {
     if (jj_scan_token(TREAT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1127() {
+  final private boolean jj_3_1129() {
     if (jj_scan_token(TRANSLATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1126() {
+  final private boolean jj_3_1128() {
     if (jj_scan_token(TO)) return true;
     return false;
   }
 
-  final private boolean jj_3_1125() {
+  final private boolean jj_3_1127() {
     if (jj_scan_token(TIMEZONE_HOUR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1124() {
+  final private boolean jj_3_1126() {
     if (jj_scan_token(SYSTEM_TIME)) return true;
     return false;
   }
 
-  final private boolean jj_3_1123() {
+  final private boolean jj_3_1125() {
     if (jj_scan_token(SUM)) return true;
     return false;
   }
 
-  final private boolean jj_3_1122() {
+  final private boolean jj_3_1124() {
     if (jj_scan_token(SUBSTRING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1121() {
+  final private boolean jj_3_1123() {
     if (jj_scan_token(STDDEV_SAMP)) return true;
     return false;
   }
 
-  final private boolean jj_3_1120() {
+  final private boolean jj_3_1122() {
     if (jj_scan_token(STATE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1119() {
+  final private boolean jj_3_1121() {
     if (jj_scan_token(SQLWARNING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1118() {
+  final private boolean jj_3_1120() {
     if (jj_scan_token(SQL)) return true;
     return false;
   }
@@ -22981,357 +23000,357 @@ public class IgniteSqlParserImpl extends SqlAbstractParserImpl implements Ignite
     return false;
   }
 
-  final private boolean jj_3_1117() {
+  final private boolean jj_3_1119() {
     if (jj_scan_token(SPACE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1116() {
+  final private boolean jj_3_1118() {
     if (jj_scan_token(SIMILAR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1115() {
+  final private boolean jj_3_1117() {
     if (jj_scan_token(SESSION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1114() {
+  final private boolean jj_3_1116() {
     if (jj_scan_token(SECTION)) return true;
     return false;
   }
 
-  final private boolean jj_3_1113() {
+  final private boolean jj_3_1115() {
     if (jj_scan_token(SCROLL)) return true;
     return false;
   }
 
-  final private boolean jj_3_1112() {
+  final private boolean jj_3_1114() {
     if (jj_scan_token(SAVEPOINT)) return true;
     return false;
   }
 
-  final private boolean jj_3_196() {
+  final private boolean jj_3_198() {
     if (jj_scan_token(USING)) return true;
     if (jj_3R_95()) return true;
     return false;
   }
 
-  final private boolean jj_3_1111() {
+  final private boolean jj_3_1113() {
     if (jj_scan_token(ROUTINE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1110() {
+  final private boolean jj_3_1112() {
     if (jj_scan_token(REVOKE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1109() {
+  final private boolean jj_3_1111() {
     if (jj_scan_token(RESULT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1108() {
+  final private boolean jj_3_1110() {
     if (jj_scan_token(REPLACE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1107() {
+  final private boolean jj_3_1109() {
     if (jj_scan_token(REGR_SYY)) return true;
     return false;
   }
 
-  final private boolean jj_3_1106() {
+  final private boolean jj_3_1108() {
     if (jj_scan_token(REGR_SLOPE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1105() {
+  final private boolean jj_3_1107() {
     if (jj_scan_token(REGR_COUNT)) return true;
     return false;
   }
 
-  final private boolean jj_3_1104() {
+  final private boolean jj_3_1106() {
     if (jj_scan_token(REFERENCING)) return true;
     return false;
   }
 
-  final private boolean jj_3_1103() {
+  final private boolean jj_3_1105() {
     if (jj_scan_token(RECURSIVE)) return true;
     return false;
   }
 
-  final private boolean jj_3_1102() {
+  final private boolean jj_3_1104() {
     if (jj_scan_token(READ)) return true;
     return false;
   }
 
-  final private boolean jj_3_1101() {
+  final private boolean jj_3_1103() {
     if (jj_scan_token(PUBLIC)) return true;
     return false;
   }
 
-  final private boolean jj_3_195() {
+  final private boolean jj_3_197() {
     if (jj_scan_token(ON)) return true;
     if (jj_3R_61()) return true;
     return false;
   }
 
-  final private boolean jj_3_1100() {
+  final private boolean jj_3_1102() {
     if (jj_scan_token(PRIOR)) return true;
     return false;
   }
 
-  final private boolean jj_3_1099() {
+  final private boolean jj_3_1101() {
     if (jj_scan_token(PREPARE)) return true;
     return false;
... 8972 lines suppressed ...