[enhancement](Nereids): remove LAsscom in Bushy Tree RuleSet (#25465)
- Bushy Tree RuleSet don't need LAsscom - fix bug: rule pattern shouldn't use same name
This commit is contained in:
@ -188,8 +188,6 @@ public class RuleSet {
|
||||
|
||||
public static final List<Rule> BUSHY_TREE_JOIN_REORDER = planRuleFactories()
|
||||
.add(JoinCommute.BUSHY)
|
||||
.add(InnerJoinLAsscom.INSTANCE)
|
||||
.add(InnerJoinLAsscomProject.INSTANCE)
|
||||
.add(InnerJoinLeftAssociate.INSTANCE)
|
||||
.add(InnerJoinLeftAssociateProject.INSTANCE)
|
||||
.add(InnerJoinRightAssociate.INSTANCE)
|
||||
|
||||
@ -290,8 +290,10 @@ public enum RuleType {
|
||||
LOGICAL_OUTER_JOIN_LASSCOM_PROJECT(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_OUTER_JOIN_ASSOC(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_OUTER_JOIN_ASSOC_PROJECT(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_PROJECT(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_LEFT(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_RIGHT(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_LEFT_PROJECT(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_RIGHT_PROJECT(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_SEMI_JOIN_SEMI_JOIN_TRANSPOSE(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_SEMI_JOIN_SEMI_JOIN_TRANSPOSE_PROJECT(RuleTypeClass.EXPLORATION),
|
||||
LOGICAL_JOIN_EXCHANGE(RuleTypeClass.EXPLORATION),
|
||||
@ -305,8 +307,10 @@ public enum RuleType {
|
||||
TRANSPOSE_LOGICAL_AGG_SEMI_JOIN(RuleTypeClass.EXPLORATION),
|
||||
TRANSPOSE_LOGICAL_AGG_SEMI_JOIN_PROJECT(RuleTypeClass.EXPLORATION),
|
||||
TRANSPOSE_LOGICAL_JOIN_UNION(RuleTypeClass.EXPLORATION),
|
||||
PUSHDOWN_PROJECT_THROUGH_SEMI_JOIN(RuleTypeClass.EXPLORATION),
|
||||
PUSHDOWN_PROJECT_THROUGH_INNER_OUTER_JOIN(RuleTypeClass.EXPLORATION),
|
||||
PUSHDOWN_PROJECT_THROUGH_SEMI_JOIN_LEFT(RuleTypeClass.EXPLORATION),
|
||||
PUSHDOWN_PROJECT_THROUGH_SEMI_JOIN_RIGHT(RuleTypeClass.EXPLORATION),
|
||||
PUSHDOWN_PROJECT_THROUGH_INNER_OUTER_JOIN_LEFT(RuleTypeClass.EXPLORATION),
|
||||
PUSHDOWN_PROJECT_THROUGH_INNER_OUTER_JOIN_RIGHT(RuleTypeClass.EXPLORATION),
|
||||
EAGER_COUNT(RuleTypeClass.EXPLORATION),
|
||||
EAGER_GROUP_BY(RuleTypeClass.EXPLORATION),
|
||||
EAGER_GROUP_BY_COUNT(RuleTypeClass.EXPLORATION),
|
||||
|
||||
@ -92,6 +92,6 @@ public class InnerJoinLeftAssociateProject extends OneExplorationRuleFactory {
|
||||
InnerJoinLeftAssociate.setNewTopJoinReorder(newTopJoin, topJoin);
|
||||
|
||||
return CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
|
||||
}).toRule(RuleType.LOGICAL_INNER_JOIN_LEFT_ASSOCIATIVE);
|
||||
}).toRule(RuleType.LOGICAL_INNER_JOIN_LEFT_ASSOCIATIVE_PROJECT);
|
||||
}
|
||||
}
|
||||
|
||||
@ -89,7 +89,7 @@ public class InnerJoinRightAssociateProject extends OneExplorationRuleFactory {
|
||||
setNewTopJoinReorder(newTopJoin, topJoin);
|
||||
|
||||
return CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
|
||||
}).toRule(RuleType.LOGICAL_INNER_JOIN_RIGHT_ASSOCIATIVE);
|
||||
}).toRule(RuleType.LOGICAL_INNER_JOIN_RIGHT_ASSOCIATIVE_PROJECT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -106,7 +106,7 @@ public class JoinExchangeBothProject extends OneExplorationRuleFactory {
|
||||
JoinExchange.setNewTopJoinReorder(newTopJoin, topJoin);
|
||||
|
||||
return CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_EXCHANGE);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_EXCHANGE_BOTH_PROJECT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -106,7 +106,7 @@ public class JoinExchangeLeftProject extends OneExplorationRuleFactory {
|
||||
JoinExchange.setNewTopJoinReorder(newTopJoin, topJoin);
|
||||
|
||||
return CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_EXCHANGE);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_EXCHANGE_LEFT_PROJECT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -106,7 +106,7 @@ public class JoinExchangeRightProject extends OneExplorationRuleFactory {
|
||||
JoinExchange.setNewTopJoinReorder(newTopJoin, topJoin);
|
||||
|
||||
return CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()), newTopJoin);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_EXCHANGE);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_EXCHANGE_RIGHT_PROJECT);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -54,7 +54,7 @@ public class LogicalJoinSemiJoinTranspose implements ExplorationRuleFactory {
|
||||
|
||||
Plan newBottomJoin = topJoin.withChildrenNoContext(a, c);
|
||||
return bottomJoin.withChildrenNoContext(newBottomJoin, b);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE),
|
||||
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_LEFT),
|
||||
|
||||
logicalJoin(group(), logicalJoin())
|
||||
.when(topJoin -> (topJoin.right().getJoinType().isLeftSemiOrAntiJoin()
|
||||
@ -71,7 +71,7 @@ public class LogicalJoinSemiJoinTranspose implements ExplorationRuleFactory {
|
||||
|
||||
Plan newBottomJoin = topJoin.withChildrenNoContext(a, b);
|
||||
return bottomJoin.withChildrenNoContext(newBottomJoin, c);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE)
|
||||
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_RIGHT)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -59,7 +59,7 @@ public class LogicalJoinSemiJoinTransposeProject implements ExplorationRuleFacto
|
||||
Plan newTopJoin = bottomJoin.withChildrenNoContext(newBottomJoin, b);
|
||||
return CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()),
|
||||
newTopJoin);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_PROJECT),
|
||||
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_LEFT_PROJECT),
|
||||
|
||||
logicalJoin(group(), logicalProject(logicalJoin()))
|
||||
.when(topJoin -> (topJoin.right().child().getJoinType().isLeftSemiOrAntiJoin()
|
||||
@ -80,7 +80,7 @@ public class LogicalJoinSemiJoinTransposeProject implements ExplorationRuleFacto
|
||||
Plan newTopJoin = bottomJoin.withChildrenNoContext(newBottomJoin, c);
|
||||
return CBOUtils.projectOrSelf(ImmutableList.copyOf(topJoin.getOutput()),
|
||||
newTopJoin);
|
||||
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_PROJECT)
|
||||
}).toRule(RuleType.LOGICAL_JOIN_LOGICAL_SEMI_JOIN_TRANSPOSE_RIGHT_PROJECT)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ public class PushdownProjectThroughInnerOuterJoin implements ExplorationRuleFact
|
||||
@Override
|
||||
public List<Rule> buildRules() {
|
||||
return ImmutableList.of(
|
||||
logicalJoin(logicalProject(logicalJoin()), group())
|
||||
logicalJoin(logicalProject(logicalJoin().whenNot(LogicalJoin::isMarkJoin)), group())
|
||||
.when(j -> j.left().child().getJoinType().isOuterJoin()
|
||||
|| j.left().child().getJoinType().isInnerJoin())
|
||||
// Just pushdown project with non-column expr like (t.id + 1)
|
||||
@ -69,8 +69,8 @@ public class PushdownProjectThroughInnerOuterJoin implements ExplorationRuleFact
|
||||
return null;
|
||||
}
|
||||
return topJoin.withChildren(newLeft, topJoin.right());
|
||||
}).toRule(RuleType.PUSHDOWN_PROJECT_THROUGH_INNER_OUTER_JOIN),
|
||||
logicalJoin(group(), logicalProject(logicalJoin()))
|
||||
}).toRule(RuleType.PUSHDOWN_PROJECT_THROUGH_INNER_OUTER_JOIN_LEFT),
|
||||
logicalJoin(group(), logicalProject(logicalJoin().whenNot(LogicalJoin::isMarkJoin)))
|
||||
.when(j -> j.right().child().getJoinType().isOuterJoin()
|
||||
|| j.right().child().getJoinType().isInnerJoin())
|
||||
// Just pushdown project with non-column expr like (t.id + 1)
|
||||
@ -83,7 +83,7 @@ public class PushdownProjectThroughInnerOuterJoin implements ExplorationRuleFact
|
||||
return null;
|
||||
}
|
||||
return topJoin.withChildren(topJoin.left(), newRight);
|
||||
}).toRule(RuleType.PUSHDOWN_PROJECT_THROUGH_INNER_OUTER_JOIN)
|
||||
}).toRule(RuleType.PUSHDOWN_PROJECT_THROUGH_INNER_OUTER_JOIN_RIGHT)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@ -54,7 +54,7 @@ public class PushdownProjectThroughSemiJoin implements ExplorationRuleFactory {
|
||||
@Override
|
||||
public List<Rule> buildRules() {
|
||||
return ImmutableList.of(
|
||||
logicalJoin(logicalProject(logicalJoin()), group())
|
||||
logicalJoin(logicalProject(logicalJoin().whenNot(LogicalJoin::isMarkJoin)), group())
|
||||
.when(j -> j.left().child().getJoinType().isLeftSemiOrAntiJoin())
|
||||
// Just pushdown project with non-column expr like (t.id + 1)
|
||||
.whenNot(j -> j.left().isAllSlots())
|
||||
@ -63,9 +63,9 @@ public class PushdownProjectThroughSemiJoin implements ExplorationRuleFactory {
|
||||
LogicalProject<LogicalJoin<GroupPlan, GroupPlan>> project = topJoin.left();
|
||||
Plan newLeft = pushdownProject(project);
|
||||
return topJoin.withChildren(newLeft, topJoin.right());
|
||||
}).toRule(RuleType.PUSHDOWN_PROJECT_THROUGH_SEMI_JOIN),
|
||||
}).toRule(RuleType.PUSHDOWN_PROJECT_THROUGH_SEMI_JOIN_LEFT),
|
||||
|
||||
logicalJoin(group(), logicalProject(logicalJoin()))
|
||||
logicalJoin(group(), logicalProject(logicalJoin().whenNot(LogicalJoin::isMarkJoin)))
|
||||
.when(j -> j.right().child().getJoinType().isLeftSemiOrAntiJoin())
|
||||
// Just pushdown project with non-column expr like (t.id + 1)
|
||||
.whenNot(j -> j.right().isAllSlots())
|
||||
@ -74,7 +74,7 @@ public class PushdownProjectThroughSemiJoin implements ExplorationRuleFactory {
|
||||
LogicalProject<LogicalJoin<GroupPlan, GroupPlan>> project = topJoin.right();
|
||||
Plan newRight = pushdownProject(project);
|
||||
return topJoin.withChildren(topJoin.left(), newRight);
|
||||
}).toRule(RuleType.PUSHDOWN_PROJECT_THROUGH_SEMI_JOIN)
|
||||
}).toRule(RuleType.PUSHDOWN_PROJECT_THROUGH_SEMI_JOIN_RIGHT)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user