public class RelDecorrelator extends Object implements ReflectiveVisitor
TODO:
CorelMap constructor parameter with a RelNode
currentRel immutable (would require a fresh
RelDecorrelator for each node being decorrelated)CorelMap immutableNote: make all the members protected scope so that they can be accessed by the sub-class.
| Modifier and Type | Class and Description |
|---|---|
static class |
RelDecorrelator.AdjustProjectForCountAggregateRule
Planner rule that adjusts projects when counts are added.
|
static interface |
RelDecorrelator.Config
Base configuration for rules that are non-static in a RelDecorrelator.
|
protected static class |
RelDecorrelator.CorelMap
|
static class |
RelDecorrelator.CorelMapBuilder
Builds a
RelDecorrelator.CorelMap. |
static class |
RelDecorrelator.RemoveCorrelationForScalarAggregateRule
Planner rule that removes correlations for scalar aggregates.
|
static class |
RelDecorrelator.RemoveCorrelationForScalarProjectRule
Planner rule that removes correlations for scalar projects.
|
static class |
RelDecorrelator.RemoveSingleAggregateRule
Rule to remove an Aggregate with SINGLE_VALUE.
|
| Modifier and Type | Field and Description |
|---|---|
protected RelDecorrelator.CorelMap |
cm |
protected Context |
context |
protected @Nullable RelNode |
currentRel |
protected ReflectUtil.MethodDispatcher<org.apache.calcite.sql2rel.RelDecorrelator.Frame> |
dispatcher |
protected HashSet<Correlate> |
generatedCorRels |
protected Map<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.
|
protected RelBuilder |
relBuilder |
| Modifier | Constructor and Description |
|---|---|
protected |
RelDecorrelator(RelDecorrelator.CorelMap cm,
Context context,
RelBuilder relBuilder) |
| Modifier and Type | Method and Description |
|---|---|
protected RelNode |
decorrelate(RelNode root) |
protected RexNode |
decorrelateExpr(RelNode currentRel,
Map<RelNode,org.apache.calcite.sql2rel.RelDecorrelator.Frame> map,
RelDecorrelator.CorelMap cm,
RexNode exp) |
static RelNode |
decorrelateQuery(RelNode rootRel)
Deprecated.
|
static RelNode |
decorrelateQuery(RelNode rootRel,
RelBuilder relBuilder)
Decorrelates a query.
|
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(Aggregate rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(Correlate rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(Filter rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(Join rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(LogicalAggregate rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(LogicalCorrelate rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(LogicalFilter rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(LogicalJoin rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(LogicalProject rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(LogicalSnapshot rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(LogicalTableFunctionScan rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(Project rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(RelNode rel,
boolean isCorVarDefined)
Fallback if none of the other
decorrelateRel methods match. |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(Sort rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
decorrelateRel(Values rel,
boolean isCorVarDefined) |
@Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame |
getInvoke(RelNode r,
boolean isCorVarDefined,
@Nullable RelNode parent) |
protected Collection<RelOptRule> |
getPostDecorrelateRules()
Returns the rules applied on the rel after decorrelation, never null.
|
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. |
protected RelBuilderFactory |
relBuilderFactory() |
protected RexNode |
removeCorrelationExpr(RexNode exp,
boolean projectPulledAboveLeftCorrelator) |
protected RexNode |
removeCorrelationExpr(RexNode exp,
boolean projectPulledAboveLeftCorrelator,
RexInputRef nullIndicator) |
protected RexNode |
removeCorrelationExpr(RexNode exp,
boolean projectPulledAboveLeftCorrelator,
Set<Integer> isCount) |
RelNode |
removeCorrelationViaRule(RelNode root) |
protected final RelBuilder relBuilder
protected RelDecorrelator.CorelMap cm
protected final ReflectUtil.MethodDispatcher<org.apache.calcite.sql2rel.RelDecorrelator.Frame> dispatcher
protected @Nullable RelNode currentRel
protected final Context context
protected final Map<RelNode,org.apache.calcite.sql2rel.RelDecorrelator.Frame> map
protected RelDecorrelator(RelDecorrelator.CorelMap cm, Context context, RelBuilder relBuilder)
@Deprecated public static RelNode decorrelateQuery(RelNode rootRel)
public static RelNode decorrelateQuery(RelNode rootRel, RelBuilder relBuilder)
This is the main entry point to RelDecorrelator.
rootRel - Root node of the queryrelBuilder - Builder for relational expressionsCorrelate instances removedprotected RelBuilderFactory relBuilderFactory()
protected RexNode decorrelateExpr(RelNode currentRel, Map<RelNode,org.apache.calcite.sql2rel.RelDecorrelator.Frame> map, RelDecorrelator.CorelMap cm, RexNode exp)
protected RexNode removeCorrelationExpr(RexNode exp, boolean projectPulledAboveLeftCorrelator)
protected RexNode removeCorrelationExpr(RexNode exp, boolean projectPulledAboveLeftCorrelator, RexInputRef nullIndicator)
protected RexNode removeCorrelationExpr(RexNode exp, boolean projectPulledAboveLeftCorrelator, Set<Integer> isCount)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(RelNode rel, boolean isCorVarDefined)
decorrelateRel methods match.public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Sort rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Values rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalAggregate rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Aggregate rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame getInvoke(RelNode r, boolean isCorVarDefined, @Nullable RelNode parent)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalProject rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Project rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalSnapshot rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalTableFunctionScan rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalFilter rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Filter rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalCorrelate rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Correlate rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(LogicalJoin rel, boolean isCorVarDefined)
public @Nullable org.apache.calcite.sql2rel.RelDecorrelator.Frame decorrelateRel(Join rel, boolean isCorVarDefined)
protected RelDecorrelator getVisitor()
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 Collection<RelOptRule> getPostDecorrelateRules()
Copyright © 2012-2022 Apache Software Foundation. All Rights Reserved.