Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
Description
In RelBuilder, add a fluent API for building complex aggregate calls. Currently, the RelBuilder.aggregateCall has arguments aggFunction, distinct, approximate, filter, orderKeys, alias and operands, and in CALCITE-2224 we're adding orderKeys. You have to specify all of them, whether or not your function is DISTINCT or has a FILTER(WHERE) clause.
The new API would be simple:
- RelBuilder.aggregateCall(op, operands)
- RelBuilder.sum(operand)
- RelBuilder.count(operands)
- RelBuilder.min(operands)
and so forth. Each of these returns an AggCall, and we propose to add fluent methods to that:
- AggCall.distinct(boolean)
- AggCall.approximate(boolean)
- AggCall.alias(String)
- AggCall.filter(RexNode)
- AggCall.sort(RexNode...) (for
CALCITE-2224)
Thus you can write builder.sum(builder.field("SAL)).distinct(true).alias("SUM_SAL").