[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:
@ -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();
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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()))
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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()
|
||||
|
||||
Reference in New Issue
Block a user