Skip to content

Commit 9424d32

Browse files
chore: support UUID in Cloud Client Executor (#3841)
* Add support for UUID in CloudClientExecutor * chore: handle keyProtoToCloudKey in CloudClientExecutor * style: as per plugin --------- Co-authored-by: rahul2393 <[email protected]>
1 parent 5022147 commit 9424d32

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,25 @@ 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(valueProto.setStringValue(uuidValue.toString()).build());
3063+
}
3064+
}
3065+
value.setArrayValue(builder.build());
3066+
value.setArrayType(
3067+
com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.UUID).build());
3068+
}
3069+
break;
30473070
case TIMESTAMP:
30483071
{
30493072
com.google.spanner.executor.v1.ValueList.Builder builder =
@@ -3227,6 +3250,7 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey(
32273250
case BYTES:
32283251
case FLOAT64:
32293252
case DATE:
3253+
case UUID:
32303254
case TIMESTAMP:
32313255
case NUMERIC:
32323256
case JSON:
@@ -3260,6 +3284,8 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey(
32603284
if (type.getCode() == TypeCode.NUMERIC) {
32613285
String ascii = part.getStringValue();
32623286
cloudKey.append(new BigDecimal(ascii));
3287+
} else if (type.getCode() == TypeCode.UUID) {
3288+
cloudKey.append(UUID.fromString(part.getStringValue()));
32633289
} else {
32643290
cloudKey.append(part.getStringValue());
32653291
}
@@ -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)