in src/main/java/com/google/cloud/spanner/pgadapter/utils/BinaryCopyParser.java [262:324]
public Value getValue(Type type, int columnIndex) {
Preconditions.checkArgument(
columnIndex >= 0 && columnIndex < numColumns(),
"columnIndex must be >= 0 && < numColumns");
BinaryField field = fields[columnIndex];
switch (type.getCode()) {
case BOOL:
return Value.bool(field.data == null ? null : BooleanParser.toBoolean(field.data));
case INT64:
return Value.int64(field.data == null ? null : LongParser.toLong(field.data));
case PG_NUMERIC:
return Value.pgNumeric(
field.data == null ? null : NumericParser.toNumericString(field.data));
case FLOAT32:
return Value.float32(field.data == null ? null : FloatParser.toFloat(field.data));
case FLOAT64:
return Value.float64(field.data == null ? null : DoubleParser.toDouble(field.data));
case STRING:
return Value.string(field.data == null ? null : StringParser.toString(field.data));
case PG_JSONB:
return Value.pgJsonb(field.data == null ? null : JsonbParser.toString(field.data));
case BYTES:
return Value.bytes(field.data == null ? null : BinaryParser.toByteArray(field.data));
case TIMESTAMP:
return Value.timestamp(
field.data == null ? null : TimestampParser.toTimestamp(field.data));
case INTERVAL:
return Value.interval(field.data == null ? null : IntervalParser.toInterval(field.data));
case DATE:
return Value.date(field.data == null ? null : DateParser.toDate(field.data));
case ARRAY:
switch (type.getArrayElementType().getCode()) {
case STRING:
return Value.stringArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
case PG_JSONB:
return Value.pgJsonbArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
case BOOL:
return Value.boolArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
case INT64:
return Value.int64Array(cast(ArrayParser.binaryArrayToList(field.data, true)));
case FLOAT32:
return Value.float32Array(cast(ArrayParser.binaryArrayToList(field.data, true)));
case FLOAT64:
return Value.float64Array(cast(ArrayParser.binaryArrayToList(field.data, true)));
case PG_NUMERIC:
return Value.pgNumericArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
case BYTES:
return Value.bytesArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
case DATE:
return Value.dateArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
case TIMESTAMP:
return Value.timestampArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
case INTERVAL:
return Value.intervalArray(cast(ArrayParser.binaryArrayToList(field.data, true)));
}
case STRUCT:
case NUMERIC:
default:
String message = "Unsupported type for COPY: " + type;
logger.log(Level.WARNING, message);
throw SpannerExceptionFactory.newSpannerException(ErrorCode.INVALID_ARGUMENT, message);
}
}