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

kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new 9cad9cb23f0 [fix](nereids)add HllUnion and BitmapUnion for pre agg 
match #27548 (#28971)
9cad9cb23f0 is described below

commit 9cad9cb23f0c9beac8dc48142c3f72c7879229c3
Author: starocean999 <[email protected]>
AuthorDate: Tue Dec 26 12:24:15 2023 +0800

    [fix](nereids)add HllUnion and BitmapUnion for pre agg match #27548 (#28971)
---
 .../mv/SelectMaterializedIndexWithAggregate.java   | 25 ++++++++++++++++++++++
 .../org/apache/doris/planner/QueryPlanTest.java    |  6 +++---
 2 files changed, 28 insertions(+), 3 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
index 65e1e0c4b80..825a9f9ac17 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithAggregate.java
@@ -42,6 +42,7 @@ import 
org.apache.doris.nereids.trees.expressions.SlotNotFromChildren;
 import org.apache.doris.nereids.trees.expressions.SlotReference;
 import org.apache.doris.nereids.trees.expressions.VirtualSlotReference;
 import 
org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
+import org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnion;
 import 
org.apache.doris.nereids.trees.expressions.functions.agg.BitmapUnionCount;
 import org.apache.doris.nereids.trees.expressions.functions.agg.Count;
 import org.apache.doris.nereids.trees.expressions.functions.agg.HllUnion;
@@ -884,6 +885,20 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
             }
         }
 
+        @Override
+        public PreAggStatus visitBitmapUnion(BitmapUnion bitmapUnion, 
CheckContext context) {
+            Expression expr = bitmapUnion.child();
+            if (expr instanceof ToBitmap) {
+                expr = expr.child(0);
+            }
+            Optional<Slot> slotOpt = 
ExpressionUtils.extractSlotOrCastOnSlot(expr);
+            if (slotOpt.isPresent() && 
context.valueNameToColumn.containsKey(normalizeName(slotOpt.get().toSql()))) {
+                return PreAggStatus.on();
+            } else {
+                return PreAggStatus.off("invalid bitmap_union: " + 
bitmapUnion.toSql());
+            }
+        }
+
         @Override
         public PreAggStatus visitHllUnionAgg(HllUnionAgg hllUnionAgg, 
CheckContext context) {
             Optional<Slot> slotOpt = 
ExpressionUtils.extractSlotOrCastOnSlot(hllUnionAgg.child());
@@ -894,6 +909,16 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
             }
         }
 
+        @Override
+        public PreAggStatus visitHllUnion(HllUnion hllUnion, CheckContext 
context) {
+            Optional<Slot> slotOpt = 
ExpressionUtils.extractSlotOrCastOnSlot(hllUnion.child());
+            if (slotOpt.isPresent() && 
context.valueNameToColumn.containsKey(normalizeName(slotOpt.get().toSql()))) {
+                return PreAggStatus.on();
+            } else {
+                return PreAggStatus.off("invalid hll_union: " + 
hllUnion.toSql());
+            }
+        }
+
         private PreAggStatus checkAggFunc(
                 AggregateFunction aggFunc,
                 AggregateType matchingAggType,
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
index 02caf943c49..bcf239b443c 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
@@ -2185,11 +2185,11 @@ public class QueryPlanTest extends TestWithFeService {
                 + " \"replication_num\" = \"1\"\n"
                 + ");");
 
-        String queryBaseTableStr = "explain select /*+ 
SET_VAR(enable_nereids_planner=false) */ 
id,id2,orthogonal_bitmap_union_count(id3) from test.bitmap_tb t1 group by 
id,id2";
+        String queryBaseTableStr = "explain select 
id,id2,orthogonal_bitmap_union_count(id3) from test.bitmap_tb t1 group by 
id,id2";
         String explainString1 = getSQLPlanOrErrorMsg(queryBaseTableStr);
         Assert.assertTrue(explainString1.contains("PREAGGREGATION: ON"));
 
-        String queryTableStr = "explain select /*+ 
SET_VAR(enable_nereids_planner=false) */ id,orthogonal_bitmap_union_count(id3) 
from test.bitmap_tb t1 group by id";
+        String queryTableStr = "explain select 
id,orthogonal_bitmap_union_count(id3) from test.bitmap_tb t1 group by id";
         String explainString2 = getSQLPlanOrErrorMsg(queryTableStr);
         Assert.assertTrue(explainString2.contains("PREAGGREGATION: ON"));
     }
@@ -2212,7 +2212,7 @@ public class QueryPlanTest extends TestWithFeService {
                 + "    \"in_memory\"=\"false\"\n"
                 + ");");
 
-        String queryBaseTableStr = "explain select /*+ 
SET_VAR(enable_nereids_planner=false) */ dt, hll_union(pv) from test.test_hll 
group by dt";
+        String queryBaseTableStr = "explain select dt, hll_union(pv) from 
test.test_hll group by dt";
         String explainString = getSQLPlanOrErrorMsg(queryBaseTableStr);
         Assert.assertTrue(explainString.contains("PREAGGREGATION: ON"));
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to