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 ;
@@ -1023,7 +1024,7 @@ private Status executeAction(
1023
1024
return executeFinishTxn (action .getFinish (), outcomeSender , executionContext );
1024
1025
} else if (action .hasMutation ()) {
1025
1026
return executeMutation (
1026
- action .getMutation (), outcomeSender , executionContext , /* isWrite= */ false );
1027
+ action .getMutation (), outcomeSender , executionContext , /*isWrite=*/ false );
1027
1028
} else if (action .hasRead ()) {
1028
1029
return executeRead (
1029
1030
useMultiplexedSession , action .getRead (), outcomeSender , executionContext );
@@ -1037,7 +1038,7 @@ private Status executeAction(
1037
1038
return executeCloudBatchDmlUpdates (action .getBatchDml (), outcomeSender , executionContext );
1038
1039
} else if (action .hasWrite ()) {
1039
1040
return executeMutation (
1040
- action .getWrite ().getMutation (), outcomeSender , executionContext , /* isWrite= */ true );
1041
+ action .getWrite ().getMutation (), outcomeSender , executionContext , /*isWrite=*/ true );
1041
1042
} else if (action .hasStartBatchTxn ()) {
1042
1043
if (dbPath == null ) {
1043
1044
throw SpannerExceptionFactory .newSpannerException (
@@ -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