public class JoinToMultiJoinRule extends RelOptRule
LogicalJoins into a single
MultiJoinwith 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
unless the input corresponds to a null generating input in an outer join,
Outer join information is also stored in the
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,
Here are examples of the
MultiJoins constructed after this rule
has been applied on following join trees.
|Modifier and Type||Field and Description|
|Constructor and Description|
Creates a JoinToMultiJoinRule.
|Modifier and Type||Method and Description|
Receives notification about a rule match.
any, convert, convert, convertList, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, operand, operand, operand, operand, operand, some, toString, unordered
public static final JoinToMultiJoinRule INSTANCE
public void onMatch(RelOptRuleCall call)
call.relsholds the set of relational expressions which match the operands to the rule;
call.relsis 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.
Copyright © 2012–2018 The Apache Software Foundation. All rights reserved.