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"

Reply via email to