in spanner-data-validator-java/src/main/java/com/google/migration/Helpers.java [168:246]
public static GenericRecord jdbcResultSetToGenericRecord(String recordName,
String schemaAsJson,
ResultSet jdbcResultSet) throws SQLException {
// TODO: optimize schema building (maybe pass it in)
FieldAssembler<Schema> fields = SchemaBuilder
.record(recordName).namespace("com.google.spannermigration.schemas")
.fields();
ResultSetMetaData rsMetaData = jdbcResultSet.getMetaData();
int colCount = rsMetaData.getColumnCount();
for(int i = 0; i < colCount; i++) {
int colOrdinal = i+1;
String colName = rsMetaData.getColumnName(colOrdinal);
int type = rsMetaData.getColumnType(colOrdinal);
// https://docs.oracle.com/javase/8/docs/api/constant-values.html
// look for (java.sql.Types)
switch (type) {
case Types.CHAR:
case Types.VARCHAR:
case Types.OTHER:
fields = fields.name(colName).type().nullable().stringType().noDefault();
break;
case Types.BIT:
case Types.BOOLEAN:
fields = fields.name(colName).type().nullable().booleanType().noDefault();
break;
case Types.INTEGER:
fields = fields.name(colName).type().nullable().intType().noDefault();
break;
case Types.BIGINT:
case Types.TIMESTAMP:
case Types.TIME_WITH_TIMEZONE:
fields = fields.name(colName).type().nullable().longType().noDefault();
break;
default:
LOG.error(String.format("Unsupported type: %d", type));
throw new RuntimeException(String.format("Unsupported type: %d", type));
} // switch
} // for
Schema schema = fields.endRecord();
GenericRecord record = new Record(schema);
for(int i = 0; i < colCount; i++) {
int colOrdinal = i+1;
String colName = rsMetaData.getColumnName(colOrdinal);
int type = rsMetaData.getColumnType(colOrdinal);
// https://docs.oracle.com/javase/8/docs/api/constant-values.html
// look for (java.sql.Types)
switch (type) {
case Types.CHAR:
case Types.VARCHAR:
case Types.OTHER:
record.put(colName, jdbcResultSet.getString(colOrdinal));
break;
case Types.BIT:
case Types.BOOLEAN:
record.put(colName, jdbcResultSet.getBoolean(colOrdinal));
break;
case Types.INTEGER:
record.put(colName, jdbcResultSet.getInt(colOrdinal));
break;
case Types.BIGINT:
record.put(colName, jdbcResultSet.getLong(colOrdinal));
case Types.TIMESTAMP:
case Types.TIME_WITH_TIMEZONE:
record.put(colName, jdbcResultSet.getTimestamp(colOrdinal).getTime());
break;
default:
LOG.error(String.format("Unsupported type: %d", type));
throw new RuntimeException(String.format("Unsupported type: %d", type));
} // switch
} // for
return record;
}