This is an automated email from the ASF dual-hosted git repository.
jakevin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 18b7d84436 [fix](Nereids): reject infer distinct when children exist
NLJ (#21391)
18b7d84436 is described below
commit 18b7d84436c00576a12bce491ec6c847b77fe555
Author: jakevin <[email protected]>
AuthorDate: Fri Jun 30 20:29:48 2023 +0800
[fix](Nereids): reject infer distinct when children exist NLJ (#21391)
---
.../rules/rewrite/InferSetOperatorDistinct.java | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InferSetOperatorDistinct.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InferSetOperatorDistinct.java
index c77edb2e17..8b9f46408f 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InferSetOperatorDistinct.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/rewrite/InferSetOperatorDistinct.java
@@ -22,6 +22,8 @@ import org.apache.doris.nereids.rules.RuleType;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.algebra.SetOperation.Qualifier;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
+import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
+import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import com.google.common.collect.ImmutableList;
@@ -41,7 +43,12 @@ public class InferSetOperatorDistinct extends
OneRewriteRuleFactory {
public Rule build() {
return logicalSetOperation()
.when(operation -> operation.getQualifier() ==
Qualifier.DISTINCT)
+ .when(operation ->
operation.children().stream().allMatch(this::rejectNLJ))
.then(setOperation -> {
+ if (setOperation.children().stream().anyMatch(child ->
child instanceof LogicalAggregate)) {
+ return null;
+ }
+
List<Plan> newChildren = setOperation.children().stream()
.map(child -> new
LogicalAggregate<>(ImmutableList.copyOf(child.getOutput()), child))
.collect(ImmutableList.toImmutableList());
@@ -51,4 +58,16 @@ public class InferSetOperatorDistinct extends
OneRewriteRuleFactory {
return setOperation.withChildren(newChildren);
}).toRule(RuleType.INFER_SET_OPERATOR_DISTINCT);
}
+
+ // if children exist NLJ, we can't infer distinct
+ private boolean rejectNLJ(Plan plan) {
+ if (plan instanceof LogicalProject) {
+ plan = plan.child(0);
+ }
+ if (plan instanceof LogicalJoin) {
+ LogicalJoin<?, ?> join = (LogicalJoin<?, ?>) plan;
+ return join.getOtherJoinConjuncts().isEmpty();
+ }
+ return true;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]