This is an automated email from the ASF dual-hosted git repository.
morrysnow 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 92c8f842f7 [fix](nereids) dphyper join reorder use wrong method to get
hash and other conjuncts (#22966)
92c8f842f7 is described below
commit 92c8f842f743aadf55a99b6aa065a5d44fcc91cc
Author: starocean999 <[email protected]>
AuthorDate: Thu Aug 17 11:03:45 2023 +0800
[fix](nereids) dphyper join reorder use wrong method to get hash and other
conjuncts (#22966)
should use getHashJoinConjuncts() and getOtherJoinConjuncts() to get hash
and other conjuncts of hash join node instead of categorizing them by checking
if it's 'EqualTo' expression
---
.../nereids/jobs/joinorder/hypergraph/Edge.java | 8 +++++
.../hypergraph/receiver/PlanReceiver.java | 10 ++----
.../nereids_p0/join/test_join_dphyper.groovy | 37 ++++++++++++++++++++++
3 files changed, 47 insertions(+), 8 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/Edge.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/Edge.java
index 9ebc1ed3fa..4172e54559 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/Edge.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/Edge.java
@@ -218,6 +218,14 @@ public class Edge {
return join.getExpressions();
}
+ public List<Expression> getHashJoinConjuncts() {
+ return join.getHashJoinConjuncts();
+ }
+
+ public List<Expression> getOtherJoinConjuncts() {
+ return join.getOtherJoinConjuncts();
+ }
+
public final Set<Slot> getInputSlots() {
Set<Slot> slots = new HashSet<>();
join.getExpressions().stream().forEach(expression ->
slots.addAll(expression.getInputSlots()));
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/receiver/PlanReceiver.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/receiver/PlanReceiver.java
index 5106d71a4b..b33c8134c4 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/receiver/PlanReceiver.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/joinorder/hypergraph/receiver/PlanReceiver.java
@@ -29,7 +29,6 @@ import org.apache.doris.nereids.memo.GroupExpression;
import org.apache.doris.nereids.memo.Memo;
import org.apache.doris.nereids.properties.LogicalProperties;
import org.apache.doris.nereids.properties.PhysicalProperties;
-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;
@@ -247,13 +246,8 @@ public class PlanReceiver implements AbstractReceiver {
}
Preconditions.checkArgument(joinType == null || joinType ==
edge.getJoinType());
joinType = edge.getJoinType();
- for (Expression expression : edge.getExpressions()) {
- if (expression instanceof EqualTo) {
- hashConjuncts.add(expression);
- } else {
- otherConjuncts.add(expression);
- }
- }
+ hashConjuncts.addAll(edge.getHashJoinConjuncts());
+ otherConjuncts.addAll(edge.getOtherJoinConjuncts());
}
return joinType;
}
diff --git a/regression-test/suites/nereids_p0/join/test_join_dphyper.groovy
b/regression-test/suites/nereids_p0/join/test_join_dphyper.groovy
new file mode 100644
index 0000000000..42f33d392d
--- /dev/null
+++ b/regression-test/suites/nereids_p0/join/test_join_dphyper.groovy
@@ -0,0 +1,37 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+suite("test_join_dphyper", "nereids_p0") {
+ sql "SET enable_nereids_planner=true"
+ sql "SET enable_fallback_to_original_planner=false"
+ sql "SET enable_dphyp_optimizer=true"
+
+ sql "DROP TABLE IF EXISTS test_join_dphyper1"
+ sql "DROP TABLE IF EXISTS test_join_dphyper2"
+ sql """
+ CREATE TABLE test_join_dphyper1(c0 BOOLEAN) DISTRIBUTED BY HASH
(c0) PROPERTIES ("replication_num" = "1");
+ """
+ sql """
+ CREATE TABLE test_join_dphyper2(c0 VARCHAR(190) NOT NULL DEFAULT
'') DISTRIBUTED BY HASH (c0) BUCKETS 19 PROPERTIES ("replication_num" = "1");
+ """
+
+ sql """
+ SELECT * FROM test_join_dphyper1, test_join_dphyper2 WHERE ((CASE
(test_join_dphyper1.c0 IN ('', test_join_dphyper2.c0, test_join_dphyper1.c0))
WHEN ((test_join_dphyper2.c0) like (test_join_dphyper1.c0)) THEN
((-885441894)|(-1325784872)) ELSE CASE false WHEN true THEN 1511454646 WHEN
true THEN -1171080291 WHEN false THEN 2117897914 END END )=((-
((1513672096)-(-296074728))))) ORDER BY 1;
+ """
+ sql "DROP TABLE IF EXISTS test_join_dphyper1"
+ sql "DROP TABLE IF EXISTS test_join_dphyper2"
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]