Class FlinkJoinToMultiJoinRule
- All Implemented Interfaces:
org.apache.calcite.rel.rules.TransformationRule
LogicalJoins into a single MultiJoin with
N inputs.
This rule is copied from JoinToMultiJoinRule. In this
rule, we support richer join type to convert to one multi join set, like left outer join and
right outer join, by rewrite $canCombine() method.
An input is not flattened if the input is a null generating input in an outer join, i.e., either input in a full outer join, semi join, anti join, the right side of a left outer join, or the lef side of a right outer join.
Join conditions are also pulled up from the inputs into the topmost MultiJoin.
Outer join information is also stored in the MultiJoin. A boolean flag indicates if
the join is a full outer join, and in the case of left and right outer joins, the join type and
outer join conditions are stored in arrays in the MultiJoin. This outer join information
is associated with the null generating input in the outer join. So, in the case of a left outer
join between A and B, the information is associated with B, not A.
Here are examples of the MultiJoins constructed after this rule has been applied on
following join trees.
- A JOIN B → MJ(A, B)
- A JOIN B JOIN C → MJ(A, B, C)
- A LEFT JOIN B → MJ(A, B)
- A RIGHT JOIN B → MJ(A, B)
- A FULL JOIN B → MJ[full](A, B)
- A LEFT JOIN (B JOIN C) → MJ(A, B, C)
- (A JOIN B) LEFT JOIN C → MJ(A, B, C)
- (A LEFT JOIN B) JOIN C → MJ(A, B, C)
- (A LEFT JOIN B) LEFT JOIN C → MJ(A, B, C)
- (A RIGHT JOIN B) RIGHT JOIN C → MJ(MJ(A, B), C)
- (A LEFT JOIN B) RIGHT JOIN C → MJ(MJ(A, B), C)
- (A RIGHT JOIN B) LEFT JOIN C → MJ(MJ(A, B), C)
- A LEFT JOIN (B FULL JOIN C) → MJ(A, MJ[full](B, C))
- (A LEFT JOIN B) FULL JOIN (C RIGHT JOIN D) → MJ[full](MJ(A, B), MJ(C, D))
- SEMI JOIN and ANTI JOIN not support now.
The constructor is parameterized to allow any sub-class of Join, not just LogicalJoin.
- See Also:
-
FilterMultiJoinMergeRuleProjectMultiJoinMergeRuleCoreRules.JOIN_TO_MULTI_JOIN
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceRule configuration.Nested classes/interfaces inherited from class org.apache.calcite.plan.RelRule
org.apache.calcite.plan.RelRule.Done, org.apache.calcite.plan.RelRule.MatchHandler<R extends org.apache.calcite.plan.RelOptRule>, org.apache.calcite.plan.RelRule.OperandBuilder, org.apache.calcite.plan.RelRule.OperandDetailBuilder<R extends org.apache.calcite.rel.RelNode>, org.apache.calcite.plan.RelRule.OperandTransformNested classes/interfaces inherited from class org.apache.calcite.plan.RelOptRule
org.apache.calcite.plan.RelOptRule.ConverterRelOptRuleOperand -
Field Summary
FieldsFields inherited from class org.apache.calcite.plan.RelRule
configFields inherited from class org.apache.calcite.plan.RelOptRule
description, operands, relBuilderFactory -
Constructor Summary
ConstructorsConstructorDescriptionFlinkJoinToMultiJoinRule(Class<? extends org.apache.calcite.rel.core.Join> clazz) Deprecated.FlinkJoinToMultiJoinRule(Class<? extends org.apache.calcite.rel.core.Join> joinClass, org.apache.calcite.tools.RelBuilderFactory relBuilderFactory) Deprecated.Creates a JoinToMultiJoinRule. -
Method Summary
Methods inherited from class org.apache.calcite.plan.RelOptRule
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
-
Field Details
-
INSTANCE
-
-
Constructor Details
-
FlinkJoinToMultiJoinRule
Creates a JoinToMultiJoinRule. -
FlinkJoinToMultiJoinRule
@Deprecated public FlinkJoinToMultiJoinRule(Class<? extends org.apache.calcite.rel.core.Join> clazz) Deprecated. -
FlinkJoinToMultiJoinRule
@Deprecated public FlinkJoinToMultiJoinRule(Class<? extends org.apache.calcite.rel.core.Join> joinClass, org.apache.calcite.tools.RelBuilderFactory relBuilderFactory) Deprecated.
-
-
Method Details
-
matches
public boolean matches(org.apache.calcite.plan.RelOptRuleCall call) - Overrides:
matchesin classorg.apache.calcite.plan.RelOptRule
-
onMatch
public void onMatch(org.apache.calcite.plan.RelOptRuleCall call) - Specified by:
onMatchin classorg.apache.calcite.plan.RelOptRule
-