diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/RewriteCteChildren.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/RewriteCteChildren.java index 3a2da623b4..1accf4ae86 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/RewriteCteChildren.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/RewriteCteChildren.java @@ -42,6 +42,7 @@ import org.apache.doris.nereids.util.ExpressionUtils; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Sets; import java.util.HashSet; import java.util.List; @@ -86,14 +87,17 @@ public class RewriteCteChildren extends DefaultPlanRewriter imp outer = (LogicalPlan) cteAnchor.child(1).accept(this, outerCascadesCtx); cascadesContext.getStatementContext().getRewrittenCteConsumer().put(cteAnchor.getCteId(), outer); } - boolean reserveAnchor = outer.anyMatch(p -> { + Set cteConsumers = Sets.newHashSet(); + outer.foreach(p -> { if (p instanceof LogicalCTEConsumer) { LogicalCTEConsumer logicalCTEConsumer = (LogicalCTEConsumer) p; - return logicalCTEConsumer.getCteId().equals(cteAnchor.getCteId()); + if (logicalCTEConsumer.getCteId().equals(cteAnchor.getCteId())) { + cteConsumers.add(logicalCTEConsumer); + } } - return false; }); - if (!reserveAnchor) { + cascadesContext.getCteIdToConsumers().put(cteAnchor.getCteId(), cteConsumers); + if (cteConsumers.isEmpty()) { return outer; } Plan producer = cteAnchor.child(0).accept(this, cascadesContext);