public static Block rowBlockOf(List<Type> parameterTypes, Object... values) { RowType rowType = RowType.anonymous(parameterTypes); BlockBuilder blockBuilder = rowType.createBlockBuilder(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); }
BlockBuilder rowBlockBuilder = rowType.createBlockBuilder(null, 1); parseJsonToSingleRowBlock( jsonParser,
private void assertRowHashOperator(String inputString, List<Type> types, List<Object> elements) { checkArgument(types.size() == elements.size(), "types and elements must have the same size"); RowType rowType = RowType.anonymous(types); BlockBuilder blockBuilder = rowType.createBlockBuilder(null, 1); BlockBuilder singleRowBlockWriter = blockBuilder.beginBlockEntry(); for (int i = 0; i < types.size(); i++) { appendToBlockBuilder(types.get(i), elements.get(i), singleRowBlockWriter); } blockBuilder.closeEntry(); assertOperator(HASH_CODE, inputString, BIGINT, rowType.hash(blockBuilder.build(), 0)); }
@UsedByGeneratedCode public static Block zip(List<Type> types, Block... arrays) { int biggestCardinality = 0; for (Block array : arrays) { biggestCardinality = Math.max(biggestCardinality, array.getPositionCount()); } RowType rowType = RowType.anonymous(types); BlockBuilder outputBuilder = rowType.createBlockBuilder(null, biggestCardinality); for (int outputPosition = 0; outputPosition < biggestCardinality; outputPosition++) { BlockBuilder rowBuilder = outputBuilder.beginBlockEntry(); for (int fieldIndex = 0; fieldIndex < arrays.length; fieldIndex++) { if (arrays[fieldIndex].getPositionCount() <= outputPosition) { rowBuilder.appendNull(); } else { types.get(fieldIndex).appendTo(arrays[fieldIndex], outputPosition, rowBuilder); } } outputBuilder.closeEntry(); } return outputBuilder.build(); } }
@Test public void testRowHistograms() { RowType innerRowType = RowType.from(ImmutableList.of( RowType.field("f1", BIGINT), RowType.field("f2", DOUBLE))); MapType mapType = mapType(innerRowType, BIGINT); InternalAggregationFunction aggregationFunction = getAggregation(mapType.getTypeSignature(), innerRowType.getTypeSignature()); BlockBuilder builder = innerRowType.createBlockBuilder(null, 3); innerRowType.writeObject(builder, toRow(ImmutableList.of(BIGINT, DOUBLE), 1L, 1.0)); innerRowType.writeObject(builder, toRow(ImmutableList.of(BIGINT, DOUBLE), 2L, 2.0)); innerRowType.writeObject(builder, toRow(ImmutableList.of(BIGINT, DOUBLE), 3L, 3.0)); assertAggregation( aggregationFunction, ImmutableMap.of(ImmutableList.of(1L, 1.0), 1L, ImmutableList.of(2L, 2.0), 1L, ImmutableList.of(3L, 3.0), 1L), builder.build()); }
@Test public void testDoubleRowMap() { RowType innerRowType = RowType.from(ImmutableList.of( RowType.field("f1", INTEGER), RowType.field("f2", DOUBLE))); MapType mapType = mapType(DOUBLE, innerRowType); InternalAggregationFunction aggFunc = metadata.getFunctionRegistry().getAggregateFunctionImplementation(new Signature(NAME, AGGREGATE, mapType.getTypeSignature(), parseTypeSignature(StandardTypes.DOUBLE), innerRowType.getTypeSignature())); BlockBuilder builder = innerRowType.createBlockBuilder(null, 3); innerRowType.writeObject(builder, toRow(ImmutableList.of(INTEGER, DOUBLE), 1L, 1.0)); innerRowType.writeObject(builder, toRow(ImmutableList.of(INTEGER, DOUBLE), 2L, 2.0)); innerRowType.writeObject(builder, toRow(ImmutableList.of(INTEGER, DOUBLE), 3L, 3.0)); assertAggregation( aggFunc, ImmutableMap.of(1.0, ImmutableList.of(1, 1.0), 2.0, ImmutableList.of(2, 2.0), 3.0, ImmutableList.of(3, 3.0)), createDoublesBlock(1.0, 2.0, 3.0), builder.build()); }
@Test public void testVarianceStateSerialization() { AccumulatorStateFactory<VarianceState> factory = StateCompiler.generateStateFactory(VarianceState.class); AccumulatorStateSerializer<VarianceState> serializer = StateCompiler.generateStateSerializer(VarianceState.class); VarianceState singleState = factory.createSingleState(); VarianceState deserializedState = factory.createSingleState(); singleState.setMean(1); singleState.setCount(2); singleState.setM2(3); BlockBuilder builder = RowType.anonymous(ImmutableList.of(BIGINT, DOUBLE, DOUBLE)).createBlockBuilder(null, 1); serializer.serialize(singleState, builder); Block block = builder.build(); serializer.deserialize(block, 0, deserializedState); assertEquals(deserializedState.getCount(), singleState.getCount()); assertEquals(deserializedState.getMean(), singleState.getMean()); assertEquals(deserializedState.getM2(), singleState.getM2()); }
.createBlockBuilder(null, 1); serializer.serialize(singleState, builder);
public static Block rowBlockOf(List<Type> parameterTypes, Object... values) { RowType rowType = RowType.anonymous(parameterTypes); BlockBuilder blockBuilder = rowType.createBlockBuilder(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); }
@Override public void setField(String name, StdData value) { BlockBuilder mutable = _rowType.createBlockBuilder(new PageBuilderStatus().createBlockBuilderStatus(), 1); BlockBuilder rowBlockBuilder = mutable.beginBlockEntry(); int i = 0; for (RowType.Field field : _rowType.getFields()) { if (field.getName().isPresent() && name.equals(field.getName().get())) { ((PrestoData) value).writeToBlock(rowBlockBuilder); } else { if (_block == null) { rowBlockBuilder.appendNull(); } else { field.getType().appendTo(_block, i, rowBlockBuilder); } } i++; } mutable.closeEntry(); _block = _rowType.getObject(mutable.build(), 0); }
@Override public void setField(String name, StdData value) { BlockBuilder mutable = _rowType.createBlockBuilder(new PageBuilderStatus().createBlockBuilderStatus(), 1); BlockBuilder rowBlockBuilder = mutable.beginBlockEntry(); int i = 0; for (RowType.Field field : _rowType.getFields()) { if (field.getName().isPresent() && name.equals(field.getName().get())) { ((PrestoData) value).writeToBlock(rowBlockBuilder); } else { if (_block == null) { rowBlockBuilder.appendNull(); } else { field.getType().appendTo(_block, i, rowBlockBuilder); } } i++; } mutable.closeEntry(); _block = _rowType.getObject(mutable.build(), 0); }
@Override public void setField(int index, StdData value) { // TODO: This is not the right way to get this object. The status should be passed in from the invocation of the // function and propagated to here. See PRESTO-1359 for more details. BlockBuilderStatus blockBuilderStatus = new PageBuilderStatus().createBlockBuilderStatus(); BlockBuilder mutable = _rowType.createBlockBuilder(blockBuilderStatus, 1); BlockBuilder rowBlockBuilder = mutable.beginBlockEntry(); int i = 0; for (RowType.Field field : _rowType.getFields()) { if (i == index) { ((PrestoData) value).writeToBlock(rowBlockBuilder); } else { if (_block == null) { rowBlockBuilder.appendNull(); } else { field.getType().appendTo(_block, i, rowBlockBuilder); } } i++; } mutable.closeEntry(); _block = _rowType.getObject(mutable.build(), 0); }
@Override public void setField(int index, StdData value) { // TODO: This is not the right way to get this object. The status should be passed in from the invocation of the // function and propagated to here. See PRESTO-1359 for more details. BlockBuilderStatus blockBuilderStatus = new PageBuilderStatus().createBlockBuilderStatus(); BlockBuilder mutable = _rowType.createBlockBuilder(blockBuilderStatus, 1); BlockBuilder rowBlockBuilder = mutable.beginBlockEntry(); int i = 0; for (RowType.Field field : _rowType.getFields()) { if (i == index) { ((PrestoData) value).writeToBlock(rowBlockBuilder); } else { if (_block == null) { rowBlockBuilder.appendNull(); } else { field.getType().appendTo(_block, i, rowBlockBuilder); } } i++; } mutable.closeEntry(); _block = _rowType.getObject(mutable.build(), 0); }