This is an automated email from the ASF dual-hosted git repository.
xuzifu666 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 3fc5f464ee [CALCITE-7563] Oracle dialect generates invalid CAST to
VARCHAR without precision
3fc5f464ee is described below
commit 3fc5f464ee087f69cd7b1f8dd54ee612050a917d
Author: zzwqqq <[email protected]>
AuthorDate: Thu May 28 19:54:24 2026 +0800
[CALCITE-7563] Oracle dialect generates invalid CAST to VARCHAR without
precision
---
.../org/apache/calcite/sql/dialect/OracleSqlDialect.java | 7 +++++++
.../apache/calcite/rel/rel2sql/RelToSqlConverterTest.java | 15 +++++++++++++++
2 files changed, 22 insertions(+)
diff --git
a/core/src/main/java/org/apache/calcite/sql/dialect/OracleSqlDialect.java
b/core/src/main/java/org/apache/calcite/sql/dialect/OracleSqlDialect.java
index 2de588f118..9aab15f5e2 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/OracleSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/OracleSqlDialect.java
@@ -116,6 +116,13 @@ public OracleSqlDialect(Context context) {
case DOUBLE:
castSpec = "DOUBLE PRECISION";
break;
+ case VARCHAR:
+ if (type.getPrecision() == RelDataType.PRECISION_NOT_SPECIFIED) {
+ final int precision =
getTypeSystem().getMaxPrecision(SqlTypeName.VARCHAR);
+ castSpec = "VARCHAR(" + precision + ")";
+ break;
+ }
+ return super.getCastSpec(type);
default:
return super.getCastSpec(type);
}
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 2953f3b186..66afda8653 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
@@ -1708,6 +1708,21 @@ private static String toSql(RelNode root, SqlDialect
dialect,
.ok(expectedOracle);
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-7563">[CALCITE-7563]
+ * Oracle dialect generates invalid CAST to VARCHAR without precision</a>. */
+ @Test void testCastVarcharWithoutPrecisionOracle() {
+ final String query = "select cast(\"store_id\" as VARCHAR)\n"
+ + " from \"expense_fact\"";
+ final String expected = "SELECT CAST(\"store_id\" AS VARCHAR(4000))\n"
+ + "FROM \"foodmart\".\"expense_fact\"";
+ final String expectedModifiedTypeSystem = "SELECT CAST(\"store_id\" AS
VARCHAR(512))\n"
+ + "FROM \"foodmart\".\"expense_fact\"";
+ sql(query)
+ .withOracle().ok(expected)
+ .withOracleModifiedTypeSystem().ok(expectedModifiedTypeSystem);
+ }
+
/** Test case for
* <a
href="https://issues.apache.org/jira/browse/CALCITE-1174">[CALCITE-1174]
* When generating SQL, translate SUM0(x) to COALESCE(SUM(x), 0)</a>. */