in hologres-connector-flink-base/src/main/java/com/alibaba/ververica/connectors/hologres/source/bulkread/HologresBulkReader.java [125:195]
private Object convert(DataType dataType, ResultSet resultSet, int resultSetIndex)
throws SQLException {
if (resultSet.getObject(resultSetIndex) == null) {
return null;
}
switch (dataType.getLogicalType().getTypeRoot()) {
case BINARY:
case VARBINARY:
return resultSet.getBytes(resultSetIndex);
case CHAR:
case VARCHAR:
return StringData.fromString(resultSet.getString(resultSetIndex));
case TINYINT:
return resultSet.getByte(resultSetIndex);
case SMALLINT:
return resultSet.getShort(resultSetIndex);
case INTEGER:
return resultSet.getInt(resultSetIndex);
case BIGINT:
return resultSet.getLong(resultSetIndex);
case FLOAT:
return resultSet.getFloat(resultSetIndex);
case DOUBLE:
return resultSet.getDouble(resultSetIndex);
case BOOLEAN:
return resultSet.getBoolean(resultSetIndex);
case DECIMAL:
DecimalType logicalType = (DecimalType) dataType.getLogicalType();
return DecimalData.fromBigDecimal(
resultSet.getBigDecimal(resultSetIndex),
logicalType.getPrecision(),
logicalType.getScale());
case TIMESTAMP_WITHOUT_TIME_ZONE:
return TimestampData.fromTimestamp(resultSet.getTimestamp(resultSetIndex));
case TIME_WITHOUT_TIME_ZONE:
return (int)
(resultSet.getTime(resultSetIndex).toLocalTime().toNanoOfDay()
/ 1_000_000L);
case DATE:
return (int) resultSet.getDate(resultSetIndex).toLocalDate().toEpochDay();
case ARRAY:
switch (dataType.getLogicalType().getChildren().get(0).getTypeRoot()) {
case BIGINT:
return new GenericArrayData(
(Long[]) resultSet.getArray(resultSetIndex).getArray());
case INTEGER:
return new GenericArrayData(
(Integer[]) resultSet.getArray(resultSetIndex).getArray());
case FLOAT:
return new GenericArrayData(
(Float[]) resultSet.getArray(resultSetIndex).getArray());
case DOUBLE:
return new GenericArrayData(
(Double[]) resultSet.getArray(resultSetIndex).getArray());
case BOOLEAN:
return new GenericArrayData(
(Boolean[]) resultSet.getArray(resultSetIndex).getArray());
case VARCHAR:
String[] values = (String[]) resultSet.getArray(resultSetIndex).getArray();
StringData[] arrStringObject = new StringData[values.length];
for (int i = 0; i < values.length; ++i) {
arrStringObject[i] = StringData.fromString(values[i]);
}
return new GenericArrayData(arrStringObject);
default:
throw new IllegalArgumentException("Unknown hologres type: " + dataType);
}
default:
throw new IllegalArgumentException("Unknown hologres type: " + dataType);
}
}