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

starocean999 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 85a1db4b6c6 [fix](nereids)select base index if select mv fails (#25715)
85a1db4b6c6 is described below

commit 85a1db4b6c60b96192b01f41adaae5556310f6a1
Author: starocean999 <40539150+starocean...@users.noreply.github.com>
AuthorDate: Mon Nov 6 17:57:19 2023 +0800

    [fix](nereids)select base index if select mv fails (#25715)
---
 .../doris/nereids/pattern/PatternDescriptor.java     | 19 +++++++++++++++++++
 .../mv/SelectMaterializedIndexWithAggregate.java     | 20 ++++++++++----------
 .../mv/SelectMaterializedIndexWithoutAggregate.java  | 10 +++++-----
 3 files changed, 34 insertions(+), 15 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/PatternDescriptor.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/PatternDescriptor.java
index c00f1711c5c..90c143be1aa 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/PatternDescriptor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/pattern/PatternDescriptor.java
@@ -21,6 +21,8 @@ import org.apache.doris.nereids.rules.RulePromise;
 import org.apache.doris.nereids.trees.plans.Plan;
 
 import com.google.common.collect.ImmutableList;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.List;
 import java.util.Objects;
@@ -32,6 +34,7 @@ import java.util.function.Predicate;
  * It can support pattern generic type to MatchedAction.
  */
 public class PatternDescriptor<INPUT_TYPE extends Plan> {
+    private static final Logger LOG = 
LogManager.getLogger(PatternDescriptor.class);
     public final Pattern<INPUT_TYPE> pattern;
     public final RulePromise defaultPromise;
 
@@ -63,6 +66,22 @@ public class PatternDescriptor<INPUT_TYPE extends Plan> {
         return new PatternMatcher<>(pattern, defaultPromise, matchedAction);
     }
 
+    /**
+     * Same as thenApply, but catch all exception and return null
+     */
+    public <OUTPUT_TYPE extends Plan> PatternMatcher<INPUT_TYPE, OUTPUT_TYPE> 
thenApplyNoThrow(
+            MatchedAction<INPUT_TYPE, OUTPUT_TYPE> matchedAction) {
+        MatchedAction<INPUT_TYPE, OUTPUT_TYPE> adaptMatchedAction = ctx -> {
+            try {
+                return matchedAction.apply(ctx);
+            } catch (Exception ex) {
+                LOG.warn("nereids apply rule failed, because {}", 
ex.getMessage(), ex);
+                return null;
+            }
+        };
+        return new PatternMatcher<>(pattern, defaultPromise, 
adaptMatchedAction);
+    }
+
     public <OUTPUT_TYPE extends Plan> PatternMatcher<INPUT_TYPE, OUTPUT_TYPE> 
thenMulti(
             Function<INPUT_TYPE, List<OUTPUT_TYPE>> matchedAction) {
         MatchedMultiAction<INPUT_TYPE, OUTPUT_TYPE> adaptMatchedAction = ctx 
-> matchedAction.apply(ctx.root);
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 b41fdc2d4e8..abc842cb9a8 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
@@ -105,7 +105,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
         return ImmutableList.of(
                 // only agg above scan
                 // Aggregate(Scan)
-                
logicalAggregate(logicalOlapScan().when(this::shouldSelectIndexWithAgg)).thenApply(ctx
 -> {
+                
logicalAggregate(logicalOlapScan().when(this::shouldSelectIndexWithAgg)).thenApplyNoThrow(ctx
 -> {
                     LogicalAggregate<LogicalOlapScan> agg = ctx.root;
                     LogicalOlapScan scan = agg.child();
                     SelectResult result = select(
@@ -140,7 +140,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // filter could push down scan.
                 // Aggregate(Filter(Scan))
                 
logicalAggregate(logicalFilter(logicalOlapScan().when(this::shouldSelectIndexWithAgg)))
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             LogicalAggregate<LogicalFilter<LogicalOlapScan>> 
agg = ctx.root;
                             LogicalFilter<LogicalOlapScan> filter = 
agg.child();
                             LogicalOlapScan scan = filter.child();
@@ -191,7 +191,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // column pruning or other projections such as alias, etc.
                 // Aggregate(Project(Scan))
                 
logicalAggregate(logicalProject(logicalOlapScan().when(this::shouldSelectIndexWithAgg)))
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             LogicalAggregate<LogicalProject<LogicalOlapScan>> 
agg = ctx.root;
                             LogicalProject<LogicalOlapScan> project = 
agg.child();
                             LogicalOlapScan scan = project.child();
@@ -240,7 +240,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // filter could push down and project.
                 // Aggregate(Project(Filter(Scan)))
                 logicalAggregate(logicalProject(logicalFilter(logicalOlapScan()
-                        .when(this::shouldSelectIndexWithAgg)))).thenApply(ctx 
-> {
+                        
.when(this::shouldSelectIndexWithAgg)))).thenApplyNoThrow(ctx -> {
                             
LogicalAggregate<LogicalProject<LogicalFilter<LogicalOlapScan>>> agg = ctx.root;
                             LogicalProject<LogicalFilter<LogicalOlapScan>> 
project = agg.child();
                             LogicalFilter<LogicalOlapScan> filter = 
project.child();
@@ -298,7 +298,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // filter can't push down
                 // Aggregate(Filter(Project(Scan)))
                 logicalAggregate(logicalFilter(logicalProject(logicalOlapScan()
-                        .when(this::shouldSelectIndexWithAgg)))).thenApply(ctx 
-> {
+                        
.when(this::shouldSelectIndexWithAgg)))).thenApplyNoThrow(ctx -> {
                             
LogicalAggregate<LogicalFilter<LogicalProject<LogicalOlapScan>>> agg = ctx.root;
                             LogicalFilter<LogicalProject<LogicalOlapScan>> 
filter = agg.child();
                             LogicalProject<LogicalOlapScan> project = 
filter.child();
@@ -354,7 +354,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // only agg above scan
                 // Aggregate(Repeat(Scan))
                 logicalAggregate(
-                    
logicalRepeat(logicalOlapScan().when(this::shouldSelectIndexWithAgg))).thenApply(ctx
 -> {
+                    
logicalRepeat(logicalOlapScan().when(this::shouldSelectIndexWithAgg))).thenApplyNoThrow(ctx
 -> {
                         LogicalAggregate<LogicalRepeat<LogicalOlapScan>> agg = 
ctx.root;
                         LogicalRepeat<LogicalOlapScan> repeat = agg.child();
                         LogicalOlapScan scan = repeat.child();
@@ -396,7 +396,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // filter could push down scan.
                 // Aggregate(Repeat(Filter(Scan)))
                 
logicalAggregate(logicalRepeat(logicalFilter(logicalOlapScan().when(this::shouldSelectIndexWithAgg))))
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             
LogicalAggregate<LogicalRepeat<LogicalFilter<LogicalOlapScan>>> agg = ctx.root;
                             LogicalRepeat<LogicalFilter<LogicalOlapScan>> 
repeat = agg.child();
                             LogicalFilter<LogicalOlapScan> filter = 
repeat.child();
@@ -454,7 +454,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // column pruning or other projections such as alias, etc.
                 // Aggregate(Repeat(Project(Scan)))
                 
logicalAggregate(logicalRepeat(logicalProject(logicalOlapScan().when(this::shouldSelectIndexWithAgg))))
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             
LogicalAggregate<LogicalRepeat<LogicalProject<LogicalOlapScan>>> agg = ctx.root;
                             LogicalRepeat<LogicalProject<LogicalOlapScan>> 
repeat = agg.child();
                             LogicalProject<LogicalOlapScan> project = 
repeat.child();
@@ -509,7 +509,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // filter could push down and project.
                 // Aggregate(Repeat(Project(Filter(Scan))))
                 
logicalAggregate(logicalRepeat(logicalProject(logicalFilter(logicalOlapScan()
-                        
.when(this::shouldSelectIndexWithAgg))))).thenApply(ctx -> {
+                        
.when(this::shouldSelectIndexWithAgg))))).thenApplyNoThrow(ctx -> {
                             LogicalAggregate<LogicalRepeat<LogicalProject
                                     <LogicalFilter<LogicalOlapScan>>>> agg = 
ctx.root;
                             
LogicalRepeat<LogicalProject<LogicalFilter<LogicalOlapScan>>> repeat = 
agg.child();
@@ -576,7 +576,7 @@ public class SelectMaterializedIndexWithAggregate extends 
AbstractSelectMaterial
                 // filter can't push down
                 // Aggregate(Repeat(Filter(Project(Scan))))
                 
logicalAggregate(logicalRepeat(logicalFilter(logicalProject(logicalOlapScan()
-                        
.when(this::shouldSelectIndexWithAgg))))).thenApply(ctx -> {
+                        
.when(this::shouldSelectIndexWithAgg))))).thenApplyNoThrow(ctx -> {
                             LogicalAggregate<LogicalRepeat<LogicalFilter
                                     <LogicalProject<LogicalOlapScan>>>> agg = 
ctx.root;
                             
LogicalRepeat<LogicalFilter<LogicalProject<LogicalOlapScan>>> repeat = 
agg.child();
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithoutAggregate.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithoutAggregate.java
index 2ad22b00316..7787df22c7f 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithoutAggregate.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/mv/SelectMaterializedIndexWithoutAggregate.java
@@ -62,7 +62,7 @@ public class SelectMaterializedIndexWithoutAggregate extends 
AbstractSelectMater
                 // project with pushdown filter.
                 // Project(Filter(Scan))
                 
logicalProject(logicalFilter(logicalOlapScan().when(this::shouldSelectIndexWithoutAgg)))
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             LogicalProject<LogicalFilter<LogicalOlapScan>> 
project = ctx.root;
                             LogicalFilter<LogicalOlapScan> filter = 
project.child();
                             LogicalOlapScan scan = filter.child();
@@ -82,7 +82,7 @@ public class SelectMaterializedIndexWithoutAggregate extends 
AbstractSelectMater
                 // project with filter that cannot be pushdown.
                 // Filter(Project(Scan))
                 
logicalFilter(logicalProject(logicalOlapScan().when(this::shouldSelectIndexWithoutAgg)))
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             LogicalFilter<LogicalProject<LogicalOlapScan>> 
filter = ctx.root;
                             LogicalProject<LogicalOlapScan> project = 
filter.child();
                             LogicalOlapScan scan = project.child();
@@ -101,7 +101,7 @@ public class SelectMaterializedIndexWithoutAggregate 
extends AbstractSelectMater
                 // scan with filters could be pushdown.
                 // Filter(Scan)
                 
logicalFilter(logicalOlapScan().when(this::shouldSelectIndexWithoutAgg))
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             LogicalFilter<LogicalOlapScan> filter = ctx.root;
                             LogicalOlapScan scan = filter.child();
                             LogicalOlapScan mvPlan = select(
@@ -120,7 +120,7 @@ public class SelectMaterializedIndexWithoutAggregate 
extends AbstractSelectMater
                 // project and scan.
                 // Project(Scan)
                 
logicalProject(logicalOlapScan().when(this::shouldSelectIndexWithoutAgg))
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             LogicalProject<LogicalOlapScan> project = ctx.root;
                             LogicalOlapScan scan = project.child();
 
@@ -139,7 +139,7 @@ public class SelectMaterializedIndexWithoutAggregate 
extends AbstractSelectMater
                 // only scan.
                 logicalOlapScan()
                         .when(this::shouldSelectIndexWithoutAgg)
-                        .thenApply(ctx -> {
+                        .thenApplyNoThrow(ctx -> {
                             LogicalOlapScan scan = ctx.root;
 
                             LogicalOlapScan mvPlan = select(


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

Reply via email to