@Value.Enclosing public class FlinkJoinToMultiJoinRule extends org.apache.calcite.plan.RelRule<FlinkJoinToMultiJoinRule.Config> implements org.apache.calcite.rel.rules.TransformationRule
LogicalJoin
s 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 MultiJoin
s 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, unordered
public 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–2024 The Apache Software Foundation. All rights reserved.