This is an automated email from the ASF dual-hosted git repository.
mihaibudiu 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 0b4704befe [CALCITE-7777] JDBC adapter generates || for concatenation,
which SQL Server rejects
0b4704befe is described below
commit 0b4704befe9ce5cec4d5daa1212d12cf9453e56e
Author: Jerome Haltom <[email protected]>
AuthorDate: Sat Sep 12 10:10:13 2026 -0500
[CALCITE-7777] JDBC adapter generates || for concatenation, which SQL
Server rejects
---
.../java/org/apache/calcite/sql/dialect/MssqlSqlDialect.java | 5 +++++
.../org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java | 9 +++++++++
2 files changed, 14 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 964fa03f8f..7a45559284 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
@@ -212,6 +212,11 @@ private static SqlNode createDatetimeCastSpec(String
typeAlias, RelDataType type
final SqlWriter.Frame frame = writer.startFunCall("CEILING");
call.operand(0).unparse(writer, leftPrec, rightPrec);
writer.endFunCall(frame);
+ } else if (call.getOperator().equals(SqlStdOperatorTable.CONCAT)) {
+ // MSSQL has no || operator. + concatenates and propagates NULL, as ||
+ // does; the CONCAT function does not, reading a NULL operand as ''.
+ SqlSyntax.BINARY.unparse(writer, SqlStdOperatorTable.PLUS, call,
leftPrec,
+ rightPrec);
} else {
switch (call.getKind()) {
case FLOOR:
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 877a1e99ee..8e43c4400d 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
@@ -11820,6 +11820,15 @@ private void checkLiteral2(String expression, String
expected) {
sql(query).dialect(MssqlSqlDialect.DEFAULT).ok(mssqlExpected);
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-7777">[CALCITE-7777]
+ * JDBC adapter generates || for concatenation, which SQL Server
rejects</a>. */
+ @Test void testConcatOperatorEmulationForMSSQL() {
+ final String query = "select \"brand_name\" || \"product_name\" from
\"product\"";
+ final String mssqlExpected = "SELECT [brand_name] + [product_name]\n"
+ + "FROM [foodmart].[product]";
+ sql(query).withMssql().ok(mssqlExpected);
+ }
/** Test case for
* <a
href="https://issues.apache.org/jira/browse/CALCITE-6655">[CALCITE-6655]