Class AggregationKeyColumnSource<T>

All Implemented Interfaces:
ChunkSource<Values>, ChunkSource.WithPrev<Values>, ColumnSource<T>, ElementSource<T>, FillContextMaker, GetContextMaker, DefaultChunkSource<Values>, DefaultChunkSource.WithPrev<Values>, PushdownFilterMatcher, ConvertibleTimeSource, FillUnordered<Values>, InMemoryColumnSource, Releasable, TupleExporter<T>, TupleSource<T>

public final class AggregationKeyColumnSource<T> extends DelegatingColumnSource<T,T> implements ConvertibleTimeSource, InMemoryColumnSource
The key column of an aggregation with exactly one group-by column. Reads are delegated to the aggregation's key source; a MatchFilter on this column is pushed down by probing the aggregation's hash table once per match value, at a cost independent of the result's size.

The aggregation never moves or removes a key's state, so a key's row key is fixed once assigned, and a probe answers for previous values as well as current ones. A refreshing aggregation changes its hash table only in its update cycle, which it marks before the first change. A probe on another thread reads the clock's step first, and is abandoned, so that the filter scans the column, when a cycle at that step or later began changing the hash table, filtering previous values, or a later cycle did, filtering current ones.

The key source's time conversions are delegated as well, so that a key column reinterprets as the column it was grouped from does, and the key column is in memory exactly when the key source is.