@Value.Enclosing public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule
LogicalProjects that are on top of a
MultiJoin and beneath a
LogicalJoin so the
LogicalProject appears above the
LogicalJoin.
In the process of doing
so, also save away information about the respective fields that are
referenced in the expressions in the
LogicalProject we're pulling up, as
well as the join condition, in the resultant MultiJoins
For example, if we have the following sub-query:
(select X.x1, Y.y1 from X, Y where X.x2 = Y.y2 and X.x3 = 1 and Y.y3 = 2)
The MultiJoin associated with (X, Y) associates x1 with X and
y1 with Y. Although x3 and y3 need to be read due to the filters, they are
not required after the row scan has completed and therefore are not saved.
The join fields, x2 and y2, are also tracked separately.
Note that by only pulling up projects that are on top of
MultiJoins, we preserve projections on top of row scans.
See the superclass for details on restrictions regarding which
LogicalProjects cannot be pulled.
| Modifier and Type | Class and Description |
|---|---|
static interface |
MultiJoinProjectTransposeRule.Config
Rule configuration.
|
RelRule.Done, RelRule.MatchHandler<R extends RelOptRule>, RelRule.OperandBuilder, RelRule.OperandDetailBuilder<R extends RelNode>, RelRule.OperandTransformRelOptRule.ConverterRelOptRuleOperanddescription, operands, relBuilderFactory| Modifier | Constructor and Description |
|---|---|
protected |
MultiJoinProjectTransposeRule(MultiJoinProjectTransposeRule.Config config)
Creates a MultiJoinProjectTransposeRule.
|
|
MultiJoinProjectTransposeRule(RelOptRuleOperand operand,
RelBuilderFactory relBuilderFactory,
String description)
Deprecated.
|
|
MultiJoinProjectTransposeRule(RelOptRuleOperand operand,
String description)
Deprecated.
|
| Modifier and Type | Method and Description |
|---|---|
protected RelNode |
getProjectChild(RelOptRuleCall call,
Project project,
boolean leftChild)
Returns the child of the project that will be used as input into the new
LogicalJoin once the projects are pulled above the LogicalJoin.
|
protected Project |
getRightChild(RelOptRuleCall call)
Returns the Project corresponding to the right child.
|
protected boolean |
hasLeftChild(RelOptRuleCall call)
Returns whether the rule was invoked with a left project child.
|
protected boolean |
hasRightChild(RelOptRuleCall call)
Returns whether the rule was invoked with 2 children.
|
createProjectExprs, onMatchany, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unorderedprotected MultiJoinProjectTransposeRule(MultiJoinProjectTransposeRule.Config config)
@Deprecated public MultiJoinProjectTransposeRule(RelOptRuleOperand operand, String description)
@Deprecated public MultiJoinProjectTransposeRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory, String description)
protected boolean hasLeftChild(RelOptRuleCall call)
JoinProjectTransposeRulehasLeftChild in class JoinProjectTransposeRuleprotected boolean hasRightChild(RelOptRuleCall call)
JoinProjectTransposeRulehasRightChild in class JoinProjectTransposeRuleprotected Project getRightChild(RelOptRuleCall call)
JoinProjectTransposeRulegetRightChild in class JoinProjectTransposeRuleprotected RelNode getProjectChild(RelOptRuleCall call, Project project, boolean leftChild)
JoinProjectTransposeRulegetProjectChild in class JoinProjectTransposeRulecall - RelOptRuleCallproject - project RelNodeleftChild - true if the project corresponds to the left projectionCopyright © 2012-2022 Apache Software Foundation. All Rights Reserved.