This is an automated email from the ASF dual-hosted git repository.
mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new 18c9824191 [CALCITE-7309] Position is unparsed incorrectly for
ClickHouseSqlDialect
18c9824191 is described below
commit 18c9824191f9d597af89861c910217e10017b952
Author: xuzifu666 <[email protected]>
AuthorDate: Tue Dec 2 17:00:21 2025 +0800
[CALCITE-7309] Position is unparsed incorrectly for ClickHouseSqlDialect
---
.../apache/calcite/sql/dialect/ClickHouseSqlDialect.java | 12 ++++++++++++
.../apache/calcite/rel/rel2sql/RelToSqlConverterTest.java | 13 +++++++++++++
2 files changed, 25 insertions(+)
diff --git
a/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
b/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
index c4bd7802bf..884bb81261 100644
---
a/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
+++
b/core/src/main/java/org/apache/calcite/sql/dialect/ClickHouseSqlDialect.java
@@ -245,6 +245,18 @@ private static SqlDataTypeSpec
createSqlDataTypeSpecByName(String typeAlias,
}
writer.endList(arrayFrame);
break;
+ case POSITION:
+ final SqlWriter.Frame f = writer.startFunCall("POSITION");
+ writer.sep(",");
+ call.operand(1).unparse(writer, leftPrec, rightPrec);
+ writer.sep(",");
+ call.operand(0).unparse(writer, leftPrec, rightPrec);
+ if (call.operandCount() == 3) {
+ writer.sep(",");
+ call.operand(2).unparse(writer, leftPrec, rightPrec);
+ }
+ writer.endFunCall(f);
+ break;
case FLOOR:
if (call.operandCount() != 2) {
super.unparseCall(writer, call, leftPrec, rightPrec);
diff --git
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index b96530fc2a..da2c2deefc 100644
---
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -3510,6 +3510,19 @@ private SqlDialect nonOrdinalDialect() {
.withDoris().ok(expectedStarRocks);
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-7309">[CALCITE-7309]
+ * Position is unparsed incorrectly for ClickHouseSqlDialect</a>. */
+ @Test void testPositionForClickHouse() {
+ final String query = "SELECT POSITION('a' IN 'abca')";
+ final String expected = "SELECT POSITION('abca', 'a')";
+ sql(query).withClickHouse().ok(expected);
+
+ final String query1 = "SELECT POSITION('a' IN 'abca' FROM 1)";
+ final String expected1 = "SELECT POSITION('abca', 'a', 1)";
+ sql(query1).withClickHouse().ok(expected1);
+ }
+
@Test void testPositionFunctionForSqlite() {
final String query = "select position('A' IN 'ABC') from \"product\"";
final String expected = "SELECT INSTR('ABC', 'A')\n"