public class JoinToMultiJoinRule extends RelOptRule
LogicalJoins
into a single MultiJoin with N inputs.
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, the right hand side of a left outer join, or the left hand side of a right outer join.
Join conditions are also pulled up from the inputs into the topmost
MultiJoin,
unless the input corresponds to a null generating input in an outer join,
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 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.
| Modifier and Type | Field and Description |
|---|---|
static JoinToMultiJoinRule |
INSTANCE |
description, operands| Constructor and Description |
|---|
JoinToMultiJoinRule(Class<? extends Join> clazz)
Creates a JoinToMultiJoinRule.
|
| Modifier and Type | Method and Description |
|---|---|
void |
onMatch(RelOptRuleCall call)
Receives notification about a rule match.
|
any, convert, convert, convertList, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, operand, operand, operand, operand, operand, some, toString, unorderedpublic static final JoinToMultiJoinRule INSTANCE
public void onMatch(RelOptRuleCall call)
RelOptRulecall.rels holds the set of relational
expressions which match the operands to the rule;
call.rels[0] is the root expression.
Typically a rule would check that the nodes are valid matches, creates
a new expression, then calls back RelOptRuleCall.transformTo(org.apache.calcite.rel.RelNode, java.util.Map<org.apache.calcite.rel.RelNode, org.apache.calcite.rel.RelNode>) to
register the expression.
onMatch in class RelOptRulecall - Rule callRelOptRule.matches(RelOptRuleCall)Copyright © 2012–2015 The Apache Software Foundation. All rights reserved.