Skip to content

Commit afbd59a

Browse files
author
Mairbek Khadikov
committed
Make Statement and TimestampBound serializable
1 parent 3375959 commit afbd59a

4 files changed

Lines changed: 21 additions & 2 deletions

File tree

google-cloud-spanner/src/main/java/com/google/cloud/spanner/Statement.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import com.google.cloud.spanner.ReadContext.QueryAnalyzeMode;
2323
import com.google.common.collect.ImmutableMap;
24+
25+
import java.io.Serializable;
2426
import java.util.HashMap;
2527
import java.util.Map;
2628
import java.util.Objects;
@@ -50,7 +52,9 @@
5052
*
5153
* <p>{@code Statement} instances are immutable.
5254
*/
53-
public final class Statement {
55+
public final class Statement implements Serializable {
56+
private static final long serialVersionUID = -1967958247625065259L;
57+
5458
private final ImmutableMap<String, Value> parameters;
5559
private final String sql;
5660

google-cloud-spanner/src/main/java/com/google/cloud/spanner/TimestampBound.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
import com.google.protobuf.Duration;
2525
import com.google.protobuf.util.Durations;
2626
import com.google.spanner.v1.TransactionOptions;
27+
28+
import java.io.Serializable;
2729
import java.util.Objects;
2830
import java.util.concurrent.TimeUnit;
2931

@@ -115,10 +117,11 @@
115117
* @see Session#singleUseReadOnlyTransaction(TimestampBound)
116118
* @see Session#readOnlyTransaction(TimestampBound)
117119
*/
118-
public final class TimestampBound {
120+
public final class TimestampBound implements Serializable {
119121
private static final TimestampBound STRONG_BOUND = new TimestampBound(Mode.STRONG, null, null);
120122
private static final TransactionOptions.ReadOnly STRONG_PROTO =
121123
TransactionOptions.ReadOnly.newBuilder().setStrong(true).build();
124+
private static final long serialVersionUID = 9194565742651275731L;
122125

123126
private final Mode mode;
124127
private final Timestamp timestamp;

google-cloud-spanner/src/test/java/com/google/cloud/spanner/StatementTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.google.cloud.spanner;
1818

19+
import static com.google.common.testing.SerializableTester.reserializeAndAssert;
1920
import static com.google.common.truth.Truth.assertThat;
2021

2122
import com.google.common.collect.ImmutableMap;
@@ -38,6 +39,7 @@ public void basic() {
3839
assertThat(stmt.getSql()).isEqualTo(sql);
3940
assertThat(stmt.getParameters()).isEmpty();
4041
assertThat(stmt.toString()).isEqualTo(sql);
42+
reserializeAndAssert(stmt);
4143
}
4244

4345
@Test

google-cloud-spanner/src/test/java/com/google/cloud/spanner/TimestampBoundTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.google.cloud.spanner;
1818

1919
import static com.google.cloud.spanner.TimestampBound.Mode;
20+
import static com.google.common.testing.SerializableTester.reserializeAndAssert;
2021
import static com.google.common.truth.Truth.assertThat;
2122

2223
import com.google.cloud.Timestamp;
@@ -37,6 +38,15 @@ public class TimestampBoundTest {
3738
private static final String TEST_TIME_ISO = "2015-10-12T15:14:54Z";
3839
@Rule public ExpectedException expectedException = ExpectedException.none();
3940

41+
@Test
42+
public void serialization() throws Exception {
43+
reserializeAndAssert(TimestampBound.strong());
44+
reserializeAndAssert(TimestampBound.ofExactStaleness(10, TimeUnit.NANOSECONDS));
45+
reserializeAndAssert(TimestampBound.ofMaxStaleness(100, TimeUnit.DAYS));
46+
reserializeAndAssert(TimestampBound.ofMinReadTimestamp(Timestamp.now()));
47+
reserializeAndAssert(TimestampBound.ofReadTimestamp(Timestamp.now()));
48+
}
49+
4050
@Test
4151
public void strong() {
4252
TimestampBound bound = TimestampBound.strong();

0 commit comments

Comments
 (0)