Package org.apache.calcite.sql2rel
Class RelDecorrelator
java.lang.Object
org.apache.calcite.sql2rel.RelDecorrelator
- All Implemented Interfaces:
ReflectiveVisitor
RelDecorrelator replaces all correlated expressions (corExp) in a relational
expression (RelNode) tree with non-correlated expressions that are produced
from joining the RelNode that produces the corExp with the RelNode that
references it.
TODO:
- replace
CorelMapconstructor parameter with a RelNode - make
currentRelimmutable (would require a fresh RelDecorrelator for each node being decorrelated) - make fields of
CorelMapimmutable
Note: make all the members protected scope so that they can be accessed by the sub-class.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classPlanner rule that adjusts projects when counts are added.protected static classstatic classBuilds aRelDecorrelator.CorelMap.static final classPlanner rule that removes correlations for scalar aggregates.static final classPlanner rule that removes correlations for scalar projects.static final classRule to remove an Aggregate with SINGLE_VALUE. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected RelDecorrelator.CorelMapprotected final Contextprotected @Nullable RelNodeprotected final ReflectUtil.MethodDispatcher<@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame>Built during decorrelation, of rel to all the newly created correlated variables in its output, and to map old input positions to new input positions.protected final RelBuilder -
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedRelDecorrelator(RelDecorrelator.CorelMap cm, Context context, RelBuilder relBuilder) -
Method Summary
Modifier and TypeMethodDescriptionprotected RelNodedecorrelate(RelNode root) protected RexNodedecorrelateExpr(RelNode currentRel, Map<RelNode, org.apache.calcite.sql2rel.RelDecorrelator.Frame> map, RelDecorrelator.CorelMap cm, RexNode exp) protected @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateFetchOneSort(Sort sort, org.apache.calcite.sql2rel.RelDecorrelator.Frame frame) static RelNodedecorrelateQuery(RelNode rootRel) Deprecated.static RelNodedecorrelateQuery(RelNode rootRel, RelBuilder relBuilder) Decorrelates a query.static RelNodedecorrelateQuery(RelNode rootRel, RelBuilder relBuilder, @Nullable RuleSet decorrelationRules) Decorrelates a query specifying a set of rules to be used in the "remove correlation via rules" pre-processing.@Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(Aggregate rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(Correlate rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(Filter rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(Join rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(Project rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(Sort rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(Values rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(LogicalAggregate rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(LogicalCorrelate rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(LogicalFilter rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(LogicalJoin rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(LogicalProject rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(LogicalSnapshot rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(LogicalTableFunctionScan rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(RelNode rel, boolean isCorVarDefined) Fallback if none of the otherdecorrelateRelmethods match.protected @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateSortAsAggregate(Sort sort, org.apache.calcite.sql2rel.RelDecorrelator.Frame frame) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frameprotected Collection<RelOptRule>Returns the rules applied on the rel after decorrelation, never null.protected RelDecorrelatorReturns thevisitoron which theMethodDispatcherdispatches eachdecorrelateRelmethod, the default implementation returns this instance, if you got a sub-class, override this method to replace thevisitoras the sub-class instance.protected RelBuilderFactoryprotected RexNoderemoveCorrelationExpr(RexNode exp, boolean projectPulledAboveLeftCorrelator) protected RexNoderemoveCorrelationExpr(RexNode exp, boolean projectPulledAboveLeftCorrelator, Set<Integer> isCount) protected RexNoderemoveCorrelationExpr(RexNode exp, boolean projectPulledAboveLeftCorrelator, RexInputRef nullIndicator) removeCorrelationViaRule(RelNode root, RuleSet ruleSet)
-
Field Details
-
relBuilder
-
cm
-
dispatcher
protected final ReflectUtil.MethodDispatcher<@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame> dispatcher -
currentRel
-
context
-
map
Built during decorrelation, of rel to all the newly created correlated variables in its output, and to map old input positions to new input positions. This is from the view point of the parent rel of a new rel. -
generatedCorRels
-
-
Constructor Details
-
RelDecorrelator
-
-
Method Details
-
decorrelateQuery
Deprecated. -
decorrelateQuery
Decorrelates a query.This is the main entry point to
RelDecorrelator.- Parameters:
rootRel- Root node of the queryrelBuilder- Builder for relational expressions- Returns:
- Equivalent query with all
Correlateinstances removed
-
decorrelateQuery
public static RelNode decorrelateQuery(RelNode rootRel, RelBuilder relBuilder, @Nullable RuleSet decorrelationRules) Decorrelates a query specifying a set of rules to be used in the "remove correlation via rules" pre-processing.- Parameters:
rootRel- Root node of the queryrelBuilder- Builder for relational expressionsdecorrelationRules- Rules to be used in the decorrelation, ifnulla default rule set will be used- Returns:
- Equivalent query with all
Correlateinstances removed - See Also:
-
relBuilderFactory
-
decorrelate
-
removeCorrelationViaRule
-
removeCorrelationViaRule
-
decorrelateExpr
-
removeCorrelationExpr
-
removeCorrelationExpr
protected RexNode removeCorrelationExpr(RexNode exp, boolean projectPulledAboveLeftCorrelator, RexInputRef nullIndicator) -
removeCorrelationExpr
-
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(RelNode rel, boolean isCorVarDefined) Fallback if none of the otherdecorrelateRelmethods match. -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Sort rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Values rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalAggregate rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Aggregate rel, boolean isCorVarDefined) -
getInvoke
-
decorrelateFetchOneSort
protected @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateFetchOneSort(Sort sort, org.apache.calcite.sql2rel.RelDecorrelator.Frame frame) -
decorrelateSortAsAggregate
protected @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateSortAsAggregate(Sort sort, org.apache.calcite.sql2rel.RelDecorrelator.Frame frame) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalProject rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Project rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalSnapshot rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalTableFunctionScan rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalFilter rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Filter rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalCorrelate rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Correlate rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalJoin rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Join rel, boolean isCorVarDefined) -
getVisitor
Returns thevisitoron which theMethodDispatcherdispatches eachdecorrelateRelmethod, the default implementation returns this instance, if you got a sub-class, override this method to replace thevisitoras the sub-class instance. -
getPostDecorrelateRules
Returns the rules applied on the rel after decorrelation, never null.
-