Class SqlSplittableAggFunction.AbstractSumSplitter

    • Constructor Detail

      • AbstractSumSplitter

        public AbstractSumSplitter()
    • Method Detail

      • singleton

        public RexNode singleton​(RexBuilder rexBuilder,
                                 RelDataType inputRowType,
                                 AggregateCall aggregateCall)
        Description copied from interface: SqlSplittableAggFunction
        Generates an expression for the value of the aggregate function when applied to a single row.

        For example, if there is one row:

        • SUM(x) is x
        • MIN(x) is x
        • MAX(x) is x
        • COUNT(x) is CASE WHEN x IS NOT NULL THEN 1 ELSE 0 END 1 which can be simplified to 1 if x is never null
        • COUNT(*) is 1
        Specified by:
        singleton in interface SqlSplittableAggFunction
        Parameters:
        rexBuilder - Rex builder
        inputRowType - Input row type
        aggregateCall - Aggregate call
        Returns:
        Expression for single row
      • topSplit

        public AggregateCall topSplit​(RexBuilder rexBuilder,
                                      SqlSplittableAggFunction.Registry<RexNode> extra,
                                      int offset,
                                      RelDataType inputRowType,
                                      AggregateCall aggregateCall,
                                      int leftSubTotal,
                                      int rightSubTotal)
        Description copied from interface: SqlSplittableAggFunction
        Generates an aggregate call to merge sub-totals.

        Most implementations will add a single aggregate call to aggCalls, and return a RexInputRef that points to it.

        Specified by:
        topSplit in interface SqlSplittableAggFunction
        Parameters:
        rexBuilder - Rex builder
        extra - Place to define extra input expressions
        offset - Offset due to grouping columns (and indicator columns if applicable)
        inputRowType - Input row type
        aggregateCall - Source aggregate call
        leftSubTotal - Ordinal of the sub-total coming from the left side of the join, or -1 if there is no such sub-total
        rightSubTotal - Ordinal of the sub-total coming from the right side of the join, or -1 if there is no such sub-total
        Returns:
        Aggregate call
      • merge

        public AggregateCall merge​(AggregateCall top,
                                   AggregateCall bottom)
        Description copied from interface: SqlSplittableAggFunction
        Merge top and bottom aggregate calls into a single aggregate call, if they are legit to merge.

        SUM of SUM becomes SUM; SUM of COUNT becomes COUNT; MAX of MAX becomes MAX; MIN of MIN becomes MIN. AVG of AVG would not match, nor would COUNT of COUNT.

        Specified by:
        merge in interface SqlSplittableAggFunction
        Parameters:
        top - top aggregate call
        bottom - bottom aggregate call
        Returns:
        Merged aggregate call, null if fails to merge aggregate calls
      • getMergeAggFunctionOfTopSplit

        protected abstract SqlAggFunction getMergeAggFunctionOfTopSplit()