|
176 | 176 | import java.util.List; |
177 | 177 | import java.util.Map; |
178 | 178 | import java.util.Objects; |
| 179 | +import java.util.UUID; |
179 | 180 | import java.util.concurrent.ExecutionException; |
180 | 181 | import java.util.concurrent.Executor; |
181 | 182 | import java.util.concurrent.ExecutorService; |
@@ -2898,6 +2899,9 @@ private com.google.spanner.executor.v1.ValueList buildStruct(StructReader struct |
2898 | 2899 | case DATE: |
2899 | 2900 | value.setDateDaysValue(daysFromDate(struct.getDate(i))); |
2900 | 2901 | break; |
| 2902 | + case UUID: |
| 2903 | + value.setStringValue(struct.getUuid(i).toString()); |
| 2904 | + break; |
2901 | 2905 | case NUMERIC: |
2902 | 2906 | String ascii = struct.getBigDecimal(i).toPlainString(); |
2903 | 2907 | value.setStringValue(ascii); |
@@ -3044,6 +3048,25 @@ private com.google.spanner.executor.v1.ValueList buildStruct(StructReader struct |
3044 | 3048 | com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.DATE).build()); |
3045 | 3049 | } |
3046 | 3050 | 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; |
3047 | 3070 | case TIMESTAMP: |
3048 | 3071 | { |
3049 | 3072 | com.google.spanner.executor.v1.ValueList.Builder builder = |
@@ -3227,6 +3250,7 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey( |
3227 | 3250 | case BYTES: |
3228 | 3251 | case FLOAT64: |
3229 | 3252 | case DATE: |
| 3253 | + case UUID: |
3230 | 3254 | case TIMESTAMP: |
3231 | 3255 | case NUMERIC: |
3232 | 3256 | case JSON: |
@@ -3260,6 +3284,8 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey( |
3260 | 3284 | if (type.getCode() == TypeCode.NUMERIC) { |
3261 | 3285 | String ascii = part.getStringValue(); |
3262 | 3286 | cloudKey.append(new BigDecimal(ascii)); |
| 3287 | + } else if (type.getCode() == TypeCode.UUID) { |
| 3288 | + cloudKey.append(UUID.fromString(part.getStringValue())); |
3263 | 3289 | } else { |
3264 | 3290 | cloudKey.append(part.getStringValue()); |
3265 | 3291 | } |
@@ -3314,6 +3340,9 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue( |
3314 | 3340 | case DATE: |
3315 | 3341 | return com.google.cloud.spanner.Value.date( |
3316 | 3342 | 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())); |
3317 | 3346 | case NUMERIC: |
3318 | 3347 | { |
3319 | 3348 | if (value.hasIsNull()) { |
@@ -3438,6 +3467,20 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue( |
3438 | 3467 | .collect(Collectors.toList()), |
3439 | 3468 | CloudClientExecutor::dateFromDays)); |
3440 | 3469 | } |
| 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 | + } |
3441 | 3484 | case NUMERIC: |
3442 | 3485 | { |
3443 | 3486 | if (value.hasIsNull()) { |
@@ -3603,6 +3646,8 @@ private static com.google.cloud.spanner.Type typeProtoToCloudType( |
3603 | 3646 | return com.google.cloud.spanner.Type.float64(); |
3604 | 3647 | case DATE: |
3605 | 3648 | return com.google.cloud.spanner.Type.date(); |
| 3649 | + case UUID: |
| 3650 | + return com.google.cloud.spanner.Type.uuid(); |
3606 | 3651 | case TIMESTAMP: |
3607 | 3652 | return com.google.cloud.spanner.Type.timestamp(); |
3608 | 3653 | case NUMERIC: |
@@ -3659,6 +3704,8 @@ private static com.google.spanner.v1.Type cloudTypeToTypeProto(@Nonnull Type clo |
3659 | 3704 | return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.TIMESTAMP).build(); |
3660 | 3705 | case DATE: |
3661 | 3706 | 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(); |
3662 | 3709 | case NUMERIC: |
3663 | 3710 | return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.NUMERIC).build(); |
3664 | 3711 | case PG_NUMERIC: |
|
0 commit comments