This is an automated email from the ASF dual-hosted git repository.
cancai 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 8cc86b38a0 [CALCITE-7456] Enable the TRY_CAST function to support the
MSSQL dialect
8cc86b38a0 is described below
commit 8cc86b38a098b2cbd5ab0073f3c066cdaf267073
Author: Cancai Cai <[email protected]>
AuthorDate: Thu Apr 2 16:22:25 2026 +0800
[CALCITE-7456] Enable the TRY_CAST function to support the MSSQL dialect
Co-Authored-By: junjie <[email protected]>
---
.../apache/calcite/sql/dialect/MssqlSqlDialect.java | 8 ++++++++
.../calcite/rel/rel2sql/RelToSqlConverterTest.java | 21 +++++++++++++++++++++
2 files changed, 29 insertions(+)
diff --git
a/core/src/main/java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java
b/core/src/main/java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java
index 2387ed54d9..a88f78b48f 100644
--- a/core/src/main/java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java
+++ b/core/src/main/java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java
@@ -37,6 +37,7 @@
import org.apache.calcite.sql.SqlSyntax;
import org.apache.calcite.sql.SqlUtil;
import org.apache.calcite.sql.SqlWriter;
+import org.apache.calcite.sql.fun.SqlLibraryOperators;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import org.apache.calcite.sql.type.OperandTypes;
@@ -185,6 +186,13 @@ public MssqlSqlDialect(Context context) {
SqlOperator op = SqlStdOperatorTable.PERCENT_REMAINDER;
SqlSyntax.BINARY.unparse(writer, op, call, leftPrec, rightPrec);
break;
+ case SAFE_CAST:
+ // MSSQL uses TRY_CAST instead of SAFE_CAST (BigQuery)
+ super.unparseCall(writer,
+ SqlLibraryOperators.TRY_CAST.createCall(
+ call.getParserPosition(), call.getOperandList()),
+ 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 598fb7500e..2f881236d1 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
@@ -3135,6 +3135,27 @@ private SqlDialect nonOrdinalDialect() {
sql(query).withLibrary(SqlLibrary.BIG_QUERY).ok(expected);
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-7456">[CALCITE-7456]
+ * Enable the TRY_CAST function to support the MSSQL dialect</a>. */
+ @Test void testMssqlTryCast() {
+ final String query = "select try_cast(\"product_name\" as date) "
+ + "from \"foodmart\".\"product\"";
+ final String expected = "SELECT TRY_CAST([product_name] AS DATE)\n"
+ + "FROM [foodmart].[product]";
+
+ sql(query).withLibrary(SqlLibrary.MSSQL).withMssql().ok(expected);
+ }
+
+ @Test void testSafeCastToMssqlTryCast() {
+ final String query = "select safe_cast(\"product_name\" as date) "
+ + "from \"foodmart\".\"product\"";
+ final String expected = "SELECT TRY_CAST([product_name] AS DATE)\n"
+ + "FROM [foodmart].[product]";
+
+ sql(query).withLibrary(SqlLibrary.BIG_QUERY).withMssql().ok(expected);
+ }
+
/** Test case for
* <a
href="https://issues.apache.org/jira/browse/CALCITE-6150">[CALCITE-6150]
* JDBC adapter for ClickHouse generates incorrect SQL for certain units in