This is an automated email from the ASF dual-hosted git repository.
xiong 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 6f2a6889cf [CALCITE-6892] CHAR_LENGTH Function is not recognized in
DerbySQL
6f2a6889cf is described below
commit 6f2a6889cfc9d5c8d0e2e121b0274a8b060be8c0
Author: Yu Xu <[email protected]>
AuthorDate: Sat Mar 15 14:45:04 2025 +0800
[CALCITE-6892] CHAR_LENGTH Function is not recognized in DerbySQL
---
.../apache/calcite/sql/dialect/DerbySqlDialect.java | 17 +++++++++++++++++
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 19 +++++++++++++++++++
2 files changed, 36 insertions(+)
diff --git
a/core/src/main/java/org/apache/calcite/sql/dialect/DerbySqlDialect.java
b/core/src/main/java/org/apache/calcite/sql/dialect/DerbySqlDialect.java
index 36ec946f47..8ff6b76a6b 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/DerbySqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/DerbySqlDialect.java
@@ -16,7 +16,11 @@
*/
package org.apache.calcite.sql.dialect;
+import org.apache.calcite.sql.SqlCall;
import org.apache.calcite.sql.SqlDialect;
+import org.apache.calcite.sql.SqlWriter;
+import org.apache.calcite.sql.fun.SqlLibraryOperators;
+import org.apache.calcite.sql.parser.SqlParserPos;
/**
* A <code>SqlDialect</code> implementation for the Apache Derby database.
@@ -31,4 +35,17 @@ public class DerbySqlDialect extends SqlDialect {
public DerbySqlDialect(Context context) {
super(context);
}
+
+ @Override public void unparseCall(final SqlWriter writer, final SqlCall
call, final int leftPrec,
+ final int rightPrec) {
+ switch (call.getKind()) {
+ case CHAR_LENGTH:
+ SqlCall lengthCall = SqlLibraryOperators.LENGTH
+ .createCall(SqlParserPos.ZERO, call.getOperandList());
+ super.unparseCall(writer, lengthCall, leftPrec, rightPrec);
+ break;
+ default:
+ 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 d63c1c46c1..54be478607 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
@@ -7578,6 +7578,21 @@ private void checkLiteral2(String expression, String
expected) {
sql(query).withPresto().ok(expected);
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6892">[CALCITE-6892]
+ * CHAR_LENGTH Function is not recognized in DerbySQL</a>. */
+ @Test void testDerbySqlLength() {
+ final String query = "select CHAR_LENGTH(\"brand_name\")\n"
+ + "from \"product\"";
+ final String expected = "SELECT LENGTH(brand_name)\n"
+ + "FROM foodmart.product";
+ sql(query).withDerby().ok(expected);
+
+ final String query1 = "select CHARACTER_LENGTH(\"brand_name\")\n"
+ + "from \"product\"";
+ sql(query1).withDerby().ok(expected);
+ }
+
@Test void testSubstringInSpark() {
final String query = "select substring(\"brand_name\" from 2) "
+ "from \"product\"\n";
@@ -9451,6 +9466,10 @@ Sql withClickHouse() {
return dialect(DatabaseProduct.CLICKHOUSE.getDialect());
}
+ Sql withDerby() {
+ return dialect(DatabaseProduct.DERBY.getDialect());
+ }
+
Sql withDb2() {
return dialect(DatabaseProduct.DB2.getDialect());
}