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

Reply via email to