diff --git a/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CommitResponse.java b/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CommitResponse.java index 85975e10f6c1..ef172b4b5f3d 100644 --- a/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CommitResponse.java +++ b/java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/CommitResponse.java @@ -18,6 +18,8 @@ import com.google.cloud.Timestamp; import com.google.common.base.Preconditions; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import java.util.Objects; import javax.annotation.Nullable; @@ -54,6 +56,30 @@ public Timestamp getCommitTimestamp() { return Timestamp.fromProto(proto.getSnapshotTimestamp()); } + /** + * Returns the {@link IsolationLevel} used for the read-write transaction if the transaction ran + * in internal test environments, and otherwise returns null. + */ + public @Nullable IsolationLevel getIsolationLevel() { + if (proto.getIsolationLevel() == IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED + || proto.getIsolationLevel() == IsolationLevel.UNRECOGNIZED) { + return null; + } + return proto.getIsolationLevel(); + } + + /** + * Returns the {@link ReadLockMode} used for the read-write transaction if the transaction ran in + * internal test environments, and otherwise returns null. + */ + public @Nullable ReadLockMode getReadLockMode() { + if (proto.getReadLockMode() == ReadLockMode.READ_LOCK_MODE_UNSPECIFIED + || proto.getReadLockMode() == ReadLockMode.UNRECOGNIZED) { + return null; + } + return proto.getReadLockMode(); + } + /** * @return true if the {@link CommitResponse} includes {@link CommitStats} */ diff --git a/java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CommitResponseTest.java b/java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CommitResponseTest.java index 6ac22a28937c..a53dfb216079 100644 --- a/java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CommitResponseTest.java +++ b/java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CommitResponseTest.java @@ -23,6 +23,8 @@ import com.google.cloud.Timestamp; import com.google.spanner.v1.CommitResponse.CommitStats; +import com.google.spanner.v1.TransactionOptions.IsolationLevel; +import com.google.spanner.v1.TransactionOptions.ReadWrite.ReadLockMode; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -119,4 +121,50 @@ public void testGetSnapshotTimestamp() { Timestamp.ofTimeSecondsAndNanos(123L, 456), responseWithSnapshotTimestamp.getSnapshotTimestamp()); } + + @Test + public void testGetIsolationLevel() { + com.google.spanner.v1.CommitResponse protoWithoutIsolationLevel = + com.google.spanner.v1.CommitResponse.getDefaultInstance(); + CommitResponse responseWithoutIsolationLevel = new CommitResponse(protoWithoutIsolationLevel); + assertEquals(null, responseWithoutIsolationLevel.getIsolationLevel()); + + com.google.spanner.v1.CommitResponse protoWithUnspecifiedIsolationLevel = + com.google.spanner.v1.CommitResponse.newBuilder() + .setIsolationLevel(IsolationLevel.ISOLATION_LEVEL_UNSPECIFIED) + .build(); + CommitResponse responseWithUnspecifiedIsolationLevel = + new CommitResponse(protoWithUnspecifiedIsolationLevel); + assertEquals(null, responseWithUnspecifiedIsolationLevel.getIsolationLevel()); + + com.google.spanner.v1.CommitResponse protoWithIsolationLevel = + com.google.spanner.v1.CommitResponse.newBuilder() + .setIsolationLevel(IsolationLevel.REPEATABLE_READ) + .build(); + CommitResponse responseWithIsolationLevel = new CommitResponse(protoWithIsolationLevel); + assertEquals(IsolationLevel.REPEATABLE_READ, responseWithIsolationLevel.getIsolationLevel()); + } + + @Test + public void testGetReadLockMode() { + com.google.spanner.v1.CommitResponse protoWithoutReadLockMode = + com.google.spanner.v1.CommitResponse.getDefaultInstance(); + CommitResponse responseWithoutReadLockMode = new CommitResponse(protoWithoutReadLockMode); + assertEquals(null, responseWithoutReadLockMode.getReadLockMode()); + + com.google.spanner.v1.CommitResponse protoWithUnspecifiedReadLockMode = + com.google.spanner.v1.CommitResponse.newBuilder() + .setReadLockMode(ReadLockMode.READ_LOCK_MODE_UNSPECIFIED) + .build(); + CommitResponse responseWithUnspecifiedReadLockMode = + new CommitResponse(protoWithUnspecifiedReadLockMode); + assertEquals(null, responseWithUnspecifiedReadLockMode.getReadLockMode()); + + com.google.spanner.v1.CommitResponse protoWithReadLockMode = + com.google.spanner.v1.CommitResponse.newBuilder() + .setReadLockMode(ReadLockMode.PESSIMISTIC) + .build(); + CommitResponse responseWithReadLockMode = new CommitResponse(protoWithReadLockMode); + assertEquals(ReadLockMode.PESSIMISTIC, responseWithReadLockMode.getReadLockMode()); + } }