in spanner-data-validator-java/src/main/java/com/google/migration/SourceRecordMapper.java [23:128]
public SourceRecord mapRow(@UnknownKeyFor @NonNull @Initialized ResultSet resultSet)
throws @UnknownKeyFor@NonNull@Initialized Exception {
SourceRecord sourceRecord = new SourceRecord();
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
int colCount = resultSetMetaData.getColumnCount();
for (int colOrdinal = 1; colOrdinal <= colCount; colOrdinal++) {
int type = resultSetMetaData.getColumnType(colOrdinal);
switch (type) {
case Types.CHAR:
case Types.VARCHAR:
case Types.LONGVARCHAR:
case Types.OTHER:
String stringVal = resultSet.getString(colOrdinal);
if (stringVal != null && !resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), stringVal);
}
break;
case Types.INTEGER:
Integer intVal = resultSet.getInt(colOrdinal);
if (!resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), intVal);
}
break;
case Types.DOUBLE:
Double doubleVal = resultSet.getDouble(colOrdinal);
if (!resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), doubleVal);
}
break;
case Types.REAL:
Float floatVal = resultSet.getFloat(colOrdinal);
if (!resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), floatVal);
}
break;
case Types.TINYINT:
Short shortVal = resultSet.getShort(colOrdinal);
if (!resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), shortVal);
}
break;
case Types.BIGINT:
Long longVal = resultSet.getLong(colOrdinal);
if (!resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), longVal);
}
break;
case Types.DECIMAL:
BigDecimal decimalVal = resultSet.getBigDecimal(colOrdinal);
if (!resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), decimalVal);
}
break;
case Types.BIT:
case Types.BOOLEAN:
Boolean boolVal = resultSet.getBoolean(colOrdinal);
if (!resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), boolVal);
}
break;
case Types.BINARY:
case Types.VARBINARY:
case Types.LONGVARBINARY:
byte[] bytesVal = resultSet.getBytes(colOrdinal);
if (bytesVal != null && !resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), bytesVal);
}
break;
case Types.DATE:
Date dateVal = resultSet.getDate(colOrdinal);
if (dateVal != null && !resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), dateVal);
}
break;
case Types.TIMESTAMP:
case Types.TIME_WITH_TIMEZONE:
Timestamp timestampVal = resultSet.getTimestamp(colOrdinal);
if (timestampVal != null && !resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), timestampVal);
}
break;
case Types.ARRAY:
Array arrayVal = resultSet.getArray(colOrdinal);
if (arrayVal != null && !resultSet.wasNull()) {
sourceRecord.addField(resultSetMetaData.getColumnName(colOrdinal),
resultSetMetaData.getColumnTypeName(colOrdinal), arrayVal);
}
break;
default:
LOG.error("Unsupported type: {}", type);
throw new RuntimeException(String.format("Unsupported type: %d", type));
}
}
return sourceRecord;
}