Package org.apache.calcite.rel.rules
Class JoinProjectTransposeRule
java.lang.Object
org.apache.calcite.plan.RelOptRule
org.apache.calcite.plan.RelRule<JoinProjectTransposeRule.Config>
org.apache.calcite.rel.rules.JoinProjectTransposeRule
- All Implemented Interfaces:
TransformationRule
- Direct Known Subclasses:
MultiJoinProjectTransposeRule
@Enclosing
public class JoinProjectTransposeRule
extends RelRule<JoinProjectTransposeRule.Config>
implements TransformationRule
Planner rule that matches a
Join
one of whose inputs is a
LogicalProject
, and
pulls the project up.
Projections are pulled up if the
LogicalProject
doesn't originate from
a null generating input in an outer join.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic interface
Rule configuration.Nested classes/interfaces inherited from class org.apache.calcite.plan.RelRule
RelRule.Done, RelRule.MatchHandler<R extends RelOptRule>, RelRule.OperandBuilder, RelRule.OperandDetailBuilder<R extends RelNode>, RelRule.OperandTransform
Nested classes/interfaces inherited from class org.apache.calcite.plan.RelOptRule
RelOptRule.ConverterRelOptRuleOperand
-
Field Summary
Fields inherited from class org.apache.calcite.plan.RelOptRule
description, operands, relBuilderFactory
-
Constructor Summary
ModifierConstructorDescriptionJoinProjectTransposeRule
(RelOptRuleOperand operand, String description) Deprecated.JoinProjectTransposeRule
(RelOptRuleOperand operand, String description, boolean includeOuter, RelFactories.ProjectFactory projectFactory) Deprecated.JoinProjectTransposeRule
(RelOptRuleOperand operand, String description, boolean includeOuter, RelBuilderFactory relBuilderFactory) Deprecated.JoinProjectTransposeRule
(RelOptRuleOperand operand, String description, RelFactories.ProjectFactory projectFactory) Deprecated.protected
Creates a JoinProjectTransposeRule. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
createProjectExprs
(@Nullable Project project, RelNode joinChild, int adjustmentAmount, RexBuilder rexBuilder, List<RelDataTypeField> joinChildrenFields, List<Pair<RexNode, String>> projects) Creates projection expressions corresponding to one of the inputs into the join.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.void
onMatch
(RelOptRuleCall call) Receives notification about a rule match.Methods inherited from class org.apache.calcite.plan.RelOptRule
any, convert, convert, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
-
Constructor Details
-
JoinProjectTransposeRule
Creates a JoinProjectTransposeRule. -
JoinProjectTransposeRule
@Deprecated public JoinProjectTransposeRule(RelOptRuleOperand operand, String description, boolean includeOuter, RelBuilderFactory relBuilderFactory) Deprecated. -
JoinProjectTransposeRule
Deprecated. -
JoinProjectTransposeRule
@Deprecated public JoinProjectTransposeRule(RelOptRuleOperand operand, String description, RelFactories.ProjectFactory projectFactory) Deprecated. -
JoinProjectTransposeRule
@Deprecated public JoinProjectTransposeRule(RelOptRuleOperand operand, String description, boolean includeOuter, RelFactories.ProjectFactory projectFactory) Deprecated.
-
-
Method Details
-
onMatch
Description copied from class:RelOptRule
Receives notification about a rule match. At the time that this method is called,call.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>, org.apache.calcite.plan.RelHintsPropagator)
to register the expression.- Specified by:
onMatch
in classRelOptRule
- Parameters:
call
- Rule call- See Also:
-
hasLeftChild
Returns whether the rule was invoked with a left project child. -
hasRightChild
Returns whether the rule was invoked with 2 children. -
getRightChild
Returns the Project corresponding to the right child. -
getProjectChild
Returns the child of the project that will be used as input into the new LogicalJoin once the projects are pulled above the LogicalJoin.- Parameters:
call
- RelOptRuleCallproject
- project RelNodeleftChild
- true if the project corresponds to the left projection- Returns:
- child of the project that will be used as input into the new LogicalJoin once the projects are pulled above the LogicalJoin
-
createProjectExprs
protected void createProjectExprs(@Nullable Project project, RelNode joinChild, int adjustmentAmount, RexBuilder rexBuilder, List<RelDataTypeField> joinChildrenFields, List<Pair<RexNode, String>> projects) Creates projection expressions corresponding to one of the inputs into the join.- Parameters:
project
- the projection input into the join (if it exists)joinChild
- the child of the projection input (if there is a projection); otherwise, this is the join inputadjustmentAmount
- the amount the expressions need to be shifted byrexBuilder
- rex builderjoinChildrenFields
- concatenation of the fields from the left and right join inputs (once the projections have been removed)projects
- Projection expressions & names to be created
-