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

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


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new 10666f21b9c branch-4.0: [fix](mtmv) Fix query rewrite by mv fail when 
both use cte and group sets #57741 (#58994)
10666f21b9c is described below

commit 10666f21b9cd781e0899051dc28a88e46668879a
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Wed Dec 17 14:58:27 2025 +0800

    branch-4.0: [fix](mtmv) Fix query rewrite by mv fail when both use cte and 
group sets #57741 (#58994)
    
    Cherry-picked from #57741
    
    Co-authored-by: seawinde <[email protected]>
---
 .../nereids/rules/analysis/NormalizeRepeat.java    |  48 +++---
 .../mv/AbstractMaterializedViewAggregateRule.java  |   6 +-
 .../mv/MaterializedViewFilterAggregateRule.java    |   7 +-
 ...MaterializedViewFilterProjectAggregateRule.java |   5 +-
 ...MaterializedViewProjectFilterAggregateRule.java |  14 +-
 .../mv/grouping_sets/grouping_sets.out             |  60 ++++++++
 .../mv/grouping_sets/grouping_sets.groovy          | 168 ++++++++++++++++++++-
 7 files changed, 279 insertions(+), 29 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java
index 319e8209771..a294e128201 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/NormalizeRepeat.java
@@ -63,24 +63,29 @@ import java.util.stream.Collectors;
 import javax.annotation.Nullable;
 
 /** NormalizeRepeat
- * eg: select sum(b + 1), grouping(a+1) from t1 group by grouping sets ((b+1));
+ * eg: SELECT
+ *      camp,
+ *      COUNT(occupation) AS occ_cnt,
+ *      GROUPING(camp) AS grouping
+ *     FROM
+ *      `roles`
+ *      GROUP BY ROLLUP(camp);
  * Original Plan:
- * LogicalRepeat ( groupingSets=[[(a#0 + 1)]],
- *                 outputExpressions=[sum((b#1 + 1)) AS `sum((b + 1))`#2,
- *                 Grouping((a#0 + 1)) AS `Grouping((a + 1))`#3] )
- *      +--LogicalOlapScan (t1)
- *
+ * LogicalRepeat ( groupingSets=[[camp#2], []], outputExpressions=[camp#2,
+ *                  count(occupation#1) AS `occ_cnt`#6, Grouping(camp#2) AS 
`grouping`#7], groupingId=Optional.empty )
+ *  +--LogicalFilter[10] ( predicates=(__DORIS_DELETE_SIGN__#4 = 0) )
+ *      +--LogicalOlapScan ( qualified=roles, indexName=index_not_selected, 
selectedIndexId=1765187322191,
+ *                              preAgg=UNSET, operativeCol=[], 
virtualColumns=[] )
  * After:
- * LogicalAggregate[62] ( groupByExpr=[(a + 1)#4, GROUPING_ID#7, 
GROUPING_PREFIX_(a + 1)#6],
- *                        outputExpr=[sum((b + 1)#5) AS `sum((b + 1))`#2,
- *                                    GROUPING_PREFIX_(a + 1)#6 AS 
`GROUPING_PREFIX_(a + 1)`#3] )
- *    +--LogicalRepeat ( groupingSets=[[(a + 1)#4]],
- *                       outputExpressions=[(a + 1)#4,
- *                                          (b + 1)#5,
- *                                          GROUPING_ID#7,
- *                                          GROUPING_PREFIX_(a + 1)#6] )
- *      +--LogicalProject[60] ( projects=[(a#0 + 1) AS `(a + 1)`#4, (b#1 + 1) 
AS `(b + 1)`#5], excepts=[]
- *          +--LogicalOlapScan ( t1 )
+ * LogicalAggregate[19] ( groupByExpr=[camp#2, GROUPING_PREFIX_camp#8, 
GROUPING_ID#9],
+ *                          outputExpr=[camp#2, count(occupation#1) AS 
`occ_cnt`#6,
+ *                              GROUPING_PREFIX_camp#8 AS `grouping`#7], 
hasRepeat=true )
+ *  +--LogicalRepeat ( groupingSets=[[camp#2], []], outputExpressions=[camp#2, 
occupation#1,
+ *                              Grouping(camp#2) AS `GROUPING_PREFIX_camp`#8], 
groupingId=Optional[GROUPING_ID#9] )
+ *      +--LogicalProject[17] ( distinct=false, projects=[camp#2, 
occupation#1] )
+ *          +--LogicalFilter[10] ( predicates=(__DORIS_DELETE_SIGN__#4 = 0) )
+ *              +--LogicalOlapScan ( qualified=roles, 
indexName=index_not_selected,
+ *                                  selectedIndexId=1765187322191, 
preAgg=UNSET, operativeCol=[], virtualColumns=[] )
  */
 public class NormalizeRepeat extends OneAnalysisRuleFactory {
     @Override
@@ -198,7 +203,16 @@ public class NormalizeRepeat extends 
OneAnalysisRuleFactory {
 
         Plan normalizedChild = pushDownProject(pushedProject, repeat.child());
 
-        SlotReference groupingId = new SlotReference(Repeat.COL_GROUPING_ID, 
BigIntType.INSTANCE, false);
+        // If grouping id is not present, we need to add it, if repeat already 
has grouping id, use it directly
+        // which is for the case repeat is introduced by mv rewrite, should 
keep the rewritten grouping id
+        // is same to the original grouping id
+        SlotReference groupingId = repeat.getGroupingId().orElse(
+                new SlotReference(Repeat.COL_GROUPING_ID, BigIntType.INSTANCE, 
false));
+        // remove grouping id from repeat output expressions, grouping id 
should not in repeat output
+        // this keep consistent with original repeat behavior
+        normalizedRepeatOutput = normalizedRepeatOutput.stream()
+                .filter(expr -> !expr.equals(groupingId))
+                .collect(Collectors.toList());
         LogicalRepeat<Plan> normalizedRepeat = repeat.withNormalizedExpr(
                 (List) normalizedGroupingSets, normalizedRepeatOutput, 
groupingId, normalizedChild);
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
index 6f85ea76ad3..87ddc7a0ca5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/AbstractMaterializedViewAggregateRule.java
@@ -240,7 +240,9 @@ public abstract class AbstractMaterializedViewAggregateRule 
extends AbstractMate
         if (queryAggregate.getSourceRepeat().isPresent()) {
             // construct group sets for repeat
             List<List<Expression>> rewrittenGroupSetsExpressions = new 
ArrayList<>();
-            List<List<Expression>> groupingSets = 
queryAggregate.getSourceRepeat().get().getGroupingSets();
+            List<List<Expression>> groupingSets = 
queryAggregate.collectFirst(LogicalRepeat.class::isInstance)
+                    .map(repeat -> ((LogicalRepeat<? extends Plan>) 
repeat).getGroupingSets())
+                    
.orElse(queryAggregate.getSourceRepeat().get().getGroupingSets());
             for (List<Expression> groupingSet : groupingSets) {
                 if (groupingSet.isEmpty()) {
                     rewrittenGroupSetsExpressions.add(ImmutableList.of());
@@ -262,7 +264,7 @@ public abstract class AbstractMaterializedViewAggregateRule 
extends AbstractMate
                 }
             }
             LogicalRepeat<Plan> repeat = new 
LogicalRepeat<>(rewrittenGroupSetsExpressions,
-                    finalOutputExpressions, tempRewritedPlan);
+                    finalOutputExpressions, 
queryStructInfo.getGroupingId().get(), tempRewritedPlan);
             return NormalizeRepeat.doNormalize(repeat);
         }
         return new LogicalAggregate<>(finalGroupExpressions, 
finalOutputExpressions, tempRewritedPlan);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterAggregateRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterAggregateRule.java
index 10b7aa5e84d..768faf99838 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterAggregateRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterAggregateRule.java
@@ -38,8 +38,11 @@ public class MaterializedViewFilterAggregateRule extends 
AbstractMaterializedVie
     @Override
     public List<Rule> buildRules() {
         return ImmutableList.of(
-                
logicalFilter(logicalAggregate(any().when(LogicalPlan.class::isInstance))).thenApplyMultiNoThrow(
-                        ctx -> {
+                
logicalFilter(logicalAggregate(any().when(LogicalPlan.class::isInstance))
+                        // Temporarily unsupported: do not rewrite when GROUP 
SETS is used together with HAVING.
+                        // Will be re-enabled after the fix is completed.
+                        .when(aggregate -> 
!aggregate.getSourceRepeat().isPresent()))
+                        .thenApplyMultiNoThrow(ctx -> {
                             LogicalFilter<LogicalAggregate<Plan>> root = 
ctx.root;
                             return rewrite(root, ctx.cascadesContext);
                         
}).toRule(RuleType.MATERIALIZED_VIEW_FILTER_AGGREGATE));
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterProjectAggregateRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterProjectAggregateRule.java
index eb7c9bf5f82..b568bb8c59d 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterProjectAggregateRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewFilterProjectAggregateRule.java
@@ -40,7 +40,10 @@ public class MaterializedViewFilterProjectAggregateRule 
extends AbstractMaterial
     @Override
     public List<Rule> buildRules() {
         return ImmutableList.of(
-                
logicalFilter(logicalProject(logicalAggregate(any().when(LogicalPlan.class::isInstance))))
+                
logicalFilter(logicalProject(logicalAggregate(any().when(LogicalPlan.class::isInstance)).when(
+                        // Temporarily unsupported: do not rewrite when GROUP 
SETS is used together with HAVING.
+                        // Will be re-enabled after the fix is completed.
+                        aggregate -> 
!aggregate.getSourceRepeat().isPresent())))
                         .thenApplyMultiNoThrow(ctx -> {
                             
LogicalFilter<LogicalProject<LogicalAggregate<Plan>>> root = ctx.root;
                             return rewrite(root, ctx.cascadesContext);
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewProjectFilterAggregateRule.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewProjectFilterAggregateRule.java
index c83eedea2a1..782128d9af5 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewProjectFilterAggregateRule.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/exploration/mv/MaterializedViewProjectFilterAggregateRule.java
@@ -39,10 +39,14 @@ public class MaterializedViewProjectFilterAggregateRule 
extends AbstractMaterial
 
     @Override
     public List<Rule> buildRules() {
-        return ImmutableList.of(logicalProject(logicalFilter(logicalAggregate(
-                
any().when(LogicalPlan.class::isInstance)))).thenApplyMultiNoThrow(ctx -> {
-                    LogicalProject<LogicalFilter<LogicalAggregate<Plan>>> root 
= ctx.root;
-                    return rewrite(root, ctx.cascadesContext);
-                
}).toRule(RuleType.MATERIALIZED_VIEW_PROJECT_FILTER_AGGREGATE));
+        return ImmutableList.of(
+                
logicalFilter(logicalProject(logicalAggregate(any().when(LogicalPlan.class::isInstance)).when(
+                        // Temporarily unsupported: do not rewrite when GROUP 
SETS is used together with HAVING.
+                        // Will be re-enabled after the fix is completed.
+                        aggregate -> 
!aggregate.getSourceRepeat().isPresent())))
+                        .thenApplyMultiNoThrow(ctx -> {
+                            
LogicalFilter<LogicalProject<LogicalAggregate<Plan>>> root = ctx.root;
+                            return rewrite(root, ctx.cascadesContext);
+                        
}).toRule(RuleType.MATERIALIZED_VIEW_FILTER_PROJECT_AGGREGATE));
     }
 }
diff --git 
a/regression-test/data/nereids_rules_p0/mv/grouping_sets/grouping_sets.out 
b/regression-test/data/nereids_rules_p0/mv/grouping_sets/grouping_sets.out
index 16e370a993d..91c3a80aa52 100644
--- a/regression-test/data/nereids_rules_p0/mv/grouping_sets/grouping_sets.out
+++ b/regression-test/data/nereids_rules_p0/mv/grouping_sets/grouping_sets.out
@@ -233,3 +233,63 @@ o  2023-12-10      a       46.00   33.50   12.50   2       
\N
 o      2023-12-11      c       43.20   43.20   43.20   1       \N
 o      2023-12-12      c       57.40   56.20   1.20    2       \N
 
+-- !query15_0_before --
+\N     \N
+\N     2023-12-11
+3      \N
+3      2023-12-11
+
+-- !query15_0_after --
+\N     \N
+\N     2023-12-11
+3      \N
+3      2023-12-11
+
+-- !query16_0_before --
+\N     \N      \N      1       1       3       7       43.20   43.20   43.20   
1       0
+\N     \N      2023-12-11      1       0       3       6       43.20   43.20   
43.20   1       0
+\N     3       \N      0       1       2       5       43.20   43.20   43.20   
1       0
+\N     3       2023-12-11      0       0       2       4       43.20   43.20   
43.20   1       0
+3      \N      \N      1       1       1       3       43.20   43.20   43.20   
1       0
+3      \N      2023-12-11      1       0       1       2       43.20   43.20   
43.20   1       0
+3      3       \N      0       1       0       1       43.20   43.20   43.20   
1       0
+3      3       2023-12-11      0       0       0       0       43.20   43.20   
43.20   1       0
+
+-- !query16_0_after --
+\N     \N      \N      1       1       3       7       43.20   43.20   43.20   
1       0
+\N     \N      2023-12-11      1       0       3       6       43.20   43.20   
43.20   1       0
+\N     3       \N      0       1       2       5       43.20   43.20   43.20   
1       0
+\N     3       2023-12-11      0       0       2       4       43.20   43.20   
43.20   1       0
+3      \N      \N      1       1       1       3       43.20   43.20   43.20   
1       0
+3      \N      2023-12-11      1       0       1       2       43.20   43.20   
43.20   1       0
+3      3       \N      0       1       0       1       43.20   43.20   43.20   
1       0
+3      3       2023-12-11      0       0       0       0       43.20   43.20   
43.20   1       0
+
+-- !query17_before --
+\N     \N      \N      1       1       3       7       43.20   43.20   43.20   
1       0
+\N     \N      2023-12-11      1       0       3       6       43.20   43.20   
43.20   1       0
+3      \N      \N      1       1       1       3       43.20   43.20   43.20   
1       0
+3      \N      2023-12-11      1       0       1       2       43.20   43.20   
43.20   1       0
+
+-- !query17_after --
+\N     \N      \N      1       1       3       7       43.20   43.20   43.20   
1       0
+\N     \N      2023-12-11      1       0       3       6       43.20   43.20   
43.20   1       0
+3      \N      \N      1       1       1       3       43.20   43.20   43.20   
1       0
+3      \N      2023-12-11      1       0       1       2       43.20   43.20   
43.20   1       0
+
+-- !query18_before --
+\N     \N      \N      1       1       3       7       43.20   43.20   43.20   
1       0
+\N     \N      2023-12-11      1       0       3       6       43.20   43.20   
43.20   1       0
+\N     3       \N      0       1       2       5       43.20   43.20   43.20   
1       0
+\N     3       2023-12-11      0       0       2       4       43.20   43.20   
43.20   1       0
+3      \N      \N      1       1       1       3       43.20   43.20   43.20   
1       0
+3      \N      2023-12-11      1       0       1       2       43.20   43.20   
43.20   1       0
+
+-- !query18_after --
+\N     \N      \N      1       1       3       7       43.20   43.20   43.20   
1       0
+\N     \N      2023-12-11      1       0       3       6       43.20   43.20   
43.20   1       0
+\N     3       \N      0       1       2       5       43.20   43.20   43.20   
1       0
+\N     3       2023-12-11      0       0       2       4       43.20   43.20   
43.20   1       0
+3      \N      \N      1       1       1       3       43.20   43.20   43.20   
1       0
+3      \N      2023-12-11      1       0       1       2       43.20   43.20   
43.20   1       0
+
diff --git 
a/regression-test/suites/nereids_rules_p0/mv/grouping_sets/grouping_sets.groovy 
b/regression-test/suites/nereids_rules_p0/mv/grouping_sets/grouping_sets.groovy
index 8f1608f7ca2..f01ab7847c8 100644
--- 
a/regression-test/suites/nereids_rules_p0/mv/grouping_sets/grouping_sets.groovy
+++ 
b/regression-test/suites/nereids_rules_p0/mv/grouping_sets/grouping_sets.groovy
@@ -474,7 +474,6 @@ suite("materialized_view_grouping_sets") {
     order_qt_query10_0_after "${query10_0}"
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv10_0"""
 
-
     // single table rollup with grouping scalar function and filter
     def mv10_1 =
             """
@@ -510,7 +509,6 @@ suite("materialized_view_grouping_sets") {
     order_qt_query10_1_after "${query10_1}"
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv10_1"""
 
-
     // multi table rollup without grouping scalar function
     def mv11_0 =
             """
@@ -648,5 +646,171 @@ suite("materialized_view_grouping_sets") {
     async_mv_rewrite_fail(db, mv14_0, query14_0, "mv14_0")
     order_qt_query14_0_after "${query14_0}"
     sql """ DROP MATERIALIZED VIEW IF EXISTS mv14_0"""
+
+    // group sets with cte
+    def mv15_0 =
+            """
+            select l_shipdate, o_orderdate, l_partkey, l_suppkey,
+            sum(o_totalprice) as sum_total,
+            max(o_totalprice) as max_total,
+            min(o_totalprice) as min_total,
+            count(*) as count_all,
+            bitmap_union(to_bitmap(case when o_shippriority > 1 and o_orderkey 
IN (1, 3) then o_custkey else null end)) as bitmap_union_basic
+            from lineitem
+            left join orders on lineitem.l_orderkey = orders.o_orderkey and 
l_shipdate = o_orderdate
+            group by
+            l_shipdate,
+            o_orderdate,
+            l_partkey,
+            l_suppkey;
+            """
+    def query15_0 =
+            """
+            with t as (
+                select t1.l_partkey, t1.l_suppkey, o_orderdate,
+                grouping(t1.l_suppkey),
+                grouping(o_orderdate),
+                grouping_id(t1.l_partkey, t1.l_suppkey),
+                grouping_id(t1.l_partkey, t1.l_suppkey, o_orderdate),
+                sum(o_totalprice),
+                max(o_totalprice),
+                min(o_totalprice),
+                count(*),
+                count(distinct case when o_shippriority > 1 and o_orderkey IN 
(1, 3) then o_custkey else null end)
+                from (select * from lineitem where l_shipdate = '2023-12-11') 
t1
+                left join orders on t1.l_orderkey = orders.o_orderkey and 
t1.l_shipdate = o_orderdate
+                group by
+                GROUPING SETS ((l_shipdate, o_orderdate, l_partkey), 
(l_partkey, l_suppkey), (l_suppkey), ())
+            )
+            select t1.l_suppkey, t2.o_orderdate
+            from
+            t t1
+            inner join
+            t t2 on t1.l_partkey = t2.l_partkey;
+            """
+    order_qt_query15_0_before "${query15_0}"
+    async_mv_rewrite_success(db, mv15_0, query15_0, "mv15_0")
+    order_qt_query15_0_after "${query15_0}"
+    sql """ DROP MATERIALIZED VIEW IF EXISTS mv15_0"""
+
+    // group sets with alias and the alias is grouping id
+    def mv16_0 =
+            """
+            select l_shipdate, o_orderdate, l_partkey, l_suppkey,
+            sum(o_totalprice) as sum_total,
+            max(o_totalprice) as max_total,
+            min(o_totalprice) as min_total,
+            count(*) as count_all,
+            bitmap_union(to_bitmap(case when o_shippriority > 1 and o_orderkey 
IN (1, 3) then o_custkey else null end)) as bitmap_union_basic
+            from lineitem
+            left join orders on lineitem.l_orderkey = orders.o_orderkey and 
l_shipdate = o_orderdate
+            group by
+            l_shipdate,
+            o_orderdate,
+            l_partkey,
+            l_suppkey;
+            """
+    def query16_0 =
+            """
+            select t1.l_partkey as p_alias, t1.l_suppkey as s_alias, 
o_orderdate,
+            grouping(t1.l_suppkey),
+            grouping(o_orderdate),
+            grouping_id(t1.l_partkey, t1.l_suppkey),
+            grouping_id(t1.l_partkey, t1.l_suppkey, o_orderdate),
+            sum(o_totalprice),
+            max(o_totalprice),
+            min(o_totalprice),
+            count(*),
+            count(distinct case when o_shippriority > 1 and o_orderkey IN (1, 
3) then o_custkey else null end)
+            from (select * from lineitem where l_shipdate = '2023-12-11') t1
+            left join orders on t1.l_orderkey = orders.o_orderkey and 
t1.l_shipdate = o_orderdate
+            group by
+            CUBE (t1.l_partkey, t1.l_suppkey, o_orderdate);
+            """
+    order_qt_query16_0_before "${query16_0}"
+    async_mv_rewrite_success(db, mv16_0, query16_0, "mv16_0")
+    order_qt_query16_0_after "${query16_0}"
+    sql """ DROP MATERIALIZED VIEW IF EXISTS mv16_0"""
+
+    // group sets with alias and the alias is grouping id and query has filter 
on column
+    def mv17 =
+            """
+            select l_shipdate, o_orderdate, l_partkey, l_suppkey,
+            sum(o_totalprice) as sum_total,
+            max(o_totalprice) as max_total,
+            min(o_totalprice) as min_total,
+            count(*) as count_all,
+            bitmap_union(to_bitmap(case when o_shippriority > 1 and o_orderkey 
IN (1, 3) then o_custkey else null end)) as bitmap_union_basic
+            from lineitem
+            left join orders on lineitem.l_orderkey = orders.o_orderkey and 
l_shipdate = o_orderdate
+            group by
+            l_shipdate,
+            o_orderdate,
+            l_partkey,
+            l_suppkey;
+            """
+    def query17 =
+            """
+            select t1.l_partkey as p_alias, t1.l_suppkey as s_alias, 
o_orderdate,
+            grouping(t1.l_suppkey),
+            grouping(o_orderdate),
+            grouping_id(t1.l_partkey, t1.l_suppkey),
+            grouping_id(t1.l_partkey, t1.l_suppkey, o_orderdate),
+            sum(o_totalprice),
+            max(o_totalprice),
+            min(o_totalprice),
+            count(*),
+            count(distinct case when o_shippriority > 1 and o_orderkey IN (1, 
3) then o_custkey else null end)
+            from (select * from lineitem where l_shipdate = '2023-12-11') t1
+            left join orders on t1.l_orderkey = orders.o_orderkey and 
t1.l_shipdate = o_orderdate
+            group by
+            CUBE (t1.l_partkey, t1.l_suppkey, o_orderdate)
+            having grouping(t1.l_suppkey) >= 1;
+            """
+    order_qt_query17_before "${query17}"
+    async_mv_rewrite_success(db, mv17, query17, "mv17")
+    order_qt_query17_after "${query17}"
+    sql """ DROP MATERIALIZED VIEW IF EXISTS mv17"""
+
+
+    // group sets with alias and the alias is grouping id and query has filter 
on column
+    def mv18 =
+            """
+            select l_shipdate, o_orderdate, l_partkey, l_suppkey,
+            sum(o_totalprice) as sum_total,
+            max(o_totalprice) as max_total,
+            min(o_totalprice) as min_total,
+            count(*) as count_all,
+            bitmap_union(to_bitmap(case when o_shippriority > 1 and o_orderkey 
IN (1, 3) then o_custkey else null end)) as bitmap_union_basic
+            from lineitem
+            left join orders on lineitem.l_orderkey = orders.o_orderkey and 
l_shipdate = o_orderdate
+            group by
+            l_shipdate,
+            o_orderdate,
+            l_partkey,
+            l_suppkey;
+            """
+    def query18 =
+            """
+            select t1.l_partkey as p_alias, t1.l_suppkey as s_alias, 
o_orderdate,
+            grouping(t1.l_suppkey),
+            grouping(o_orderdate),
+            grouping_id(t1.l_partkey, t1.l_suppkey),
+            grouping_id(t1.l_partkey, t1.l_suppkey, o_orderdate),
+            sum(o_totalprice),
+            max(o_totalprice),
+            min(o_totalprice),
+            count(*),
+            count(distinct case when o_shippriority > 1 and o_orderkey IN (1, 
3) then o_custkey else null end)
+            from (select * from lineitem where l_shipdate = '2023-12-11') t1
+            left join orders on t1.l_orderkey = orders.o_orderkey and 
t1.l_shipdate = o_orderdate
+            group by
+            CUBE (t1.l_partkey, t1.l_suppkey, o_orderdate)
+            having grouping_id(t1.l_partkey, t1.l_suppkey) >= 1;
+            """
+    order_qt_query18_before "${query18}"
+    async_mv_rewrite_success(db, mv18, query18, "mv18")
+    order_qt_query18_after "${query18}"
+    sql """ DROP MATERIALIZED VIEW IF EXISTS mv18"""
 }
 


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

Reply via email to