in v2/googlecloud-to-googlecloud/src/main/java/com/google/cloud/teleport/v2/templates/spannerchangestreamstobigquery/schemautils/SpannerToBigQueryUtils.java [169:242]
private static Object getColumnValueFromResultSet(
TrackedSpannerColumn spannerColumn, ResultSet resultSet) {
String columnName = spannerColumn.getName();
Type columnType = spannerColumn.getType();
if (resultSet.isNull(columnName)) {
return null;
}
// All the NULL columns in the array are filtered out since BigQuery doesn't allow NULL in the
// array.
if (columnType.equals(Type.array(Type.bool()))) {
return removeNulls(resultSet.getBooleanList(columnName));
} else if (columnType.equals(Type.array(Type.bytes()))) {
return removeNulls(resultSet.getBytesList(columnName)).stream()
.map(e -> e.toBase64())
.collect(Collectors.toList());
} else if (columnType.equals(Type.array(Type.date()))) {
return removeNulls(resultSet.getDateList(columnName)).stream()
.map(e -> e.toString())
.collect(Collectors.toList());
} else if (columnType.equals(Type.array(Type.float32()))) {
return removeNulls(resultSet.getFloatList(columnName));
} else if (columnType.equals(Type.array(Type.float64()))) {
return removeNulls(resultSet.getDoubleList(columnName));
} else if (columnType.equals(Type.array(Type.int64()))) {
return removeNulls(resultSet.getLongList(columnName));
} else if (columnType.equals(Type.array(Type.json()))) {
return removeNulls(resultSet.getJsonList(columnName));
} else if (columnType.equals(Type.array(Type.numeric()))) {
return removeNulls(resultSet.getBigDecimalList(columnName));
} else if (columnType.equals(Type.array(Type.pgNumeric()))) {
return removeNulls(resultSet.getStringList(columnName));
} else if (columnType.equals(Type.array(Type.pgJsonb()))) {
return removeNulls(resultSet.getPgJsonbList(columnName));
} else if (columnType.equals(Type.array(Type.string()))) {
return removeNulls(resultSet.getStringList(columnName));
} else if (columnType.equals(Type.array(Type.timestamp()))) {
return removeNulls(resultSet.getTimestampList(columnName)).stream()
.map(e -> e.toString())
.collect(Collectors.toList());
} else {
Type.Code columnTypeCode = columnType.getCode();
switch (columnTypeCode) {
case BOOL:
return resultSet.getBoolean(columnName);
case BYTES:
return resultSet.getBytes(columnName).toBase64();
case DATE:
return resultSet.getDate(columnName).toString();
case FLOAT32:
return resultSet.getFloat(columnName);
case FLOAT64:
return resultSet.getDouble(columnName);
case INT64:
return resultSet.getLong(columnName);
case JSON:
return resultSet.getJson(columnName);
case NUMERIC:
return resultSet.getBigDecimal(columnName);
case PG_NUMERIC:
return resultSet.getString(columnName);
case PG_JSONB:
return resultSet.getPgJsonb(columnName);
case STRING:
return resultSet.getString(columnName);
case TIMESTAMP:
return resultSet.getTimestamp(columnName).toString();
default:
throw new IllegalArgumentException(
String.format("Unsupported Spanner type: %s", columnTypeCode));
}
}
}