[fix](nereids) disable_join_reorder does not work with semi/anti #18898

semi/anti push rules should not work if disable_join_reorder = true;
This commit is contained in:
minghong
2023-04-25 10:57:40 +08:00
committed by GitHub
parent 8b27d42b9b
commit e2afa07271
5 changed files with 10 additions and 0 deletions

View File

@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalJoin;
import org.apache.doris.qe.ConnectContext;
import java.util.Set;
@ -34,6 +35,7 @@ public class SemiJoinAggTranspose extends OneRewriteRuleFactory {
@Override
public Rule build() {
return logicalJoin(logicalAggregate(), any())
.whenNot(join -> ConnectContext.get().getSessionVariable().isDisableJoinReorder())
.when(join -> join.getJoinType().isLeftSemiOrAntiJoin())
.then(join -> {
LogicalAggregate<Plan> aggregate = join.left();

View File

@ -24,6 +24,7 @@ import org.apache.doris.nereids.trees.expressions.Slot;
import org.apache.doris.nereids.trees.plans.Plan;
import org.apache.doris.nereids.trees.plans.logical.LogicalAggregate;
import org.apache.doris.nereids.trees.plans.logical.LogicalProject;
import org.apache.doris.qe.ConnectContext;
/**
* Pushdown semi-join through agg
@ -32,6 +33,7 @@ public class SemiJoinAggTransposeProject extends OneRewriteRuleFactory {
@Override
public Rule build() {
return logicalJoin(logicalProject(logicalAggregate()), any())
.whenNot(join -> ConnectContext.get().getSessionVariable().isDisableJoinReorder())
.when(join -> join.getJoinType().isLeftSemiOrAntiJoin())
.when(join -> join.left().isAllSlots())
.when(join -> join.left().getProjects().stream().allMatch(n -> n instanceof Slot))

View File

@ -21,6 +21,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.trees.plans.logical.LogicalJoin;
import org.apache.doris.qe.ConnectContext;
/**
* RightSemiJoin -> LeftSemiJoin
@ -30,6 +31,7 @@ public class SemiJoinCommute extends OneRewriteRuleFactory {
public Rule build() {
return logicalJoin()
.when(join -> join.getJoinType().isRightSemiOrAntiJoin())
.whenNot(join -> ConnectContext.get().getSessionVariable().isDisableJoinReorder())
.whenNot(LogicalJoin::hasJoinHint)
.whenNot(LogicalJoin::isMarkJoin)
.then(join -> join.withTypeChildren(join.getJoinType().swap(), join.right(), join.left()))

View File

@ -25,6 +25,7 @@ import org.apache.doris.nereids.trees.expressions.ExprId;
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.qe.ConnectContext;
import com.google.common.base.Preconditions;
@ -40,6 +41,7 @@ public class SemiJoinLogicalJoinTranspose extends OneRewriteRuleFactory {
@Override
public Rule build() {
return logicalJoin(logicalJoin(), any())
.whenNot(join -> ConnectContext.get().getSessionVariable().isDisableJoinReorder())
.when(topJoin -> (topJoin.getJoinType().isLeftSemiOrAntiJoin()
&& (topJoin.left().getJoinType().isInnerJoin()
|| topJoin.left().getJoinType().isLeftOuterJoin()

View File

@ -27,6 +27,7 @@ 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.LogicalProject;
import org.apache.doris.nereids.util.Utils;
import org.apache.doris.qe.ConnectContext;
import com.google.common.base.Preconditions;
@ -42,6 +43,7 @@ public class SemiJoinLogicalJoinTransposeProject extends OneRewriteRuleFactory {
@Override
public Rule build() {
return logicalJoin(logicalProject(logicalJoin()), any())
.whenNot(join -> ConnectContext.get().getSessionVariable().isDisableJoinReorder())
.when(topJoin -> (topJoin.getJoinType().isLeftSemiOrAntiJoin()
&& (topJoin.left().child().getJoinType().isInnerJoin()
|| topJoin.left().child().getJoinType().isLeftOuterJoin()