Package org.apache.calcite.sql
Class SqlSplittableAggFunction.AbstractSumSplitter
java.lang.Object
org.apache.calcite.sql.SqlSplittableAggFunction.AbstractSumSplitter
- All Implemented Interfaces:
SqlSingletonAggFunction
,SqlSplittableAggFunction
- Direct Known Subclasses:
SqlSplittableAggFunction.Sum0Splitter
,SqlSplittableAggFunction.SumSplitter
- Enclosing interface:
SqlSplittableAggFunction
public abstract static class SqlSplittableAggFunction.AbstractSumSplitter
extends Object
implements SqlSplittableAggFunction
Common splitting strategy for
SUM
and SUM0
functions.-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.calcite.sql.SqlSplittableAggFunction
SqlSplittableAggFunction.AbstractSumSplitter, SqlSplittableAggFunction.CountSplitter, SqlSplittableAggFunction.Registry<E>, SqlSplittableAggFunction.SelfSplitter, SqlSplittableAggFunction.Sum0Splitter, SqlSplittableAggFunction.SumSplitter
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected abstract SqlAggFunction
@Nullable AggregateCall
merge
(AggregateCall top, AggregateCall bottom) Merge top and bottom aggregate calls into a single aggregate call, if they are legit to merge.@Nullable AggregateCall
other
(RelDataTypeFactory typeFactory, AggregateCall e) Called to generate an aggregate for the other side of the join than the side aggregate call's arguments come from.singleton
(RexBuilder rexBuilder, RelDataType inputRowType, AggregateCall aggregateCall) Generates an expression for the value of the aggregate function when applied to a single row.split
(AggregateCall aggregateCall, Mappings.TargetMapping mapping) topSplit
(RexBuilder rexBuilder, SqlSplittableAggFunction.Registry<RexNode> extra, int offset, RelDataType inputRowType, AggregateCall aggregateCall, int leftSubTotal, int rightSubTotal) Generates an aggregate call to merge sub-totals.
-
Constructor Details
-
AbstractSumSplitter
public AbstractSumSplitter()
-
-
Method Details
-
singleton
public RexNode singleton(RexBuilder rexBuilder, RelDataType inputRowType, AggregateCall aggregateCall) Description copied from interface:SqlSingletonAggFunction
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)
isx
MIN(x)
isx
MAX(x)
isx
COUNT(x)
isCASE WHEN x IS NOT NULL THEN 1 ELSE 0 END 1
which can be simplified to1
ifx
is never nullCOUNT(*)
is 1GROUPING(deptno)
if 0 ifdeptno
is being grouped, 1 otherwise
- Specified by:
singleton
in interfaceSqlSingletonAggFunction
- Parameters:
rexBuilder
- Rex builderinputRowType
- Input row typeaggregateCall
- Aggregate call- Returns:
- Expression for single row
-
split
- Specified by:
split
in interfaceSqlSplittableAggFunction
-
other
Description copied from interface:SqlSplittableAggFunction
Called to generate an aggregate for the other side of the join than the side aggregate call's arguments come from. Returns null if no aggregate is required.- Specified by:
other
in interfaceSqlSplittableAggFunction
-
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 aRexInputRef
that points to it.- Specified by:
topSplit
in interfaceSqlSplittableAggFunction
- Parameters:
rexBuilder
- Rex builderextra
- Place to define extra input expressionsoffset
- Offset due to grouping columns (and indicator columns if applicable)inputRowType
- Input row typeaggregateCall
- Source aggregate callleftSubTotal
- Ordinal of the sub-total coming from the left side of the join, or -1 if there is no such sub-totalrightSubTotal
- 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
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 interfaceSqlSplittableAggFunction
- Parameters:
top
- top aggregate callbottom
- bottom aggregate call- Returns:
- Merged aggregate call, null if fails to merge aggregate calls
-
getMergeAggFunctionOfTopSplit
-