Interface RelBuilder.Config

Enclosing class:
RelBuilder

@Immutable public static interface RelBuilder.Config
Configuration of RelBuilder.

It is immutable, and all fields are public.

Start with the DEFAULT instance, and call withXxx methods to set its properties.

  • Field Details

  • Method Details

    • bloat

      @Default default int bloat()
      Controls whether to merge two Project operators when inlining expressions causes complexity to increase.

      Usually merging projects is beneficial, but occasionally the result is more complex than the original projects. Consider:

       P: Project(a+b+c AS x, d+e+f AS y, g+h+i AS z)  # complexity 15
       Q: Project(x*y*z AS p, x-y-z AS q)              # complexity 10
       R: Project((a+b+c)*(d+e+f)*(g+h+i) AS s,
                  (a+b+c)-(d+e+f)-(g+h+i) AS t)        # complexity 34
       

      The complexity of an expression is the number of nodes (leaves and operators). For example, a+b+c has complexity 5 (3 field references and 2 calls):

             +
            /  \
           +    c
          / \
         a   b
       

      A negative value never allows merges.

      A zero or positive value, bloat, allows a merge if complexity of the result is less than or equal to the sum of the complexity of the originals plus bloat.

      The default value, 100, allows a moderate increase in complexity but prevents cases where complexity would run away into the millions and run out of memory. Moderate complexity is OK; the implementation, say via EnumerableCalc, will often gather common sub-expressions and compute them only once.

    • withBloat

      RelBuilder.Config withBloat(int bloat)
      Sets bloat().
    • dedupAggregateCalls

      @Default default boolean dedupAggregateCalls()
    • withDedupAggregateCalls

      RelBuilder.Config withDedupAggregateCalls(boolean dedupAggregateCalls)
    • pruneInputOfAggregate

      @Default default boolean pruneInputOfAggregate()
    • withPruneInputOfAggregate

      RelBuilder.Config withPruneInputOfAggregate(boolean pruneInputOfAggregate)
    • preventEmptyFieldList

      @Default default boolean preventEmptyFieldList()
      Whether to ensure that relational operators always have at least one column.
    • withPreventEmptyFieldList

      RelBuilder.Config withPreventEmptyFieldList(boolean preventEmptyFieldList)
    • pushJoinCondition

      @Default default boolean pushJoinCondition()
      Whether to push down join conditions; default false (but SqlToRelConverter.config() by default sets this to true).
    • withPushJoinCondition

      RelBuilder.Config withPushJoinCondition(boolean pushJoinCondition)
    • simplify

      @Default default boolean simplify()
      Whether to simplify expressions; default true.
    • withSimplify

      RelBuilder.Config withSimplify(boolean simplify)
    • simplifyLimit

      @Default default boolean simplifyLimit()
      Whether to simplify LIMIT 0 to an empty relation; default true.
    • withSimplifyLimit

      RelBuilder.Config withSimplifyLimit(boolean simplifyLimit)
    • simplifyValues

      @Default default boolean simplifyValues()
      Whether to simplify Union(Values, Values) or Union(Project(Values)) to Values; default true.
    • withSimplifyValues

      RelBuilder.Config withSimplifyValues(boolean simplifyValues)
    • aggregateUnique

      @Default default boolean aggregateUnique()
      Whether to create an Aggregate even if we know that the input is already unique; default false.
    • withAggregateUnique

      RelBuilder.Config withAggregateUnique(boolean aggregateUnique)
    • convertCorrelateToJoin

      @Default default boolean convertCorrelateToJoin()
      Whether to convert Correlate to Join if correlation variable is unused.
    • withConvertCorrelateToJoin

      RelBuilder.Config withConvertCorrelateToJoin(boolean convertCorrelateToJoin)