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 2c849c619d [fix](nereids) only allow inner join in dphyper join 
reorder (#22307)
2c849c619d is described below

commit 2c849c619deef8c21c7a3042ca04909a8f300490
Author: starocean999 <[email protected]>
AuthorDate: Thu Jul 27 19:46:37 2023 +0800

    [fix](nereids) only allow inner join in dphyper join reorder (#22307)
    
    current dphyper join reorder hasn't consider the join conjunct referencing 
only one side of the child. This is common case in outer join conjunct. So we 
need disable outer join reorder in dphyper until this problem is addressed.
---
 .../java/org/apache/doris/nereids/memo/Group.java     | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java
index 9291c32d90..7fe2897a87 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/memo/Group.java
@@ -21,6 +21,8 @@ import org.apache.doris.common.Pair;
 import org.apache.doris.nereids.cost.Cost;
 import org.apache.doris.nereids.properties.LogicalProperties;
 import org.apache.doris.nereids.properties.PhysicalProperties;
+import org.apache.doris.nereids.trees.expressions.literal.Literal;
+import org.apache.doris.nereids.trees.plans.JoinType;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
 import org.apache.doris.nereids.trees.plans.logical.LogicalPlan;
@@ -375,9 +377,20 @@ public class Group {
      */
     public boolean isValidJoinGroup() {
         Plan plan = getLogicalExpression().getPlan();
-        return plan instanceof LogicalJoin
-                && !((LogicalJoin) plan).isMarkJoin()
-                && ((LogicalJoin) plan).getExpressions().size() > 0;
+        if (plan instanceof LogicalJoin
+                && ((LogicalJoin) plan).getJoinType() == JoinType.INNER_JOIN
+                && !((LogicalJoin) plan).isMarkJoin()) {
+            Preconditions.checkArgument(!((LogicalJoin) 
plan).getExpressions().isEmpty(),
+                    "inner join must have join conjuncts");
+            if (((LogicalJoin) plan).getHashJoinConjuncts().isEmpty()
+                    && ((LogicalJoin) plan).getOtherJoinConjuncts().get(0) 
instanceof Literal) {
+                return false;
+            } else {
+                // Right now, we only support inner join with some conjuncts 
referencing any side of the child's output
+                return true;
+            }
+        }
+        return false;
     }
 
     public boolean isProjectGroup() {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to