public static Object convertStringToInternalObject()

in flink-vvp-connector-adbpg/src/main/java/org/apache/flink/connector/jdbc/table/utils/YaStringUtils.java [168:290]


    public static Object convertStringToInternalObject(String v, DataType dataType) {
        if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.BINARY)) {
            return parseBytes(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.VARBINARY)) {
            return parseBytes(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.CHAR)) {
            return StringData.fromString(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.VARCHAR)) {
            return StringData.fromString(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.TINYINT)) {
            return Byte.valueOf(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.SMALLINT)) {
            return Short.valueOf(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.INTEGER)) {
            return Integer.valueOf(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.BIGINT)) {
            return Long.valueOf(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.FLOAT)) {
            return Float.valueOf(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.DOUBLE)) {
            return Double.valueOf(v);
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.BOOLEAN)) {
            v = v.equals("t") ? "true" : "false";
            return Boolean.valueOf(v);
        } else if (dataType.getLogicalType()
                .getTypeRoot()
                .equals(LogicalTypeRoot.TIMESTAMP_WITHOUT_TIME_ZONE)) {
            // Postgres supports TIMESTAMP_WITHOUT_TIME_ZONE and TIMESTAMP_WITH_TIME_ZONE
            // Flink doesn't support TIMESTAMP_WITH_TIME_ZONE
            String timezonePart = v.substring(v.length() - 3);
            Timestamp ts;
            if (isValidTimeZone(timezonePart)) {
                String datetimePart = v.substring(0, v.length() - 3).replace(" ", "T");
                ts =
                        Timestamp.valueOf(
                                ZonedDateTime.of(
                                                LocalDateTime.parse(datetimePart),
                                                ZoneId.of(timezonePart))
                                        .toLocalDateTime());
            } else {
                ts = Timestamp.valueOf(LocalDateTime.parse(v.replace(" ", "T")));
            }
            return TIMESTAMP_CONVERTER.toInternal(ts);
        } else if (dataType.getLogicalType()
                .getTypeRoot()
                .equals(LogicalTypeRoot.TIME_WITHOUT_TIME_ZONE)) {
            return TIME_CONVERTER.toInternal(Time.valueOf(v));
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.DATE)) {
            return DATE_CONVERTER.toInternal(Date.valueOf(v));
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.DECIMAL)) {
            DecimalType logicalType = (DecimalType) dataType.getLogicalType();
            return DecimalData.fromBigDecimal(
                    new BigDecimal(v), logicalType.getPrecision(), logicalType.getScale());
        } else if (dataType.getLogicalType().getTypeRoot().equals(LogicalTypeRoot.ARRAY)) {
            String[] arrayObject = v.split("\\{|}|,");
            if (dataType.getLogicalType()
                    .getChildren()
                    .get(0)
                    .getTypeRoot()
                    .equals(LogicalTypeRoot.BIGINT)) {
                long[] arrLongObject = new long[arrayObject.length - 1];
                for (int i = 1; i < arrayObject.length; ++i) {
                    arrLongObject[i - 1] = Long.valueOf(arrayObject[i]);
                }
                return new GenericArrayData(arrLongObject);
            } else if (dataType.getLogicalType()
                    .getChildren()
                    .get(0)
                    .getTypeRoot()
                    .equals(LogicalTypeRoot.INTEGER)) {
                int[] arrIntObject = new int[arrayObject.length - 1];
                for (int i = 1; i < arrayObject.length; ++i) {
                    arrIntObject[i - 1] = Integer.valueOf(arrayObject[i]);
                }
                return new GenericArrayData(arrIntObject);
            } else if (dataType.getLogicalType()
                    .getChildren()
                    .get(0)
                    .getTypeRoot()
                    .equals(LogicalTypeRoot.FLOAT)) {
                float[] arrFloatObject = new float[arrayObject.length - 1];
                for (int i = 1; i < arrayObject.length; ++i) {
                    arrFloatObject[i - 1] = Float.valueOf(arrayObject[i]);
                }
                return new GenericArrayData(arrFloatObject);
            } else if (dataType.getLogicalType()
                    .getChildren()
                    .get(0)
                    .getTypeRoot()
                    .equals(LogicalTypeRoot.DOUBLE)) {
                double[] arrDoubleObject = new double[arrayObject.length - 1];
                for (int i = 1; i < arrayObject.length; ++i) {
                    arrDoubleObject[i - 1] = Double.valueOf(arrayObject[i]);
                }
                return new GenericArrayData(arrDoubleObject);
            } else if (dataType.getLogicalType()
                    .getChildren()
                    .get(0)
                    .getTypeRoot()
                    .equals(LogicalTypeRoot.VARCHAR)) {
                StringData[] arrStringObject = new StringData[arrayObject.length - 1];
                for (int i = 1; i < arrayObject.length; ++i) {
                    arrStringObject[i - 1] = StringData.fromString(arrayObject[i]);
                }
                return new GenericArrayData(arrStringObject);
            } else if (dataType.getLogicalType()
                    .getChildren()
                    .get(0)
                    .getTypeRoot()
                    .equals(LogicalTypeRoot.BOOLEAN)) {
                boolean[] arrBoolObject = new boolean[arrayObject.length - 1];
                for (int i = 1; i < arrayObject.length; ++i) {
                    arrayObject[i] = arrayObject[i].equals("t") ? "true" : "false";
                    arrBoolObject[i - 1] = Boolean.valueOf(arrayObject[i]);
                }
                return new GenericArrayData(arrBoolObject);
            } else {
                throw new IllegalArgumentException(
                        "Currently does not support type: " + dataType);
            }
        }
        throw new IllegalArgumentException("Unknown type: " + dataType);
    }