protected void writeBlock()

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());
    }