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. "