From d915a85aab82c8e2c913def323754fc8a09389e5 Mon Sep 17 00:00:00 2001 From: Jerome Haltom Date: Sat, 12 Sep 2026 09:13:45 -0500 Subject: [PATCH] [CALCITE-7774] JDBC adapter generates a GROUP BY with a constant key, which SQL Server rejects --- .../apache/calcite/sql/dialect/MssqlSqlDialect.java | 4 ++++ .../calcite/rel/rel2sql/RelToSqlConverterTest.java | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) 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 964fa03f8f9..5913761341d 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 @@ -270,6 +270,10 @@ private static SqlNode createDatetimeCastSpec(String typeAlias, RelDataType type return false; } + @Override public boolean supportsGroupByLiteral() { + return false; + } + @Override public boolean supportsGroupByWithRollup() { return true; } 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 877a1e99ee6..57da65064a1 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 @@ -590,9 +590,13 @@ private static RelNode sqlToRel(String sql, SchemaPlus defaultSchema, + "(SELECT TRUE AS \"$f0\") AS \"t\"\nGROUP BY \"t\".\"$f0\""; String expectedInformix = "SELECT AVG(employee.salary)\nFROM foodmart.employee," + "\n(SELECT TRUE AS $f0) AS t\nGROUP BY t.$f0"; + String expectedMssql = "SELECT AVG([employee].[salary])\n" + + "FROM [foodmart].[employee],\n" + + "(VALUES (1)) AS [t] ([$f0])\nGROUP BY [t].[$f0]"; sql(query) .withRedshift().ok(expectedRedshift) - .withInformix().ok(expectedInformix); + .withInformix().ok(expectedInformix) + .withMssql().ok(expectedMssql); } /** Test case for @@ -669,9 +673,13 @@ private static RelNode sqlToRel(String sql, SchemaPlus defaultSchema, + "(SELECT DATE '2022-01-01' AS \"$f0\") AS \"t\"\nGROUP BY \"t\".\"$f0\""; String expectedInformix = "SELECT AVG(employee.salary)\nFROM foodmart.employee," + "\n(SELECT DATE '2022-01-01' AS $f0) AS t\nGROUP BY t.$f0"; + String expectedMssql = "SELECT AVG([employee].[salary])\n" + + "FROM [foodmart].[employee],\n" + + "(VALUES ('2022-01-01')) AS [t] ([$f0])\nGROUP BY [t].[$f0]"; sql(query) .withRedshift().ok(expectedRedshift) - .withInformix().ok(expectedInformix); + .withInformix().ok(expectedInformix) + .withMssql().ok(expectedMssql); } @Test void testSimpleSelectStarFromProductTable() {