[Feat](nereids) add pull up literal when infer predicates (#37314) (#38156)

cherry-pick from master #37314
This commit is contained in:
feiniaofeiafei
2024-07-30 17:19:18 +08:00
committed by GitHub
parent 377d4615c7
commit 43ec98a30b
4 changed files with 4698 additions and 0 deletions

View File

@ -18,10 +18,12 @@
package org.apache.doris.nereids.rules.rewrite;
import org.apache.doris.nereids.trees.expressions.Alias;
import org.apache.doris.nereids.trees.expressions.EqualTo;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
import org.apache.doris.nereids.trees.expressions.literal.Literal;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
@ -91,6 +93,11 @@ public class PullUpPredicates extends PlanVisitor<ImmutableSet<Expression>, Void
allPredicates.add(childPredicate.rewriteDownShortCircuit(c -> c.equals(v) ? k : c));
}
}
for (NamedExpression expr : project.getProjects()) {
if (expr instanceof Alias && expr.child(0) instanceof Literal) {
allPredicates.add(new EqualTo(expr.toSlot(), expr.child(0)));
}
}
return getAvailableExpressions(allPredicates, project);
});
}