You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2016/05/23 06:41:58 UTC

[5/5] calcite git commit: Following [CALCITE-1241], create a table of reserved keywords from various versions of the SQL standard

Following [CALCITE-1241], create a table of reserved keywords from various versions of the SQL standard


Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/5a697eed
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/5a697eed
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/5a697eed

Branch: refs/heads/master
Commit: 5a697eedf1a6d32fe4b6e504dc0454429949d423
Parents: 20ba434
Author: Julian Hyde <jh...@apache.org>
Authored: Fri May 20 17:48:32 2016 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Sun May 22 12:46:46 2016 -0700

----------------------------------------------------------------------
 .../calcite/sql/parser/SqlParserTest.java       | 779 +++++++++++--------
 1 file changed, 466 insertions(+), 313 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/5a697eed/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java b/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
index f8bb2b3..a66f12a 100644
--- a/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -31,6 +31,7 @@ import org.apache.calcite.util.Util;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSortedSet;
 
 import org.junit.Ignore;
 import org.junit.Test;
@@ -42,11 +43,12 @@ import java.io.FileWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeSet;
 
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
@@ -63,317 +65,437 @@ public class SqlParserTest {
   //~ Static fields/initializers ---------------------------------------------
 
   /**
-   * List of reserved keywords in parser. If a new <b>reserved</b> keyword is added to the
-   * parser, it must be included in this list. If the keyword is not intended to be a
-   * reserved keyword, add it to the non-reserved keyword list in the parser.
+   * List of reserved keywords.
+   *
+   * <p>Each keyword is followed by tokens indicating whether it is reserved in
+   * the SQL:92, SQL:99, SQL:2003 standards and in Calcite.
+   *
+   * <p>The standard keywords are derived from
+   * <a href="http://developer.mimer.com/validator/sql-reserved-words.tml">Mimer</a>.
+   *
+   * <p>If a new <b>reserved</b> keyword is added to the parser, include it in
+   * this list, flagged "c". If the keyword is not intended to be a reserved
+   * keyword, add it to the non-reserved keyword list in the parser.
    */
   private static final List<String> RESERVED_KEYWORDS = ImmutableList.of(
-      "ABS",
-      "ALL",
-      "ALLOCATE",
-      "ALLOW",
-      "ALTER",
-      "AND",
-      "ANY",
-      "ARE",
-      "ARRAY",
-      "AS",
-      "ASENSITIVE",
-      "ASYMMETRIC",
-      "AT",
-      "ATOMIC",
-      "AUTHORIZATION",
-      "AVG",
-      "BEGIN",
-      "BETWEEN",
-      "BIGINT",
-      "BINARY",
-      "BIT",
-      "BLOB",
-      "BOOLEAN",
-      "BOTH",
-      "BY",
-      "CALL",
-      "CALLED",
-      "CARDINALITY",
-      "CASCADED",
-      "CASE",
-      "CAST",
-      "CEIL",
-      "CEILING",
-      "CHAR",
-      "CHARACTER",
-      "CHARACTER_LENGTH",
-      "CHAR_LENGTH",
-      "CHECK",
-      "CLOB",
-      "CLOSE",
-      "COALESCE",
-      "COLLATE",
-      "COLLECT",
-      "COLUMN",
-      "COMMIT",
-      "CONDITION",
-      "CONNECT",
-      "CONSTRAINT",
-      "CONVERT",
-      "CORR",
-      "CORRESPONDING",
-      "COUNT",
-      "COVAR_POP",
-      "COVAR_SAMP",
-      "CREATE",
-      "CROSS",
-      "CUBE",
-      "CUME_DIST",
-      "CURRENT",
-      "CURRENT_CATALOG",
-      "CURRENT_DATE",
-      "CURRENT_DEFAULT_TRANSFORM_GROUP",
-      "CURRENT_PATH",
-      "CURRENT_ROLE",
-      "CURRENT_SCHEMA",
-      "CURRENT_TIME",
-      "CURRENT_TIMESTAMP",
-      "CURRENT_TRANSFORM_GROUP_FOR_TYPE",
-      "CURRENT_USER",
-      "CURSOR",
-      "CYCLE",
-      "DATE",
-      "DAY",
-      "DEALLOCATE",
-      "DEC",
-      "DECIMAL",
-      "DECLARE",
-      "DEFAULT",
-      "DELETE",
-      "DENSE_RANK",
-      "DEREF",
-      "DESCRIBE",
-      "DETERMINISTIC",
-      "DISALLOW",
-      "DISCONNECT",
-      "DISTINCT",
-      "DOUBLE",
-      "DROP",
-      "DYNAMIC",
-      "EACH",
-      "ELEMENT",
-      "ELSE",
-      "END",
-      "END-EXEC",
-      "ESCAPE",
-      "EVERY",
-      "EXCEPT",
-      "EXEC",
-      "EXECUTE",
-      "EXISTS",
-      "EXP",
-      "EXPLAIN",
-      "EXTEND",
-      "EXTERNAL",
-      "EXTRACT",
-      "FALSE",
-      "FETCH",
-      "FILTER",
-      "FIRST_VALUE",
-      "FLOAT",
-      "FLOOR",
-      "FOR",
-      "FOREIGN",
-      "FREE",
-      "FROM",
-      "FULL",
-      "FUNCTION",
-      "FUSION",
-      "GET",
-      "GLOBAL",
-      "GRANT",
-      "GROUP",
-      "GROUPING",
-      "HAVING",
-      "HOLD",
-      "HOUR",
-      "IDENTITY",
-      "IMPORT",
-      "IN",
-      "INDICATOR",
-      "INNER",
-      "INOUT",
-      "INSENSITIVE",
-      "INSERT",
-      "INT",
-      "INTEGER",
-      "INTERSECT",
-      "INTERSECTION",
-      "INTERVAL",
-      "INTO",
-      "IS",
-      "JOIN",
-      "LANGUAGE",
-      "LARGE",
-      "LAST_VALUE",
-      "LATERAL",
-      "LEADING",
-      "LEFT",
-      "LIKE",
-      "LIMIT",
-      "LN",
-      "LOCAL",
-      "LOCALTIME",
-      "LOCALTIMESTAMP",
-      "LOWER",
-      "MATCH",
-      "MAX",
-      "MEMBER",
-      "MERGE",
-      "METHOD",
-      "MIN",
-      "MINUTE",
-      "MOD",
-      "MODIFIES",
-      "MODULE",
-      "MONTH",
-      "MULTISET",
-      "NATIONAL",
-      "NATURAL",
-      "NCHAR",
-      "NCLOB",
-      "NEW",
-      "NEXT",
-      "NO",
-      "NONE",
-      "NORMALIZE",
-      "NOT",
-      "NULL",
-      "NULLIF",
-      "NUMERIC",
-      "OCTET_LENGTH",
-      "OF",
-      "OFFSET",
-      "OLD",
-      "ON",
-      "ONLY",
-      "OPEN",
-      "OR",
-      "ORDER",
-      "OUT",
-      "OUTER",
-      "OVER",
-      "OVERLAPS",
-      "OVERLAY",
-      "PARAMETER",
-      "PARTITION",
-      "PERCENTILE_CONT",
-      "PERCENTILE_DISC",
-      "PERCENT_RANK",
-      "POSITION",
-      "POWER",
-      "PRECISION",
-      "PREPARE",
-      "PRIMARY",
-      "PROCEDURE",
-      "RANGE",
-      "RANK",
-      "READS",
-      "REAL",
-      "RECURSIVE",
-      "REF",
-      "REFERENCES",
-      "REFERENCING",
-      "REGR_AVGX",
-      "REGR_AVGY",
-      "REGR_COUNT",
-      "REGR_INTERCEPT",
-      "REGR_R2",
-      "REGR_SLOPE",
-      "REGR_SXX",
-      "REGR_SXY",
-      "REGR_SYY",
-      "RELEASE",
-      "RESET",
-      "RESULT",
-      "RETURN",
-      "RETURNS",
-      "REVOKE",
-      "RIGHT",
-      "ROLLBACK",
-      "ROLLUP",
-      "ROW",
-      "ROWS",
-      "ROW_NUMBER",
-      "SAVEPOINT",
-      "SCOPE",
-      "SCROLL",
-      "SEARCH",
-      "SECOND",
-      "SELECT",
-      "SENSITIVE",
-      "SESSION_USER",
-      "SET",
-      "SIMILAR",
-      "SMALLINT",
-      "SOME",
-      "SPECIFIC",
-      "SPECIFICTYPE",
-      "SQL",
-      "SQLEXCEPTION",
-      "SQLSTATE",
-      "SQLWARNING",
-      "SQRT",
-      "START",
-      "STATIC",
-      "STDDEV_POP",
-      "STDDEV_SAMP",
-      "STREAM",
-      "SUBMULTISET",
-      "SUBSTRING",
-      "SUM",
-      "SYMMETRIC",
-      "SYSTEM",
-      "SYSTEM_USER",
-      "TABLE",
-      "TABLESAMPLE",
-      "THEN",
-      "TIME",
-      "TIMESTAMP",
-      "TIMEZONE_HOUR",
-      "TIMEZONE_MINUTE",
-      "TINYINT",
-      "TO",
-      "TRAILING",
-      "TRANSLATE",
-      "TRANSLATION",
-      "TREAT",
-      "TRIGGER",
-      "TRIM",
-      "TRUE",
-      "UESCAPE",
-      "UNION",
-      "UNIQUE",
-      "UNKNOWN",
-      "UNNEST",
-      "UPDATE",
-      "UPPER",
-      "UPSERT",
-      "USER",
-      "USING",
-      "VALUE",
-      "VALUES",
-      "VARBINARY",
-      "VARCHAR",
-      "VARYING",
-      "VAR_POP",
-      "VAR_SAMP",
-      "WHEN",
-      "WHENEVER",
-      "WHERE",
-      "WIDTH_BUCKET",
-      "WINDOW",
-      "WITH",
-      "WITHIN",
-      "WITHOUT",
-      "YEAR");
+      "ABS",                                                    "2011", "c",
+      "ABSOLUTE",                           "92", "99",
+      "ACTION",                             "92", "99",
+      "ADD",                                "92", "99", "2003",
+      "AFTER",                                    "99",
+      "ALL",                                "92", "99", "2003", "2011", "c",
+      "ALLOCATE",                           "92", "99", "2003", "2011", "c",
+      "ALLOW",                                                          "c",
+      "ALTER",                              "92", "99", "2003", "2011", "c",
+      "AND",                                "92", "99", "2003", "2011", "c",
+      "ANY",                                "92", "99", "2003", "2011", "c",
+      "ARE",                                "92", "99", "2003", "2011", "c",
+      "ARRAY",                                    "99", "2003", "2011", "c",
+      "ARRAY_AGG",                                              "2011",
+      "AS",                                 "92", "99", "2003", "2011", "c",
+      "ASC",                                "92", "99",
+      "ASENSITIVE",                               "99", "2003", "2011", "c",
+      "ASSERTION",                          "92", "99",
+      "ASYMMETRIC",                               "99", "2003", "2011", "c",
+      "AT",                                 "92", "99", "2003", "2011", "c",
+      "ATOMIC",                                   "99", "2003", "2011", "c",
+      "AUTHORIZATION",                      "92", "99", "2003", "2011", "c",
+      "AVG",                                "92",               "2011", "c",
+      "BEFORE",                                   "99",
+      "BEGIN",                              "92", "99", "2003", "2011", "c",
+      "BETWEEN",                            "92", "99", "2003", "2011", "c",
+      "BIGINT",                                         "2003", "2011", "c",
+      "BINARY",                                   "99", "2003", "2011", "c",
+      "BIT",                                "92", "99",                 "c",
+      "BIT_LENGTH",                         "92",
+      "BLOB",                                     "99", "2003", "2011", "c",
+      "BOOLEAN",                                  "99", "2003", "2011", "c",
+      "BOTH",                               "92", "99", "2003", "2011", "c",
+      "BREADTH",                                  "99",
+      "BY",                                 "92", "99", "2003", "2011", "c",
+      "CALL",                               "92", "99", "2003", "2011", "c",
+      "CALLED",                                         "2003", "2011", "c",
+      "CARDINALITY",                                            "2011", "c",
+      "CASCADE",                            "92", "99",
+      "CASCADED",                           "92", "99", "2003", "2011", "c",
+      "CASE",                               "92", "99", "2003", "2011", "c",
+      "CAST",                               "92", "99", "2003", "2011", "c",
+      "CATALOG",                            "92", "99",
+      "CEIL",                                                   "2011", "c",
+      "CEILING",                                                "2011", "c",
+      "CHAR",                               "92", "99", "2003", "2011", "c",
+      "CHARACTER",                          "92", "99", "2003", "2011", "c",
+      "CHARACTER_LENGTH",                   "92",               "2011", "c",
+      "CHAR_LENGTH",                        "92",               "2011", "c",
+      "CHECK",                              "92", "99", "2003", "2011", "c",
+      "CLOB",                                     "99", "2003", "2011", "c",
+      "CLOSE",                              "92", "99", "2003", "2011", "c",
+      "COALESCE",                           "92",               "2011", "c",
+      "COLLATE",                            "92", "99", "2003", "2011", "c",
+      "COLLATION",                          "92", "99",
+      "COLLECT",                                                "2011", "c",
+      "COLUMN",                             "92", "99", "2003", "2011", "c",
+      "COMMIT",                             "92", "99", "2003", "2011", "c",
+      "CONDITION",                          "92", "99", "2003", "2011", "c",
+      "CONNECT",                            "92", "99", "2003", "2011", "c",
+      "CONNECTION",                         "92", "99",
+      "CONSTRAINT",                         "92", "99", "2003", "2011", "c",
+      "CONSTRAINTS",                        "92", "99",
+      "CONSTRUCTOR",                              "99",
+      "CONTAINS",                           "92",
+      "CONTINUE",                           "92", "99", "2003",
+      "CONVERT",                            "92",               "2011", "c",
+      "CORR",                                                   "2011", "c",
+      "CORRESPONDING",                      "92", "99", "2003", "2011", "c",
+      "COUNT",                              "92",               "2011", "c",
+      "COVAR_POP",                                              "2011", "c",
+      "COVAR_SAMP",                                             "2011", "c",
+      "CREATE",                             "92", "99", "2003", "2011", "c",
+      "CROSS",                              "92", "99", "2003", "2011", "c",
+      "CUBE",                                     "99", "2003", "2011", "c",
+      "CUME_DIST",                                              "2011", "c",
+      "CURRENT",                            "92", "99", "2003", "2011", "c",
+      "CURRENT_CATALOG",                                        "2011", "c",
+      "CURRENT_DATE",                       "92", "99", "2003", "2011", "c",
+      "CURRENT_DEFAULT_TRANSFORM_GROUP",          "99", "2003", "2011", "c",
+      "CURRENT_PATH",                       "92", "99", "2003", "2011", "c",
+      "CURRENT_ROLE",                             "99", "2003", "2011", "c",
+      "CURRENT_SCHEMA",                                         "2011", "c",
+      "CURRENT_TIME",                       "92", "99", "2003", "2011", "c",
+      "CURRENT_TIMESTAMP",                  "92", "99", "2003", "2011", "c",
+      "CURRENT_TRANSFORM_GROUP_FOR_TYPE",         "99", "2003", "2011", "c",
+      "CURRENT_USER",                       "92", "99", "2003", "2011", "c",
+      "CURSOR",                             "92", "99", "2003", "2011", "c",
+      "CYCLE",                                    "99", "2003", "2011", "c",
+      "DATA",                                     "99",
+      "DATE",                               "92", "99", "2003", "2011", "c",
+      "DAY",                                "92", "99", "2003", "2011", "c",
+      "DAYS",                                                   "2011",
+      "DEALLOCATE",                         "92", "99", "2003", "2011", "c",
+      "DEC",                                "92", "99", "2003", "2011", "c",
+      "DECIMAL",                            "92", "99", "2003", "2011", "c",
+      "DECLARE",                            "92", "99", "2003", "2011", "c",
+      "DEFAULT",                            "92", "99", "2003", "2011", "c",
+      "DEFERRABLE",                         "92", "99",
+      "DEFERRED",                           "92", "99",
+      "DELETE",                             "92", "99", "2003", "2011", "c",
+      "DENSE_RANK",                                             "2011", "c",
+      "DEPTH",                                    "99",
+      "DEREF",                                    "99", "2003", "2011", "c",
+      "DESC",                               "92", "99",
+      "DESCRIBE",                           "92", "99", "2003", "2011", "c",
+      "DESCRIPTOR",                         "92", "99",
+      "DETERMINISTIC",                      "92", "99", "2003", "2011", "c",
+      "DIAGNOSTICS",                        "92", "99",
+      "DISALLOW",                                                       "c",
+      "DISCONNECT",                         "92", "99", "2003", "2011", "c",
+      "DISTINCT",                           "92", "99", "2003", "2011", "c",
+      "DO",                                 "92", "99", "2003",
+      "DOMAIN",                             "92", "99",
+      "DOUBLE",                             "92", "99", "2003", "2011", "c",
+      "DROP",                               "92", "99", "2003", "2011", "c",
+      "DYNAMIC",                                  "99", "2003", "2011", "c",
+      "EACH",                                     "99", "2003", "2011", "c",
+      "ELEMENT",                                        "2003", "2011", "c",
+      "ELSE",                               "92", "99", "2003", "2011", "c",
+      "ELSEIF",                             "92", "99", "2003",
+      "END",                                "92", "99", "2003", "2011", "c",
+      "END-EXEC",                                               "2011", "c",
+      "EQUALS",                                   "99",
+      "ESCAPE",                             "92", "99", "2003", "2011", "c",
+      "EVERY",                                                  "2011", "c",
+      "EXCEPT",                             "92", "99", "2003", "2011", "c",
+      "EXCEPTION",                          "92", "99",
+      "EXEC",                               "92", "99", "2003", "2011", "c",
+      "EXECUTE",                            "92", "99", "2003", "2011", "c",
+      "EXISTS",                             "92", "99", "2003", "2011", "c",
+      "EXIT",                               "92", "99", "2003",
+      "EXP",                                                    "2011", "c",
+      "EXPLAIN",                                                        "c",
+      "EXTEND",                                                         "c",
+      "EXTERNAL",                           "92", "99", "2003", "2011", "c",
+      "EXTRACT",                            "92",               "2011", "c",
+      "FALSE",                              "92", "99", "2003", "2011", "c",
+      "FETCH",                              "92", "99", "2003", "2011", "c",
+      "FILTER",                                   "99", "2003", "2011", "c",
+      "FIRST",                              "92", "99",
+      "FIRST_VALUE",                                            "2011", "c",
+      "FLOAT",                              "92", "99", "2003", "2011", "c",
+      "FLOOR",                                                  "2011", "c",
+      "FOR",                                "92", "99", "2003", "2011", "c",
+      "FOREIGN",                            "92", "99", "2003", "2011", "c",
+      "FOREVER",                                                "2011",
+      "FOUND",                              "92", "99",
+      "FREE",                                     "99", "2003", "2011", "c",
+      "FROM",                               "92", "99", "2003", "2011", "c",
+      "FULL",                               "92", "99", "2003", "2011", "c",
+      "FUNCTION",                           "92", "99", "2003", "2011", "c",
+      "FUSION",                                                 "2011", "c",
+      "GENERAL",                                  "99",
+      "GET",                                "92", "99", "2003", "2011", "c",
+      "GLOBAL",                             "92", "99", "2003", "2011", "c",
+      "GO",                                 "92", "99",
+      "GOTO",                               "92", "99",
+      "GRANT",                              "92", "99", "2003", "2011", "c",
+      "GROUP",                              "92", "99", "2003", "2011", "c",
+      "GROUPING",                                 "99", "2003", "2011", "c",
+      "HANDLER",                            "92", "99", "2003",
+      "HAVING",                             "92", "99", "2003", "2011", "c",
+      "HOLD",                                     "99", "2003", "2011", "c",
+      "HOUR",                               "92", "99", "2003", "2011", "c",
+      "HOURS",                                                  "2011",
+      "IDENTITY",                           "92", "99", "2003", "2011", "c",
+      "IF",                                 "92", "99", "2003",
+      "IMMEDIATE",                          "92", "99", "2003",
+      "IMPORT",                                                         "c",
+      "IN",                                 "92", "99", "2003", "2011", "c",
+      "INDICATOR",                          "92", "99", "2003", "2011", "c",
+      "INITIALLY",                          "92", "99",
+      "INNER",                              "92", "99", "2003", "2011", "c",
+      "INOUT",                              "92", "99", "2003", "2011", "c",
+      "INPUT",                              "92", "99", "2003",
+      "INSENSITIVE",                        "92", "99", "2003", "2011", "c",
+      "INSERT",                             "92", "99", "2003", "2011", "c",
+      "INT",                                "92", "99", "2003", "2011", "c",
+      "INTEGER",                            "92", "99", "2003", "2011", "c",
+      "INTERSECT",                          "92", "99", "2003", "2011", "c",
+      "INTERSECTION",                                           "2011", "c",
+      "INTERVAL",                           "92", "99", "2003", "2011", "c",
+      "INTO",                               "92", "99", "2003", "2011", "c",
+      "IS",                                 "92", "99", "2003", "2011", "c",
+      "ISOLATION",                          "92", "99",
+      "ITERATE",                                  "99", "2003",
+      "JOIN",                               "92", "99", "2003", "2011", "c",
+      "KEEP",                                                   "2011",
+      "KEY",                                "92", "99",
+      "LAG",                                                    "2011",
+      "LANGUAGE",                           "92", "99", "2003", "2011", "c",
+      "LARGE",                                    "99", "2003", "2011", "c",
+      "LAST",                               "92", "99",
+      "LAST_VALUE",                                             "2011", "c",
+      "LATERAL",                                  "99", "2003", "2011", "c",
+      "LEAD",                                                   "2011",
+      "LEADING",                            "92", "99", "2003", "2011", "c",
+      "LEAVE",                              "92", "99", "2003",
+      "LEFT",                               "92", "99", "2003", "2011", "c",
+      "LEVEL",                              "92", "99",
+      "LIKE",                               "92", "99", "2003", "2011", "c",
+      "LIKE_REGEX",                                             "2011",
+      "LIMIT",                                                          "c",
+      "LN",                                                     "2011", "c",
+      "LOCAL",                              "92", "99", "2003", "2011", "c",
+      "LOCALTIME",                                "99", "2003", "2011", "c",
+      "LOCALTIMESTAMP",                           "99", "2003", "2011", "c",
+      "LOCATOR",                                  "99",
+      "LOOP",                               "92", "99", "2003",
+      "LOWER",                              "92",               "2011", "c",
+      "MAP",                                      "99",
+      "MATCH",                              "92", "99", "2003", "2011", "c",
+      "MAX",                                "92",               "2011", "c",
+      "MAX_CARDINALITY",                                        "2011",
+      "MEMBER",                                         "2003", "2011", "c",
+      "MERGE",                                          "2003", "2011", "c",
+      "METHOD",                                   "99", "2003", "2011", "c",
+      "MIN",                                "92",               "2011", "c",
+      "MINUTE",                             "92", "99", "2003", "2011", "c",
+      "MINUTES",                                                "2011",
+      "MOD",                                                    "2011", "c",
+      "MODIFIES",                                 "99", "2003", "2011", "c",
+      "MODULE",                             "92", "99", "2003", "2011", "c",
+      "MONTH",                              "92", "99", "2003", "2011", "c",
+      "MULTISET",                                       "2003", "2011", "c",
+      "NAMES",                              "92", "99",
+      "NATIONAL",                           "92", "99", "2003", "2011", "c",
+      "NATURAL",                            "92", "99", "2003", "2011", "c",
+      "NCHAR",                              "92", "99", "2003", "2011", "c",
+      "NCLOB",                                    "99", "2003", "2011", "c",
+      "NEW",                                      "99", "2003", "2011", "c",
+      "NEXT",                               "92", "99",                 "c",
+      "NO",                                 "92", "99", "2003", "2011", "c",
+      "NONE",                                     "99", "2003", "2011", "c",
+      "NORMALIZE",                                              "2011", "c",
+      "NOT",                                "92", "99", "2003", "2011", "c",
+      "NTH_VALUE",                                              "2011",
+      "NTILE",                                                  "2011",
+      "NULL",                               "92", "99", "2003", "2011", "c",
+      "NULLIF",                             "92",               "2011", "c",
+      "NUMERIC",                            "92", "99", "2003", "2011", "c",
+      "OBJECT",                                   "99",
+      "OCCURRENCES_REGEX",                                      "2011",
+      "OCTET_LENGTH",                       "92",               "2011", "c",
+      "OF",                                 "92", "99", "2003", "2011", "c",
+      "OFFSET",                                                 "2011", "c",
+      "OLD",                                      "99", "2003", "2011", "c",
+      "ON",                                 "92", "99", "2003", "2011", "c",
+      "ONLY",                               "92", "99", "2003", "2011", "c",
+      "OPEN",                               "92", "99", "2003", "2011", "c",
+      "OPTION",                             "92", "99",
+      "OR",                                 "92", "99", "2003", "2011", "c",
+      "ORDER",                              "92", "99", "2003", "2011", "c",
+      "ORDINALITY",                               "99",
+      "OUT",                                "92", "99", "2003", "2011", "c",
+      "OUTER",                              "92", "99", "2003", "2011", "c",
+      "OUTPUT",                             "92", "99", "2003",
+      "OVER",                                     "99", "2003", "2011", "c",
+      "OVERLAPS",                           "92", "99", "2003", "2011", "c",
+      "OVERLAY",                                                "2011", "c",
+      "PAD",                                "92", "99",
+      "PARAMETER",                          "92", "99", "2003", "2011", "c",
+      "PARTIAL",                            "92", "99",
+      "PARTITION",                                "99", "2003", "2011", "c",
+      "PATH",                               "92", "99",
+      "PERCENTILE_CONT",                                        "2011", "c",
+      "PERCENTILE_DISC",                                        "2011", "c",
+      "PERCENT_RANK",                                           "2011", "c",
+      "POSITION",                           "92",               "2011", "c",
+      "POSITION_REGEX",                                         "2011",
+      "POWER",                                                  "2011", "c",
+      "PRECISION",                          "92", "99", "2003", "2011", "c",
+      "PREPARE",                            "92", "99", "2003", "2011", "c",
+      "PRESERVE",                           "92", "99",
+      "PRIMARY",                            "92", "99", "2003", "2011", "c",
+      "PRIOR",                              "92", "99",
+      "PRIVILEGES",                         "92", "99",
+      "PROCEDURE",                          "92", "99", "2003", "2011", "c",
+      "PUBLIC",                             "92", "99",
+      "RANGE",                                    "99", "2003", "2011", "c",
+      "RANK",                                                   "2011", "c",
+      "READ",                               "92", "99",
+      "READS",                                    "99", "2003", "2011", "c",
+      "REAL",                               "92", "99", "2003", "2011", "c",
+      "RECURSIVE",                                "99", "2003", "2011", "c",
+      "REF",                                      "99", "2003", "2011", "c",
+      "REFERENCES",                         "92", "99", "2003", "2011", "c",
+      "REFERENCING",                              "99", "2003", "2011", "c",
+      "REGR_AVGX",                                              "2011", "c",
+      "REGR_AVGY",                                              "2011", "c",
+      "REGR_COUNT",                                             "2011", "c",
+      "REGR_INTERCEPT",                                         "2011", "c",
+      "REGR_R2",                                                "2011", "c",
+      "REGR_SLOPE",                                             "2011", "c",
+      "REGR_SXX",                                               "2011", "c",
+      "REGR_SXY",                                               "2011", "c",
+      "REGR_SYY",                                               "2011", "c",
+      "RELATIVE",                           "92", "99",
+      "RELEASE",                                  "99", "2003", "2011", "c",
+      "REPEAT",                             "92", "99", "2003",
+      "RESET",                                                          "c",
+      "RESIGNAL",                           "92", "99", "2003",
+      "RESTRICT",                           "92", "99",
+      "RESULT",                                   "99", "2003", "2011", "c",
+      "RETURN",                             "92", "99", "2003", "2011", "c",
+      "RETURNS",                            "92", "99", "2003", "2011", "c",
+      "REVOKE",                             "92", "99", "2003", "2011", "c",
+      "RIGHT",                              "92", "99", "2003", "2011", "c",
+      "ROLE",                                     "99",
+      "ROLLBACK",                           "92", "99", "2003", "2011", "c",
+      "ROLLUP",                                   "99", "2003", "2011", "c",
+      "ROUTINE",                            "92", "99",
+      "ROW",                                      "99", "2003", "2011", "c",
+      "ROWS",                               "92", "99", "2003", "2011", "c",
+      "ROW_NUMBER",                                             "2011", "c",
+      "SAVEPOINT",                                "99", "2003", "2011", "c",
+      "SCHEMA",                             "92", "99",
+      "SCOPE",                                    "99", "2003", "2011", "c",
+      "SCROLL",                             "92", "99", "2003", "2011", "c",
+      "SEARCH",                                   "99", "2003", "2011", "c",
+      "SECOND",                             "92", "99", "2003", "2011", "c",
+      "SECONDS",                                                "2011",
+      "SECTION",                            "92", "99",
+      "SELECT",                             "92", "99", "2003", "2011", "c",
+      "SENSITIVE",                                "99", "2003", "2011", "c",
+      "SESSION",                            "92", "99",
+      "SESSION_USER",                       "92", "99", "2003", "2011", "c",
+      "SET",                                "92", "99", "2003", "2011", "c",
+      "SETS",                                     "99",
+      "SIGNAL",                             "92", "99", "2003",
+      "SIMILAR",                                  "99", "2003", "2011", "c",
+      "SIZE",                               "92", "99",
+      "SMALLINT",                           "92", "99", "2003", "2011", "c",
+      "SOME",                               "92", "99", "2003", "2011", "c",
+      "SPACE",                              "92", "99",
+      "SPECIFIC",                           "92", "99", "2003", "2011", "c",
+      "SPECIFICTYPE",                             "99", "2003", "2011", "c",
+      "SQL",                                "92", "99", "2003", "2011", "c",
+      "SQLCODE",                            "92",
+      "SQLERROR",                           "92",
+      "SQLEXCEPTION",                       "92", "99", "2003", "2011", "c",
+      "SQLSTATE",                           "92", "99", "2003", "2011", "c",
+      "SQLWARNING",                         "92", "99", "2003", "2011", "c",
+      "SQRT",                                                   "2011", "c",
+      "START",                                    "99", "2003", "2011", "c",
+      "STATE",                                    "99",
+      "STATIC",                                   "99", "2003", "2011", "c",
+      "STDDEV_POP",                                             "2011", "c",
+      "STDDEV_SAMP",                                            "2011", "c",
+      "STREAM",                                                         "c",
+      "SUBMULTISET",                                    "2003", "2011", "c",
+      "SUBSTRING",                          "92",               "2011", "c",
+      "SUBSTRING_REGEX",                                        "2011",
+      "SUM",                                "92",               "2011", "c",
+      "SYMMETRIC",                                "99", "2003", "2011", "c",
+      "SYSTEM",                                   "99", "2003", "2011", "c",
+      "SYSTEM_USER",                        "92", "99", "2003", "2011", "c",
+      "TABLE",                              "92", "99", "2003", "2011", "c",
+      "TABLESAMPLE",                                    "2003", "2011", "c",
+      "TEMPORARY",                          "92", "99",
+      "THEN",                               "92", "99", "2003", "2011", "c",
+      "TIME",                               "92", "99", "2003", "2011", "c",
+      "TIMESTAMP",                          "92", "99", "2003", "2011", "c",
+      "TIMEZONE_HOUR",                      "92", "99", "2003", "2011", "c",
+      "TIMEZONE_MINUTE",                    "92", "99", "2003", "2011", "c",
+      "TINYINT",                                                        "c",
+      "TO",                                 "92", "99", "2003", "2011", "c",
+      "TRAILING",                           "92", "99", "2003", "2011", "c",
+      "TRANSACTION",                        "92", "99",
+      "TRANSLATE",                          "92",               "2011", "c",
+      "TRANSLATE_REGEX",                                        "2011",
+      "TRANSLATION",                        "92", "99", "2003", "2011", "c",
+      "TREAT",                                    "99", "2003", "2011", "c",
+      "TRIGGER",                                  "99", "2003", "2011", "c",
+      "TRIM",                               "92",               "2011", "c",
+      "TRIM_ARRAY",                                             "2011",
+      "TRUE",                               "92", "99", "2003", "2011", "c",
+      "TRUNCATE",                                               "2011",
+      "UESCAPE",                                                "2011", "c",
+      "UNDER",                                    "99",
+      "UNDO",                               "92", "99", "2003",
+      "UNION",                              "92", "99", "2003", "2011", "c",
+      "UNIQUE",                             "92", "99", "2003", "2011", "c",
+      "UNKNOWN",                            "92", "99", "2003", "2011", "c",
+      "UNNEST",                                   "99", "2003", "2011", "c",
+      "UNTIL",                              "92", "99", "2003",
+      "UPDATE",                             "92", "99", "2003", "2011", "c",
+      "UPPER",                              "92",               "2011", "c",
+      "UPSERT",                                                         "c",
+      "USAGE",                              "92", "99",
+      "USER",                               "92", "99", "2003", "2011", "c",
+      "USING",                              "92", "99", "2003", "2011", "c",
+      "VALUE",                              "92", "99", "2003", "2011", "c",
+      "VALUES",                             "92", "99", "2003", "2011", "c",
+      "VARBINARY",                                              "2011", "c",
+      "VARCHAR",                            "92", "99", "2003", "2011", "c",
+      "VARYING",                            "92", "99", "2003", "2011", "c",
+      "VAR_POP",                                                "2011", "c",
+      "VAR_SAMP",                                               "2011", "c",
+      "VERSION",                                                "2011",
+      "VERSIONING",                                             "2011",
+      "VERSIONS",                                               "2011",
+      "VIEW",                               "92", "99",
+      "WHEN",                               "92", "99", "2003", "2011", "c",
+      "WHENEVER",                           "92", "99", "2003", "2011", "c",
+      "WHERE",                              "92", "99", "2003", "2011", "c",
+      "WHILE",                              "92", "99", "2003",
+      "WIDTH_BUCKET",                                           "2011", "c",
+      "WINDOW",                                   "99", "2003", "2011", "c",
+      "WITH",                               "92", "99", "2003", "2011", "c",
+      "WITHIN",                                   "99", "2003", "2011", "c",
+      "WITHOUT",                                  "99", "2003", "2011", "c",
+      "WORK",                               "92", "99",
+      "WRITE",                              "92", "99",
+      "YEAR",                               "92", "99", "2003", "2011", "c",
+      "YEARS",                                                  "2011",
+      "ZONE",                               "92", "99");
 
   private static final String ANY = "(?s).*";
 
@@ -458,8 +580,32 @@ public class SqlParserTest {
     getTester().checkExpFails(sql, expectedMsgPattern);
   }
 
-  protected List<String> getReservedKeywords() {
-    return RESERVED_KEYWORDS;
+  protected SortedSet<String> getReservedKeywords() {
+    return keywords("c");
+  }
+
+  private static SortedSet<String> keywords(String dialect) {
+    final ImmutableSortedSet.Builder<String> builder =
+        ImmutableSortedSet.naturalOrder();
+    String r = null;
+    for (String w : RESERVED_KEYWORDS) {
+      switch (w) {
+      case "92":
+      case "99":
+      case "2003":
+      case "2011":
+      case "c":
+        assert r != null;
+        if (dialect == null || dialect.equals(w)) {
+          builder.add(r);
+        }
+        break;
+      default:
+        assert r == null || r.compareTo(w) < 0 : "table should be sorted: " + w;
+        r = w;
+      }
+    }
+    return builder.build();
   }
 
   /**
@@ -6182,11 +6328,18 @@ public class SqlParserTest {
   @Test public void testNoUnintendedNewReservedKeywords() {
     final SqlAbstractParserImpl.Metadata metadata = getParserMetadata();
 
-    final List<String> reservedKeywords = new ArrayList<>();
+    final SortedSet<String> reservedKeywords = new TreeSet<>();
+    final SortedSet<String> keywords92 = keywords("92");
     for (String s : metadata.getTokens()) {
       if (metadata.isKeyword(s) && metadata.isReservedWord(s)) {
         reservedKeywords.add(s);
       }
+      if (false) {
+        // Cannot enable this test yet, because the parser's list of SQL:92
+        // reserved words is not consistent with keywords("92").
+        assertThat(s, metadata.isSql92ReservedWord(s),
+            is(keywords92.contains(s)));
+      }
     }
 
     assertThat("At least one new reserved keyword is added in parser. "