use of com.facebook.presto.common.type.Type in project presto by prestodb.
the class MapFlatSelectiveStreamReader method getIntegerKeysBlock.
private Block getIntegerKeysBlock(List<DwrfSequenceEncoding> sequenceEncodings) {
Type keyType;
switch(keyOrcTypeKind) {
case BYTE:
keyType = TinyintType.TINYINT;
break;
case SHORT:
keyType = SmallintType.SMALLINT;
break;
case INT:
keyType = IntegerType.INTEGER;
break;
case LONG:
keyType = BigintType.BIGINT;
break;
default:
throw new IllegalArgumentException("Unsupported flat map key type: " + keyOrcTypeKind);
}
BlockBuilder blockBuilder = keyType.createBlockBuilder(null, sequenceEncodings.size());
for (int i = 0; i < keyCount; i++) {
keyType.writeLong(blockBuilder, sequenceEncodings.get(keyIndices[i]).getKey().getIntKey());
}
return blockBuilder.build();
}
use of com.facebook.presto.common.type.Type in project presto by prestodb.
the class StructBatchStreamReader method readBlock.
@Override
public Block readBlock() throws IOException {
if (!rowGroupOpen) {
openRowGroup();
}
if (readOffset > 0) {
if (presentStream != null) {
// skip ahead the present bit reader, but count the set bits
// and use this as the skip size for the field readers
readOffset = presentStream.countBitsSet(readOffset);
}
for (BatchStreamReader structField : structFields.values()) {
structField.prepareNextRead(readOffset);
}
}
boolean[] nullVector = null;
Block[] blocks;
if (presentStream == null) {
blocks = getBlocksForType(nextBatchSize);
} else {
nullVector = new boolean[nextBatchSize];
int nullValues = presentStream.getUnsetBits(nextBatchSize, nullVector);
if (nullValues != nextBatchSize) {
blocks = getBlocksForType(nextBatchSize - nullValues);
} else {
List<Type> typeParameters = type.getTypeParameters();
blocks = new Block[typeParameters.size()];
for (int i = 0; i < typeParameters.size(); i++) {
blocks[i] = typeParameters.get(i).createBlockBuilder(null, 0).build();
}
}
}
verify(Arrays.stream(blocks).mapToInt(Block::getPositionCount).distinct().count() == 1);
// Struct is represented as a row block
Block rowBlock = RowBlock.fromFieldBlocks(nextBatchSize, Optional.ofNullable(nullVector), blocks);
readOffset = 0;
nextBatchSize = 0;
return rowBlock;
}
use of com.facebook.presto.common.type.Type in project presto by prestodb.
the class RcFileTester method testMapRoundTrip.
private void testMapRoundTrip(Type type, Iterable<?> writeValues, Set<Format> skipFormats) throws Exception {
// json does not support null keys, so we just write the first value
Object nullKeyWrite = Iterables.getFirst(writeValues, null);
// values in simple map and mix in some null values
testRoundTripType(createMapType(type), transform(insertNullEvery(5, writeValues), value -> toHiveMap(nullKeyWrite, value)), skipFormats);
}
use of com.facebook.presto.common.type.Type in project presto by prestodb.
the class RcFileTester method decodeRecordReaderStruct.
private static List<Object> decodeRecordReaderStruct(Type type, List<?> fields) {
List<Type> fieldTypes = type.getTypeParameters();
List<Object> newFields = new ArrayList<>(fields.size());
for (int i = 0; i < fields.size(); i++) {
Type fieldType = fieldTypes.get(i);
Object field = fields.get(i);
newFields.add(decodeRecordReaderValue(fieldType, field));
}
return newFields;
}
use of com.facebook.presto.common.type.Type in project presto by prestodb.
the class RcFileTester method decodeRecordReaderMap.
private static Object decodeRecordReaderMap(Type type, Map<?, ?> map) {
Type keyType = type.getTypeParameters().get(0);
Type valueType = type.getTypeParameters().get(1);
Map<Object, Object> newMap = new HashMap<>();
for (Entry<?, ?> entry : map.entrySet()) {
newMap.put(decodeRecordReaderValue(keyType, entry.getKey()), decodeRecordReaderValue(valueType, entry.getValue()));
}
return newMap;
}
Aggregations