Package org.apache.calcite.linq4j.tree
Class BlockBuilder
java.lang.Object
org.apache.calcite.linq4j.tree.BlockBuilder
Builder for
BlockStatement
.
Has methods that help ensure that variable names are unique.
-
Constructor Summary
ConstructorDescriptionCreates a non-optimizing BlockBuilder.BlockBuilder
(boolean optimizing) Creates a BlockBuilder.BlockBuilder
(boolean optimizing, @Nullable BlockBuilder parent) Creates a BlockBuilder. -
Method Summary
Modifier and TypeMethodDescriptionvoid
add
(Expression expression) void
protected void
append
(String name, BlockStatement block) Appends a block to a list of statements and returns an expression (possibly a variable) that represents the result of the newly added block.append
(String name, BlockStatement block, boolean optimize) Appends an expression to a list of statements, optionally optimizing it to a variable if it is used more than once.append
(String name, Expression expression) Appends an expression to a list of statements, and returns an expression (possibly a variable) that represents the result of the newly added block.append
(String name, Expression expression, boolean optimize) Appends an expression to a list of statements, optionally optimizing if the expression is used more than once.append
(Expression expression) @PolyNull Expression
appendIfNotNull
(String name, @PolyNull Expression expression) Appends an expression to a list of statements if it is not null, and returns the expression.void
clear()
Clears this BlockBuilder.protected Shuttle
Creates a final optimization shuttle.protected Shuttle
Creates a shuttle that will be used during block optimization.@Nullable DeclarationStatement
Returns the reference to ParameterExpression if given expression was already computed and stored to local variable.boolean
hasVariable
(String name) protected boolean
protected boolean
isSimpleExpression
(@Nullable Expression expr) Checks if expression is simple enough to always inline at zero cost.Creates a name for a new variable, unique within this block.toBlock()
Returns a block consisting of the current list of statements.withRemoveUnused
(boolean removeUnused)
-
Constructor Details
-
BlockBuilder
public BlockBuilder()Creates a non-optimizing BlockBuilder. -
BlockBuilder
public BlockBuilder(boolean optimizing) Creates a BlockBuilder.- Parameters:
optimizing
- Whether to eliminate common sub-expressions
-
BlockBuilder
Creates a BlockBuilder.- Parameters:
optimizing
- Whether to eliminate common sub-expressions
-
-
Method Details
-
clear
public void clear()Clears this BlockBuilder. -
append
Appends a block to a list of statements and returns an expression (possibly a variable) that represents the result of the newly added block. -
append
Appends an expression to a list of statements, optionally optimizing it to a variable if it is used more than once.- Parameters:
name
- Suggested variable nameblock
- Expressionoptimize
- Whether to try to optimize by assigning the expression to a variable. Do not do this if the expression has side effects or a time-dependent value.
-
append
Appends an expression to a list of statements, and returns an expression (possibly a variable) that represents the result of the newly added block. -
appendIfNotNull
Appends an expression to a list of statements if it is not null, and returns the expression. -
append
Appends an expression to a list of statements, optionally optimizing if the expression is used more than once. -
isSimpleExpression
Checks if expression is simple enough to always inline at zero cost.- Parameters:
expr
- expression to test- Returns:
- true when given expression is safe to always inline
-
isSafeForReuse
-
addExpressionForReuse
-
getComputedExpression
Returns the reference to ParameterExpression if given expression was already computed and stored to local variable.- Parameters:
expr
- expression to test- Returns:
- existing ParameterExpression or null
-
add
-
add
-
toBlock
Returns a block consisting of the current list of statements. -
createOptimizeShuttle
Creates a shuttle that will be used during block optimization. Sub-classes might provide more specific optimizations (e.g. partial evaluation).- Returns:
- shuttle used to optimize the statements when converting to block
-
createFinishingOptimizeShuttle
Creates a final optimization shuttle. Typically, the visitor will factor out constant expressions.- Returns:
- shuttle that is used to finalize the optimization
-
newName
Creates a name for a new variable, unique within this block. -
hasVariable
-
append
-
withRemoveUnused
-