public class MultiJoinProjectTransposeRule extends JoinProjectTransposeRule
LogicalProject
s 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 MultiJoin
s
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
MultiJoin
s, we preserve projections on top of row scans.
See the superclass for details on restrictions regarding which
LogicalProject
s cannot be pulled.
Modifier and Type | Field and Description |
---|---|
static MultiJoinProjectTransposeRule |
MULTI_BOTH_PROJECT |
static MultiJoinProjectTransposeRule |
MULTI_LEFT_PROJECT |
static MultiJoinProjectTransposeRule |
MULTI_RIGHT_PROJECT |
BOTH_PROJECT, BOTH_PROJECT_INCLUDE_OUTER, LEFT_PROJECT, LEFT_PROJECT_INCLUDE_OUTER, RIGHT_PROJECT, RIGHT_PROJECT_INCLUDE_OUTER
description, operands, relBuilderFactory
Constructor and Description |
---|
MultiJoinProjectTransposeRule(RelOptRuleOperand operand,
RelBuilderFactory relBuilderFactory,
java.lang.String description)
Creates a MultiJoinProjectTransposeRule.
|
MultiJoinProjectTransposeRule(RelOptRuleOperand operand,
java.lang.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) |
protected boolean |
hasLeftChild(RelOptRuleCall call) |
protected boolean |
hasRightChild(RelOptRuleCall call) |
createProjectExprs, onMatch
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
public static final MultiJoinProjectTransposeRule MULTI_BOTH_PROJECT
public static final MultiJoinProjectTransposeRule MULTI_LEFT_PROJECT
public static final MultiJoinProjectTransposeRule MULTI_RIGHT_PROJECT
@Deprecated public MultiJoinProjectTransposeRule(RelOptRuleOperand operand, java.lang.String description)
public MultiJoinProjectTransposeRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory, java.lang.String description)
protected boolean hasLeftChild(RelOptRuleCall call)
hasLeftChild
in class JoinProjectTransposeRule
call
- RelOptRuleCallprotected boolean hasRightChild(RelOptRuleCall call)
hasRightChild
in class JoinProjectTransposeRule
call
- RelOptRuleCallprotected Project getRightChild(RelOptRuleCall call)
getRightChild
in class JoinProjectTransposeRule
call
- RelOptRuleCallprotected RelNode getProjectChild(RelOptRuleCall call, Project project, boolean leftChild)
JoinProjectTransposeRule
getProjectChild
in class JoinProjectTransposeRule
call
- RelOptRuleCallproject
- project RelNodeleftChild
- true if the project corresponds to the left projectionCopyright © 2012–2019 The Apache Software Foundation. All rights reserved.