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.

    • Method Detail

      • 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.

      • pushJoinCondition

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

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

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

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

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