private static Object resolveObject2Maxcompute()

in seatunnel-connectors-v2/connector-maxcompute/src/main/java/org/apache/seatunnel/connectors/seatunnel/maxcompute/util/MaxcomputeTypeMapper.java [215:295]


    private static Object resolveObject2Maxcompute(Object field, TypeInfo typeInfo) {
        if (field == null) {
            return null;
        }
        switch (typeInfo.getOdpsType()) {
            case ARRAY:
                ArrayList<Object> origArray = new ArrayList<>();
                Arrays.stream((Object[]) field).iterator().forEachRemaining(origArray::add);
                switch (((ArrayTypeInfo) typeInfo).getElementTypeInfo().getOdpsType()) {
                    case STRING:
                    case BOOLEAN:
                    case INT:
                    case BIGINT:
                    case FLOAT:
                    case DOUBLE:
                        return origArray;
                    default:
                        throw new MaxcomputeConnectorException(
                                CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
                                String.format(
                                        "Maxcompute type not support this type [%s] now",
                                        typeInfo.getTypeName()));
                }
            case MAP:
                HashMap<Object, Object> dataMap = new HashMap<>();
                TypeInfo keyTypeInfo = ((MapTypeInfo) typeInfo).getKeyTypeInfo();
                TypeInfo valueTypeInfo = ((MapTypeInfo) typeInfo).getValueTypeInfo();
                HashMap<Object, Object> origDataMap = (HashMap<Object, Object>) field;
                origDataMap.forEach(
                        (key, value) ->
                                dataMap.put(
                                        resolveObject2Maxcompute(key, keyTypeInfo),
                                        resolveObject2Maxcompute(value, valueTypeInfo)));
                return origDataMap;
            case STRUCT:
                Object[] fields = ((SeaTunnelRow) field).getFields();
                List<TypeInfo> typeInfos = ((StructTypeInfo) typeInfo).getFieldTypeInfos();
                ArrayList<Object> origStruct = new ArrayList<>();
                for (int i = 0; i < fields.length; i++) {
                    origStruct.add(resolveObject2Maxcompute(fields[i], typeInfos.get(i)));
                }
                return new SimpleStruct((StructTypeInfo) typeInfo, origStruct);
            case TINYINT:
            case SMALLINT:
            case INT:
            case FLOAT:
            case DOUBLE:
            case BIGINT:
            case BOOLEAN:
            case DECIMAL:
            case TIMESTAMP_NTZ:
            case DATE:
                return field;
            case BINARY:
                return new Binary((byte[]) field);
            case VARCHAR:
                return new Varchar((String) field);
            case CHAR:
                return new Char((String) field);
            case STRING:
            case JSON:
                if (field instanceof byte[]) {
                    return new String((byte[]) field);
                }
                if (field instanceof Char) {
                    return rtrim(String.valueOf(field));
                }
                return String.valueOf(field);
            case TIMESTAMP:
                return Timestamp.valueOf((LocalDateTime) field);
            case DATETIME:
                return Date.from(
                        ((LocalDateTime) field).atZone(ZoneId.systemDefault()).toInstant());
            default:
                throw new MaxcomputeConnectorException(
                        CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,
                        String.format(
                                "Maxcompute type not support this type [%s] now",
                                typeInfo.getTypeName()));
        }
    }