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 3a2da623b4c4d0..11491bc5876249 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 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,18 @@ public Plan visitLogicalCTEAnchor(LogicalCTEAnchor { + 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);