Defining actions in custom aggregate functions
Certain actions in a custom aggregate function have special meanings, and you must define them as follows:
init() — The
init() action is optional. If a custom aggregate function defines an
init() action, it must take no arguments and must not return a value. The correlator executes the
init() action once for each new aggregate function instance it creates in a stream query.
add() — A custom aggregate function must define an
add() action. The
add() action must take the same ordered set of arguments that are specified in the custom aggregate function signature. That is, the names, types, and order of the arguments must all be the same. The correlator executes the
add() action once for each item added to the set of items that the aggregate function is operating on.
remove() — A bounded aggregate function must define a
remove() action. An unbounded aggregate function must not define a
remove() action. If you do not specify either
bounded or
unbounded, the
remove() action is optional. The
remove() action must take the same ordered set of arguments as the
add() action and must not return a value. The correlator executes the
remove() action once for each item that leaves the set of items that the aggregate function is operating on. The value that
remove() is called with is the same value that
add() was called with.
value() — All custom aggregate functions must define a
value() action. The
value() action must take no arguments and its return type must match the return type in the aggregate function signature. The correlator executes the
value() action once per lot per aggregate function instance and returns the current aggregate value to the query.
Custom aggregate functions can declare other actions, including actions that are executed by the above named actions. A custom aggregate function cannot contain a field whose name is onBeginRecovery, onConcludeRecovery, init, add, value, or remove, even if, for example, the custom aggregate function does not define a remove() action.