in src/main/java/org/apache/paimon/trino/TrinoPageSource.java [283:364]
protected void writeBlock(BlockBuilder output, Type type, DataType logicalType, Object value) {
if (type instanceof ArrayType) {
ArrayBlockBuilder arrayBlockBuilder = (ArrayBlockBuilder) output;
try {
arrayBlockBuilder.buildEntry(
(ArrayValueBuilder<Throwable>)
elementBuilder -> {
InternalArray arrayData = (InternalArray) value;
DataType elementType =
DataTypeChecks.getNestedTypes(logicalType).get(0);
for (int i = 0; i < arrayData.size(); i++) {
appendTo(
type.getTypeParameters().get(0),
elementType,
InternalRowUtils.get(arrayData, i, elementType),
elementBuilder);
}
});
} catch (Throwable e) {
throw new RuntimeException(e);
}
return;
}
if (type instanceof RowType) {
RowBlockBuilder rowBlockBuilder = (RowBlockBuilder) output;
try {
rowBlockBuilder.buildEntry(
(RowValueBuilder<Throwable>)
fieldBuilders -> {
InternalRow rowData = (InternalRow) value;
for (int index = 0;
index < type.getTypeParameters().size();
index++) {
Type fieldType = type.getTypeParameters().get(index);
DataType fieldLogicalType =
((org.apache.paimon.types.RowType) logicalType)
.getTypeAt(index);
appendTo(
fieldType,
fieldLogicalType,
InternalRowUtils.get(
rowData, index, fieldLogicalType),
fieldBuilders.get(index));
}
});
} catch (Throwable e) {
throw new RuntimeException(e);
}
return;
}
if (type instanceof MapType) {
InternalMap mapData = (InternalMap) value;
InternalArray keyArray = mapData.keyArray();
InternalArray valueArray = mapData.valueArray();
DataType keyType = ((org.apache.paimon.types.MapType) logicalType).getKeyType();
DataType valueType = ((org.apache.paimon.types.MapType) logicalType).getValueType();
MapBlockBuilder mapBlockBuilder = (MapBlockBuilder) output;
try {
mapBlockBuilder.buildEntry(
(MapValueBuilder<Throwable>)
(keyBuilder, valueBuilder) -> {
for (int i = 0; i < keyArray.size(); i++) {
appendTo(
type.getTypeParameters().get(0),
keyType,
InternalRowUtils.get(keyArray, i, keyType),
keyBuilder);
appendTo(
type.getTypeParameters().get(1),
valueType,
InternalRowUtils.get(valueArray, i, valueType),
valueBuilder);
}
});
} catch (Throwable e) {
throw new RuntimeException(e);
}
return;
}
throw new TrinoException(
GENERIC_INTERNAL_ERROR, "Unhandled type for Block: " + type.getTypeSignature());
}