in dbeam-core/src/main/java/com/spotify/dbeam/avro/JdbcAvroRecord.java [75:130]
static SqlFunction<ResultSet, Object> computeMapping(
final ResultSetMetaData meta, final int column) throws SQLException {
switch (meta.getColumnType(column)) {
case VARCHAR:
case CHAR:
case CLOB:
case LONGNVARCHAR:
case LONGVARCHAR:
case NCHAR:
return resultSet -> resultSet.getString(column);
case BIGINT:
// In PostgreSQL, mySQL and H2, BIGINT is 8 bytes and fits into Java long
return resultSet -> resultSet.getLong(column);
case INTEGER:
case SMALLINT:
case TINYINT:
if (Long.class.getCanonicalName().equals(meta.getColumnClassName(column))) {
return resultSet -> resultSet.getLong(column);
}
return resultSet -> resultSet.getInt(column);
case TIMESTAMP:
case DATE:
case TIME:
case TIME_WITH_TIMEZONE:
return resultSet -> {
final Timestamp timestamp = resultSet.getTimestamp(column, CALENDAR);
if (timestamp != null) {
return timestamp.getTime();
} else {
return null;
}
};
case BOOLEAN:
return resultSet -> resultSet.getBoolean(column);
case BIT:
if (meta.getPrecision(column) <= 1) {
return resultSet -> resultSet.getBoolean(column);
} else {
return resultSet -> nullableBytes(resultSet.getBytes(column));
}
case ARRAY:
return resultSet -> resultSet.getArray(column);
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case BLOB:
return resultSet -> nullableBytes(resultSet.getBytes(column));
case DOUBLE:
return resultSet -> resultSet.getDouble(column);
case FLOAT:
case REAL:
return resultSet -> resultSet.getFloat(column);
default:
return resultSet -> resultSet.getString(column);
}
}