@Override public void init(ByteBuffer buf, int position) { delegate.init(buf, position); }
@Override public void init(ByteBuffer buf, int position) { delegate.init(buf, position); }
@Override public void init(ByteBuffer buf, int position) { buf.put(position, NullHandling.IS_NULL_BYTE); delegate.init(buf, position + Byte.BYTES); }
private void initializeSlot(int dimIndex) { final int index = dimIndex / Byte.SIZE; final int extraIndex = dimIndex % Byte.SIZE; usedFlagBuffer.put(index, (byte) (usedFlagBuffer.get(index) | (1 << extraIndex))); final int recordOffset = dimIndex * recordSize; for (int i = 0; i < aggregators.length; i++) { aggregators[i].init(valBuffer, recordOffset + aggregatorOffsets[i]); } }
/** * Initialize a new slot for a new grouping key. This may be potentially blocked if the array is full until at least * one slot becomes available. */ private void initNewSlot(ByteBuffer newKey) { // Wait if the array is full and increase curWriteIndex increaseWriteIndex(); final int recordOffset = recordSize * curWriteIndex; buffer.position(recordOffset); buffer.put(newKey); for (int i = 0; i < aggregators.length; i++) { aggregators[i].init(buffer, recordOffset + aggregatorOffsets[i]); } }
@Test public void testStringLastBufferAggregator() { BufferAggregator agg = stringLastAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[stringLastAggFactory.getMaxIntermediateSize()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, String> result = (Pair<Long, String>) agg.get(buffer, 0); Assert.assertEquals(strings[2], result.rhs); }
@Test public void testStringLastBufferAggregator() { BufferAggregator agg = stringLastAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[stringLastAggFactory.getMaxIntermediateSize()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, String> result = (Pair<Long, String>) agg.get(buffer, 0); Assert.assertEquals(strings[0], result.rhs); }
@Test public void testLongMaxBufferAggregator() { BufferAggregator agg = longMaxAggFactory.factorizeBuffered(colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[Long.BYTES + Byte.BYTES]); agg.init(buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); Assert.assertEquals(values[2], ((Long) agg.get(buffer, 0)).longValue()); Assert.assertEquals(values[2], agg.getLong(buffer, 0)); Assert.assertEquals((float) values[2], agg.getFloat(buffer, 0), 0.0001); }
@Test public void testLongMinBufferAggregator() { BufferAggregator agg = longMinAggFactory.factorizeBuffered(colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[Long.BYTES + Byte.BYTES]); agg.init(buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); Assert.assertEquals(values[2], ((Long) agg.get(buffer, 0)).longValue()); Assert.assertEquals(values[2], agg.getLong(buffer, 0)); Assert.assertEquals((float) values[2], agg.getFloat(buffer, 0), 0.0001); }
@Test public void testDoubleMaxBufferAggregator() { BufferAggregator agg = doubleMaxAggFactory.factorizeBuffered(colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[Double.BYTES + Byte.BYTES]); agg.init(buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); Assert.assertEquals(values[2], ((Double) agg.get(buffer, 0)).doubleValue(), 0.0001); Assert.assertEquals((long) values[2], agg.getLong(buffer, 0)); Assert.assertEquals(values[2], agg.getFloat(buffer, 0), 0.0001); }
@Test public void testDoubleMinBufferAggregator() { BufferAggregator agg = doubleMinAggFactory.factorizeBuffered(colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[Double.BYTES + Byte.BYTES]); agg.init(buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); aggregate(selector, agg, buffer, 0); Assert.assertEquals(values[2], ((Double) agg.get(buffer, 0)).doubleValue(), 0.0001); Assert.assertEquals((long) values[2], agg.getLong(buffer, 0)); Assert.assertEquals(values[2], agg.getFloat(buffer, 0), 0.0001); }
@Test public void testLongLastBufferAggregator() { BufferAggregator agg = longLastAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[longLastAggFactory.getMaxIntermediateSizeWithNulls()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, Long> result = (Pair<Long, Long>) agg.get(buffer, 0); Assert.assertEquals(times[2], result.lhs.longValue()); Assert.assertEquals(longValues[2], result.rhs.longValue()); Assert.assertEquals(longValues[2], agg.getLong(buffer, 0)); Assert.assertEquals(longValues[2], agg.getFloat(buffer, 0), 1); }
@Test public void testLongFirstBufferAggregator() { BufferAggregator agg = longFirstAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[longFirstAggFactory.getMaxIntermediateSizeWithNulls()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, Long> result = (Pair<Long, Long>) agg.get(buffer, 0); Assert.assertEquals(times[3], result.lhs.longValue()); Assert.assertEquals(longValues[3], result.rhs.longValue()); Assert.assertEquals(longValues[3], agg.getLong(buffer, 0)); Assert.assertEquals(longValues[3], agg.getFloat(buffer, 0), 0.0001); }
@Test public void testStringFirstCombiningBufferAggregator() { BufferAggregator agg = combiningAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[stringLastAggFactory.getMaxIntermediateSize()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, String> result = (Pair<Long, String>) agg.get(buffer, 0); Pair<Long, String> expected = pairs[3]; Assert.assertEquals(expected.lhs, result.lhs); Assert.assertEquals(expected.rhs, result.rhs); }
@Test public void testStringLastCombiningBufferAggregator() { BufferAggregator agg = combiningAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[stringLastAggFactory.getMaxIntermediateSize()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, String> result = (Pair<Long, String>) agg.get(buffer, 0); Pair<Long, String> expected = pairs[2]; Assert.assertEquals(expected.lhs, result.lhs); Assert.assertEquals(expected.rhs, result.rhs); }
@Test public void testDoubleLastBufferAggregator() { BufferAggregator agg = doubleLastAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[doubleLastAggFactory.getMaxIntermediateSizeWithNulls()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, Double> result = (Pair<Long, Double>) agg.get(buffer, 0); Assert.assertEquals(times[0], result.lhs.longValue()); Assert.assertEquals(doubles[0], result.rhs, 0.0001); Assert.assertEquals((long) doubles[0], agg.getLong(buffer, 0)); Assert.assertEquals(doubles[0], agg.getDouble(buffer, 0), 0.0001); }
@Test public void testDoubleFirstBufferAggregator() { BufferAggregator agg = doubleFirstAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[doubleFirstAggFactory.getMaxIntermediateSizeWithNulls()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, Double> result = (Pair<Long, Double>) agg.get(buffer, 0); Assert.assertEquals(times[1], result.lhs.longValue()); Assert.assertEquals(doubleValues[1], result.rhs, 0.0001); Assert.assertEquals((long) doubleValues[1], agg.getLong(buffer, 0)); Assert.assertEquals(doubleValues[1], agg.getDouble(buffer, 0), 0.0001); }
@Test public void testDoubleFirstBufferAggregator() { BufferAggregator agg = floatFirstAggregatorFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[floatFirstAggregatorFactory.getMaxIntermediateSizeWithNulls()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, Float> result = (Pair<Long, Float>) agg.get(buffer, 0); Assert.assertEquals(times[1], result.lhs.longValue()); Assert.assertEquals(floats[1], result.rhs, 0.0001); Assert.assertEquals((long) floats[1], agg.getLong(buffer, 0)); Assert.assertEquals(floats[1], agg.getFloat(buffer, 0), 0.0001); }
@Test public void testDoubleLastBufferAggregator() { BufferAggregator agg = floatLastAggregatorFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[floatLastAggregatorFactory.getMaxIntermediateSizeWithNulls()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, Float> result = (Pair<Long, Float>) agg.get(buffer, 0); Assert.assertEquals(times[0], result.lhs.longValue()); Assert.assertEquals(floats[0], result.rhs, 0.0001); Assert.assertEquals((long) floats[0], agg.getLong(buffer, 0)); Assert.assertEquals(floats[0], agg.getFloat(buffer, 0), 0.0001); }
@Test public void testDoubleFirstCombiningBufferAggregator() { BufferAggregator agg = combiningAggFactory.factorizeBuffered( colSelectorFactory); ByteBuffer buffer = ByteBuffer.wrap(new byte[doubleFirstAggFactory.getMaxIntermediateSizeWithNulls()]); agg.init(buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); aggregate(agg, buffer, 0); Pair<Long, Double> result = (Pair<Long, Double>) agg.get(buffer, 0); Pair<Long, Double> expected = (Pair<Long, Double>) pairs[2]; Assert.assertEquals(expected.lhs, result.lhs); Assert.assertEquals(expected.rhs, result.rhs, 0.0001); Assert.assertEquals(expected.rhs.longValue(), agg.getLong(buffer, 0)); Assert.assertEquals(expected.rhs, agg.getDouble(buffer, 0), 0.0001); }