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

rubenada 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 bd65b15fc6 [CALCITE-6087] EnumerableSortedAggregate returns incorrect 
result when input is empty
bd65b15fc6 is described below

commit bd65b15fc6e8b55777ea93aad097f5ff6bf31a0f
Author: 1fanwang <[email protected]>
AuthorDate: Mon Aug 24 11:35:33 2026 -0400

    [CALCITE-6087] EnumerableSortedAggregate returns incorrect result when 
input is empty
    
    Signed-off-by: 1fanwang <[email protected]>
---
 .../enumerable/EnumerableSortedAggregateRule.java  |  2 +-
 .../enumerable/EnumerableSortedAggregateTest.java  | 24 ++++++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableSortedAggregateRule.java
 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableSortedAggregateRule.java
index 30f76e28de..ffeb646a1b 100644
--- 
a/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableSortedAggregateRule.java
+++ 
b/core/src/main/java/org/apache/calcite/adapter/enumerable/EnumerableSortedAggregateRule.java
@@ -47,7 +47,7 @@ protected EnumerableSortedAggregateRule(Config config) {
 
   @Override public @Nullable RelNode convert(RelNode rel) {
     final Aggregate agg = (Aggregate) rel;
-    if (!Aggregate.isSimple(agg)) {
+    if (!Aggregate.isSimple(agg) || agg.getGroupSet().isEmpty()) {
       return null;
     }
     final RelTraitSet inputTraits = rel.getCluster()
diff --git 
a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableSortedAggregateTest.java
 
b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableSortedAggregateTest.java
index 454beb2015..6b188b3b35 100644
--- 
a/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableSortedAggregateTest.java
+++ 
b/core/src/test/java/org/apache/calcite/test/enumerable/EnumerableSortedAggregateTest.java
@@ -50,6 +50,30 @@ public class EnumerableSortedAggregateTest {
             "deptno=20; max_salary=8000.0; num_employee=1");
   }
 
+  @Test void aggOnEmptyInput() {
+    tester(false, new HrSchema())
+        .query("select max(deptno) as m, count(*) as c "
+            + "from emps where deptno > 100")
+        .explainContains(
+            "EnumerableAggregate(group=[{}], m=[MAX($1)], c=[COUNT()])\n"
+                + "  EnumerableCalc")
+        .returnsOrdered("m=null; c=0");
+  }
+
+  /** Test case for
+   * <a 
href="https://issues.apache.org/jira/browse/CALCITE-6087";>[CALCITE-6087]
+   * EnumerableSortedAggregate returns incorrect result when input is 
empty</a>. */
+  @Test void sortedAggRuleRejectsEmptyGroupSet() {
+    tester(false, new HrSchema())
+        .query("select max(deptno) as m, count(*) as c "
+            + "from emps where deptno > 100")
+        .withHook(Hook.PLANNER, (Consumer<RelOptPlanner>) planner -> {
+          planner.removeRule(EnumerableRules.ENUMERABLE_AGGREGATE_RULE);
+          planner.addRule(EnumerableRules.ENUMERABLE_SORTED_AGGREGATE_RULE);
+        })
+        .throws_("There are not enough rules to produce a node with desired 
properties");
+  }
+
   @Test void sortedAggTwoGroupKeys() {
     tester(false, new HrSchema())
         .query(

Reply via email to