Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 212052009F9 for ; Mon, 23 May 2016 08:41:57 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 1FCB5160A0F; Mon, 23 May 2016 06:41:57 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 7BC8F160A2B for ; Mon, 23 May 2016 08:41:55 +0200 (CEST) Received: (qmail 770 invoked by uid 500); 23 May 2016 06:41:54 -0000 Mailing-List: contact commits-help@calcite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@calcite.apache.org Delivered-To: mailing list commits@calcite.apache.org Received: (qmail 636 invoked by uid 99); 23 May 2016 06:41:54 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 23 May 2016 06:41:54 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 6BD11DFFAB; Mon, 23 May 2016 06:41:54 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: jhyde@apache.org To: commits@calcite.apache.org Date: Mon, 23 May 2016 06:41:58 -0000 Message-Id: <078bf0b1ee634de198326e8860bf98c3@git.apache.org> In-Reply-To: <126117438a6b4ed7a3e397ce89e8560a@git.apache.org> References: <126117438a6b4ed7a3e397ce89e8560a@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [5/5] calcite git commit: Following [CALCITE-1241], create a table of reserved keywords from various versions of the SQL standard archived-at: Mon, 23 May 2016 06:41:57 -0000 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 Authored: Fri May 20 17:48:32 2016 -0700 Committer: Julian Hyde 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 reserved 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. + * + *

Each keyword is followed by tokens indicating whether it is reserved in + * the SQL:92, SQL:99, SQL:2003 standards and in Calcite. + * + *

The standard keywords are derived from + * Mimer. + * + *

If a new reserved 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 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 getReservedKeywords() { - return RESERVED_KEYWORDS; + protected SortedSet getReservedKeywords() { + return keywords("c"); + } + + private static SortedSet keywords(String dialect) { + final ImmutableSortedSet.Builder 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 reservedKeywords = new ArrayList<>(); + final SortedSet reservedKeywords = new TreeSet<>(); + final SortedSet 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. "