@Override public final BlockBuilder createFixedSizeBlockBuilder(int positionCount) { return new IntArrayBlockBuilder(null, positionCount); }
@Override public BlockBuilder newBlockBuilderLike(BlockBuilderStatus blockBuilderStatus) { return new IntArrayBlockBuilder(blockBuilderStatus, calculateBlockResetSize(positionCount)); }
@Override public final BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytesPerEntry) { int maxBlockSizeInBytes; if (blockBuilderStatus == null) { maxBlockSizeInBytes = PageBuilderStatus.DEFAULT_MAX_PAGE_SIZE_IN_BYTES; } else { maxBlockSizeInBytes = blockBuilderStatus.getMaxPageSizeInBytes(); } return new IntArrayBlockBuilder( blockBuilderStatus, Math.min(expectedEntries, maxBlockSizeInBytes / Integer.BYTES)); }
private static BlockBuilder createBlockBuilderWithValues(Slice[] expectedValues) { IntArrayBlockBuilder blockBuilder = new IntArrayBlockBuilder(null, expectedValues.length); writeValues(expectedValues, blockBuilder); return blockBuilder; }
@Test public void testBuildingFromIntArrayBlockBuilder() { IntArrayBlockBuilder blockBuilder = new IntArrayBlockBuilder(null, 100); populateNullValues(blockBuilder, 100); assertEquals(blockBuilder.build().getEncodingName(), RunLengthBlockEncoding.NAME); }
@Test public void testIntArrayBlock() { BlockBuilder blockBuilder = new IntArrayBlockBuilder(null, EXPECTED_ENTRIES); writeEntries(EXPECTED_ENTRIES, blockBuilder, INTEGER); checkRetainedSize(blockBuilder.build(), false); }
private Block buildBucketBlock(Page page) { if (bucketFunction == null) { return null; } IntArrayBlockBuilder bucketColumnBuilder = new IntArrayBlockBuilder(null, page.getPositionCount()); Page bucketColumnsPage = extractColumns(page, bucketColumns); for (int position = 0; position < page.getPositionCount(); position++) { int bucket = bucketFunction.getBucket(bucketColumnsPage, position); bucketColumnBuilder.writeInt(bucket); } return bucketColumnBuilder.build(); }
@Test public void testNaNHash() { BlockBuilder blockBuilder = new IntArrayBlockBuilder(null, 4); blockBuilder.writeInt(floatToIntBits(Float.NaN)); blockBuilder.writeInt(floatToRawIntBits(Float.NaN)); // the following two are the integer values of a float NaN blockBuilder.writeInt(-0x400000); blockBuilder.writeInt(0x7fc00000); assertEquals(REAL.hash(blockBuilder, 0), REAL.hash(blockBuilder, 1)); assertEquals(REAL.hash(blockBuilder, 0), REAL.hash(blockBuilder, 2)); assertEquals(REAL.hash(blockBuilder, 0), REAL.hash(blockBuilder, 3)); } }
@Test public void testLazyBlockBuilderInitialization() { Slice[] expectedValues = createTestValue(100); BlockBuilder emptyBlockBuilder = new IntArrayBlockBuilder(null, 0); BlockBuilder blockBuilder = new IntArrayBlockBuilder(null, expectedValues.length); assertEquals(blockBuilder.getSizeInBytes(), emptyBlockBuilder.getSizeInBytes()); assertEquals(blockBuilder.getRetainedSizeInBytes(), emptyBlockBuilder.getRetainedSizeInBytes()); writeValues(expectedValues, blockBuilder); assertTrue(blockBuilder.getSizeInBytes() > emptyBlockBuilder.getSizeInBytes()); assertTrue(blockBuilder.getRetainedSizeInBytes() > emptyBlockBuilder.getRetainedSizeInBytes()); blockBuilder = blockBuilder.newBlockBuilderLike(null); assertEquals(blockBuilder.getSizeInBytes(), emptyBlockBuilder.getSizeInBytes()); assertEquals(blockBuilder.getRetainedSizeInBytes(), emptyBlockBuilder.getRetainedSizeInBytes()); }
@Test public void testRetainedSizeWithOverlappingBlocks() { int entries = 123; BlockBuilder blockBuilder = new IntArrayBlockBuilder(null, entries); for (int i = 0; i < entries; i++) { blockBuilder.writeInt(i); } Block block = blockBuilder.build(); // Verify we do not over count int arraySize = 456; int blocks = 7890; BlockBigArray blockBigArray = new BlockBigArray(); blockBigArray.ensureCapacity(arraySize); for (int i = 0; i < blocks; i++) { blockBigArray.set(i % arraySize, block.getRegion(0, entries)); } ReferenceCountMap referenceCountMap = new ReferenceCountMap(); referenceCountMap.incrementAndGet(block); long expectedSize = ClassLayout.parseClass(BlockBigArray.class).instanceSize() + referenceCountMap.sizeOf() + (new ObjectBigArray()).sizeOf() + block.getRetainedSizeInBytes() + (arraySize - 1) * ClassLayout.parseClass(block.getClass()).instanceSize(); assertEquals(blockBigArray.sizeOf(), expectedSize); } }
@Override public final BlockBuilder createFixedSizeBlockBuilder(int positionCount) { return new IntArrayBlockBuilder(null, positionCount); }
@Override public BlockBuilder newBlockBuilderLike(BlockBuilderStatus blockBuilderStatus) { return new IntArrayBlockBuilder(blockBuilderStatus, calculateBlockResetSize(positionCount)); }
@Override public final BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytesPerEntry) { int maxBlockSizeInBytes; if (blockBuilderStatus == null) { maxBlockSizeInBytes = PageBuilderStatus.DEFAULT_MAX_PAGE_SIZE_IN_BYTES; } else { maxBlockSizeInBytes = blockBuilderStatus.getMaxPageSizeInBytes(); } return new IntArrayBlockBuilder( blockBuilderStatus, Math.min(expectedEntries, maxBlockSizeInBytes / Integer.BYTES)); }
@Test public void testRetainedSizeWithOverlappingBlocks() { int entries = 123; BlockBuilder blockBuilder = new IntArrayBlockBuilder(null, entries); for (int i = 0; i < entries; i++) { blockBuilder.writeInt(i); } Block block = blockBuilder.build(); // Verify we do not over count int arraySize = 456; int blocks = 7890; BlockBigArray blockBigArray = new BlockBigArray(); blockBigArray.ensureCapacity(arraySize); for (int i = 0; i < blocks; i++) { blockBigArray.set(i % arraySize, block.getRegion(0, entries)); } ReferenceCountMap referenceCountMap = new ReferenceCountMap(); referenceCountMap.incrementAndGet(block); long expectedSize = ClassLayout.parseClass(BlockBigArray.class).instanceSize() + referenceCountMap.sizeOf() + (new ObjectBigArray()).sizeOf() + block.getRetainedSizeInBytes() + (arraySize - 1) * ClassLayout.parseClass(block.getClass()).instanceSize(); assertEquals(blockBigArray.sizeOf(), expectedSize); } }