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