Aggregate is the callback interface for user-defined aggregate function.
A is the type of the aggregation context and
T is the type of the final
result. Implementations should be stateless.
fn init(&self) -> A
Initializes the aggregation context. Will be called prior to the first
step() to set up the context for an invocation of the
init() will not be called if there are no rows.)
"step" function called once for each row in an aggregate group. May be called 0 times if there are no rows.
Computes and returns the final result. Will be called exactly once for
each invocation of the function. If
step() was called at least
once, will be given
Some(A) (the same
A as was created by
init and given to
step() was not called (because
the function is running against 0 rows), will be given