private void writeBlock()

in paimon-presto-common/src/main/java/org/apache/paimon/presto/PrestoPageSourceBase.java [235:294]


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

            InternalArray arrayData = (InternalArray) value;
            DataType elementType = DataTypeChecks.getNestedTypes(paimonType).get(0);
            for (int i = 0; i < arrayData.size(); i++) {
                appendTo(
                        prestoType.getTypeParameters().get(0),
                        elementType,
                        InternalRowUtils.get(arrayData, i, elementType),
                        builder);
            }

            output.closeEntry();
            return;
        }
        if (prestoType instanceof RowType) {
            InternalRow rowData = (InternalRow) value;
            BlockBuilder builder = output.beginBlockEntry();
            for (int index = 0; index < prestoType.getTypeParameters().size(); index++) {
                Type fieldType = prestoType.getTypeParameters().get(index);
                DataType fieldLogicalType =
                        ((org.apache.paimon.types.RowType) paimonType).getTypeAt(index);
                appendTo(
                        fieldType,
                        fieldLogicalType,
                        InternalRowUtils.get(rowData, index, fieldLogicalType),
                        builder);
            }
            output.closeEntry();
            return;
        }
        if (prestoType instanceof MapType) {
            InternalMap mapData = (InternalMap) value;
            InternalArray keyArray = mapData.keyArray();
            InternalArray valueArray = mapData.valueArray();
            DataType keyType = ((org.apache.paimon.types.MapType) paimonType).getKeyType();
            DataType valueType = ((org.apache.paimon.types.MapType) paimonType).getValueType();
            BlockBuilder builder = output.beginBlockEntry();
            for (int i = 0; i < keyArray.size(); i++) {
                appendTo(
                        prestoType.getTypeParameters().get(0),
                        keyType,
                        InternalRowUtils.get(keyArray, i, keyType),
                        builder);
                appendTo(
                        prestoType.getTypeParameters().get(1),
                        valueType,
                        InternalRowUtils.get(valueArray, i, valueType),
                        builder);
            }
            output.closeEntry();
            return;
        }
        throw new PrestoException(
                GENERIC_INTERNAL_ERROR,
                "Unhandled type for Block: " + prestoType.getTypeSignature());
    }