This is an automated email from the ASF dual-hosted git repository.

mbudiu 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 7d4135eb17 [CALCITE-6759] RelToSqlConverter returns the wrong result 
when Aggregate is on Sort
7d4135eb17 is described below

commit 7d4135eb17e2a70ac608ab1dd3e5a7f4d03706da
Author: suibianwanwan <[email protected]>
AuthorDate: Tue Jan 7 11:16:02 2025 +0800

    [CALCITE-6759] RelToSqlConverter returns the wrong result when Aggregate is 
on Sort
---
 .../apache/calcite/rel/rel2sql/SqlImplementor.java |  7 +++++++
 .../calcite/rel/rel2sql/RelToSqlConverterTest.java | 22 ++++++++++++++++++++++
 .../java/org/apache/calcite/test/PigRelOpTest.java | 11 +++++------
 3 files changed, 34 insertions(+), 6 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java 
b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
index e9a7f88e74..c4fa3897ef 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
@@ -1965,6 +1965,13 @@ public abstract class SqlImplementor {
         return true;
       }
 
+      if (rel instanceof Aggregate
+          && (clauses.contains(Clause.ORDER_BY)
+          || clauses.contains(Clause.FETCH)
+          || clauses.contains(Clause.OFFSET))) {
+        return true;
+      }
+
       // Cannot merge two window functions
       boolean containsOver = containsOver(node);
       if (rel instanceof Project
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 f74cab5f16..628d29db79 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
@@ -8640,6 +8640,28 @@ class RelToSqlConverterTest {
         .withSpark().ok(sparkExpected);
   }
 
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6748";>[CALCITE-6748]
+   * RelToSqlConverter returns the wrong result when Aggregate is on Sort</a>. 
*/
+  @Test void testAggregateOnSort() {
+    final String query0 = "select max(\"product_class_id\") "
+        + "from (select * from \"product\" order by \"brand_name\" asc limit 
10) t";
+    final String expected0 = "SELECT MAX(\"product_class_id\")\n"
+        + "FROM (SELECT \"product_class_id\"\n"
+        + "FROM \"foodmart\".\"product\"\n"
+        + "ORDER BY \"brand_name\"\n"
+        + "FETCH NEXT 10 ROWS ONLY) AS \"t1\"";
+    sql(query0).ok(expected0);
+
+    final String query1 = "select max(\"product_class_id\") "
+        + "from (select * from \"product\" offset 10 ) t";
+    final String expected1 = "SELECT MAX(\"product_class_id\")\n"
+        + "FROM (SELECT \"product_class_id\"\n"
+        + "FROM \"foodmart\".\"product\"\n"
+        + "OFFSET 10 ROWS) AS \"t1\"";
+    sql(query1).ok(expected1);
+  }
+
   @Test void testNullCollationAscNullFirst() {
     final String query = "select * from \"product\" order by \"brand_name\" 
asc nulls first";
     final String expected = "SELECT *\n"
diff --git a/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java 
b/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
index ed6301ee0c..26905b3fe8 100644
--- a/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
+++ b/piglet/src/test/java/org/apache/calcite/test/PigRelOpTest.java
@@ -479,17 +479,16 @@ class PigRelOpTest extends PigRelTestBase {
         + "HIREDATE, SAL, COMM, DEPTNO)) AS A\n"
         + "        FROM scott.EMP\n"
         + "        GROUP BY DEPTNO) AS $cor4,\n"
-        + "      LATERAL (SELECT X\n"
-        + "        FROM (SELECT 'all' AS $f0, COLLECT(ROW(ENAME, JOB, DEPTNO, 
SAL)) AS X\n"
+        + "      LATERAL (SELECT COLLECT($f1) AS X\n"
+        + "        FROM (SELECT 'all' AS $f0, ROW(ENAME, JOB, DEPTNO, SAL) AS 
$f1\n"
         + "            FROM UNNEST (SELECT $cor4.A AS $f0\n"
         + "                FROM (VALUES (0)) AS t (ZERO)) "
         + "AS t2 (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)\n"
         + "            WHERE JOB <> 'CLERK'\n"
-        + "            GROUP BY 'all'\n"
-        + "            ORDER BY SAL) AS t7) AS t8) AS $cor5,\n"
+        + "            ORDER BY SAL) AS t6\n"
+        + "        GROUP BY $f0) AS t8) AS $cor5,\n"
         + "  LATERAL UNNEST (SELECT $cor5.X AS $f0\n"
-        + "    FROM (VALUES (0)) AS t (ZERO)) "
-        + "AS t11 (ENAME, JOB, DEPTNO, SAL) AS t110\n"
+        + "    FROM (VALUES (0)) AS t (ZERO)) AS t11 (ENAME, JOB, DEPTNO, SAL) 
AS t110\n"
         + "ORDER BY $cor5.group";
     pig(script).assertRel(hasTree(plan))
         .assertResult(is(result))

Reply via email to