use of com.facebook.presto.spi.block.BlockBuilder in project presto by prestodb.
the class Re2JRegexp method split.
public Block split(Slice source) {
Matcher matcher = re2jPattern.matcher(source);
BlockBuilder blockBuilder = VARCHAR.createBlockBuilder(new BlockBuilderStatus(), 32);
int lastEnd = 0;
while (matcher.find()) {
Slice slice = source.slice(lastEnd, matcher.start() - lastEnd);
lastEnd = matcher.end();
VARCHAR.writeSlice(blockBuilder, slice);
}
VARCHAR.writeSlice(blockBuilder, source.slice(lastEnd, source.length() - lastEnd));
return blockBuilder.build();
}
use of com.facebook.presto.spi.block.BlockBuilder in project presto by prestodb.
the class TypeJsonUtils method stackRepresentationToObjectHelper.
private static Object stackRepresentationToObjectHelper(ConnectorSession session, JsonParser parser, Type type) throws IOException {
// cast('[null]', array(json)) should be casted to a single item array containing a json document "null" instead of sql null.
if (type instanceof JsonType) {
return OBJECT_MAPPER.writeValueAsString(parser.readValueAsTree());
}
if (parser.getCurrentToken() == JsonToken.VALUE_NULL) {
return null;
}
if (type instanceof ArrayType) {
List<Object> list = new ArrayList<>();
checkState(parser.getCurrentToken() == JsonToken.START_ARRAY, "Expected a json array");
while (parser.nextToken() != JsonToken.END_ARRAY) {
list.add(stackRepresentationToObjectHelper(session, parser, ((ArrayType) type).getElementType()));
}
return Collections.unmodifiableList(list);
}
if (type instanceof MapType) {
Map<Object, Object> map = new LinkedHashMap<>();
checkState(parser.getCurrentToken() == JsonToken.START_OBJECT, "Expected a json object");
while (parser.nextValue() != JsonToken.END_OBJECT) {
Object key = mapKeyToObject(session, parser.getCurrentName(), ((MapType) type).getKeyType());
Object value = stackRepresentationToObjectHelper(session, parser, ((MapType) type).getValueType());
map.put(key, value);
}
return Collections.unmodifiableMap(map);
}
if (type instanceof RowType) {
List<Object> list = new ArrayList<>();
checkState(parser.getCurrentToken() == JsonToken.START_ARRAY, "Expected a json array");
int field = 0;
RowType rowType = (RowType) type;
while (parser.nextValue() != JsonToken.END_ARRAY) {
checkArgument(field < rowType.getFields().size(), "Unexpected field for type %s", type);
Object value = stackRepresentationToObjectHelper(session, parser, rowType.getFields().get(field).getType());
list.add(value);
field++;
}
checkArgument(field == rowType.getFields().size(), "Expected %s fields for type %s", rowType.getFields().size(), type);
return Collections.unmodifiableList(list);
}
Slice sliceValue = null;
if (type.getJavaType() == Slice.class) {
sliceValue = Slices.utf8Slice(parser.getValueAsString());
}
BlockBuilder blockBuilder;
if (type instanceof FixedWidthType) {
blockBuilder = type.createBlockBuilder(new BlockBuilderStatus(), 1);
} else {
blockBuilder = type.createBlockBuilder(new BlockBuilderStatus(), 1, requireNonNull(sliceValue, "sliceValue is null").length());
}
if (type instanceof DecimalType) {
return getSqlDecimal((DecimalType) type, parser.getDecimalValue());
} else if (type.getJavaType() == boolean.class) {
type.writeBoolean(blockBuilder, parser.getBooleanValue());
} else if (type.getJavaType() == long.class) {
type.writeLong(blockBuilder, parser.getLongValue());
} else if (type.getJavaType() == double.class) {
type.writeDouble(blockBuilder, getDoubleValue(parser));
} else if (type.getJavaType() == Slice.class) {
type.writeSlice(blockBuilder, requireNonNull(sliceValue, "sliceValue is null"));
}
return type.getObjectValue(session, blockBuilder.build(), 0);
}
use of com.facebook.presto.spi.block.BlockBuilder in project presto by prestodb.
the class TypeUtils method getHashBlock.
public static Block getHashBlock(List<? extends Type> hashTypes, Block... hashBlocks) {
checkArgument(hashTypes.size() == hashBlocks.length);
int[] hashChannels = new int[hashBlocks.length];
for (int i = 0; i < hashBlocks.length; i++) {
hashChannels[i] = i;
}
HashGenerator hashGenerator = new InterpretedHashGenerator(ImmutableList.copyOf(hashTypes), hashChannels);
int positionCount = hashBlocks[0].getPositionCount();
BlockBuilder builder = BIGINT.createFixedSizeBlockBuilder(positionCount);
Page page = new Page(hashBlocks);
for (int i = 0; i < positionCount; i++) {
BIGINT.writeLong(builder, hashGenerator.hashPosition(i, page));
}
return builder.build();
}
use of com.facebook.presto.spi.block.BlockBuilder in project presto by prestodb.
the class MaterializedResult method appendToPage.
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();
}
use of com.facebook.presto.spi.block.BlockBuilder in project presto by prestodb.
the class RowPageBuilder method append.
private void append(int channel, Object element) {
BlockBuilder blockBuilder = builders.get(channel);
Type type = types.get(channel);
appendToBlockBuilder(type, element, blockBuilder);
}
Aggregations