protected final void appendAtChannel(int channel, Block block, int position) { currentPageBuilder.getType(channel).appendTo(block, position, currentPageBuilder.getBlockBuilder(channel)); }
private static void appendToPage(PageBuilder pageBuilder, MaterializedRow row) { for (int field = 0; field < row.getFieldCount(); field++) { Type type = pageBuilder.getType(field); Object value = row.getField(field); BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(field); writeValue(type, blockBuilder, value); } pageBuilder.declarePosition(); }
public static void appendPositionTo(Page page, int position, PageBuilder pageBuilder) { pageBuilder.declarePosition(); for (int i = 0; i < page.getChannelCount(); i++) { Type type = pageBuilder.getType(i); Block block = page.getBlock(i); BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(i); type.appendTo(block, position, blockBuilder); } }
@Test public void testNewBlockBuilderLike() { ArrayType longArrayType = new ArrayType(BIGINT); ArrayType arrayType = new ArrayType(longArrayType); List<Type> channels = ImmutableList.of(BIGINT, VARCHAR, arrayType); PageBuilder pageBuilder = new PageBuilder(channels); BlockBuilder bigintBlockBuilder = pageBuilder.getBlockBuilder(0); BlockBuilder varcharBlockBuilder = pageBuilder.getBlockBuilder(1); BlockBuilder arrayBlockBuilder = pageBuilder.getBlockBuilder(2); for (int i = 0; i < 100; i++) { BIGINT.writeLong(bigintBlockBuilder, i); VARCHAR.writeSlice(varcharBlockBuilder, Slices.utf8Slice("test" + i)); Block longArrayBlock = new ArrayType(BIGINT) .createBlockBuilder(null, 1) .appendStructure(BIGINT.createBlockBuilder(null, 2).writeLong(i).closeEntry().writeLong(i * 2).closeEntry().build()); arrayBlockBuilder.appendStructure(longArrayBlock); pageBuilder.declarePosition(); } PageBuilder newPageBuilder = pageBuilder.newPageBuilderLike(); for (int i = 0; i < channels.size(); i++) { assertEquals(newPageBuilder.getType(i), pageBuilder.getType(i)); // we should get new block builder instances assertNotEquals(pageBuilder.getBlockBuilder(i), newPageBuilder.getBlockBuilder(i)); assertEquals(newPageBuilder.getBlockBuilder(i).getPositionCount(), 0); assertTrue(newPageBuilder.getBlockBuilder(i).getRetainedSizeInBytes() < pageBuilder.getBlockBuilder(i).getRetainedSizeInBytes()); } }
private static void appendToPage(PageBuilder pageBuilder, MaterializedRow row) { for (int field = 0; field < row.getFieldCount(); field++) { Type type = pageBuilder.getType(field); Object value = row.getField(field); BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(field); writeValue(type, blockBuilder, value); } pageBuilder.declarePosition(); }
public void appendPosition(Page page, int position) { pageBuilder.declarePosition(); for (int channel = 0; channel < page.getChannelCount(); channel++) { Block block = page.getBlock(channel); BlockBuilder blockBuilder = pageBuilder.getBlockBuilder(channel); pageBuilder.getType(channel).appendTo(block, position, blockBuilder); } if (pageBuilder.isFull()) { flushToPageBuffer(); } }