[fix](nereids)keep equal predicate as join conjunct even if it can be fold to null literal (#35842)

pick from master https://github.com/apache/doris/pull/35811

## Proposed changes

Issue Number: close #xxx

<!--Describe your changes.-->
This commit is contained in:
starocean999
2024-06-04 14:46:58 +08:00
committed by GitHub
parent bc6b316e87
commit c23ab25474
3 changed files with 10 additions and 0 deletions

View File

@ -25,6 +25,7 @@ import org.apache.doris.nereids.rules.Rule;
import org.apache.doris.nereids.rules.RuleType;
import org.apache.doris.nereids.rules.rewrite.OneRewriteRuleFactory;
import org.apache.doris.nereids.rules.rewrite.RewriteRuleFactory;
import org.apache.doris.nereids.trees.expressions.EqualPredicate;
import org.apache.doris.nereids.trees.expressions.Expression;
import org.apache.doris.nereids.trees.expressions.NamedExpression;
import org.apache.doris.nereids.trees.expressions.functions.Function;
@ -206,6 +207,10 @@ public class ExpressionRewrite implements RewriteRuleFactory {
ImmutableList.Builder<Expression> rewrittenConjuncts = new ImmutableList.Builder<>();
for (Expression expr : conjuncts) {
Expression newExpr = rewriter.rewrite(expr, context);
newExpr = newExpr.isNullLiteral() && expr instanceof EqualPredicate
? expr.withChildren(rewriter.rewrite(expr.child(0), context),
rewriter.rewrite(expr.child(1), context))
: newExpr;
isChanged = isChanged || !newExpr.equals(expr);
rewrittenConjuncts.addAll(ExpressionUtils.extractConjunction(newExpr));
}