@Override public BlockBuilder appendStructure(Block block) { if (currentEntryOpened) { throw new IllegalStateException("Expected current entry to be closed but was opened"); } currentEntryOpened = true; for (int i = 0; i < block.getPositionCount(); i++) { if (block.isNull(i)) { values.appendNull(); } else { block.writePositionTo(i, values); } } closeEntry(); return this; }
@Override public BlockBuilder appendStructureInternal(Block block, int position) { if (!(block instanceof AbstractArrayBlock)) { throw new IllegalArgumentException(); } AbstractArrayBlock arrayBlock = (AbstractArrayBlock) block; BlockBuilder entryBuilder = beginBlockEntry(); int startValueOffset = arrayBlock.getOffset(position); int endValueOffset = arrayBlock.getOffset(position + 1); for (int i = startValueOffset; i < endValueOffset; i++) { if (arrayBlock.getRawElementBlock().isNull(i)) { entryBuilder.appendNull(); } else { arrayBlock.getRawElementBlock().writePositionTo(i, entryBuilder); } } closeEntry(); return this; }
@Override public BlockBuilder appendStructure(Block block) { if (currentEntryOpened) { throw new IllegalStateException("Expected current entry to be closed but was opened"); } currentEntryOpened = true; for (int i = 0; i < block.getPositionCount(); i++) { if (block.isNull(i)) { values.appendNull(); } else { block.writePositionTo(i, values); } } closeEntry(); return this; }
@Override public BlockBuilder appendStructureInternal(Block block, int position) { if (!(block instanceof AbstractArrayBlock)) { throw new IllegalArgumentException(); } AbstractArrayBlock arrayBlock = (AbstractArrayBlock) block; BlockBuilder entryBuilder = beginBlockEntry(); int startValueOffset = arrayBlock.getOffset(position); int endValueOffset = arrayBlock.getOffset(position + 1); for (int i = startValueOffset; i < endValueOffset; i++) { if (arrayBlock.getRawElementBlock().isNull(i)) { entryBuilder.appendNull(); } else { arrayBlock.getRawElementBlock().writePositionTo(i, entryBuilder); } } closeEntry(); return this; }
private static Block createTestBlock() { ArrayBlockBuilder blockBuilder = (ArrayBlockBuilder) TYPE.createBlockBuilder(new BlockBuilderStatus(), 3); ArrayElementBlockWriter arrayElementBlockWriter; arrayElementBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(arrayElementBlockWriter, 1); VARCHAR.writeSlice(arrayElementBlockWriter, utf8Slice("cat")); blockBuilder.closeEntry(); arrayElementBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(arrayElementBlockWriter, 2); VARCHAR.writeSlice(arrayElementBlockWriter, utf8Slice("cats")); blockBuilder.closeEntry(); arrayElementBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(arrayElementBlockWriter, 3); VARCHAR.writeSlice(arrayElementBlockWriter, utf8Slice("dog")); blockBuilder.closeEntry(); return blockBuilder.build(); }