A SortObserver is an object that is used as a callback by the sorter. It allows the sort client to do whatever they want from the context of a sort. It contains 2 callback methods:
insertDuplicateKey() and
insertNonDuplicateKey(). On each
SortController.insert(), one or the other of these methods will be called, depending on whether the given row has a key that has been seen before or not.
Some sample uses include:
- Sorts from Language: Language typically recycles data type wrappers. So the language layer uses SortObservers to clone rows that are kept by the sorter.
- Distinct sorts: The sorter will call the sort observer each time it identifies a duplicate row. Based on what the sort observer returns to the sorter, the sorter will either retain (insert) the duplicate row, or discard the duplicate row. All you have to do to implement a distinct sort is to tell the sorter to discard the row (return null from insertDuplicateKey()). Also, if you want to throw an exception on a duplicate (e.g. create a unique index), you can just throw an exception from your SortObserver.
- Aggregates: Vector (grouped) aggregates typically require a sort. Language can use a SortObserver to perform aggregations as duplicate elements are encountered. Scalar aggregates can also be computed using a SortObserver.
These are possible uses only. You, kind reader, may do whatever you wish with this forgiving interface.
@see SortController