private void writeBlock()

in paimon-trino-common/src/main/java/org/apache/paimon/trino/TrinoPageSourceBase.java [232:289]


    private void writeBlock(BlockBuilder output, Type type, DataType logicalType, Object value) {
        if (type instanceof ArrayType) {
            BlockBuilder builder = output.beginBlockEntry();

            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),
                        builder);
            }

            output.closeEntry();
            return;
        }
        if (type instanceof RowType) {
            InternalRow rowData = (InternalRow) value;
            BlockBuilder builder = output.beginBlockEntry();
            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),
                        builder);
            }
            output.closeEntry();
            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();
            BlockBuilder builder = output.beginBlockEntry();
            for (int i = 0; i < keyArray.size(); i++) {
                appendTo(
                        type.getTypeParameters().get(0),
                        keyType,
                        InternalRowUtils.get(keyArray, i, keyType),
                        builder);
                appendTo(
                        type.getTypeParameters().get(1),
                        valueType,
                        InternalRowUtils.get(valueArray, i, valueType),
                        builder);
            }
            output.closeEntry();
            return;
        }
        throw new TrinoException(
                GENERIC_INTERNAL_ERROR, "Unhandled type for Block: " + type.getTypeSignature());
    }