Skip to content

Commit f26bae7

Browse files
committed
feat: add getIsolationLevel and getReadLockMode methods to CommitResponse
1 parent 9cf92b9 commit f26bae7

2 files changed

Lines changed: 74 additions & 0 deletions

File tree

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import com.google.cloud.Timestamp;
2020
import com.google.common.base.Preconditions;
21+
import com.google.spanner.v1.TransactionOptions.IsolationLevel;
22+
import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode;
2123
import java.util.Objects;
2224
import javax.annotation.Nullable;
2325

@@ -54,6 +56,30 @@ public Timestamp getCommitTimestamp() {
5456
return Timestamp.fromProto(proto.getSnapshotTimestamp());
5557
}
5658

59+
/**
60+
* Returns the {@link IsolationLevel} used for the read-write transaction if the transaction ran
61+
* in internal test environments, and otherwise returns null.
62+
*/
63+
public @Nullable IsolationLevel getIsolationLevel() {
64+
if (proto.getIsolationLevel() == IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED
65+
|| proto.getIsolationLevel() == IsolationLevel.UNRECOGNIZED) {
66+
return null;
67+
}
68+
return proto.getIsolationLevel();
69+
}
70+
71+
/**
72+
* Returns the {@link ReadLockMode} used for the read-write transaction if the transaction ran in
73+
* internal test environments, and otherwise returns null.
74+
*/
75+
public @Nullable ReadLockMode getReadLockMode() {
76+
if (proto.getReadLockMode() == ReadLockMode.READ_LOCK_MODE_UNSPECIFIED
77+
|| proto.getReadLockMode() == ReadLockMode.UNRECOGNIZED) {
78+
return null;
79+
}
80+
return proto.getReadLockMode();
81+
}
82+
5783
/**
5884
* @return true if the {@link CommitResponse} includes {@link CommitStats}
5985
*/

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
import com.google.cloud.Timestamp;
2525
import com.google.spanner.v1.CommitResponse.CommitStats;
26+
import com.google.spanner.v1.TransactionOptions.IsolationLevel;
27+
import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode;
2628
import org.junit.Test;
2729
import org.junit.runner.RunWith;
2830
import org.junit.runners.JUnit4;
@@ -119,4 +121,50 @@ public void testGetSnapshotTimestamp() {
119121
Timestamp.ofTimeSecondsAndNanos(123L, 456),
120122
responseWithSnapshotTimestamp.getSnapshotTimestamp());
121123
}
124+
125+
@Test
126+
public void testGetIsolationLevel() {
127+
com.google.spanner.v1.CommitResponse protoWithoutIsolationLevel =
128+
com.google.spanner.v1.CommitResponse.getDefaultInstance();
129+
CommitResponse responseWithoutIsolationLevel = new CommitResponse(protoWithoutIsolationLevel);
130+
assertEquals(null, responseWithoutIsolationLevel.getIsolationLevel());
131+
132+
com.google.spanner.v1.CommitResponse protoWithUnspecifiedIsolationLevel =
133+
com.google.spanner.v1.CommitResponse.newBuilder()
134+
.setIsolationLevel(IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED)
135+
.build();
136+
CommitResponse responseWithUnspecifiedIsolationLevel =
137+
new CommitResponse(protoWithUnspecifiedIsolationLevel);
138+
assertEquals(null, responseWithUnspecifiedIsolationLevel.getIsolationLevel());
139+
140+
com.google.spanner.v1.CommitResponse protoWithIsolationLevel =
141+
com.google.spanner.v1.CommitResponse.newBuilder()
142+
.setIsolationLevel(IsolationLevel.REPEATABLE_READ)
143+
.build();
144+
CommitResponse responseWithIsolationLevel = new CommitResponse(protoWithIsolationLevel);
145+
assertEquals(IsolationLevel.REPEATABLE_READ, responseWithIsolationLevel.getIsolationLevel());
146+
}
147+
148+
@Test
149+
public void testGetReadLockMode() {
150+
com.google.spanner.v1.CommitResponse protoWithoutReadLockMode =
151+
com.google.spanner.v1.CommitResponse.getDefaultInstance();
152+
CommitResponse responseWithoutReadLockMode = new CommitResponse(protoWithoutReadLockMode);
153+
assertEquals(null, responseWithoutReadLockMode.getReadLockMode());
154+
155+
com.google.spanner.v1.CommitResponse protoWithUnspecifiedReadLockMode =
156+
com.google.spanner.v1.CommitResponse.newBuilder()
157+
.setReadLockMode(ReadLockMode.READ_LOCK_MODE_UNSPECIFIED)
158+
.build();
159+
CommitResponse responseWithUnspecifiedReadLockMode =
160+
new CommitResponse(protoWithUnspecifiedReadLockMode);
161+
assertEquals(null, responseWithUnspecifiedReadLockMode.getReadLockMode());
162+
163+
com.google.spanner.v1.CommitResponse protoWithReadLockMode =
164+
com.google.spanner.v1.CommitResponse.newBuilder()
165+
.setReadLockMode(ReadLockMode.PESSIMISTIC)
166+
.build();
167+
CommitResponse responseWithReadLockMode = new CommitResponse(protoWithReadLockMode);
168+
assertEquals(ReadLockMode.PESSIMISTIC, responseWithReadLockMode.getReadLockMode());
169+
}
122170
}

0 commit comments

Comments
 (0)