Class RelDecorrelator

java.lang.Object
org.apache.calcite.sql2rel.RelDecorrelator
All Implemented Interfaces:
org.apache.calcite.util.ReflectiveVisitor

public class RelDecorrelator extends Object implements 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:

  1. Was changed within FLINK-29280, FLINK-28682, FLINK-35804: Line 218 ~ 225, Line 273 ~ 288
  2. Should be removed after fix of FLINK-29540: Line 293 ~ 299
  3. Should be removed after fix of FLINK-29540: Line 311 ~ 317
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static final class 
    Planner rule that adjusts projects when counts are added.
    static interface 
    Base configuration for rules that are non-static in a RelDecorrelator.
    protected static class 
    A map of the locations of Correlate in a tree of RelNodes.
    static class 
    static final class 
    Planner rule that removes correlations for scalar aggregates.
    static final class 
    Planner rule that removes correlations for scalar projects.
    static final class 
    Rule to remove an Aggregate with SINGLE_VALUE.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
     
    protected final org.apache.calcite.plan.Context
     
    protected @Nullable org.apache.calcite.rel.RelNode
     
    protected 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

    Constructors
    Modifier
    Constructor
    Description
    protected
    RelDecorrelator(RelDecorrelator.CorelMap cm, org.apache.calcite.plan.Context context, RelBuilder relBuilder)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected org.apache.calcite.rel.RelNode
    decorrelate(org.apache.calcite.rel.RelNode root)
     
    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)
     
    static org.apache.calcite.rel.RelNode
    decorrelateQuery(org.apache.calcite.rel.RelNode rootRel)
    Deprecated.
    static org.apache.calcite.rel.RelNode
    decorrelateQuery(org.apache.calcite.rel.RelNode rootRel, RelBuilder relBuilder)
    Decorrelates a query.
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Aggregate rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Correlate rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Filter rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Join rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Project rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Sort rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Values rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalAggregate rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalCorrelate rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalFilter rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalJoin rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalProject rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(LogicalSnapshot rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalTableFunctionScan rel, boolean isCorVarDefined)
     
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.RelNode rel, boolean isCorVarDefined)
    Fallback if none of the other decorrelateRel methods match.
    @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame
    getInvoke(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 RelDecorrelator
    Returns the visitor on which the MethodDispatcher dispatches each decorrelateRel method, the default implementation returns this instance, if you got a sub-class, override this method to replace the visitor as the sub-class instance.
    protected org.apache.calcite.tools.RelBuilderFactory
     
    protected org.apache.calcite.rex.RexNode
    removeCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator)
     
    protected org.apache.calcite.rex.RexNode
    removeCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator, Set<Integer> isCount)
     
    protected org.apache.calcite.rex.RexNode
    removeCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator, org.apache.calcite.rex.RexInputRef nullIndicator)
     
    org.apache.calcite.rel.RelNode
    removeCorrelationViaRule(org.apache.calcite.rel.RelNode root)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • relBuilder

      protected final RelBuilder 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> 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

      protected final HashSet<org.apache.calcite.rel.core.Correlate> generatedCorRels
  • Constructor Details

  • 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 query
      relBuilder - Builder for relational expressions
      Returns:
      Equivalent query with all Correlate instances 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

      protected org.apache.calcite.rex.RexNode removeCorrelationExpr(org.apache.calcite.rex.RexNode exp, boolean projectPulledAboveLeftCorrelator, Set<Integer> isCount)
    • decorrelateRel

      public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.RelNode rel, boolean isCorVarDefined)
      Fallback if none of the other decorrelateRel methods 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

      protected RelDecorrelator getVisitor()
      Returns the visitor on which the MethodDispatcher dispatches each decorrelateRel method, the default implementation returns this instance, if you got a sub-class, override this method to replace the visitor as the sub-class instance.
    • getPostDecorrelateRules

      protected Collection<org.apache.calcite.plan.RelOptRule> getPostDecorrelateRules()
      Returns the rules applied on the rel after decorrelation, never null.