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

jakevin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 17ca75f8340 [chore](Nereids): add eager aggregate into rules (#27505)
17ca75f8340 is described below

commit 17ca75f83400fdf66153de7946b39946de1cacc3
Author: jakevin <jakevin...@gmail.com>
AuthorDate: Fri Nov 24 10:06:04 2023 +0800

    [chore](Nereids): add eager aggregate into rules (#27505)
    
    Add `Eager Aggregate` rules into Rewrite rules.
---
 .../doris/nereids/jobs/executor/Rewriter.java      | 18 ++++++-----
 .../rewrite/PushDownCountThroughJoinTest.java      | 36 ++++------------------
 .../rewrite/PushDownDistinctThroughJoinTest.java   | 18 ++++-------
 .../rewrite/PushDownMinMaxThroughJoinTest.java     | 36 ++++------------------
 .../rules/rewrite/PushDownSumThroughJoinTest.java  | 24 ++++-----------
 .../apache/doris/utframe/TestWithFeService.java    | 11 +++++++
 6 files changed, 45 insertions(+), 98 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java
index 15e08d052e9..183bfc3c91a 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/executor/Rewriter.java
@@ -91,9 +91,12 @@ import 
org.apache.doris.nereids.rules.rewrite.PullUpProjectUnderLimit;
 import org.apache.doris.nereids.rules.rewrite.PullUpProjectUnderTopN;
 import org.apache.doris.nereids.rules.rewrite.PushConjunctsIntoEsScan;
 import org.apache.doris.nereids.rules.rewrite.PushConjunctsIntoJdbcScan;
+import org.apache.doris.nereids.rules.rewrite.PushDownCountThroughJoin;
 import org.apache.doris.nereids.rules.rewrite.PushDownFilterThroughProject;
 import org.apache.doris.nereids.rules.rewrite.PushDownLimit;
 import org.apache.doris.nereids.rules.rewrite.PushDownLimitDistinctThroughJoin;
+import org.apache.doris.nereids.rules.rewrite.PushDownMinMaxThroughJoin;
+import org.apache.doris.nereids.rules.rewrite.PushDownSumThroughJoin;
 import org.apache.doris.nereids.rules.rewrite.PushDownTopNThroughJoin;
 import org.apache.doris.nereids.rules.rewrite.PushDownTopNThroughWindow;
 import org.apache.doris.nereids.rules.rewrite.PushFilterInsideJoin;
@@ -272,14 +275,13 @@ public class Rewriter extends AbstractBatchJobExecutor {
                     topDown(new BuildAggForUnion())
             ),
 
-            // topic("Eager aggregation",
-            //         topDown(
-            //                 new PushDownSumThroughJoin(),
-            //                 new PushDownMinMaxThroughJoin(),
-            //                 new PushDownCountThroughJoin()
-            //         ),
-            //         custom(RuleType.PUSH_DOWN_DISTINCT_THROUGH_JOIN, 
PushDownDistinctThroughJoin::new)
-            // ),
+            topic("Eager aggregation",
+                    topDown(
+                            new PushDownSumThroughJoin(),
+                            new PushDownMinMaxThroughJoin(),
+                            new PushDownCountThroughJoin()
+                    )
+            ),
 
             topic("Limit optimization",
                     // TODO: the logical plan should not contains any phase 
information,
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownCountThroughJoinTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownCountThroughJoinTest.java
index 21eebe1b375..34ccfe70f70 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownCountThroughJoinTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownCountThroughJoinTest.java
@@ -42,15 +42,15 @@ import java.util.Set;
 class PushDownCountThroughJoinTest implements MemoPatternMatchSupported {
     private static final LogicalOlapScan scan1 = 
PlanConstructor.newLogicalOlapScan(0, "t1", 0);
     private static final LogicalOlapScan scan2 = 
PlanConstructor.newLogicalOlapScan(1, "t2", 0);
+    private MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() {
+        @Mock
+        public Set<Integer> getEnableNereidsRules() {
+            return 
ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type());
+        }
+    };
 
     @Test
     void testSingleCount() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type());
-            }
-        };
         Alias count = new Count(scan1.getOutput().get(0)).alias("count");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
@@ -71,12 +71,6 @@ class PushDownCountThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testMultiCount() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type());
-            }
-        };
         Alias leftCnt1 = new Count(scan1.getOutput().get(0)).alias("leftCnt1");
         Alias leftCnt2 = new Count(scan1.getOutput().get(1)).alias("leftCnt2");
         Alias rightCnt1 = new 
Count(scan2.getOutput().get(1)).alias("rightCnt1");
@@ -100,12 +94,6 @@ class PushDownCountThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testSingleCountStar() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type());
-            }
-        };
         Alias count = new Count().alias("countStar");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
@@ -126,12 +114,6 @@ class PushDownCountThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testSingleCountStarEmptyGroupBy() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type());
-            }
-        };
         Alias count = new Count().alias("countStar");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
@@ -153,12 +135,6 @@ class PushDownCountThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testBothSideCountAndCountStar() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_COUNT_THROUGH_JOIN.type());
-            }
-        };
         Alias leftCnt = new Count(scan1.getOutput().get(0)).alias("leftCnt");
         Alias rightCnt = new Count(scan2.getOutput().get(0)).alias("rightCnt");
         Alias countStar = new Count().alias("countStar");
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownDistinctThroughJoinTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownDistinctThroughJoinTest.java
index aac1bf2c7d4..1ce91d1c7c3 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownDistinctThroughJoinTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownDistinctThroughJoinTest.java
@@ -42,15 +42,15 @@ class PushDownDistinctThroughJoinTest implements 
MemoPatternMatchSupported {
     private static final LogicalOlapScan scan2 = 
PlanConstructor.newLogicalOlapScan(1, "t2", 0);
     private static final LogicalOlapScan scan3 = 
PlanConstructor.newLogicalOlapScan(2, "t3", 0);
     private static final LogicalOlapScan scan4 = 
PlanConstructor.newLogicalOlapScan(3, "t4", 0);
+    private MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() {
+        @Mock
+        public Set<Integer> getEnableNereidsRules() {
+            return 
ImmutableSet.of(RuleType.PUSH_DOWN_DISTINCT_THROUGH_JOIN.type());
+        }
+    };
 
     @Test
     void testPushdownJoin() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_DISTINCT_THROUGH_JOIN.type());
-            }
-        };
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
                 .join(scan3, JoinType.INNER_JOIN, Pair.of(0, 0))
@@ -73,12 +73,6 @@ class PushDownDistinctThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testPushdownProjectJoin() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_DISTINCT_THROUGH_JOIN.type());
-            }
-        };
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
                 .project(ImmutableList.of(0, 2))
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownMinMaxThroughJoinTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownMinMaxThroughJoinTest.java
index dafef59100a..cf28954a47c 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownMinMaxThroughJoinTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownMinMaxThroughJoinTest.java
@@ -45,15 +45,15 @@ class PushDownMinMaxThroughJoinTest implements 
MemoPatternMatchSupported {
     private static final LogicalOlapScan scan2 = 
PlanConstructor.newLogicalOlapScan(1, "t2", 0);
     private static final LogicalOlapScan scan3 = 
PlanConstructor.newLogicalOlapScan(2, "t3", 0);
     private static final LogicalOlapScan scan4 = 
PlanConstructor.newLogicalOlapScan(3, "t4", 0);
+    private MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() {
+        @Mock
+        public Set<Integer> getEnableNereidsRules() {
+            return 
ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type());
+        }
+    };
 
     @Test
     void testSingleJoin() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type());
-            }
-        };
         Alias min = new Min(scan1.getOutput().get(0)).alias("min");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
@@ -74,12 +74,6 @@ class PushDownMinMaxThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testMultiJoin() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type());
-            }
-        };
         Alias min = new Min(scan1.getOutput().get(0)).alias("min");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
@@ -113,12 +107,6 @@ class PushDownMinMaxThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testAggNotOutputGroupBy() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type());
-            }
-        };
         // agg don't output group by
         Alias min = new Min(scan1.getOutput().get(0)).alias("min");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
@@ -146,12 +134,6 @@ class PushDownMinMaxThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testBothSideSingleJoin() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type());
-            }
-        };
         Alias min = new Min(scan1.getOutput().get(1)).alias("min");
         Alias max = new Max(scan2.getOutput().get(1)).alias("max");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
@@ -174,12 +156,6 @@ class PushDownMinMaxThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testBothSide() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_MIN_MAX_THROUGH_JOIN.type());
-            }
-        };
         Alias min = new Min(scan1.getOutput().get(1)).alias("min");
         Alias max = new Max(scan3.getOutput().get(1)).alias("max");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownSumThroughJoinTest.java
 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownSumThroughJoinTest.java
index 5828d2319f2..088372b0d76 100644
--- 
a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownSumThroughJoinTest.java
+++ 
b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/PushDownSumThroughJoinTest.java
@@ -42,15 +42,15 @@ import java.util.Set;
 class PushDownSumThroughJoinTest implements MemoPatternMatchSupported {
     private static final LogicalOlapScan scan1 = 
PlanConstructor.newLogicalOlapScan(0, "t1", 0);
     private static final LogicalOlapScan scan2 = 
PlanConstructor.newLogicalOlapScan(1, "t2", 0);
+    private MockUp<SessionVariable> mockUp = new MockUp<SessionVariable>() {
+        @Mock
+        public Set<Integer> getEnableNereidsRules() {
+            return ImmutableSet.of(RuleType.PUSH_DOWN_SUM_THROUGH_JOIN.type());
+        }
+    };
 
     @Test
     void testSingleJoinLeftSum() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_SUM_THROUGH_JOIN.type());
-            }
-        };
         Alias sum = new Sum(scan1.getOutput().get(1)).alias("sum");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
@@ -71,12 +71,6 @@ class PushDownSumThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testSingleJoinRightSum() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_SUM_THROUGH_JOIN.type());
-            }
-        };
         Alias sum = new Sum(scan2.getOutput().get(1)).alias("sum");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
                 .join(scan2, JoinType.INNER_JOIN, Pair.of(0, 0))
@@ -97,12 +91,6 @@ class PushDownSumThroughJoinTest implements 
MemoPatternMatchSupported {
 
     @Test
     void testAggNotOutputGroupBy() {
-        new MockUp<SessionVariable>() {
-            @Mock
-            public Set<Integer> getEnableNereidsRules() {
-                return 
ImmutableSet.of(RuleType.PUSH_DOWN_SUM_THROUGH_JOIN.type());
-            }
-        };
         // agg don't output group by
         Alias sum = new Sum(scan1.getOutput().get(1)).alias("sum");
         LogicalPlan plan = new LogicalPlanBuilder(scan1)
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java 
b/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
index 911155df7a2..946e159529d 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/utframe/TestWithFeService.java
@@ -69,6 +69,7 @@ import org.apache.doris.planner.Planner;
 import org.apache.doris.qe.ConnectContext;
 import org.apache.doris.qe.OriginStatement;
 import org.apache.doris.qe.QueryState;
+import org.apache.doris.qe.SessionVariable;
 import org.apache.doris.qe.ShowExecutor;
 import org.apache.doris.qe.ShowResultSet;
 import org.apache.doris.qe.StmtExecutor;
@@ -84,9 +85,12 @@ import 
org.apache.doris.utframe.MockedFrontend.NotInitException;
 
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+import mockit.Mock;
+import mockit.MockUp;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeAll;
@@ -129,6 +133,13 @@ public abstract class TestWithFeService {
 
     protected static final String DEFAULT_CLUSTER_PREFIX = "default_cluster:";
 
+    private static final MockUp<SessionVariable> mockUp = new 
MockUp<SessionVariable>() {
+        @Mock
+        public Set<Integer> getEnableNereidsRules() {
+            return ImmutableSet.of();
+        }
+    };
+
     @BeforeAll
     public final void beforeAll() throws Exception {
         FeConstants.enableInternalSchemaDb = false;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to