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
ConstructorsConstructorDescriptionCreates a non-optimizing BlockBuilder.BlockBuilder(boolean optimizing) Creates a BlockBuilder.BlockBuilder(boolean optimizing, @Nullable BlockBuilder parent) Creates a BlockBuilder. -
Method Summary
Modifier and TypeMethodDescriptionvoidadd(Expression expression) voidprotected voidappend(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 ExpressionappendIfNotNull(String name, @PolyNull Expression expression) Appends an expression to a list of statements if it is not null, and returns the expression.voidclear()Clears this BlockBuilder.protected ShuttleCreates a final optimization shuttle.protected ShuttleCreates a shuttle that will be used during block optimization.@Nullable DeclarationStatementReturns the reference to ParameterExpression if given expression was already computed and stored to local variable.booleanhasVariable(String name) protected booleanprotected booleanisSimpleExpression(@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
-