Skip to content

Commit 9f63ec4

Browse files
committed
Add support for UUID in CloudClientExecutor
1 parent ca3a67d commit 9f63ec4

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed

google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@
176176
import java.util.List;
177177
import java.util.Map;
178178
import java.util.Objects;
179+
import java.util.UUID;
179180
import java.util.concurrent.ExecutionException;
180181
import java.util.concurrent.Executor;
181182
import java.util.concurrent.ExecutorService;
@@ -2898,6 +2899,9 @@ private com.google.spanner.executor.v1.ValueList buildStruct(StructReader struct
28982899
case DATE:
28992900
value.setDateDaysValue(daysFromDate(struct.getDate(i)));
29002901
break;
2902+
case UUID:
2903+
value.setStringValue(struct.getUuid(i).toString());
2904+
break;
29012905
case NUMERIC:
29022906
String ascii = struct.getBigDecimal(i).toPlainString();
29032907
value.setStringValue(ascii);
@@ -3044,6 +3048,26 @@ private com.google.spanner.executor.v1.ValueList buildStruct(StructReader struct
30443048
com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.DATE).build());
30453049
}
30463050
break;
3051+
case UUID:
3052+
{
3053+
com.google.spanner.executor.v1.ValueList.Builder builder =
3054+
com.google.spanner.executor.v1.ValueList.newBuilder();
3055+
List<UUID> values = struct.getUuidList(i);
3056+
for (UUID uuidValue : values) {
3057+
com.google.spanner.executor.v1.Value.Builder valueProto =
3058+
com.google.spanner.executor.v1.Value.newBuilder();
3059+
if (uuidValue == null) {
3060+
builder.addValue(valueProto.setIsNull(true).build());
3061+
} else {
3062+
builder.addValue(
3063+
valueProto.setStringValue(uuidValue.toString()).build());
3064+
}
3065+
}
3066+
value.setArrayValue(builder.build());
3067+
value.setArrayType(
3068+
com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.UUID).build());
3069+
}
3070+
break;
30473071
case TIMESTAMP:
30483072
{
30493073
com.google.spanner.executor.v1.ValueList.Builder builder =
@@ -3227,6 +3251,7 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey(
32273251
case BYTES:
32283252
case FLOAT64:
32293253
case DATE:
3254+
case UUID:
32303255
case TIMESTAMP:
32313256
case NUMERIC:
32323257
case JSON:
@@ -3257,6 +3282,7 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey(
32573282
ErrorCode.INVALID_ARGUMENT, "Unsupported key part type: " + type.getCode().name());
32583283
}
32593284
} else if (part.hasStringValue()) {
3285+
// TODO: Handle UUID when it is part of the key.
32603286
if (type.getCode() == TypeCode.NUMERIC) {
32613287
String ascii = part.getStringValue();
32623288
cloudKey.append(new BigDecimal(ascii));
@@ -3314,6 +3340,9 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue(
33143340
case DATE:
33153341
return com.google.cloud.spanner.Value.date(
33163342
value.hasIsNull() ? null : dateFromDays(value.getDateDaysValue()));
3343+
case UUID:
3344+
return com.google.cloud.spanner.Value.uuid(
3345+
value.hasIsNull() ? null : UUID.fromString(value.getStringValue()));
33173346
case NUMERIC:
33183347
{
33193348
if (value.hasIsNull()) {
@@ -3438,6 +3467,20 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue(
34383467
.collect(Collectors.toList()),
34393468
CloudClientExecutor::dateFromDays));
34403469
}
3470+
case UUID:
3471+
if (value.hasIsNull()) {
3472+
return com.google.cloud.spanner.Value.uuidArray(null);
3473+
} else {
3474+
return com.google.cloud.spanner.Value.uuidArray(
3475+
unmarshallValueList(
3476+
value.getArrayValue().getValueList().stream()
3477+
.map(com.google.spanner.executor.v1.Value::getIsNull)
3478+
.collect(Collectors.toList()),
3479+
value.getArrayValue().getValueList().stream()
3480+
.map(com.google.spanner.executor.v1.Value::getStringValue)
3481+
.collect(Collectors.toList()),
3482+
UUID::fromString));
3483+
}
34413484
case NUMERIC:
34423485
{
34433486
if (value.hasIsNull()) {
@@ -3603,6 +3646,8 @@ private static com.google.cloud.spanner.Type typeProtoToCloudType(
36033646
return com.google.cloud.spanner.Type.float64();
36043647
case DATE:
36053648
return com.google.cloud.spanner.Type.date();
3649+
case UUID:
3650+
return com.google.cloud.spanner.Type.uuid();
36063651
case TIMESTAMP:
36073652
return com.google.cloud.spanner.Type.timestamp();
36083653
case NUMERIC:
@@ -3659,6 +3704,8 @@ private static com.google.spanner.v1.Type cloudTypeToTypeProto(@Nonnull Type clo
36593704
return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.TIMESTAMP).build();
36603705
case DATE:
36613706
return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.DATE).build();
3707+
case UUID:
3708+
return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.UUID).build();
36623709
case NUMERIC:
36633710
return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.NUMERIC).build();
36643711
case PG_NUMERIC:

0 commit comments

Comments
 (0)