public class JoinPushThroughJoinRule extends RelOptRule
(A join B) join C becomes
(A join C) join B. The
advantage of applying this rule is that it may be possible to apply
conditions earlier. For instance,
(sales as s join product_class as pc on true) join product as p on s.product_id = p.product_id and p.product_class_id = pc.product_class_id
(sales as s join product as p on s.product_id = p.product_id) join product_class as pc on p.product_class_id = pc.product_class_id
Before the rule, one join has two conditions and the other has none
ON TRUE). After the rule, each join has one condition.
|Modifier and Type||Field and Description|
Instance of the rule that works on logical joins only, and pushes to the left.
Instance of the rule that works on logical joins only, and pushes to the right.
|Constructor and Description|
Creates a JoinPushThroughJoinRule.
|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 RelOptRule RIGHT
public static final RelOptRule LEFT
public JoinPushThroughJoinRule(String description, boolean right, Class<? extends Join> clazz, RelBuilderFactory relBuilderFactory)
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.