From 5eec56fc5b091fa3eb61b26d1aa2ca9379539998 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Wed, 27 May 2026 09:51:42 -0700 Subject: [PATCH] jdbc-v2: update keywords and engines in JDBC --- .../update-keyword-engine-lists/SKILL.md | 46 +++++++++++++++++++ .../parser/javacc/ClickHouseSqlUtils.java | 4 +- .../jdbc/metadata/DatabaseMetaDataImpl.java | 7 +++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 .cursor/skills/update-keyword-engine-lists/SKILL.md diff --git a/.cursor/skills/update-keyword-engine-lists/SKILL.md b/.cursor/skills/update-keyword-engine-lists/SKILL.md new file mode 100644 index 000000000..a671a1775 --- /dev/null +++ b/.cursor/skills/update-keyword-engine-lists/SKILL.md @@ -0,0 +1,46 @@ +--- +name: update-keyword-engine-lists +description: Update ALLOWED_KEYWORD_ALIASES in ClickHouseSqlUtils.java and ENGINE_TO_TABLE_TYPE in DatabaseMetaDataImpl.java from failing test output. Use when StatementSQLTest.testAllowedKeywordAliasesMatchSystemKeywords or DatabaseMetaDataTest.testAllTableEnginesFromSystemTableEnginesAreMapped fails. +--- + +# Update keyword and engine lists from test failures + +## Files + +**Keywords:** +`jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java` +— `initAllowedKeywordAliases()`, append after the last `// Appended` comment block. + +**Engines:** +`jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java` +— `ENGINE_TO_TABLE_TYPE` static block, insert a new group before `// Special`. + +## Steps + +1. Parse the failing test message to extract the list of missing items. + +2. **For keywords** (`StatementSQLTest` failure — e.g. `["CURSOR", "DETERMINISTIC", ...]`): + Append a new dated comment + entries at the end of `buildKeywordSet(...)`, after the last existing `// Appended` block: + ```java + // Appended MM/DD/YYYY + "KEYWORD1", "KEYWORD2", ... + ``` + The previous entry must have a trailing comma. Keep alphabetical order within the new block. + +3. **For engines** (`DatabaseMetaDataTest` failure — e.g. `[Paimon, PaimonAzure, ...]`): + Add a new named group before `// Special` in the static block: + ```java + // (appended MM/DD/YYYY) + map.put("Engine1", TableType.REMOTE_TABLE.getTypeName()); + ``` + Choose `TableType` by analogy: + - External storage (S3/Azure/HDFS variants, lake formats) → `REMOTE_TABLE` + - MergeTree family or local engines → `TABLE` + +## Output + +After editing, output this git commit command: + +``` +git commit -m "jdbc-v2: update in JDBC" +``` diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java index d3477ce6c..fd93297db 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java @@ -65,7 +65,9 @@ private static Set initAllowedKeywordAliases() { "CENTURY", "DECADE", "DOW", "DOY", "EPOCH", "ISODOW", "ISOYEAR", "MILLENNIUM", "NATURAL", "SOME", "ZONE", // Appended 04/10/2026 - "PATH", "PLACING" + "PATH", "PLACING", + // Appended 05/27/2026 + "CURSOR", "DETERMINISTIC", "ESCAPE", "SAMPLES", "STREAM", "UNKNOWN" ); } diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java index b79dd895b..6b05158e1 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/metadata/DatabaseMetaDataImpl.java @@ -865,6 +865,13 @@ public ResultSet getProcedureColumns(String catalog, String schemaPattern, Strin map.put("SharedSummingMergeTree", TableType.TABLE.getTypeName()); map.put("SharedVersionedCollapsingMergeTree", TableType.TABLE.getTypeName()); + // Paimon (appended 05/27/2026) + map.put("Paimon", TableType.REMOTE_TABLE.getTypeName()); + map.put("PaimonAzure", TableType.REMOTE_TABLE.getTypeName()); + map.put("PaimonHDFS", TableType.REMOTE_TABLE.getTypeName()); + map.put("PaimonLocal", TableType.REMOTE_TABLE.getTypeName()); + map.put("PaimonS3", TableType.REMOTE_TABLE.getTypeName()); + // Special map.put("TimeSeries", TableType.TABLE.getTypeName()); map.put("Null", TableType.TABLE.getTypeName());