use of org.apache.druid.java.util.common.parsers.CloseableIterator in project druid by druid-io.
the class HashVectorGrouper method iterator.
@Override
public CloseableIterator<Grouper.Entry<Memory>> iterator() {
if (!initialized) {
// a nested groupBy's subquery has an empty result set (see testEmptySubquery() in GroupByQueryRunnerTest)
return CloseableIterators.withEmptyBaggage(Collections.emptyIterator());
}
final IntIterator baseIterator = hashTable.bucketIterator();
return new CloseableIterator<Grouper.Entry<Memory>>() {
@Override
public boolean hasNext() {
return baseIterator.hasNext();
}
@Override
public Grouper.Entry<Memory> next() {
final int bucket = baseIterator.nextInt();
final int bucketPosition = hashTable.bucketMemoryPosition(bucket);
final Memory keyMemory = hashTable.memory().region(bucketPosition + hashTable.bucketKeyOffset(), hashTable.keySize());
final Object[] values = new Object[aggregators.size()];
final int aggregatorsOffset = bucketPosition + hashTable.bucketValueOffset();
for (int i = 0; i < aggregators.size(); i++) {
values[i] = aggregators.get(hashTable.memory().getByteBuffer(), aggregatorsOffset, i);
}
return new Grouper.Entry<>(keyMemory, values);
}
@Override
public void close() {
// Do nothing.
}
};
}
Aggregations