From 82cf76f92bccc0bd4148017c0195a8ebd0b4752c Mon Sep 17 00:00:00 2001 From: morrySnow <101034200+morrySnow@users.noreply.github.com> Date: Tue, 6 Jun 2023 20:34:19 +0800 Subject: [PATCH] [fix](Nereids) join condition not extract as conjunctions (#20498) --- .../rules/expression/ExpressionRewrite.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java index 3dc61bcbc7..e42f82b13f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/ExpressionRewrite.java @@ -42,7 +42,6 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; @@ -189,7 +188,7 @@ public class ExpressionRewrite implements RewriteRuleFactory { for (Expression expr : hashJoinConjuncts) { Expression newExpr = rewriter.rewrite(expr, context); hashJoinConjunctsChanged = hashJoinConjunctsChanged || !newExpr.equals(expr); - rewriteHashJoinConjuncts.add(newExpr); + rewriteHashJoinConjuncts.addAll(ExpressionUtils.extractConjunction(newExpr)); } List rewriteOtherJoinConjuncts = Lists.newArrayList(); @@ -197,7 +196,7 @@ public class ExpressionRewrite implements RewriteRuleFactory { for (Expression expr : otherJoinConjuncts) { Expression newExpr = rewriter.rewrite(expr, context); otherJoinConjunctsChanged = otherJoinConjunctsChanged || !newExpr.equals(expr); - rewriteOtherJoinConjuncts.add(newExpr); + rewriteOtherJoinConjuncts.addAll(ExpressionUtils.extractConjunction(newExpr)); } if (!hashJoinConjunctsChanged && !otherJoinConjunctsChanged) { @@ -233,12 +232,13 @@ public class ExpressionRewrite implements RewriteRuleFactory { public Rule build() { return logicalHaving().thenApply(ctx -> { LogicalHaving having = ctx.root; - Set rewrittenExpr = new HashSet<>(); ExpressionRewriteContext context = new ExpressionRewriteContext(ctx.cascadesContext); - for (Expression e : having.getExpressions()) { - rewrittenExpr.add(rewriter.rewrite(e, context)); + Set newConjuncts = ImmutableSet.copyOf(ExpressionUtils.extractConjunction( + rewriter.rewrite(having.getPredicate(), context))); + if (newConjuncts.equals(having.getConjuncts())) { + return having; } - return having.withExpressions(rewrittenExpr); + return having.withExpressions(newConjuncts); }).toRule(RuleType.REWRITE_HAVING_EXPRESSION); } }