@Value.Enclosing public class FlinkJoinToMultiJoinRule extends org.apache.calcite.plan.RelRule<FlinkJoinToMultiJoinRule.Config> implements 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.
The constructor is parameterized to allow any sub-class of Join, not just LogicalJoin.
FilterMultiJoinMergeRule,
ProjectMultiJoinMergeRule,
CoreRules.JOIN_TO_MULTI_JOIN| Modifier and Type | Class and Description |
|---|---|
static interface |
FlinkJoinToMultiJoinRule.Config
Rule configuration.
|
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.OperandTransform| Modifier and Type | Field and Description |
|---|---|
static FlinkJoinToMultiJoinRule |
INSTANCE |
| Constructor and Description |
|---|
FlinkJoinToMultiJoinRule(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.
|
FlinkJoinToMultiJoinRule(FlinkJoinToMultiJoinRule.Config config)
Creates a JoinToMultiJoinRule.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
matches(org.apache.calcite.plan.RelOptRuleCall call) |
void |
onMatch(org.apache.calcite.plan.RelOptRuleCall call) |
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unorderedpublic static final FlinkJoinToMultiJoinRule INSTANCE
public FlinkJoinToMultiJoinRule(FlinkJoinToMultiJoinRule.Config config)
@Deprecated public FlinkJoinToMultiJoinRule(Class<? extends org.apache.calcite.rel.core.Join> clazz)
@Deprecated public FlinkJoinToMultiJoinRule(Class<? extends org.apache.calcite.rel.core.Join> joinClass, org.apache.calcite.tools.RelBuilderFactory relBuilderFactory)
Copyright © 2014–2025 The Apache Software Foundation. All rights reserved.