feiniaofeiafei commented on code in PR #39450:
URL: https://github.com/apache/doris/pull/39450#discussion_r1740420944


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/PullUpPredicates.java:
##########
@@ -60,6 +69,109 @@ public ImmutableSet<Expression> visit(Plan plan, Void 
context) {
         return ImmutableSet.of();
     }
 
+    @Override
+    public ImmutableSet<Expression> 
visitLogicalOneRowRelation(LogicalOneRowRelation r, Void context) {
+        ImmutableSet.Builder<Expression> predicates = ImmutableSet.builder();
+        for (NamedExpression expr : r.getProjects()) {
+            if (expr instanceof Alias && expr.child(0) instanceof Literal) {
+                predicates.add(new EqualTo(expr.toSlot(), expr.child(0)));
+            }
+        }
+        return predicates.build();
+    }
+
+    @Override
+    public ImmutableSet<Expression> visitLogicalIntersect(LogicalIntersect 
intersect, Void context) {
+        return cacheOrElse(intersect, () -> {
+            ImmutableSet.Builder<Expression> builder = ImmutableSet.builder();
+            for (int i = 0; i < intersect.children().size(); ++i) {
+                Plan child = intersect.child(i);
+                Set<Expression> childFilters = child.accept(this, context);
+                if (childFilters.isEmpty()) {
+                    continue;
+                }
+                Map<Expression, Expression> replaceMap = new HashMap<>();
+                for (int j = 0; j < intersect.getOutput().size(); ++j) {
+                    NamedExpression output = intersect.getOutput().get(j);
+                    replaceMap.put(intersect.getRegularChildOutput(i).get(j), 
output);
+                }
+                builder.addAll(ExpressionUtils.replace(childFilters, 
replaceMap));
+            }
+            return getAvailableExpressions(builder.build(), intersect);
+        });
+    }
+
+    @Override
+    public ImmutableSet<Expression> visitLogicalExcept(LogicalExcept except, 
Void context) {
+        return cacheOrElse(except, () -> {
+            if (except.arity() < 1) {
+                return ImmutableSet.of();
+            }
+            Set<Expression> firstChildFilters = except.child(0).accept(this, 
context);
+            if (firstChildFilters.isEmpty()) {
+                return ImmutableSet.of();
+            }
+            Map<Expression, Expression> replaceMap = new HashMap<>();
+            for (int i = 0; i < except.getOutput().size(); ++i) {
+                NamedExpression output = except.getOutput().get(i);
+                replaceMap.put(except.getRegularChildOutput(0).get(i), output);
+            }
+            return 
ImmutableSet.copyOf(ExpressionUtils.replace(firstChildFilters, replaceMap));
+        });
+    }
+
+    @Override
+    public ImmutableSet<Expression> visitLogicalUnion(LogicalUnion union, Void 
context) {
+        return cacheOrElse(union, () -> {
+            if (!union.getConstantExprsList().isEmpty() && union.arity() == 0) 
{

Review Comment:
   done



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


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

Reply via email to