branch-2.1: [fix](nereids)fix bug of PushDownFilterThroughSetOperation (#46370) (#46456)

pick from master #46370

Co-authored-by: feiniaofeiafei <moailing@selectdb.com>
This commit is contained in:
morrySnow
2025-01-06 21:34:40 +08:00
committed by GitHub
parent 53889cbbb6
commit ccb6c2610a

View File

@ -44,16 +44,16 @@ public class PushDownFilterThroughSetOperation extends OneRewriteRuleFactory {
return logicalFilter(logicalSetOperation()).then(f -> {
LogicalSetOperation setOperation = f.child();
List<Plan> newChildren = new ArrayList<>();
for (Plan child : setOperation.children()) {
for (int childIdx = 0; childIdx < setOperation.children().size(); ++childIdx) {
Map<Expression, Expression> replaceMap = new HashMap<>();
for (int i = 0; i < setOperation.getOutputs().size(); ++i) {
NamedExpression output = setOperation.getOutputs().get(i);
replaceMap.put(output, child.getOutput().get(i));
replaceMap.put(output, setOperation.getRegularChildOutput(childIdx).get(i));
}
Set<Expression> newFilterPredicates = f.getConjuncts().stream().map(conjunct ->
ExpressionUtils.replace(conjunct, replaceMap)).collect(ImmutableSet.toImmutableSet());
newChildren.add(new LogicalFilter<>(newFilterPredicates, child));
newChildren.add(new LogicalFilter<>(newFilterPredicates, setOperation.child(childIdx)));
}
return setOperation.withChildren(newChildren);