Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.apache.doris.nereids.rules.rewrite.logical.BuildAggForUnion;
import org.apache.doris.nereids.rules.rewrite.logical.CheckAndStandardizeWindowFunctionAndFrame;
import org.apache.doris.nereids.rules.rewrite.logical.ColumnPruning;
import org.apache.doris.nereids.rules.rewrite.logical.ConvertInnerOrCrossJoin;
import org.apache.doris.nereids.rules.rewrite.logical.CountDistinctRewrite;
import org.apache.doris.nereids.rules.rewrite.logical.EliminateAggregate;
import org.apache.doris.nereids.rules.rewrite.logical.EliminateDedupJoinCondition;
Expand All @@ -51,7 +52,6 @@
import org.apache.doris.nereids.rules.rewrite.logical.InferFilterNotNull;
import org.apache.doris.nereids.rules.rewrite.logical.InferJoinNotNull;
import org.apache.doris.nereids.rules.rewrite.logical.InferPredicates;
import org.apache.doris.nereids.rules.rewrite.logical.InnerToCrossJoin;
import org.apache.doris.nereids.rules.rewrite.logical.MergeFilters;
import org.apache.doris.nereids.rules.rewrite.logical.MergeProjects;
import org.apache.doris.nereids.rules.rewrite.logical.MergeSetOperations;
Expand Down Expand Up @@ -155,7 +155,7 @@ public class NereidsRewriter extends BatchRewriteJob {
new ReorderJoin(),
new PushFilterInsideJoin(),
new FindHashConditionForJoin(),
new InnerToCrossJoin(),
new ConvertInnerOrCrossJoin(),
new EliminateNullAwareLeftAntiJoin()
),
topDown(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ public enum RuleType {
BUILD_AGG_FOR_UNION(RuleTypeClass.REWRITE),
COUNT_DISTINCT_REWRITE(RuleTypeClass.REWRITE),
INNER_TO_CROSS_JOIN(RuleTypeClass.REWRITE),
CROSS_TO_INNER_JOIN(RuleTypeClass.REWRITE),
REWRITE_SENTINEL(RuleTypeClass.REWRITE),

// split limit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,32 @@

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.rules.rewrite.RewriteRuleFactory;
import org.apache.doris.nereids.trees.plans.JoinType;

import com.google.common.collect.ImmutableList;

import java.util.List;

/**
* Convert invalid inner join to cross join.
* Like: A inner join B on true -> A cross join B on true;
* Or
* Convert invalid cross join to inner join.
* Like: A cross join B on A.id > 1 -> A inner join B on A.id > 1;
*/
public class InnerToCrossJoin extends OneRewriteRuleFactory {
public class ConvertInnerOrCrossJoin implements RewriteRuleFactory {
@Override
public Rule build() {
return innerLogicalJoin()
.when(join -> join.getHashJoinConjuncts().size() == 0)
public List<Rule> buildRules() {
return ImmutableList.of(
innerLogicalJoin()
.when(join -> join.getHashJoinConjuncts().size() == 0 && join.getOtherJoinConjuncts().size() == 0)
.then(join -> join.withJoinType(JoinType.CROSS_JOIN))
.toRule(RuleType.INNER_TO_CROSS_JOIN);
.toRule(RuleType.INNER_TO_CROSS_JOIN),
crossLogicalJoin()
.when(join -> join.getHashJoinConjuncts().size() != 0 || join.getOtherJoinConjuncts().size() != 0)
.then(join -> join.withJoinType(JoinType.INNER_JOIN))
.toRule(RuleType.CROSS_TO_INNER_JOIN)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -251,7 +251,7 @@ private void test(JoinType joinType, boolean hasProject, PatternDescriptor<? ext
Plan plan = generatePlan(joinType, hasProject);
PlanChecker.from(MemoTestUtils.createConnectContext())
.analyze(plan)
.applyTopDown(new InnerToCrossJoin())
.applyTopDown(new ConvertInnerOrCrossJoin())
.applyTopDown(new PushdownLimit())
.matchesFromRoot(pattern);
}
Expand Down