|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.eigenbase.rex.RexProgram
public class RexProgram
A collection of expressions which read inputs, compute output expressions, and optionally use a condition to filter rows.
Programs are immutable. It may help to use a RexProgramBuilder
,
which has the same relationship to RexProgram
as StringBuffer
does has to String
.
A program can contain aggregate functions. If it does, the arguments to
each aggregate function must be an RexInputRef
.
RexProgramBuilder
Nested Class Summary | |
---|---|
(package private) static class |
RexProgram.Checker
Visitor which walks over a program and checks validity. |
private class |
RexProgram.ConstantFinder
Walks over an expression and determines whether it is constant. |
private class |
RexProgram.ExpansionShuttle
A RexShuttle used in the implementation of expandLocalRef(org.eigenbase.rex.RexLocalRef) . |
private class |
RexProgram.Marshaller
Given an expression in a program, creates a clone of the expression with sub-expressions (represented by RexLocalRef s) fully expanded. |
private class |
RexProgram.ReferenceCounter
Visitor which marks which expressions are used. |
Field Summary | |
---|---|
private boolean |
aggs
Whether this program contains aggregates. |
private RexLocalRef |
condition
The optional condition. |
private List<RexNode> |
exprReadOnlyList
|
private RexNode[] |
exprs
First stage of expression evaluation. |
private RelDataType |
inputRowType
|
private RelDataType |
outputRowType
|
private List<RexLocalRef> |
projectReadOnlyList
|
private RexLocalRef[] |
projects
With condition , the second stage of expression evaluation. |
private int[] |
refCounts
Reference counts for each expression, computed on demand. |
Constructor Summary | |
---|---|
RexProgram(RelDataType inputRowType,
List<RexNode> exprList,
List<RexLocalRef> projectRefList,
RexLocalRef condition,
RelDataType outputRowType)
Creates a program from lists of expressions. |
|
RexProgram(RelDataType inputRowType,
RexNode[] exprs,
RexLocalRef[] projects,
RexLocalRef condition,
RelDataType outputRowType)
Creates a program. |
Method Summary | |
---|---|
static void |
apply(RexVisitor<Void> visitor,
RexNode[] exprs,
RexNode expr)
Applies a visitor to an array of expressions and, if specified, a single expression. |
void |
collectExplainTerms(String prefix,
List<String> termList,
List<Object> valueList)
|
void |
collectExplainTerms(String prefix,
List<String> termList,
List<Object> valueList,
SqlExplainLevel level)
Collects the expressions in this program into a list of terms and values. |
boolean |
containsAggs()
Returns whether this program contains windowed aggregate functions |
RexProgram |
copy()
Creates a copy of this program. |
private static int |
countTrivial(RexLocalRef[] refs)
Returns the number of expressions at the front of an array which are simply projections of the same field. |
static RexProgram |
create(RelDataType inputRowType,
RexNode[] projectExprs,
RexNode conditionExpr,
RelDataType outputRowType,
RexBuilder rexBuilder)
Creates a program which calculates projections and filters rows based upon a condition. |
static RexProgram |
createIdentity(RelDataType rowType)
Creates the identity program. |
static void |
deduceCollations(List<RelCollation> outputCollations,
int sourceCount,
List<RexLocalRef> refs,
List<RelCollation> inputCollations)
Given a list of expressions and a description of which are ordered, computes a list of collations. |
RexNode |
expandLocalRef(RexLocalRef ref)
Fully expands a RexLocalRef back into a pure RexNode tree containing no RexLocalRefs (reversing the effect of common subexpression elimination). |
void |
explainCalc(RelNode rel,
RelOptPlanWriter pw)
Writes an explanation of the expressions in this program to a plan writer. |
RexNode[] |
flatten()
Deprecated. Not used |
RexNode |
gatherExpr(RexNode expr)
|
List<RelCollation> |
getCollations(List<RelCollation> inputCollations)
Given a list of collations which hold for the input to this program, returns a list of collations which hold for its output. |
RexLocalRef |
getCondition()
Returns the field reference of this program's filter condition, or null if there is no condition. |
HashSet<String> |
getCorrelVariableNames()
Returns the set of correlation variables used (read) by this program. |
int |
getExprCount()
Returns the number of expressions in this program. |
List<RexNode> |
getExprList()
Returns the common sub-expressions of this program. |
RelDataType |
getInputRowType()
Returns the type of the input row to the program. |
RelDataType |
getOutputRowType()
Returns the type of the output row from this program. |
Permutation |
getPermutation()
Returns a permutation, if this program is a permutation, otherwise null. |
List<RexLocalRef> |
getProjectList()
Returns an array of references to the expressions which this program is to project. |
int[] |
getReferenceCounts()
Gets reference counts for each expression in the program, where the references are detected from later expressions in the same program, as well as the project list and condition. |
int |
getSourceField(int outputOrdinal)
Returns the input field that an output field is populated from, or -1 if it is populated from an expression. |
boolean |
isConstant(RexNode ref)
Returns whether an expression is constant. |
boolean |
isNull(RexNode expr)
Returns whether an expression always evaluates to null. |
boolean |
isPermutation()
Returns whether this program is a permutation of its inputs. |
boolean |
isTrivial()
Returns whether this program returns its input exactly. |
boolean |
isValid(boolean fail)
Checks that this program is valid. |
boolean |
projectsIdentity(boolean fail)
Returns whether the fields on the leading edge of the project list are the input fields. |
void |
setAggs(boolean aggs)
|
String |
toString()
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
private final RexNode[] exprs
private final RexLocalRef[] projects
condition
, the second stage of expression evaluation.
private final RexLocalRef condition
private final RelDataType inputRowType
private boolean aggs
private final RelDataType outputRowType
private final List<RexLocalRef> projectReadOnlyList
private final List<RexNode> exprReadOnlyList
private int[] refCounts
Constructor Detail |
---|
public RexProgram(RelDataType inputRowType, RexNode[] exprs, RexLocalRef[] projects, RexLocalRef condition, RelDataType outputRowType)
inputRowType
- Input row typeexprs
- Common expressionsprojects
- Projection expressionscondition
- Condition expression. If null, calculator does not
filter rowsoutputRowType
- Description of the row produced by the programpublic RexProgram(RelDataType inputRowType, List<RexNode> exprList, List<RexLocalRef> projectRefList, RexLocalRef condition, RelDataType outputRowType)
inputRowType
- Input row typeexprList
- List of common expressionsprojectRefList
- List of projection expressionscondition
- Condition expression. If null, calculator does not
filter rowsoutputRowType
- Description of the row produced by the programMethod Detail |
---|
public List<RexNode> getExprList()
The list is never null but may be empty; each the expression in the list is not null; and no further reduction into smaller common subexpressions is possible.
public List<RexLocalRef> getProjectList()
public RexLocalRef getCondition()
public static RexProgram create(RelDataType inputRowType, RexNode[] projectExprs, RexNode conditionExpr, RelDataType outputRowType, RexBuilder rexBuilder)
projectExprs
- Project expressionsconditionExpr
- Condition on which to filter rows, or null if rows
are not to be filteredoutputRowType
- Output row typerexBuilder
- Builder of rex expressions
public RexNode[] flatten()
public String toString()
toString
in class Object
public void explainCalc(RelNode rel, RelOptPlanWriter pw)
rel
- Relational expression which owns this programpw
- Plan writerpublic void collectExplainTerms(String prefix, List<String> termList, List<Object> valueList)
public void collectExplainTerms(String prefix, List<String> termList, List<Object> valueList, SqlExplainLevel level)
prefix
- Prefix for term names, usually the empty string, but useful
if a relational expression contains more than one programtermList
- Output list of termsvalueList
- Output list of expressionsprivate static int countTrivial(RexLocalRef[] refs)
public int getExprCount()
public RexProgram copy()
public static RexProgram createIdentity(RelDataType rowType)
public RelDataType getInputRowType()
public boolean containsAggs()
public void setAggs(boolean aggs)
public RelDataType getOutputRowType()
public boolean isValid(boolean fail)
If fail
is true, executes assert false
, so
will throw an AssertionError
if assertions are enabled. If
fail
is false, merely returns whether the program is valid.
fail
- Whether to fail
AssertionError
- if program is invalid and fail
is
true and assertions are enabledpublic boolean isNull(RexNode expr)
RexUtil.isNull(RexNode)
, null literals are null, and
casts of null literals are null. But this method also regards references
to null expressions as null.
expr
- Expression
public RexNode expandLocalRef(RexLocalRef ref)
program.expandLocalRef(program.getCondition())
will return the expansion of a program's condition.
ref
- a RexLocalRef from this program
public List<RelCollation> getCollations(List<RelCollation> inputCollations)
public static void deduceCollations(List<RelCollation> outputCollations, int sourceCount, List<RexLocalRef> refs, List<RelCollation> inputCollations)
public boolean projectsIdentity(boolean fail)
fail
- Whether to throw an assert failure if does not project
identitypublic boolean isTrivial()
This is a stronger condition than projectsIdentity(boolean)
.
public int[] getReferenceCounts()
public static void apply(RexVisitor<Void> visitor, RexNode[] exprs, RexNode expr)
visitor
- Visitorexprs
- Array of expressionsexpr
- Single expression, may be nullpublic boolean isConstant(RexNode ref)
public RexNode gatherExpr(RexNode expr)
public int getSourceField(int outputOrdinal)
public boolean isPermutation()
public Permutation getPermutation()
public HashSet<String> getCorrelVariableNames()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |