Class SubQueryDecorrelator.SubQueryRelDecorrelator

java.lang.Object
org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.SubQueryRelDecorrelator
All Implemented Interfaces:
org.apache.calcite.util.ReflectiveVisitor
Enclosing class:
SubQueryDecorrelator

public static class SubQueryDecorrelator.SubQueryRelDecorrelator extends Object implements org.apache.calcite.util.ReflectiveVisitor
Pull out all correlation conditions from a given subquery to top level, and rebuild the subquery rel tree without correlation conditions.

`public` is for reflection. We use ReflectiveVisitor instead of RelShuttle because RelShuttle returns RelNode.

  • Method Summary

    Modifier and Type
    Method
    Description
    org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Sort rel)
    Rewrite Sort.
    org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.core.Values rel)
    Rewrites a Values.
    org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalAggregate rel)
    Rewrites a LogicalAggregate.
    org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalCorrelate rel)
     
    org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalFilter rel)
    Rewrite LogicalFilter.
    org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalJoin rel)
    Rewrite LogicalJoin.
    org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.logical.LogicalProject rel)
    Rewrite LogicalProject.
    org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame
    decorrelateRel(org.apache.calcite.rel.RelNode rel)
    Fallback if none of the other decorrelateRel methods match.

    Methods inherited from class java.lang.Object

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

    • decorrelateRel

      public org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalProject rel)
      Rewrite LogicalProject.

      Rewrite logic: Pass along any correlated variables coming from the input.

      Parameters:
      rel - the project rel to rewrite
    • decorrelateRel

      public org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalFilter rel)
      Rewrite LogicalFilter.

      Rewrite logic: 1. If a Filter references a correlated field in its filter condition, rewrite the Filter references only non-correlated fields, and the condition references correlated fields will be push to it's output. 2. If Filter does not reference correlated variables, simply rewrite the filter condition using new input.

      Parameters:
      rel - the filter rel to rewrite
    • decorrelateRel

      public org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalAggregate rel)
      Rewrites a LogicalAggregate.

      Rewrite logic: 1. Permute the group by keys to the front. 2. If the input of an aggregate produces correlated variables, add them to the group list. 3. Change aggCalls to reference the new project.

      Parameters:
      rel - Aggregate to rewrite
    • decorrelateRel

      public org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalJoin rel)
      Rewrite LogicalJoin.

      Rewrite logic: 1. rewrite join condition. 2. map output positions and produce corVars if any.

      Parameters:
      rel - Join
    • decorrelateRel

      public org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.Sort rel)
      Rewrite Sort.

      Rewrite logic: change the collations field to reference the new input.

      Parameters:
      rel - Sort to be rewritten
    • decorrelateRel

      public org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.core.Values rel)
      Rewrites a Values.
      Parameters:
      rel - Values to be rewritten
    • decorrelateRel

      public org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.logical.LogicalCorrelate rel)
    • decorrelateRel

      public org.apache.flink.table.planner.plan.rules.logical.SubQueryDecorrelator.Frame decorrelateRel(org.apache.calcite.rel.RelNode rel)
      Fallback if none of the other decorrelateRel methods match.