@Override public final BlockBuilder createFixedSizeBlockBuilder(int positionCount) { return new IntArrayBlockBuilder(null, positionCount); }
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(); }
@Override public boolean isNull(int position) { checkReadablePosition(position); return valueIsNull[position]; }
@Test public void testBuildingFromIntArrayBlockBuilder() { IntArrayBlockBuilder blockBuilder = new IntArrayBlockBuilder(null, 100); populateNullValues(blockBuilder, 100); assertEquals(blockBuilder.build().getEncodingName(), RunLengthBlockEncoding.NAME); }
private void checkReadablePosition(int position) { if (position < 0 || position >= getPositionCount()) { throw new IllegalArgumentException("position is not valid"); } } }
@Override public BlockBuilder writeInt(int value) { if (values.length <= positionCount) { growCapacity(); } values[positionCount] = value; hasNonNullValue = true; positionCount++; if (blockBuilderStatus != null) { blockBuilderStatus.addBytes(Byte.BYTES + Integer.BYTES); } return this; }
@Override public long getEstimatedDataSizeForStats(int position) { return isNull(position) ? 0 : Integer.BYTES; }
@Test public void testBuildingFromIntArrayBlockBuilder() { IntArrayBlockBuilder blockBuilder = new IntArrayBlockBuilder(null, 100); populateNullValues(blockBuilder, 100); assertEquals(blockBuilder.build().getEncodingName(), RunLengthBlockEncoding.NAME); }
@Override public String toString() { StringBuilder sb = new StringBuilder("IntArrayBlockBuilder{"); sb.append("positionCount=").append(getPositionCount()); sb.append('}'); return sb.toString(); }
@Override public BlockBuilder appendNull() { if (values.length <= positionCount) { growCapacity(); } valueIsNull[positionCount] = true; hasNullValue = true; positionCount++; if (blockBuilderStatus != null) { blockBuilderStatus.addBytes(Byte.BYTES + Integer.BYTES); } return this; }
@Override public BlockBuilder newBlockBuilderLike(BlockBuilderStatus blockBuilderStatus) { return new IntArrayBlockBuilder(blockBuilderStatus, calculateBlockResetSize(positionCount)); }
@Override public int getInt(int position, int offset) { checkReadablePosition(position); if (offset != 0) { throw new IllegalArgumentException("offset must be zero"); } return values[position]; }
@Override public Block copyRegion(int positionOffset, int length) { checkValidRegion(getPositionCount(), positionOffset, length); if (!hasNonNullValue) { return new RunLengthEncodedBlock(NULL_VALUE_BLOCK, length); } boolean[] newValueIsNull = null; if (hasNullValue) { newValueIsNull = Arrays.copyOfRange(valueIsNull, positionOffset, positionOffset + length); } int[] newValues = Arrays.copyOfRange(values, positionOffset, positionOffset + length); return new IntArrayBlock(0, length, newValueIsNull, newValues); }
@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)); }
@Override public Block getSingleValueBlock(int position) { checkReadablePosition(position); return new IntArrayBlock( 0, 1, valueIsNull[position] ? new boolean[] {true} : null, new int[] {values[position]}); }
@Override public Block getRegion(int positionOffset, int length) { checkValidRegion(getPositionCount(), positionOffset, length); if (!hasNonNullValue) { return new RunLengthEncodedBlock(NULL_VALUE_BLOCK, length); } return new IntArrayBlock(positionOffset, length, hasNullValue ? valueIsNull : null, values); }
private static BlockBuilder createBlockBuilderWithValues(Slice[] expectedValues) { IntArrayBlockBuilder blockBuilder = new IntArrayBlockBuilder(null, expectedValues.length); writeValues(expectedValues, blockBuilder); return blockBuilder; }
@Override public void writePositionTo(int position, BlockBuilder blockBuilder) { checkReadablePosition(position); blockBuilder.writeInt(values[position]); blockBuilder.closeEntry(); }
private static BlockBuilder createBlockBuilderWithValues(Slice[] expectedValues) { IntArrayBlockBuilder blockBuilder = new IntArrayBlockBuilder(null, expectedValues.length); writeValues(expectedValues, blockBuilder); return blockBuilder; }
@Override public Block copyPositions(int[] positions, int offset, int length) { checkArrayRange(positions, offset, length); if (!hasNonNullValue) { return new RunLengthEncodedBlock(NULL_VALUE_BLOCK, length); } boolean[] newValueIsNull = null; if (hasNullValue) { newValueIsNull = new boolean[length]; } int[] newValues = new int[length]; for (int i = 0; i < length; i++) { int position = positions[offset + i]; checkReadablePosition(position); if (hasNullValue) { newValueIsNull[i] = valueIsNull[position]; } newValues[i] = values[position]; } return new IntArrayBlock(0, length, newValueIsNull, newValues); }