public abstract class SubQueryRemoveRule extends RelOptRule
Sub-queries are represented by RexSubQuery
expressions.
A sub-query may or may not be correlated. If a sub-query is correlated,
the wrapped RelNode
will contain a RexCorrelVariable
before
the rewrite, and the product of the rewrite will be a Correlate
.
The Correlate can be removed using RelDecorrelator
.
Modifier and Type | Class and Description |
---|---|
private static class |
SubQueryRemoveRule.ReplaceSubQueryShuttle
Shuttle that replaces occurrences of a given
RexSubQuery with a replacement
expression. |
static class |
SubQueryRemoveRule.SubQueryFilterRemoveRule
Rule that converts a sub-queries from filter expressions into
Correlate instances. |
static class |
SubQueryRemoveRule.SubQueryJoinRemoveRule
Rule that converts sub-queries from join expressions into
Correlate instances. |
static class |
SubQueryRemoveRule.SubQueryProjectRemoveRule
Rule that converts sub-queries from project expressions into
Correlate instances. |
Modifier and Type | Field and Description |
---|---|
static SubQueryRemoveRule |
FILTER |
static SubQueryRemoveRule |
JOIN |
static SubQueryRemoveRule |
PROJECT |
description, operands, relBuilderFactory
Constructor and Description |
---|
SubQueryRemoveRule(RelOptRuleOperand operand,
RelBuilderFactory relBuilderFactory,
java.lang.String description)
Creates a SubQueryRemoveRule.
|
Modifier and Type | Method and Description |
---|---|
protected RexNode |
apply(RexSubQuery e,
java.util.Set<CorrelationId> variablesSet,
RelOptUtil.Logic logic,
RelBuilder builder,
int inputCount,
int offset) |
private RexInputRef |
field(RelBuilder builder,
int inputCount,
int offset)
Returns a reference to a particular field, by offset, across several
inputs on a
RelBuilder 's stack. |
private static java.util.List<RexNode> |
fields(RelBuilder builder,
int fieldCount)
Returns a list of expressions that project the first
fieldCount
fields of the top input on a RelBuilder 's stack. |
private RexNode |
rewriteExists(RexSubQuery e,
java.util.Set<CorrelationId> variablesSet,
RelOptUtil.Logic logic,
RelBuilder builder)
Rewrites an EXISTS RexSubQuery into a
Join . |
private RexNode |
rewriteIn(RexSubQuery e,
java.util.Set<CorrelationId> variablesSet,
RelOptUtil.Logic logic,
RelBuilder builder,
int offset)
Rewrites an IN RexSubQuery into a
Join . |
private RexNode |
rewriteScalarQuery(RexSubQuery e,
java.util.Set<CorrelationId> variablesSet,
RelBuilder builder,
int inputCount,
int offset)
Rewrites a scalar sub-query into an
Aggregate . |
private RexNode |
rewriteSome(RexSubQuery e,
RelBuilder builder)
Rewrites a SOME sub-query into a
Join . |
any, convert, convert, convertList, convertOperand, convertOperand, equals, equals, getOperand, getOperands, getOutConvention, getOutTrait, hashCode, matches, none, onMatch, operand, operand, operand, operand, operand, operandJ, operandJ, some, toString, unordered
public static final SubQueryRemoveRule PROJECT
public static final SubQueryRemoveRule FILTER
public static final SubQueryRemoveRule JOIN
public SubQueryRemoveRule(RelOptRuleOperand operand, RelBuilderFactory relBuilderFactory, java.lang.String description)
operand
- root operand, must not be nulldescription
- Description, or null to guess descriptionrelBuilderFactory
- Builder for relational expressionsprotected RexNode apply(RexSubQuery e, java.util.Set<CorrelationId> variablesSet, RelOptUtil.Logic logic, RelBuilder builder, int inputCount, int offset)
private RexNode rewriteScalarQuery(RexSubQuery e, java.util.Set<CorrelationId> variablesSet, RelBuilder builder, int inputCount, int offset)
Aggregate
.e
- IN sub-query to rewritevariablesSet
- A set of variables used by a relational
expression of the specified RexSubQuerybuilder
- Builderoffset
- Offset to shift RexInputRef
private RexNode rewriteSome(RexSubQuery e, RelBuilder builder)
Join
.e
- SOME sub-query to rewritebuilder
- Builderprivate RexNode rewriteExists(RexSubQuery e, java.util.Set<CorrelationId> variablesSet, RelOptUtil.Logic logic, RelBuilder builder)
Join
.e
- EXISTS sub-query to rewritevariablesSet
- A set of variables used by a relational
expression of the specified RexSubQuerylogic
- Logic for evaluatingbuilder
- Builderprivate RexNode rewriteIn(RexSubQuery e, java.util.Set<CorrelationId> variablesSet, RelOptUtil.Logic logic, RelBuilder builder, int offset)
Join
.e
- IN sub-query to rewritevariablesSet
- A set of variables used by a relational
expression of the specified RexSubQuerylogic
- Logic for evaluatingbuilder
- Builderoffset
- Offset to shift RexInputRef
private RexInputRef field(RelBuilder builder, int inputCount, int offset)
RelBuilder
's stack.private static java.util.List<RexNode> fields(RelBuilder builder, int fieldCount)
fieldCount
fields of the top input on a RelBuilder
's stack.Copyright © 2012–2019 The Apache Software Foundation. All rights reserved.