This is an automated email from the ASF dual-hosted git repository.
xiong 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 b603c2306d [CALCITE-6866] PostgreSQLDialect support to unparse LISTAGG
aggregate function
b603c2306d is described below
commit b603c2306d9e98031d3732fc306649397d0464e3
Author: Yu Xu <[email protected]>
AuthorDate: Fri May 16 11:51:02 2025 +0800
[CALCITE-6866] PostgreSQLDialect support to unparse LISTAGG aggregate
function
---
.../apache/calcite/sql/dialect/PostgresqlSqlDialect.java | 6 ++++++
.../apache/calcite/rel/rel2sql/RelToSqlConverterTest.java | 13 +++++++++++++
2 files changed, 19 insertions(+)
diff --git
a/core/src/main/java/org/apache/calcite/sql/dialect/PostgresqlSqlDialect.java
b/core/src/main/java/org/apache/calcite/sql/dialect/PostgresqlSqlDialect.java
index 12f55919f5..638c7322dd 100644
---
a/core/src/main/java/org/apache/calcite/sql/dialect/PostgresqlSqlDialect.java
+++
b/core/src/main/java/org/apache/calcite/sql/dialect/PostgresqlSqlDialect.java
@@ -40,6 +40,7 @@
import org.apache.calcite.sql.SqlWriter;
import org.apache.calcite.sql.fun.SqlCase;
import org.apache.calcite.sql.fun.SqlFloorFunction;
+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.SqlTypeName;
@@ -181,6 +182,11 @@ public PostgresqlSqlDialect(Context context) {
@Override public void unparseCall(SqlWriter writer, SqlCall call,
int leftPrec, int rightPrec) {
switch (call.getKind()) {
+ case LISTAGG:
+ SqlCall stringAGG =
+ SqlLibraryOperators.STRING_AGG.createCall(SqlParserPos.ZERO,
call.getOperandList());
+ super.unparseCall(writer, stringAGG, leftPrec, rightPrec);
+ break;
case FLOOR:
if (call.operandCount() != 2) {
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 ea01772b63..04dd3894c1 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
@@ -3689,6 +3689,19 @@ private SqlDialect nonOrdinalDialect() {
sql(query).withMysql().ok(expected);
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6866">[CALCITE-6866]
+ * PostgreSQLDialect support to unparse LISTAGG aggregate function</a>. */
+ @Test void testPostgresqlLISTAGG() {
+ final String query = "SELECT \"product_class_id\","
+ + "LISTAGG(CAST(\"brand_name\" AS VARCHAR), ',') "
+ + "FROM \"foodmart\".\"product\" group by \"product_class_id\"";
+
+ sql(query).withPostgresql().ok("SELECT \"product_class_id\", "
+ + "STRING_AGG(CAST(\"brand_name\" AS VARCHAR), ',')\n"
+ + "FROM \"foodmart\".\"product\"\nGROUP BY \"product_class_id\"");
+ }
+
@Test void testMySqlUnparseListAggCall() {
final String query = "select\n"
+ "listagg(distinct \"product_name\", ',') within group(order by
\"cases_per_pallet\"),\n"