Class BlockBuilder

java.lang.Object
org.apache.calcite.linq4j.tree.BlockBuilder

public class BlockBuilder extends Object
Builder for BlockStatement.

Has methods that help ensure that variable names are unique.

  • 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

      public BlockBuilder(boolean optimizing, @Nullable BlockBuilder parent)
      Creates a BlockBuilder.
      Parameters:
      optimizing - Whether to eliminate common sub-expressions
  • Method Details

    • clear

      public void clear()
      Clears this BlockBuilder.
    • append

      public Expression 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

      public Expression 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.
      Parameters:
      name - Suggested variable name
      block - Expression
      optimize - 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

      public Expression 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.
    • appendIfNotNull

      public @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.
    • append

      public Expression 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.
    • isSimpleExpression

      protected boolean isSimpleExpression(@Nullable Expression expr)
      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

      protected boolean isSafeForReuse(DeclarationStatement decl)
    • addExpressionForReuse

      protected void addExpressionForReuse(DeclarationStatement decl)
    • getComputedExpression

      public @Nullable DeclarationStatement getComputedExpression(Expression expr)
      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

      public void add(Statement statement)
    • add

      public void add(Expression expression)
    • toBlock

      public BlockStatement toBlock()
      Returns a block consisting of the current list of statements.
    • createOptimizeShuttle

      protected Shuttle 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

      protected Shuttle createFinishingOptimizeShuttle()
      Creates a final optimization shuttle. Typically, the visitor will factor out constant expressions.
      Returns:
      shuttle that is used to finalize the optimization
    • newName

      public String newName(String suggestion)
      Creates a name for a new variable, unique within this block.
    • hasVariable

      public boolean hasVariable(String name)
    • append

      public BlockBuilder append(Expression expression)
    • withRemoveUnused

      public BlockBuilder withRemoveUnused(boolean removeUnused)