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

korlov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 8c956b3f0d8 IGNITE-26178 Sql. List of SQL keywords (#6520)
8c956b3f0d8 is described below

commit 8c956b3f0d84a3ca913f2a7b533d2005d9e04034
Author: korlov42 <[email protected]>
AuthorDate: Tue Sep 2 08:35:32 2025 +0300

    IGNITE-26178 Sql. List of SQL keywords (#6520)
---
 .../sql/engine/sql/SqlReservedWordsTest.java       | 581 +++++++++++++++++++++
 1 file changed, 581 insertions(+)

diff --git 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/SqlReservedWordsTest.java
 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/SqlReservedWordsTest.java
index 637d177e3f4..2545f8def5b 100644
--- 
a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/SqlReservedWordsTest.java
+++ 
b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/sql/SqlReservedWordsTest.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.sql.engine.sql;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
+import java.util.HashSet;
 import java.util.Set;
 import java.util.TreeSet;
 import org.apache.calcite.sql.parser.SqlAbstractParserImpl;
@@ -232,8 +233,558 @@ public class SqlReservedWordsTest extends 
AbstractParserTest {
             "YEAR"
     );
 
+    private static final Set<String> NON_RESERVED_WORDS = Set.of(
+            "A",
+            "ABSENT",
+            "ABSOLUTE",
+            "ACTION",
+            "ADA",
+            "ADD",
+            "ADMIN",
+            "AFTER",
+            "ALGORITHM",
+            "ALLOCATE",
+            "ALLOW",
+            "ALWAYS",
+            "APPLY",
+            "ARE",
+            "ARRAY_AGG",
+            "ARRAY_CONCAT_AGG",
+            "ASC",
+            "ASENSITIVE",
+            "ASSERTION",
+            "ASSIGNMENT",
+            "AT",
+            "ATOMIC",
+            "ATTRIBUTE",
+            "ATTRIBUTES",
+            "AUTHORIZATION",
+            "AUTO",
+            "BEFORE",
+            "BEGIN",
+            "BEGIN_FRAME",
+            "BEGIN_PARTITION",
+            "BERNOULLI",
+            "BIGINT",
+            "BINARY",
+            "BIT",
+            "BLOB",
+            "BOOLEAN",
+            "BREADTH",
+            "C",
+            "CALLED",
+            "CASCADE",
+            "CASCADED",
+            "CATALOG",
+            "CATALOG_NAME",
+            "CEIL",
+            "CENTURY",
+            "CHAIN",
+            "CHARACTERISTICS",
+            "CHARACTERS",
+            "CHARACTER_SET_CATALOG",
+            "CHARACTER_SET_NAME",
+            "CHARACTER_SET_SCHEMA",
+            "CHECK",
+            "CLASSIFIER",
+            "CLASS_ORIGIN",
+            "CLOB",
+            "CLOSE",
+            "COBOL",
+            "COLLATE",
+            "COLLATION",
+            "COLLATION_CATALOG",
+            "COLLATION_NAME",
+            "COLLATION_SCHEMA",
+            "COLOCATE",
+            "COLUMN_NAME",
+            "COMMAND_FUNCTION",
+            "COMMAND_FUNCTION_CODE",
+            "COMMIT",
+            "COMMITTED",
+            "COMPUTE",
+            "CONDITION",
+            "CONDITIONAL",
+            "CONDITION_NUMBER",
+            "CONNECT",
+            "CONNECTION",
+            "CONNECTION_NAME",
+            "CONSISTENCY",
+            "CONSTRAINTS",
+            "CONSTRAINT_CATALOG",
+            "CONSTRAINT_NAME",
+            "CONSTRAINT_SCHEMA",
+            "CONSTRUCTOR",
+            "CONTAINS",
+            "CONTAINS_SUBSTR",
+            "CONTINUE",
+            "CORR",
+            "CORRESPONDING",
+            "CURSOR",
+            "CURSOR_NAME",
+            "CYCLE",
+            "DATA",
+            "DATABASE",
+            "DATETIME_DIFF",
+            "DATETIME_INTERVAL_CODE",
+            "DATETIME_INTERVAL_PRECISION",
+            "DATETIME_TRUNC",
+            "DATE_DIFF",
+            "DATE_TRUNC",
+            "DAY",
+            "DAYOFWEEK",
+            "DAYOFYEAR",
+            "DAYS",
+            "DEALLOCATE",
+            "DEC",
+            "DECADE",
+            "DECLARE",
+            "DEFAULTS",
+            "DEFERRABLE",
+            "DEFERRED",
+            "DEFINE",
+            "DEFINED",
+            "DEFINER",
+            "DEGREE",
+            "DEPTH",
+            "DEREF",
+            "DERIVED",
+            "DESC",
+            "DESCRIPTION",
+            "DESCRIPTOR",
+            "DETERMINISTIC",
+            "DIAGNOSTICS",
+            "DISALLOW",
+            "DISCONNECT",
+            "DISPATCH",
+            "DISTRIBUTION",
+            "DOMAIN",
+            "DOT",
+            "DOUBLE",
+            "DOW",
+            "DOWN",
+            "DOY",
+            "DYNAMIC",
+            "DYNAMIC_FUNCTION",
+            "DYNAMIC_FUNCTION_CODE",
+            "EACH",
+            "EMPTY",
+            "ENCODING",
+            "END",
+            "END-EXEC",
+            "END_FRAME",
+            "END_PARTITION",
+            "ENGINE",
+            "EPOCH",
+            "EQUALS",
+            "ERROR",
+            "ESCAPE",
+            "EXCEPTION",
+            "EXCLUDE",
+            "EXCLUDING",
+            "EXEC",
+            "EXECUTE",
+            "EXTERNAL",
+            "FINAL",
+            "FIRST",
+            "FLOAT",
+            "FOLLOWING",
+            "FOREIGN",
+            "FORMAT",
+            "FORTRAN",
+            "FOUND",
+            "FRAC_SECOND",
+            "FRAME_ROW",
+            "FREE",
+            "FUNCTION",
+            "G",
+            "GENERAL",
+            "GENERATED",
+            "GEOMETRY",
+            "GET",
+            "GLOBAL",
+            "GO",
+            "GOTO",
+            "GRANT",
+            "GRANTED",
+            "GROUPS",
+            "GROUP_CONCAT",
+            "HASH",
+            "HIERARCHY",
+            "HOLD",
+            "HOP",
+            "HOURS",
+            "IDENTITY",
+            "IGNORE",
+            "ILIKE",
+            "IMMEDIATE",
+            "IMMEDIATELY",
+            "IMPLEMENTATION",
+            "IMPORT",
+            "INCLUDE",
+            "INCLUDING",
+            "INCREMENT",
+            "INDICATOR",
+            "INITIAL",
+            "INITIALLY",
+            "INOUT",
+            "INPUT",
+            "INSENSITIVE",
+            "INSTANCE",
+            "INSTANTIABLE",
+            "INT",
+            "INTEGER",
+            "INVOKER",
+            "ISODOW",
+            "ISOLATION",
+            "ISOYEAR",
+            "JAVA",
+            "JSON",
+            "JSON_ARRAY",
+            "JSON_ARRAYAGG",
+            "JSON_EXISTS",
+            "JSON_OBJECT",
+            "JSON_OBJECTAGG",
+            "JSON_QUERY",
+            "JSON_VALUE",
+            "K",
+            "KEY",
+            "KEY_MEMBER",
+            "KEY_TYPE",
+            "KILL",
+            "LABEL",
+            "LANGUAGE",
+            "LARGE",
+            "LAST",
+            "LATERAL",
+            "LENGTH",
+            "LEVEL",
+            "LIBRARY",
+            "LIKE_REGEX",
+            "LOCAL",
+            "LOCATOR",
+            "M",
+            "MAP",
+            "MAPPING",
+            "MATCH",
+            "MATCHED",
+            "MATCHES",
+            "MATCH_NUMBER",
+            "MAXVALUE",
+            "MEASURES",
+            "MEMBER",
+            "MESSAGE_LENGTH",
+            "MESSAGE_OCTET_LENGTH",
+            "MESSAGE_TEXT",
+            "METHOD",
+            "MICROSECOND",
+            "MILLENNIUM",
+            "MILLISECOND",
+            "MINUTES",
+            "MINVALUE",
+            "MODE",
+            "MODIFIES",
+            "MODULE",
+            "MONTHS",
+            "MORE",
+            "MUMPS",
+            "NAME",
+            "NAMES",
+            "NANOSECOND",
+            "NATIONAL",
+            "NCHAR",
+            "NCLOB",
+            "NESTING",
+            "NO",
+            "NODES",
+            "NONE",
+            "NORMALIZE",
+            "NORMALIZED",
+            "NULLABLE",
+            "NULLS",
+            "NUMBER",
+            "NUMERIC",
+            "OBJECT",
+            "OCCURRENCES_REGEX",
+            "OCTETS",
+            "OF",
+            "OFF",
+            "OLD",
+            "OMIT",
+            "ONE",
+            "ONLY",
+            "OPEN",
+            "OPTION",
+            "OPTIONS",
+            "ORDERING",
+            "ORDINAL",
+            "ORDINALITY",
+            "OTHERS",
+            "OUT",
+            "OUTPUT",
+            "OVERLAPS",
+            "OVERLAY",
+            "OVERRIDING",
+            "PAD",
+            "PARAMETER",
+            "PARAMETER_MODE",
+            "PARAMETER_NAME",
+            "PARAMETER_ORDINAL_POSITION",
+            "PARAMETER_SPECIFIC_CATALOG",
+            "PARAMETER_SPECIFIC_NAME",
+            "PARAMETER_SPECIFIC_SCHEMA",
+            "PARTIAL",
+            "PARTITIONS",
+            "PASCAL",
+            "PASSING",
+            "PASSTHROUGH",
+            "PAST",
+            "PATH",
+            "PATTERN",
+            "PER",
+            "PERCENT",
+            "PIVOT",
+            "PLACING",
+            "PLAN",
+            "PLI",
+            "PORTION",
+            "POSITION",
+            "POSITION_REGEX",
+            "PRECEDES",
+            "PRECEDING",
+            "PREPARE",
+            "PRESERVE",
+            "PREV",
+            "PRIOR",
+            "PRIVILEGES",
+            "PROCEDURE",
+            "PROFILE",
+            "PROFILES",
+            "PUBLIC",
+            "QUARTER",
+            "QUARTERS",
+            "QUERY",
+            "QUORUM",
+            "RANGE",
+            "READ",
+            "READS",
+            "REAL",
+            "RECURSIVE",
+            "REF",
+            "REFERENCES",
+            "REFERENCING",
+            "REGR_AVGX",
+            "REGR_AVGY",
+            "REGR_INTERCEPT",
+            "REGR_R2",
+            "REGR_SLOPE",
+            "REGR_SXY",
+            "RELATIVE",
+            "RELEASE",
+            "REPEATABLE",
+            "REPLACE",
+            "REPLICAS",
+            "RESPECT",
+            "RESTART",
+            "RESTRICT",
+            "RESULT",
+            "RETURN",
+            "RETURNED_CARDINALITY",
+            "RETURNED_LENGTH",
+            "RETURNED_OCTET_LENGTH",
+            "RETURNED_SQLSTATE",
+            "RETURNING",
+            "RETURNS",
+            "REVOKE",
+            "RLIKE",
+            "ROLE",
+            "ROLLBACK",
+            "ROUTINE",
+            "ROUTINE_CATALOG",
+            "ROUTINE_NAME",
+            "ROUTINE_SCHEMA",
+            "ROWS",
+            "ROW_COUNT",
+            "RUNNING",
+            "SAFE_CAST",
+            "SAFE_OFFSET",
+            "SAFE_ORDINAL",
+            "SAVEPOINT",
+            "SCALAR",
+            "SCALE",
+            "SCHEMA",
+            "SCHEMA_NAME",
+            "SCOPE",
+            "SCOPE_CATALOGS",
+            "SCOPE_NAME",
+            "SCOPE_SCHEMA",
+            "SCROLL",
+            "SEARCH",
+            "SECONDS",
+            "SECTION",
+            "SECURITY",
+            "SEEK",
+            "SELF",
+            "SENSITIVE",
+            "SEPARATOR",
+            "SEQUENCE",
+            "SERIALIZABLE",
+            "SERVER",
+            "SERVER_NAME",
+            "SESSION",
+            "SETS",
+            "SHOW",
+            "SIMILAR",
+            "SIMPLE",
+            "SIZE",
+            "SKIP",
+            "SMALLINT",
+            "SORTED",
+            "SOURCE",
+            "SPACE",
+            "SPECIFICTYPE",
+            "SPECIFIC_NAME",
+            "SQL",
+            "SQLEXCEPTION",
+            "SQLSTATE",
+            "SQLWARNING",
+            "SQL_BIGINT",
+            "SQL_BINARY",
+            "SQL_BIT",
+            "SQL_BLOB",
+            "SQL_BOOLEAN",
+            "SQL_CHAR",
+            "SQL_CLOB",
+            "SQL_DATE",
+            "SQL_DECIMAL",
+            "SQL_DOUBLE",
+            "SQL_FLOAT",
+            "SQL_INTEGER",
+            "SQL_INTERVAL_DAY",
+            "SQL_INTERVAL_DAY_TO_HOUR",
+            "SQL_INTERVAL_DAY_TO_MINUTE",
+            "SQL_INTERVAL_DAY_TO_SECOND",
+            "SQL_INTERVAL_HOUR",
+            "SQL_INTERVAL_HOUR_TO_MINUTE",
+            "SQL_INTERVAL_HOUR_TO_SECOND",
+            "SQL_INTERVAL_MINUTE",
+            "SQL_INTERVAL_MINUTE_TO_SECOND",
+            "SQL_INTERVAL_MONTH",
+            "SQL_INTERVAL_SECOND",
+            "SQL_INTERVAL_YEAR",
+            "SQL_INTERVAL_YEAR_TO_MONTH",
+            "SQL_LONGVARBINARY",
+            "SQL_LONGVARCHAR",
+            "SQL_LONGVARNCHAR",
+            "SQL_NCHAR",
+            "SQL_NCLOB",
+            "SQL_NUMERIC",
+            "SQL_NVARCHAR",
+            "SQL_REAL",
+            "SQL_SMALLINT",
+            "SQL_TIME",
+            "SQL_TIMESTAMP",
+            "SQL_TINYINT",
+            "SQL_TSI_DAY",
+            "SQL_TSI_FRAC_SECOND",
+            "SQL_TSI_HOUR",
+            "SQL_TSI_MICROSECOND",
+            "SQL_TSI_MINUTE",
+            "SQL_TSI_MONTH",
+            "SQL_TSI_QUARTER",
+            "SQL_TSI_SECOND",
+            "SQL_TSI_WEEK",
+            "SQL_TSI_YEAR",
+            "SQL_VARBINARY",
+            "SQL_VARCHAR",
+            "START",
+            "STATE",
+            "STATEMENT",
+            "STATIC",
+            "STORAGE",
+            "STRING_AGG",
+            "STRUCTURE",
+            "STYLE",
+            "SUBCLASS_ORIGIN",
+            "SUBMULTISET",
+            "SUBSET",
+            "SUBSTITUTE",
+            "SUBSTRING_REGEX",
+            "SUCCEEDS",
+            "SYSTEM",
+            "TABLE_NAME",
+            "TEMPORARY",
+            "TIES",
+            "TIMESTAMPADD",
+            "TIMESTAMPDIFF",
+            "TIMESTAMP_DIFF",
+            "TIMESTAMP_TRUNC",
+            "TIMEZONE_HOUR",
+            "TIMEZONE_MINUTE",
+            "TIME_DIFF",
+            "TIME_TRUNC",
+            "TINYINT",
+            "TOP_LEVEL_COUNT",
+            "TRANSACTION",
+            "TRANSACTIONS_ACTIVE",
+            "TRANSACTIONS_COMMITTED",
+            "TRANSACTIONS_ROLLED_BACK",
+            "TRANSFORM",
+            "TRANSFORMS",
+            "TRANSLATE",
+            "TRANSLATE_REGEX",
+            "TRANSLATION",
+            "TREAT",
+            "TRIGGER",
+            "TRIGGER_CATALOG",
+            "TRIGGER_NAME",
+            "TRIGGER_SCHEMA",
+            "TRIM",
+            "TRIM_ARRAY",
+            "TRY_CAST",
+            "TUMBLE",
+            "TYPE",
+            "UNBOUNDED",
+            "UNCOMMITTED",
+            "UNCONDITIONAL",
+            "UNDER",
+            "UNIQUE",
+            "UNNAMED",
+            "UNNEST",
+            "UNPIVOT",
+            "UP",
+            "USAGE",
+            "USER_DEFINED_TYPE_CATALOG",
+            "USER_DEFINED_TYPE_CODE",
+            "USER_DEFINED_TYPE_NAME",
+            "USER_DEFINED_TYPE_SCHEMA",
+            "UTF16",
+            "UTF32",
+            "UTF8",
+            "VALUE_OF",
+            "VARBINARY",
+            "VARCHAR",
+            "VARYING",
+            "VERSION",
+            "VERSIONING",
+            "VIEW",
+            "WAIT",
+            "WEEK",
+            "WEEKS",
+            "WHENEVER",
+            "WIDTH_BUCKET",
+            "WITHOUT",
+            "WORK",
+            "WRAPPER",
+            "WRITE",
+            "XML",
+            "YEARS",
+            "ZONE"
+    );
+
     @Test
     public void testReservedWords() {
+        @SuppressWarnings("DataFlowIssue")
         SqlAbstractParserImpl.Metadata md = 
IgniteSqlParserImpl.FACTORY.getParser(null).getMetadata();
 
         Set<String> unexpectedReserved = new TreeSet<>();
@@ -258,6 +809,36 @@ public class SqlReservedWordsTest extends 
AbstractParserTest {
         );
     }
 
+    @Test
+    public void testKeywordsWords() {
+        @SuppressWarnings("DataFlowIssue")
+        SqlAbstractParserImpl.Metadata md = 
IgniteSqlParserImpl.FACTORY.getParser(null).getMetadata();
+
+        Set<String> unexpectedKeywords = new TreeSet<>();
+        Set<String> shouldBeKeyword = new TreeSet<>();
+
+        Set<String> allKeywords = new HashSet<>(RESERVED_WORDS);
+        allKeywords.addAll(NON_RESERVED_WORDS);
+
+        for (String s : md.getTokens()) {
+            if (md.isKeyword(s) && !allKeywords.contains(s)) {
+                unexpectedKeywords.add(s);
+            } else if (!md.isKeyword(s) && allKeywords.contains(s)) {
+                shouldBeKeyword.add(s);
+            }
+        }
+
+        assertTrue(
+                unexpectedKeywords.isEmpty(),
+                "Unexpected keywords: \n" + formatKeywords(unexpectedKeywords)
+        );
+
+        assertTrue(
+                shouldBeKeyword.isEmpty(),
+                "Token should be keyword: \n" + formatKeywords(shouldBeKeyword)
+        );
+    }
+
     /**
      * Formatted as config.fmpp:nonReservedKeywordsToAdd keywords.
      */

Reply via email to