@Override public BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries) { return new RowBlockBuilder(getTypeParameters(), blockBuilderStatus, expectedEntries); }
public RowBlockBuilder(List<Type> fieldTypes, BlockBuilderStatus blockBuilderStatus, int expectedEntries) { this( blockBuilderStatus, createFieldBlockBuilders(fieldTypes, blockBuilderStatus, expectedEntries), new int[expectedEntries + 1], new boolean[expectedEntries]); }
@Override public BlockBuilder appendNull() { if (currentEntryOpened) { throw new IllegalStateException("Current entry must be closed before a null can be written"); } entryAdded(true); return this; }
@Override public BlockBuilder newBlockBuilderLike(BlockBuilderStatus blockBuilderStatus) { int newSize = calculateBlockResetSize(getPositionCount()); BlockBuilder[] newBlockBuilders = new BlockBuilder[numFields]; for (int i = 0; i < numFields; i++) { newBlockBuilders[i] = fieldBlockBuilders[i].newBlockBuilderLike(blockBuilderStatus); } return new RowBlockBuilder(blockBuilderStatus, newBlockBuilders, new int[newSize + 1], new boolean[newSize]); } }
private static Block createTestBlock() { RowBlockBuilder blockBuilder = (RowBlockBuilder) TYPE.createBlockBuilder(null, 3); SingleRowBlockWriter singleRowBlockWriter; singleRowBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(singleRowBlockWriter, 1); VARCHAR.writeSlice(singleRowBlockWriter, utf8Slice("cat")); blockBuilder.closeEntry(); singleRowBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(singleRowBlockWriter, 2); VARCHAR.writeSlice(singleRowBlockWriter, utf8Slice("cats")); blockBuilder.closeEntry(); singleRowBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(singleRowBlockWriter, 3); VARCHAR.writeSlice(singleRowBlockWriter, utf8Slice("dog")); blockBuilder.closeEntry(); return blockBuilder.build(); }
@Override public BlockBuilder appendStructureInternal(Block block, int position) { if (!(block instanceof AbstractRowBlock)) { throw new IllegalArgumentException(); } AbstractRowBlock rowBlock = (AbstractRowBlock) block; BlockBuilder entryBuilder = this.beginBlockEntry(); int fieldBlockOffset = rowBlock.getFieldBlockOffset(position); for (int i = 0; i < rowBlock.numFields; i++) { if (rowBlock.getRawFieldBlocks()[i].isNull(fieldBlockOffset)) { entryBuilder.appendNull(); } else { rowBlock.getRawFieldBlocks()[i].writePositionTo(fieldBlockOffset, entryBuilder); } } closeEntry(); return this; }
@Override public BlockBuilder appendStructure(Block block) { if (!(block instanceof AbstractSingleRowBlock)) { throw new IllegalStateException("Expected AbstractSingleRowBlock"); } if (currentEntryOpened) { throw new IllegalStateException("Expected current entry to be closed but was opened"); } currentEntryOpened = true; int blockPositionCount = block.getPositionCount(); if (blockPositionCount != numFields) { throw new IllegalArgumentException(format("block position count (%s) is not equal to number of fields (%s)", blockPositionCount, numFields)); } for (int i = 0; i < blockPositionCount; i++) { if (block.isNull(i)) { fieldBlockBuilders[i].appendNull(); } else { block.writePositionTo(i, fieldBlockBuilders[i]); } } closeEntry(); return this; }
@Override public String toString() { return format("RowBlockBuilder{numFields=%d, positionCount=%d", numFields, getPositionCount()); }
private static Block createTestBlock() { RowBlockBuilder blockBuilder = (RowBlockBuilder) TYPE.createBlockBuilder(null, 3); SingleRowBlockWriter singleRowBlockWriter; singleRowBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(singleRowBlockWriter, 1); VARCHAR.writeSlice(singleRowBlockWriter, utf8Slice("cat")); blockBuilder.closeEntry(); singleRowBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(singleRowBlockWriter, 2); VARCHAR.writeSlice(singleRowBlockWriter, utf8Slice("cats")); blockBuilder.closeEntry(); singleRowBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(singleRowBlockWriter, 3); VARCHAR.writeSlice(singleRowBlockWriter, utf8Slice("dog")); blockBuilder.closeEntry(); return blockBuilder.build(); }
@Override protected Object getGreaterValue(Object value) { RowBlockBuilder blockBuilder = (RowBlockBuilder) TYPE.createBlockBuilder(null, 1); SingleRowBlockWriter singleRowBlockWriter; Block block = (Block) value; singleRowBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(singleRowBlockWriter, block.getSingleValueBlock(0).getLong(0, 0) + 1); VARCHAR.writeSlice(singleRowBlockWriter, block.getSingleValueBlock(1).getSlice(0, 0, 1)); blockBuilder.closeEntry(); return TYPE.getObject(blockBuilder.build(), 0); } }
@Override public BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytesPerEntry) { return new RowBlockBuilder(getTypeParameters(), blockBuilderStatus, expectedEntries); }
@Override public BlockBuilder closeEntry() { if (!currentEntryOpened) { throw new IllegalStateException("Expected entry to be opened but was closed"); } entryAdded(false); currentEntryOpened = false; return this; }
@Override protected Object getGreaterValue(Object value) { RowBlockBuilder blockBuilder = (RowBlockBuilder) TYPE.createBlockBuilder(null, 1); SingleRowBlockWriter singleRowBlockWriter; Block block = (Block) value; singleRowBlockWriter = blockBuilder.beginBlockEntry(); BIGINT.writeLong(singleRowBlockWriter, block.getSingleValueBlock(0).getLong(0, 0) + 1); VARCHAR.writeSlice(singleRowBlockWriter, block.getSingleValueBlock(1).getSlice(0, 0, 1)); blockBuilder.closeEntry(); return TYPE.getObject(blockBuilder.build(), 0); } }
private static BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytesPerEntry) { return new RowBlockBuilder(Collections.nCopies(FIELD_COUNT, VARCHAR), blockBuilderStatus, expectedEntries); } }
private static BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytesPerEntry) { return new RowBlockBuilder(Collections.nCopies(FIELD_COUNT, VARCHAR), blockBuilderStatus, expectedEntries); } }
@Override protected Object visitRow(Row node, Object context) { RowType rowType = (RowType) type(node); List<Type> parameterTypes = rowType.getTypeParameters(); List<Expression> arguments = node.getItems(); int cardinality = arguments.size(); List<Object> values = new ArrayList<>(cardinality); for (Expression argument : arguments) { values.add(process(argument, context)); } if (hasUnresolvedValue(values)) { return new Row(toExpressions(values, parameterTypes)); } else { BlockBuilder blockBuilder = new RowBlockBuilder(parameterTypes, null, 1); BlockBuilder singleRowBlockWriter = blockBuilder.beginBlockEntry(); for (int i = 0; i < cardinality; ++i) { writeNativeValue(parameterTypes.get(i), singleRowBlockWriter, values.get(i)); } blockBuilder.closeEntry(); return rowType.getObject(blockBuilder, 0); } }
@Override protected Object visitRow(Row node, Object context) { RowType rowType = (RowType) type(node); List<Type> parameterTypes = rowType.getTypeParameters(); List<Expression> arguments = node.getItems(); int cardinality = arguments.size(); List<Object> values = new ArrayList<>(cardinality); for (Expression argument : arguments) { values.add(process(argument, context)); } if (hasUnresolvedValue(values)) { return new Row(toExpressions(values, parameterTypes)); } else { BlockBuilder blockBuilder = new RowBlockBuilder(parameterTypes, null, 1); BlockBuilder singleRowBlockWriter = blockBuilder.beginBlockEntry(); for (int i = 0; i < cardinality; ++i) { writeNativeValue(parameterTypes.get(i), singleRowBlockWriter, values.get(i)); } blockBuilder.closeEntry(); return rowType.getObject(blockBuilder, 0); } }
public static Block toRow(List<Type> parameterTypes, Object... values) { checkArgument(parameterTypes.size() == values.length, "parameterTypes.size(" + parameterTypes.size() + ") does not equal to values.length(" + values.length + ")"); RowType rowType = RowType.anonymous(parameterTypes); BlockBuilder blockBuilder = new RowBlockBuilder(parameterTypes, null, 1); BlockBuilder singleRowBlockWriter = blockBuilder.beginBlockEntry(); for (int i = 0; i < values.length; i++) { appendToBlockBuilder(parameterTypes.get(i), values[i], singleRowBlockWriter); } blockBuilder.closeEntry(); return rowType.getObject(blockBuilder, 0); }
public static Block toRow(List<Type> parameterTypes, Object... values) { checkArgument(parameterTypes.size() == values.length, "parameterTypes.size(" + parameterTypes.size() + ") does not equal to values.length(" + values.length + ")"); RowType rowType = RowType.anonymous(parameterTypes); BlockBuilder blockBuilder = new RowBlockBuilder(parameterTypes, null, 1); BlockBuilder singleRowBlockWriter = blockBuilder.beginBlockEntry(); for (int i = 0; i < values.length; i++) { appendToBlockBuilder(parameterTypes.get(i), values[i], singleRowBlockWriter); } blockBuilder.closeEntry(); return rowType.getObject(blockBuilder, 0); }
private BlockBuilder createBlockBuilderWithValues(List<Type> fieldTypes, List<Object>[] rows) { BlockBuilder rowBlockBuilder = new RowBlockBuilder(fieldTypes, null, 1); for (List<Object> row : rows) { if (row == null) { rowBlockBuilder.appendNull(); } else { BlockBuilder singleRowBlockWriter = rowBlockBuilder.beginBlockEntry(); for (Object fieldValue : row) { if (fieldValue == null) { singleRowBlockWriter.appendNull(); } else { if (fieldValue instanceof Long) { BIGINT.writeLong(singleRowBlockWriter, ((Long) fieldValue).longValue()); } else if (fieldValue instanceof String) { VARCHAR.writeSlice(singleRowBlockWriter, utf8Slice((String) fieldValue)); } else { throw new IllegalArgumentException(); } } } rowBlockBuilder.closeEntry(); } } return rowBlockBuilder; }