Package org.apache.calcite.sql2rel
Class RelDecorrelator
java.lang.Object
org.apache.calcite.sql2rel.RelDecorrelator
- All Implemented Interfaces:
org.apache.calcite.util.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:
- Was changed within FLINK-29280, FLINK-28682, FLINK-35804: Line 218 ~ 225, Line 273 ~ 288
- Should be removed after fix of FLINK-29540: Line 293 ~ 299
- Should be removed after fix of FLINK-29540: Line 311 ~ 317
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classPlanner rule that adjusts projects when counts are added.static interfaceBase configuration for rules that are non-static in a RelDecorrelator.protected static classA map of the locations ofCorrelatein a tree ofRelNodes.static 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 org.apache.calcite.plan.Contextprotected @Nullable org.apache.calcite.rel.RelNodeprotected final org.apache.calcite.util.ReflectUtil.MethodDispatcher<@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame>protected final HashSet<org.apache.calcite.rel.core.Correlate>protected final Map<org.apache.calcite.rel.RelNode,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, org.apache.calcite.plan.Context context, RelBuilder relBuilder) -
Method Summary
Modifier and TypeMethodDescriptionprotected org.apache.calcite.rel.RelNodedecorrelate(org.apache.calcite.rel.RelNode root) protected org.apache.calcite.rex.RexNodedecorrelateExpr(org.apache.calcite.rel.RelNode currentRel, Map<org.apache.calcite.rel.RelNode, org.apache.calcite.sql2rel.RelDecorrelator.Frame> map, RelDecorrelator.CorelMap cm, org.apache.calcite.rex.RexNode exp) static org.apache.calcite.rel.RelNodedecorrelateQuery(org.apache.calcite.rel.RelNode rootRel) Deprecated.static org.apache.calcite.rel.RelNodedecorrelateQuery(org.apache.calcite.rel.RelNode rootRel, RelBuilder relBuilder) Decorrelates a query.@Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.core.Aggregate rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.core.Correlate rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.core.Filter rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.core.Join rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.core.Project rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.core.Sort rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.core.Values rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.logical.LogicalAggregate rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.logical.LogicalCorrelate rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.logical.LogicalFilter rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.logical.LogicalJoin rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.logical.LogicalProject rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(LogicalSnapshot rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.logical.LogicalTableFunctionScan rel, boolean isCorVarDefined) @Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramedecorrelateRel(org.apache.calcite.rel.RelNode rel, boolean isCorVarDefined) Fallback if none of the otherdecorrelateRelmethods match.@Nullable org.apache.calcite.sql2rel.RelDecorrelator.FramegetInvoke(org.apache.calcite.rel.RelNode r, boolean isCorVarDefined, @Nullable org.apache.calcite.rel.RelNode parent) protected Collection<org.apache.calcite.plan.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 org.apache.calcite.tools.RelBuilderFactoryprotected org.apache.calcite.rex.RexNoderemoveCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator) protected org.apache.calcite.rex.RexNoderemoveCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator, Set<Integer> isCount) protected org.apache.calcite.rex.RexNoderemoveCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator, org.apache.calcite.rex.RexInputRef nullIndicator) org.apache.calcite.rel.RelNoderemoveCorrelationViaRule(org.apache.calcite.rel.RelNode root)
-
Field Details
-
relBuilder
-
cm
-
dispatcher
protected final org.apache.calcite.util.ReflectUtil.MethodDispatcher<@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame> dispatcher -
currentRel
protected @Nullable org.apache.calcite.rel.RelNode currentRel -
context
protected final org.apache.calcite.plan.Context context -
map
protected final Map<org.apache.calcite.rel.RelNode,org.apache.calcite.sql2rel.RelDecorrelator.Frame> mapBuilt 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
protected RelDecorrelator(RelDecorrelator.CorelMap cm, org.apache.calcite.plan.Context context, RelBuilder relBuilder)
-
-
Method Details
-
decorrelateQuery
@Deprecated public static org.apache.calcite.rel.RelNode decorrelateQuery(org.apache.calcite.rel.RelNode rootRel) Deprecated. -
decorrelateQuery
public static org.apache.calcite.rel.RelNode decorrelateQuery(org.apache.calcite.rel.RelNode rootRel, RelBuilder relBuilder) 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
-
relBuilderFactory
protected org.apache.calcite.tools.RelBuilderFactory relBuilderFactory() -
decorrelate
protected org.apache.calcite.rel.RelNode decorrelate(org.apache.calcite.rel.RelNode root) -
removeCorrelationViaRule
public org.apache.calcite.rel.RelNode removeCorrelationViaRule(org.apache.calcite.rel.RelNode root) -
decorrelateExpr
protected org.apache.calcite.rex.RexNode decorrelateExpr(org.apache.calcite.rel.RelNode currentRel, Map<org.apache.calcite.rel.RelNode, org.apache.calcite.sql2rel.RelDecorrelator.Frame> map, RelDecorrelator.CorelMap cm, org.apache.calcite.rex.RexNode exp) -
removeCorrelationExpr
protected org.apache.calcite.rex.RexNode removeCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator) -
removeCorrelationExpr
protected org.apache.calcite.rex.RexNode removeCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator, org.apache.calcite.rex.RexInputRef nullIndicator) -
removeCorrelationExpr
-
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.RelNode rel, boolean isCorVarDefined) Fallback if none of the otherdecorrelateRelmethods match. -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.Sort rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.Values rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalAggregate rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.Aggregate rel, boolean isCorVarDefined) -
getInvoke
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame getInvoke(org.apache.calcite.rel.RelNode r, boolean isCorVarDefined, @Nullable org.apache.calcite.rel.RelNode parent) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalProject rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.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(org.apache.calcite.rel.logical.LogicalTableFunctionScan rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalFilter rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.Filter rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalCorrelate rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.Correlate rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalJoin rel, boolean isCorVarDefined) -
decorrelateRel
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.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.
-