use of io.trino.spi.type.RowType.Field in project trino by trinodb.
the class AvroColumnDecoder method serializeRow.
private static Block serializeRow(BlockBuilder parentBlockBuilder, Object value, Type type, String columnName) {
if (value == null) {
checkState(parentBlockBuilder != null, "parent block builder is null");
parentBlockBuilder.appendNull();
return null;
}
BlockBuilder blockBuilder;
if (parentBlockBuilder != null) {
blockBuilder = parentBlockBuilder;
} else {
blockBuilder = type.createBlockBuilder(null, 1);
}
BlockBuilder singleRowBuilder = blockBuilder.beginBlockEntry();
GenericRecord record = (GenericRecord) value;
List<Field> fields = ((RowType) type).getFields();
for (Field field : fields) {
checkState(field.getName().isPresent(), "field name not found");
serializeObject(singleRowBuilder, record.get(field.getName().get()), field.getType(), columnName);
}
blockBuilder.closeEntry();
if (parentBlockBuilder == null) {
return blockBuilder.getObject(0, Block.class);
}
return null;
}
use of io.trino.spi.type.RowType.Field in project trino by trinodb.
the class TestPushDownDereferencesRules method testMultiLevelPushdown.
@Test
public void testMultiLevelPushdown() {
Type complexType = rowType(field("f1", rowType(field("f1", BIGINT), field("f2", BIGINT))), field("f2", BIGINT));
tester().assertThat(new PushDownDereferenceThroughProject(tester().getTypeAnalyzer())).on(p -> p.project(Assignments.of(p.symbol("expr_1"), expression("a[1]"), p.symbol("expr_2"), expression("a[1][1] + 2 + b[1][1] + b[1][2]")), p.project(Assignments.identity(ImmutableList.of(p.symbol("a", complexType), p.symbol("b", complexType))), p.values(p.symbol("a", complexType), p.symbol("b", complexType))))).matches(strictProject(ImmutableMap.of("expr_1", PlanMatchPattern.expression("a_f1"), "expr_2", PlanMatchPattern.expression("a_f1[1] + 2 + b_f1_f1 + b_f1_f2")), strictProject(ImmutableMap.of("a", PlanMatchPattern.expression("a"), "b", PlanMatchPattern.expression("b"), "a_f1", PlanMatchPattern.expression("a[1]"), "b_f1_f1", PlanMatchPattern.expression("b[1][1]"), "b_f1_f2", PlanMatchPattern.expression("b[1][2]")), values("a", "b"))));
}
use of io.trino.spi.type.RowType.Field in project trino by trinodb.
the class RaptorStorageManager method toOrcFileType.
static Type toOrcFileType(Type raptorType, TypeManager typeManager) {
// TIMESTAMPS are stored as BIGINT to void the poor encoding in ORC
if (raptorType.equals(TIMESTAMP_MILLIS)) {
return BIGINT;
}
if (raptorType instanceof ArrayType) {
Type elementType = toOrcFileType(((ArrayType) raptorType).getElementType(), typeManager);
return new ArrayType(elementType);
}
if (raptorType instanceof MapType) {
TypeSignature keyType = toOrcFileType(((MapType) raptorType).getKeyType(), typeManager).getTypeSignature();
TypeSignature valueType = toOrcFileType(((MapType) raptorType).getValueType(), typeManager).getTypeSignature();
return typeManager.getParameterizedType(StandardTypes.MAP, ImmutableList.of(TypeSignatureParameter.typeParameter(keyType), TypeSignatureParameter.typeParameter(valueType)));
}
if (raptorType instanceof RowType) {
List<Field> fields = ((RowType) raptorType).getFields().stream().map(field -> new Field(field.getName(), toOrcFileType(field.getType(), typeManager))).collect(toImmutableList());
return RowType.from(fields);
}
return raptorType;
}
Aggregations