|
47 | 47 | import com.google.cloud.spanner.InstanceConfigInfo;
|
48 | 48 | import com.google.cloud.spanner.InstanceId;
|
49 | 49 | import com.google.cloud.spanner.InstanceInfo;
|
| 50 | +import com.google.cloud.spanner.Interval; |
50 | 51 | import com.google.cloud.spanner.Key;
|
51 | 52 | import com.google.cloud.spanner.KeyRange;
|
52 | 53 | import com.google.cloud.spanner.KeySet;
|
@@ -2899,6 +2900,9 @@ private com.google.spanner.executor.v1.ValueList buildStruct(StructReader struct
|
2899 | 2900 | case DATE:
|
2900 | 2901 | value.setDateDaysValue(daysFromDate(struct.getDate(i)));
|
2901 | 2902 | break;
|
| 2903 | + case INTERVAL: |
| 2904 | + value.setStringValue(struct.getInterval(i).toISO8601()); |
| 2905 | + break; |
2902 | 2906 | case UUID:
|
2903 | 2907 | value.setStringValue(struct.getUuid(i).toString());
|
2904 | 2908 | break;
|
@@ -3048,43 +3052,62 @@ private com.google.spanner.executor.v1.ValueList buildStruct(StructReader struct
|
3048 | 3052 | com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.DATE).build());
|
3049 | 3053 | }
|
3050 | 3054 | break;
|
3051 |
| - case UUID: |
| 3055 | + case TIMESTAMP: |
3052 | 3056 | {
|
3053 | 3057 | com.google.spanner.executor.v1.ValueList.Builder builder =
|
3054 | 3058 | com.google.spanner.executor.v1.ValueList.newBuilder();
|
3055 |
| - List<UUID> values = struct.getUuidList(i); |
3056 |
| - for (UUID uuidValue : values) { |
| 3059 | + List<Timestamp> values = struct.getTimestampList(i); |
| 3060 | + for (Timestamp timestampValue : values) { |
3057 | 3061 | com.google.spanner.executor.v1.Value.Builder valueProto =
|
3058 | 3062 | com.google.spanner.executor.v1.Value.newBuilder();
|
3059 |
| - if (uuidValue == null) { |
| 3063 | + if (timestampValue == null) { |
3060 | 3064 | builder.addValue(valueProto.setIsNull(true).build());
|
3061 | 3065 | } else {
|
3062 |
| - builder.addValue(valueProto.setStringValue(uuidValue.toString()).build()); |
| 3066 | + builder.addValue( |
| 3067 | + valueProto.setTimestampValue(timestampToProto(timestampValue)).build()); |
3063 | 3068 | }
|
3064 | 3069 | }
|
3065 | 3070 | value.setArrayValue(builder.build());
|
3066 | 3071 | value.setArrayType(
|
3067 |
| - com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.UUID).build()); |
| 3072 | + com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.TIMESTAMP).build()); |
3068 | 3073 | }
|
3069 | 3074 | break;
|
3070 |
| - case TIMESTAMP: |
| 3075 | + case INTERVAL: |
3071 | 3076 | {
|
3072 | 3077 | com.google.spanner.executor.v1.ValueList.Builder builder =
|
3073 | 3078 | com.google.spanner.executor.v1.ValueList.newBuilder();
|
3074 |
| - List<Timestamp> values = struct.getTimestampList(i); |
3075 |
| - for (Timestamp timestampValue : values) { |
| 3079 | + List<Interval> values = struct.getIntervalList(i); |
| 3080 | + for (Interval interval : values) { |
3076 | 3081 | com.google.spanner.executor.v1.Value.Builder valueProto =
|
3077 | 3082 | com.google.spanner.executor.v1.Value.newBuilder();
|
3078 |
| - if (timestampValue == null) { |
| 3083 | + if (interval == null) { |
3079 | 3084 | builder.addValue(valueProto.setIsNull(true).build());
|
3080 | 3085 | } else {
|
3081 |
| - builder.addValue( |
3082 |
| - valueProto.setTimestampValue(timestampToProto(timestampValue)).build()); |
| 3086 | + builder.addValue(valueProto.setStringValue(interval.toISO8601()).build()); |
3083 | 3087 | }
|
3084 | 3088 | }
|
3085 | 3089 | value.setArrayValue(builder.build());
|
3086 | 3090 | value.setArrayType(
|
3087 |
| - com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.TIMESTAMP).build()); |
| 3091 | + com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.INTERVAL).build()); |
| 3092 | + } |
| 3093 | + break; |
| 3094 | + case UUID: |
| 3095 | + { |
| 3096 | + com.google.spanner.executor.v1.ValueList.Builder builder = |
| 3097 | + com.google.spanner.executor.v1.ValueList.newBuilder(); |
| 3098 | + List<UUID> values = struct.getUuidList(i); |
| 3099 | + for (UUID uuidValue : values) { |
| 3100 | + com.google.spanner.executor.v1.Value.Builder valueProto = |
| 3101 | + com.google.spanner.executor.v1.Value.newBuilder(); |
| 3102 | + if (uuidValue == null) { |
| 3103 | + builder.addValue(valueProto.setIsNull(true).build()); |
| 3104 | + } else { |
| 3105 | + builder.addValue(valueProto.setStringValue(uuidValue.toString()).build()); |
| 3106 | + } |
| 3107 | + } |
| 3108 | + value.setArrayValue(builder.build()); |
| 3109 | + value.setArrayType( |
| 3110 | + com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.UUID).build()); |
3088 | 3111 | }
|
3089 | 3112 | break;
|
3090 | 3113 | case NUMERIC:
|
@@ -3221,7 +3244,7 @@ private static com.google.cloud.spanner.KeyRange keyRangeProtoToCloudKeyRange(
|
3221 | 3244 | return KeyRange.openClosed(start, end);
|
3222 | 3245 | case OPEN_OPEN:
|
3223 | 3246 | return KeyRange.openOpen(start, end);
|
3224 |
| - // Unreachable. |
| 3247 | + // Unreachable. |
3225 | 3248 | default:
|
3226 | 3249 | throw SpannerExceptionFactory.newSpannerException(
|
3227 | 3250 | ErrorCode.INVALID_ARGUMENT, "Unrecognized key range type");
|
@@ -3275,7 +3298,7 @@ private static com.google.cloud.spanner.Key keyProtoToCloudKey(
|
3275 | 3298 | case BYTES:
|
3276 | 3299 | cloudKey.append(toByteArray(part.getBytesValue()));
|
3277 | 3300 | break;
|
3278 |
| - // Unreachable |
| 3301 | + // Unreachable |
3279 | 3302 | default:
|
3280 | 3303 | throw SpannerExceptionFactory.newSpannerException(
|
3281 | 3304 | ErrorCode.INVALID_ARGUMENT, "Unsupported key part type: " + type.getCode().name());
|
@@ -3340,6 +3363,9 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue(
|
3340 | 3363 | case DATE:
|
3341 | 3364 | return com.google.cloud.spanner.Value.date(
|
3342 | 3365 | value.hasIsNull() ? null : dateFromDays(value.getDateDaysValue()));
|
| 3366 | + case INTERVAL: |
| 3367 | + return com.google.cloud.spanner.Value.interval( |
| 3368 | + value.hasIsNull() ? null : Interval.parseFromString(value.getStringValue())); |
3343 | 3369 | case UUID:
|
3344 | 3370 | return com.google.cloud.spanner.Value.uuid(
|
3345 | 3371 | value.hasIsNull() ? null : UUID.fromString(value.getStringValue()));
|
@@ -3467,6 +3493,20 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue(
|
3467 | 3493 | .collect(Collectors.toList()),
|
3468 | 3494 | CloudClientExecutor::dateFromDays));
|
3469 | 3495 | }
|
| 3496 | + case INTERVAL: |
| 3497 | + if (value.hasIsNull()) { |
| 3498 | + return com.google.cloud.spanner.Value.intervalArray(null); |
| 3499 | + } else { |
| 3500 | + return com.google.cloud.spanner.Value.intervalArray( |
| 3501 | + unmarshallValueList( |
| 3502 | + value.getArrayValue().getValueList().stream() |
| 3503 | + .map(com.google.spanner.executor.v1.Value::getIsNull) |
| 3504 | + .collect(Collectors.toList()), |
| 3505 | + value.getArrayValue().getValueList().stream() |
| 3506 | + .map(com.google.spanner.executor.v1.Value::getStringValue) |
| 3507 | + .collect(Collectors.toList()), |
| 3508 | + Interval::parseFromString)); |
| 3509 | + } |
3470 | 3510 | case UUID:
|
3471 | 3511 | if (value.hasIsNull()) {
|
3472 | 3512 | return com.google.cloud.spanner.Value.uuidArray(null);
|
@@ -3646,10 +3686,12 @@ private static com.google.cloud.spanner.Type typeProtoToCloudType(
|
3646 | 3686 | return com.google.cloud.spanner.Type.float64();
|
3647 | 3687 | case DATE:
|
3648 | 3688 | return com.google.cloud.spanner.Type.date();
|
3649 |
| - case UUID: |
3650 |
| - return com.google.cloud.spanner.Type.uuid(); |
3651 | 3689 | case TIMESTAMP:
|
3652 | 3690 | return com.google.cloud.spanner.Type.timestamp();
|
| 3691 | + case INTERVAL: |
| 3692 | + return com.google.cloud.spanner.Type.interval(); |
| 3693 | + case UUID: |
| 3694 | + return com.google.cloud.spanner.Type.uuid(); |
3653 | 3695 | case NUMERIC:
|
3654 | 3696 | if (typeProto.getTypeAnnotation().equals(TypeAnnotationCode.PG_NUMERIC)) {
|
3655 | 3697 | return com.google.cloud.spanner.Type.pgNumeric();
|
@@ -3704,6 +3746,8 @@ private static com.google.spanner.v1.Type cloudTypeToTypeProto(@Nonnull Type clo
|
3704 | 3746 | return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.TIMESTAMP).build();
|
3705 | 3747 | case DATE:
|
3706 | 3748 | return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.DATE).build();
|
| 3749 | + case INTERVAL: |
| 3750 | + return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.INTERVAL).build(); |
3707 | 3751 | case UUID:
|
3708 | 3752 | return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.UUID).build();
|
3709 | 3753 | case NUMERIC:
|
|
0 commit comments