diff --git a/generation_config.yaml b/generation_config.yaml index e6bcdbac0ce..ef44b5b9dea 100644 --- a/generation_config.yaml +++ b/generation_config.yaml @@ -1,5 +1,5 @@ -gapic_generator_version: 2.49.0 -googleapis_commitish: c72f219fedbb57d3f83c10550e135c4824b670eb +gapic_generator_version: 2.50.0 +googleapis_commitish: 349841abac6c3e580ccce6e3d6fcc182ed2512c2 libraries_bom_version: 26.50.0 libraries: - api_shortname: spanner diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java index cde80bf816e..c94b350914f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/DatabaseAdminSettings.java @@ -151,7 +151,7 @@ * RetrySettings.newBuilder() * .setInitialRetryDelayDuration(Duration.ofMillis(500)) * .setRetryDelayMultiplier(1.5) - * .setMaxRetryDelay(Duration.ofMillis(5000)) + * .setMaxRetryDelayDuration(Duration.ofMillis(5000)) * .setTotalTimeoutDuration(Duration.ofHours(24)) * .build()); * databaseAdminSettingsBuilder diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java index 5f292588139..ef84fe2b518 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/admin/database/v1/stub/DatabaseAdminStubSettings.java @@ -104,9 +104,9 @@ import com.google.spanner.admin.database.v1.UpdateDatabaseMetadata; import com.google.spanner.admin.database.v1.UpdateDatabaseRequest; import java.io.IOException; +import java.time.Duration; import java.util.List; import javax.annotation.Generated; -import org.threeten.bp.Duration; // AUTO-GENERATED DOCUMENTATION AND CLASS. /** @@ -175,7 +175,7 @@ * RetrySettings.newBuilder() * .setInitialRetryDelayDuration(Duration.ofMillis(500)) * .setRetryDelayMultiplier(1.5) - * .setMaxRetryDelay(Duration.ofMillis(5000)) + * .setMaxRetryDelayDuration(Duration.ofMillis(5000)) * .setTotalTimeoutDuration(Duration.ofHours(24)) * .build()); * databaseAdminSettingsBuilder @@ -1021,40 +1021,40 @@ public static class Builder extends StubSettings.Builder deleteSessionCallable() * .setRequestOptions(RequestOptions.newBuilder().build()) * .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) * .setDataBoostEnabled(true) + * .setLastStatement(true) * .build(); * ResultSet response = spannerClient.executeSql(request); * } @@ -1259,6 +1260,7 @@ public final ResultSet executeSql(ExecuteSqlRequest request) { * .setRequestOptions(RequestOptions.newBuilder().build()) * .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) * .setDataBoostEnabled(true) + * .setLastStatement(true) * .build(); * ApiFuture future = spannerClient.executeSqlCallable().futureCall(request); * // Do something. @@ -1301,6 +1303,7 @@ public final UnaryCallable executeSqlCallable() { * .setRequestOptions(RequestOptions.newBuilder().build()) * .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) * .setDataBoostEnabled(true) + * .setLastStatement(true) * .build(); * ServerStream stream = * spannerClient.executeStreamingSqlCallable().call(request); @@ -1345,6 +1348,7 @@ public final UnaryCallable executeSqlCallable() { * .addAllStatements(new ArrayList()) * .setSeqno(109325920) * .setRequestOptions(RequestOptions.newBuilder().build()) + * .setLastStatements(true) * .build(); * ExecuteBatchDmlResponse response = spannerClient.executeBatchDml(request); * } @@ -1387,6 +1391,7 @@ public final ExecuteBatchDmlResponse executeBatchDml(ExecuteBatchDmlRequest requ * .addAllStatements(new ArrayList()) * .setSeqno(109325920) * .setRequestOptions(RequestOptions.newBuilder().build()) + * .setLastStatements(true) * .build(); * ApiFuture future = * spannerClient.executeBatchDmlCallable().futureCall(request); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java index ae4b1c11daf..004f1e09756 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStubSettings.java @@ -75,9 +75,9 @@ import com.google.spanner.v1.Session; import com.google.spanner.v1.Transaction; import java.io.IOException; +import java.time.Duration; import java.util.List; import javax.annotation.Generated; -import org.threeten.bp.Duration; // AUTO-GENERATED DOCUMENTATION AND CLASS. /** @@ -484,43 +484,43 @@ public static class Builder extends StubSettings.Builder()) .setSeqno(109325920) .setRequestOptions(RequestOptions.newBuilder().build()) + .setLastStatements(true) .build(); ExecuteBatchDmlResponse actualResponse = client.executeBatchDml(request); @@ -723,6 +726,7 @@ public void executeBatchDmlExceptionTest() throws Exception { .addAllStatements(new ArrayList()) .setSeqno(109325920) .setRequestOptions(RequestOptions.newBuilder().build()) + .setLastStatements(true) .build(); client.executeBatchDml(request); Assert.fail("No exception raised"); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java index 83caf7405d9..e0e1251d1d2 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientTest.java @@ -565,6 +565,7 @@ public void executeSqlTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setLastStatement(true) .build(); ResultSet actualResponse = client.executeSql(request); @@ -587,6 +588,7 @@ public void executeSqlTest() throws Exception { Assert.assertEquals(request.getRequestOptions(), actualRequest.getRequestOptions()); Assert.assertEquals(request.getDirectedReadOptions(), actualRequest.getDirectedReadOptions()); Assert.assertEquals(request.getDataBoostEnabled(), actualRequest.getDataBoostEnabled()); + Assert.assertEquals(request.getLastStatement(), actualRequest.getLastStatement()); Assert.assertTrue( channelProvider.isHeaderSent( ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), @@ -614,6 +616,7 @@ public void executeSqlExceptionTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setLastStatement(true) .build(); client.executeSql(request); Assert.fail("No exception raised"); @@ -649,6 +652,7 @@ public void executeStreamingSqlTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setLastStatement(true) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -681,6 +685,7 @@ public void executeStreamingSqlExceptionTest() throws Exception { .setRequestOptions(RequestOptions.newBuilder().build()) .setDirectedReadOptions(DirectedReadOptions.newBuilder().build()) .setDataBoostEnabled(true) + .setLastStatement(true) .build(); MockStreamObserver responseObserver = new MockStreamObserver<>(); @@ -717,6 +722,7 @@ public void executeBatchDmlTest() throws Exception { .addAllStatements(new ArrayList()) .setSeqno(109325920) .setRequestOptions(RequestOptions.newBuilder().build()) + .setLastStatements(true) .build(); ExecuteBatchDmlResponse actualResponse = client.executeBatchDml(request); @@ -731,6 +737,7 @@ public void executeBatchDmlTest() throws Exception { Assert.assertEquals(request.getStatementsList(), actualRequest.getStatementsList()); Assert.assertEquals(request.getSeqno(), actualRequest.getSeqno()); Assert.assertEquals(request.getRequestOptions(), actualRequest.getRequestOptions()); + Assert.assertEquals(request.getLastStatements(), actualRequest.getLastStatements()); Assert.assertTrue( channelProvider.isHeaderSent( ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), @@ -751,6 +758,7 @@ public void executeBatchDmlExceptionTest() throws Exception { .addAllStatements(new ArrayList()) .setSeqno(109325920) .setRequestOptions(RequestOptions.newBuilder().build()) + .setLastStatements(true) .build(); client.executeBatchDml(request); Assert.fail("No exception raised"); diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java index e829327651b..55cce1f9922 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequest.java @@ -2100,6 +2100,32 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( : requestOptions_; } + public static final int LAST_STATEMENTS_FIELD_NUMBER = 6; + private boolean lastStatements_ = false; + /** + * + * + *
+   * Optional. If set to true, this request marks the end of the transaction.
+   * The transaction should be committed or aborted after these statements
+   * execute, and attempts to execute any other requests against this
+   * transaction (including reads and queries) will be rejected.
+   *
+   * Setting this option may cause some error reporting to be deferred until
+   * commit time (e.g. validation of unique constraints). Given this, successful
+   * execution of statements should not be assumed until a subsequent Commit
+   * call completes successfully.
+   * 
+ * + * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastStatements. + */ + @java.lang.Override + public boolean getLastStatements() { + return lastStatements_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -2129,6 +2155,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(5, getRequestOptions()); } + if (lastStatements_ != false) { + output.writeBool(6, lastStatements_); + } getUnknownFields().writeTo(output); } @@ -2153,6 +2182,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getRequestOptions()); } + if (lastStatements_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(6, lastStatements_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -2180,6 +2212,7 @@ public boolean equals(final java.lang.Object obj) { if (hasRequestOptions()) { if (!getRequestOptions().equals(other.getRequestOptions())) return false; } + if (getLastStatements() != other.getLastStatements()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -2207,6 +2240,8 @@ public int hashCode() { hash = (37 * hash) + REQUEST_OPTIONS_FIELD_NUMBER; hash = (53 * hash) + getRequestOptions().hashCode(); } + hash = (37 * hash) + LAST_STATEMENTS_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getLastStatements()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -2376,6 +2411,7 @@ public Builder clear() { requestOptionsBuilder_.dispose(); requestOptionsBuilder_ = null; } + lastStatements_ = false; return this; } @@ -2442,6 +2478,9 @@ private void buildPartial0(com.google.spanner.v1.ExecuteBatchDmlRequest result) requestOptionsBuilder_ == null ? requestOptions_ : requestOptionsBuilder_.build(); to_bitField0_ |= 0x00000002; } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.lastStatements_ = lastStatements_; + } result.bitField0_ |= to_bitField0_; } @@ -2531,6 +2570,9 @@ public Builder mergeFrom(com.google.spanner.v1.ExecuteBatchDmlRequest other) { if (other.hasRequestOptions()) { mergeRequestOptions(other.getRequestOptions()); } + if (other.getLastStatements() != false) { + setLastStatements(other.getLastStatements()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -2595,6 +2637,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000010; break; } // case 42 + case 48: + { + lastStatements_ = input.readBool(); + bitField0_ |= 0x00000020; + break; + } // case 48 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -3715,6 +3763,83 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( return requestOptionsBuilder_; } + private boolean lastStatements_; + /** + * + * + *
+     * Optional. If set to true, this request marks the end of the transaction.
+     * The transaction should be committed or aborted after these statements
+     * execute, and attempts to execute any other requests against this
+     * transaction (including reads and queries) will be rejected.
+     *
+     * Setting this option may cause some error reporting to be deferred until
+     * commit time (e.g. validation of unique constraints). Given this, successful
+     * execution of statements should not be assumed until a subsequent Commit
+     * call completes successfully.
+     * 
+ * + * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastStatements. + */ + @java.lang.Override + public boolean getLastStatements() { + return lastStatements_; + } + /** + * + * + *
+     * Optional. If set to true, this request marks the end of the transaction.
+     * The transaction should be committed or aborted after these statements
+     * execute, and attempts to execute any other requests against this
+     * transaction (including reads and queries) will be rejected.
+     *
+     * Setting this option may cause some error reporting to be deferred until
+     * commit time (e.g. validation of unique constraints). Given this, successful
+     * execution of statements should not be assumed until a subsequent Commit
+     * call completes successfully.
+     * 
+ * + * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The lastStatements to set. + * @return This builder for chaining. + */ + public Builder setLastStatements(boolean value) { + + lastStatements_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + * + * + *
+     * Optional. If set to true, this request marks the end of the transaction.
+     * The transaction should be committed or aborted after these statements
+     * execute, and attempts to execute any other requests against this
+     * transaction (including reads and queries) will be rejected.
+     *
+     * Setting this option may cause some error reporting to be deferred until
+     * commit time (e.g. validation of unique constraints). Given this, successful
+     * execution of statements should not be assumed until a subsequent Commit
+     * call completes successfully.
+     * 
+ * + * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearLastStatements() { + bitField0_ = (bitField0_ & ~0x00000020); + lastStatements_ = false; + onChanged(); + return this; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java index cdada2baa3f..db35333cf19 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlRequestOrBuilder.java @@ -247,4 +247,25 @@ public interface ExecuteBatchDmlRequestOrBuilder * .google.spanner.v1.RequestOptions request_options = 5; */ com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder(); + + /** + * + * + *
+   * Optional. If set to true, this request marks the end of the transaction.
+   * The transaction should be committed or aborted after these statements
+   * execute, and attempts to execute any other requests against this
+   * transaction (including reads and queries) will be rejected.
+   *
+   * Setting this option may cause some error reporting to be deferred until
+   * commit time (e.g. validation of unique constraints). Given this, successful
+   * execution of statements should not be assumed until a subsequent Commit
+   * call completes successfully.
+   * 
+ * + * bool last_statements = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastStatements. + */ + boolean getLastStatements(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java index 94ec19c8db9..1f31567db20 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequest.java @@ -2234,6 +2234,32 @@ public boolean getDataBoostEnabled() { return dataBoostEnabled_; } + public static final int LAST_STATEMENT_FIELD_NUMBER = 17; + private boolean lastStatement_ = false; + /** + * + * + *
+   * Optional. If set to true, this statement marks the end of the transaction.
+   * The transaction should be committed or aborted after this statement
+   * executes, and attempts to execute any other requests against this
+   * transaction (including reads and queries) will be rejected.
+   *
+   * For DML statements, setting this option may cause some error reporting to
+   * be deferred until commit time (e.g. validation of unique constraints).
+   * Given this, successful execution of a DML statement should not be assumed
+   * until a subsequent Commit call completes successfully.
+   * 
+ * + * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastStatement. + */ + @java.lang.Override + public boolean getLastStatement() { + return lastStatement_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -2286,6 +2312,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (dataBoostEnabled_ != false) { output.writeBool(16, dataBoostEnabled_); } + if (lastStatement_ != false) { + output.writeBool(17, lastStatement_); + } getUnknownFields().writeTo(output); } @@ -2342,6 +2371,9 @@ public int getSerializedSize() { if (dataBoostEnabled_ != false) { size += com.google.protobuf.CodedOutputStream.computeBoolSize(16, dataBoostEnabled_); } + if (lastStatement_ != false) { + size += com.google.protobuf.CodedOutputStream.computeBoolSize(17, lastStatement_); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -2385,6 +2417,7 @@ public boolean equals(final java.lang.Object obj) { if (!getDirectedReadOptions().equals(other.getDirectedReadOptions())) return false; } if (getDataBoostEnabled() != other.getDataBoostEnabled()) return false; + if (getLastStatement() != other.getLastStatement()) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -2434,6 +2467,8 @@ public int hashCode() { } hash = (37 * hash) + DATA_BOOST_ENABLED_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getDataBoostEnabled()); + hash = (37 * hash) + LAST_STATEMENT_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getLastStatement()); hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -2642,6 +2677,7 @@ public Builder clear() { directedReadOptionsBuilder_ = null; } dataBoostEnabled_ = false; + lastStatement_ = false; return this; } @@ -2730,6 +2766,9 @@ private void buildPartial0(com.google.spanner.v1.ExecuteSqlRequest result) { if (((from_bitField0_ & 0x00001000) != 0)) { result.dataBoostEnabled_ = dataBoostEnabled_; } + if (((from_bitField0_ & 0x00002000) != 0)) { + result.lastStatement_ = lastStatement_; + } result.bitField0_ |= to_bitField0_; } @@ -2820,6 +2859,9 @@ public Builder mergeFrom(com.google.spanner.v1.ExecuteSqlRequest other) { if (other.getDataBoostEnabled() != false) { setDataBoostEnabled(other.getDataBoostEnabled()); } + if (other.getLastStatement() != false) { + setLastStatement(other.getLastStatement()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -2932,6 +2974,12 @@ public Builder mergeFrom( bitField0_ |= 0x00001000; break; } // case 128 + case 136: + { + lastStatement_ = input.readBool(); + bitField0_ |= 0x00002000; + break; + } // case 136 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -4975,6 +5023,83 @@ public Builder clearDataBoostEnabled() { return this; } + private boolean lastStatement_; + /** + * + * + *
+     * Optional. If set to true, this statement marks the end of the transaction.
+     * The transaction should be committed or aborted after this statement
+     * executes, and attempts to execute any other requests against this
+     * transaction (including reads and queries) will be rejected.
+     *
+     * For DML statements, setting this option may cause some error reporting to
+     * be deferred until commit time (e.g. validation of unique constraints).
+     * Given this, successful execution of a DML statement should not be assumed
+     * until a subsequent Commit call completes successfully.
+     * 
+ * + * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastStatement. + */ + @java.lang.Override + public boolean getLastStatement() { + return lastStatement_; + } + /** + * + * + *
+     * Optional. If set to true, this statement marks the end of the transaction.
+     * The transaction should be committed or aborted after this statement
+     * executes, and attempts to execute any other requests against this
+     * transaction (including reads and queries) will be rejected.
+     *
+     * For DML statements, setting this option may cause some error reporting to
+     * be deferred until commit time (e.g. validation of unique constraints).
+     * Given this, successful execution of a DML statement should not be assumed
+     * until a subsequent Commit call completes successfully.
+     * 
+ * + * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The lastStatement to set. + * @return This builder for chaining. + */ + public Builder setLastStatement(boolean value) { + + lastStatement_ = value; + bitField0_ |= 0x00002000; + onChanged(); + return this; + } + /** + * + * + *
+     * Optional. If set to true, this statement marks the end of the transaction.
+     * The transaction should be committed or aborted after this statement
+     * executes, and attempts to execute any other requests against this
+     * transaction (including reads and queries) will be rejected.
+     *
+     * For DML statements, setting this option may cause some error reporting to
+     * be deferred until commit time (e.g. validation of unique constraints).
+     * Given this, successful execution of a DML statement should not be assumed
+     * until a subsequent Commit call completes successfully.
+     * 
+ * + * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearLastStatement() { + bitField0_ = (bitField0_ & ~0x00002000); + lastStatement_ = false; + onChanged(); + return this; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java index de635dc34e2..a9fa97f75de 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteSqlRequestOrBuilder.java @@ -521,4 +521,25 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * @return The dataBoostEnabled. */ boolean getDataBoostEnabled(); + + /** + * + * + *
+   * Optional. If set to true, this statement marks the end of the transaction.
+   * The transaction should be committed or aborted after this statement
+   * executes, and attempts to execute any other requests against this
+   * transaction (including reads and queries) will be rejected.
+   *
+   * For DML statements, setting this option may cause some error reporting to
+   * be deferred until commit time (e.g. validation of unique constraints).
+   * Given this, successful execution of a DML statement should not be assumed
+   * until a subsequent Commit call completes successfully.
+   * 
+ * + * bool last_statement = 17 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The lastStatement. + */ + boolean getLastStatement(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java index d8679c5b35d..0be619a96af 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerProto.java @@ -236,8 +236,8 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "aSelection\022\036\n\026auto_failover_disabled\030\002 \001" + "(\010\032f\n\017ExcludeReplicas\022S\n\022replica_selecti" + "ons\030\001 \003(\01327.google.spanner.v1.DirectedRe" - + "adOptions.ReplicaSelectionB\n\n\010replicas\"\360" - + "\006\n\021ExecuteSqlRequest\0227\n\007session\030\001 \001(\tB&\340" + + "adOptions.ReplicaSelectionB\n\n\010replicas\"\215" + + "\007\n\021ExecuteSqlRequest\0227\n\007session\030\001 \001(\tB&\340" + "A\002\372A \n\036spanner.googleapis.com/Session\022;\n" + "\013transaction\030\002 \001(\0132&.google.spanner.v1.T" + "ransactionSelector\022\020\n\003sql\030\003 \001(\tB\003\340A\002\022\'\n\006" @@ -252,192 +252,194 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "request_options\030\013 \001(\0132!.google.spanner.v" + "1.RequestOptions\022E\n\025directed_read_option" + "s\030\017 \001(\0132&.google.spanner.v1.DirectedRead" - + "Options\022\032\n\022data_boost_enabled\030\020 \001(\010\032O\n\014Q" - + "ueryOptions\022\031\n\021optimizer_version\030\001 \001(\t\022$" - + "\n\034optimizer_statistics_package\030\002 \001(\t\032J\n\017" - + "ParamTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 " - + "\001(\0132\027.google.spanner.v1.Type:\0028\001\"W\n\tQuer" - + "yMode\022\n\n\006NORMAL\020\000\022\010\n\004PLAN\020\001\022\013\n\007PROFILE\020\002" - + "\022\016\n\nWITH_STATS\020\003\022\027\n\023WITH_PLAN_AND_STATS\020" - + "\004\"\240\004\n\026ExecuteBatchDmlRequest\0227\n\007session\030" - + "\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.com/Se" - + "ssion\022@\n\013transaction\030\002 \001(\0132&.google.span" - + "ner.v1.TransactionSelectorB\003\340A\002\022L\n\nstate" - + "ments\030\003 \003(\01323.google.spanner.v1.ExecuteB" - + "atchDmlRequest.StatementB\003\340A\002\022\022\n\005seqno\030\004" - + " \001(\003B\003\340A\002\022:\n\017request_options\030\005 \001(\0132!.goo" - + "gle.spanner.v1.RequestOptions\032\354\001\n\tStatem" - + "ent\022\020\n\003sql\030\001 \001(\tB\003\340A\002\022\'\n\006params\030\002 \001(\0132\027." - + "google.protobuf.Struct\022X\n\013param_types\030\003 " - + "\003(\0132C.google.spanner.v1.ExecuteBatchDmlR" - + "equest.Statement.ParamTypesEntry\032J\n\017Para" - + "mTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132" - + "\027.google.spanner.v1.Type:\0028\001\"\303\001\n\027Execute" - + "BatchDmlResponse\0221\n\013result_sets\030\001 \003(\0132\034." - + "google.spanner.v1.ResultSet\022\"\n\006status\030\002 " - + "\001(\0132\022.google.rpc.Status\022Q\n\017precommit_tok" - + "en\030\003 \001(\01323.google.spanner.v1.Multiplexed" - + "SessionPrecommitTokenB\003\340A\001\"H\n\020PartitionO" - + "ptions\022\034\n\024partition_size_bytes\030\001 \001(\003\022\026\n\016" - + "max_partitions\030\002 \001(\003\"\243\003\n\025PartitionQueryR" + + "Options\022\032\n\022data_boost_enabled\030\020 \001(\010\022\033\n\016l" + + "ast_statement\030\021 \001(\010B\003\340A\001\032O\n\014QueryOptions" + + "\022\031\n\021optimizer_version\030\001 \001(\t\022$\n\034optimizer" + + "_statistics_package\030\002 \001(\t\032J\n\017ParamTypesE" + + "ntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.googl" + + "e.spanner.v1.Type:\0028\001\"W\n\tQueryMode\022\n\n\006NO" + + "RMAL\020\000\022\010\n\004PLAN\020\001\022\013\n\007PROFILE\020\002\022\016\n\nWITH_ST" + + "ATS\020\003\022\027\n\023WITH_PLAN_AND_STATS\020\004\"\276\004\n\026Execu" + + "teBatchDmlRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372" + + "A \n\036spanner.googleapis.com/Session\022@\n\013tr" + + "ansaction\030\002 \001(\0132&.google.spanner.v1.Tran" + + "sactionSelectorB\003\340A\002\022L\n\nstatements\030\003 \003(\013" + + "23.google.spanner.v1.ExecuteBatchDmlRequ" + + "est.StatementB\003\340A\002\022\022\n\005seqno\030\004 \001(\003B\003\340A\002\022:" + + "\n\017request_options\030\005 \001(\0132!.google.spanner" + + ".v1.RequestOptions\022\034\n\017last_statements\030\006 " + + "\001(\010B\003\340A\001\032\354\001\n\tStatement\022\020\n\003sql\030\001 \001(\tB\003\340A\002" + + "\022\'\n\006params\030\002 \001(\0132\027.google.protobuf.Struc" + + "t\022X\n\013param_types\030\003 \003(\0132C.google.spanner." + + "v1.ExecuteBatchDmlRequest.Statement.Para" + + "mTypesEntry\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 " + + "\001(\t\022&\n\005value\030\002 \001(\0132\027.google.spanner.v1.T" + + "ype:\0028\001\"\303\001\n\027ExecuteBatchDmlResponse\0221\n\013r" + + "esult_sets\030\001 \003(\0132\034.google.spanner.v1.Res" + + "ultSet\022\"\n\006status\030\002 \001(\0132\022.google.rpc.Stat" + + "us\022Q\n\017precommit_token\030\003 \001(\01323.google.spa" + + "nner.v1.MultiplexedSessionPrecommitToken" + + "B\003\340A\001\"H\n\020PartitionOptions\022\034\n\024partition_s" + + "ize_bytes\030\001 \001(\003\022\026\n\016max_partitions\030\002 \001(\003\"" + + "\243\003\n\025PartitionQueryRequest\0227\n\007session\030\001 \001" + + "(\tB&\340A\002\372A \n\036spanner.googleapis.com/Sessi" + + "on\022;\n\013transaction\030\002 \001(\0132&.google.spanner" + + ".v1.TransactionSelector\022\020\n\003sql\030\003 \001(\tB\003\340A" + + "\002\022\'\n\006params\030\004 \001(\0132\027.google.protobuf.Stru" + + "ct\022M\n\013param_types\030\005 \003(\01328.google.spanner" + + ".v1.PartitionQueryRequest.ParamTypesEntr" + + "y\022>\n\021partition_options\030\006 \001(\0132#.google.sp" + + "anner.v1.PartitionOptions\032J\n\017ParamTypesE" + + "ntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.googl" + + "e.spanner.v1.Type:\0028\001\"\261\002\n\024PartitionReadR" + "equest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner" + ".googleapis.com/Session\022;\n\013transaction\030\002" + " \001(\0132&.google.spanner.v1.TransactionSele" - + "ctor\022\020\n\003sql\030\003 \001(\tB\003\340A\002\022\'\n\006params\030\004 \001(\0132\027" - + ".google.protobuf.Struct\022M\n\013param_types\030\005" - + " \003(\01328.google.spanner.v1.PartitionQueryR" - + "equest.ParamTypesEntry\022>\n\021partition_opti" - + "ons\030\006 \001(\0132#.google.spanner.v1.PartitionO" - + "ptions\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 \001(\t\022&" - + "\n\005value\030\002 \001(\0132\027.google.spanner.v1.Type:\002" - + "8\001\"\261\002\n\024PartitionReadRequest\0227\n\007session\030\001" + + "ctor\022\022\n\005table\030\003 \001(\tB\003\340A\002\022\r\n\005index\030\004 \001(\t\022" + + "\017\n\007columns\030\005 \003(\t\022/\n\007key_set\030\006 \001(\0132\031.goog" + + "le.spanner.v1.KeySetB\003\340A\002\022>\n\021partition_o" + + "ptions\030\t \001(\0132#.google.spanner.v1.Partiti" + + "onOptions\"$\n\tPartition\022\027\n\017partition_toke" + + "n\030\001 \001(\014\"z\n\021PartitionResponse\0220\n\npartitio" + + "ns\030\001 \003(\0132\034.google.spanner.v1.Partition\0223" + + "\n\013transaction\030\002 \001(\0132\036.google.spanner.v1." + + "Transaction\"\366\005\n\013ReadRequest\0227\n\007session\030\001" + " \001(\tB&\340A\002\372A \n\036spanner.googleapis.com/Ses" + "sion\022;\n\013transaction\030\002 \001(\0132&.google.spann" + "er.v1.TransactionSelector\022\022\n\005table\030\003 \001(\t" - + "B\003\340A\002\022\r\n\005index\030\004 \001(\t\022\017\n\007columns\030\005 \003(\t\022/\n" - + "\007key_set\030\006 \001(\0132\031.google.spanner.v1.KeySe" - + "tB\003\340A\002\022>\n\021partition_options\030\t \001(\0132#.goog" - + "le.spanner.v1.PartitionOptions\"$\n\tPartit" - + "ion\022\027\n\017partition_token\030\001 \001(\014\"z\n\021Partitio" - + "nResponse\0220\n\npartitions\030\001 \003(\0132\034.google.s" - + "panner.v1.Partition\0223\n\013transaction\030\002 \001(\013" - + "2\036.google.spanner.v1.Transaction\"\366\005\n\013Rea" - + "dRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spann" - + "er.googleapis.com/Session\022;\n\013transaction" - + "\030\002 \001(\0132&.google.spanner.v1.TransactionSe" - + "lector\022\022\n\005table\030\003 \001(\tB\003\340A\002\022\r\n\005index\030\004 \001(" - + "\t\022\024\n\007columns\030\005 \003(\tB\003\340A\002\022/\n\007key_set\030\006 \001(\013" - + "2\031.google.spanner.v1.KeySetB\003\340A\002\022\r\n\005limi" - + "t\030\010 \001(\003\022\024\n\014resume_token\030\t \001(\014\022\027\n\017partiti" - + "on_token\030\n \001(\014\022:\n\017request_options\030\013 \001(\0132" - + "!.google.spanner.v1.RequestOptions\022E\n\025di" - + "rected_read_options\030\016 \001(\0132&.google.spann" - + "er.v1.DirectedReadOptions\022\032\n\022data_boost_" - + "enabled\030\017 \001(\010\022=\n\010order_by\030\020 \001(\0162&.google" - + ".spanner.v1.ReadRequest.OrderByB\003\340A\001\022?\n\t" - + "lock_hint\030\021 \001(\0162\'.google.spanner.v1.Read" - + "Request.LockHintB\003\340A\001\"T\n\007OrderBy\022\030\n\024ORDE" - + "R_BY_UNSPECIFIED\020\000\022\030\n\024ORDER_BY_PRIMARY_K" - + "EY\020\001\022\025\n\021ORDER_BY_NO_ORDER\020\002\"T\n\010LockHint\022" - + "\031\n\025LOCK_HINT_UNSPECIFIED\020\000\022\024\n\020LOCK_HINT_" - + "SHARED\020\001\022\027\n\023LOCK_HINT_EXCLUSIVE\020\002\"\203\002\n\027Be" - + "ginTransactionRequest\0227\n\007session\030\001 \001(\tB&" - + "\340A\002\372A \n\036spanner.googleapis.com/Session\022;" - + "\n\007options\030\002 \001(\0132%.google.spanner.v1.Tran" - + "sactionOptionsB\003\340A\002\022:\n\017request_options\030\003" - + " \001(\0132!.google.spanner.v1.RequestOptions\022" - + "6\n\014mutation_key\030\004 \001(\0132\033.google.spanner.v" - + "1.MutationB\003\340A\001\"\320\003\n\rCommitRequest\0227\n\007ses" - + "sion\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.c" - + "om/Session\022\030\n\016transaction_id\030\002 \001(\014H\000\022G\n\026" - + "single_use_transaction\030\003 \001(\0132%.google.sp" - + "anner.v1.TransactionOptionsH\000\022.\n\tmutatio" - + "ns\030\004 \003(\0132\033.google.spanner.v1.Mutation\022\033\n" - + "\023return_commit_stats\030\005 \001(\010\0228\n\020max_commit" - + "_delay\030\010 \001(\0132\031.google.protobuf.DurationB" - + "\003\340A\001\022:\n\017request_options\030\006 \001(\0132!.google.s" - + "panner.v1.RequestOptions\022Q\n\017precommit_to" - + "ken\030\t \001(\01323.google.spanner.v1.Multiplexe" - + "dSessionPrecommitTokenB\003\340A\001B\r\n\013transacti" - + "on\"g\n\017RollbackRequest\0227\n\007session\030\001 \001(\tB&" - + "\340A\002\372A \n\036spanner.googleapis.com/Session\022\033" - + "\n\016transaction_id\030\002 \001(\014B\003\340A\002\"\316\002\n\021BatchWri" - + "teRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036span" - + "ner.googleapis.com/Session\022:\n\017request_op" - + "tions\030\003 \001(\0132!.google.spanner.v1.RequestO" - + "ptions\022P\n\017mutation_groups\030\004 \003(\01322.google" - + ".spanner.v1.BatchWriteRequest.MutationGr" - + "oupB\003\340A\002\022,\n\037exclude_txn_from_change_stre" - + "ams\030\005 \001(\010B\003\340A\001\032D\n\rMutationGroup\0223\n\tmutat" - + "ions\030\001 \003(\0132\033.google.spanner.v1.MutationB" - + "\003\340A\002\"\177\n\022BatchWriteResponse\022\017\n\007indexes\030\001 " - + "\003(\005\022\"\n\006status\030\002 \001(\0132\022.google.rpc.Status\022" - + "4\n\020commit_timestamp\030\003 \001(\0132\032.google.proto" - + "buf.Timestamp2\213\030\n\007Spanner\022\246\001\n\rCreateSess" - + "ion\022\'.google.spanner.v1.CreateSessionReq" - + "uest\032\032.google.spanner.v1.Session\"P\332A\010dat" - + "abase\202\323\344\223\002?\":/v1/{database=projects/*/in" - + "stances/*/databases/*}/sessions:\001*\022\340\001\n\023B" - + "atchCreateSessions\022-.google.spanner.v1.B" - + "atchCreateSessionsRequest\032..google.spann" - + "er.v1.BatchCreateSessionsResponse\"j\332A\026da" - + "tabase,session_count\202\323\344\223\002K\"F/v1/{databas" - + "e=projects/*/instances/*/databases/*}/se" - + "ssions:batchCreate:\001*\022\227\001\n\nGetSession\022$.g" - + "oogle.spanner.v1.GetSessionRequest\032\032.goo" - + "gle.spanner.v1.Session\"G\332A\004name\202\323\344\223\002:\0228/" - + "v1/{name=projects/*/instances/*/database" - + "s/*/sessions/*}\022\256\001\n\014ListSessions\022&.googl" - + "e.spanner.v1.ListSessionsRequest\032\'.googl" - + "e.spanner.v1.ListSessionsResponse\"M\332A\010da" - + "tabase\202\323\344\223\002<\022:/v1/{database=projects/*/i" - + "nstances/*/databases/*}/sessions\022\231\001\n\rDel" - + "eteSession\022\'.google.spanner.v1.DeleteSes" - + "sionRequest\032\026.google.protobuf.Empty\"G\332A\004" - + "name\202\323\344\223\002:*8/v1/{name=projects/*/instanc" - + "es/*/databases/*/sessions/*}\022\243\001\n\nExecute" - + "Sql\022$.google.spanner.v1.ExecuteSqlReques" - + "t\032\034.google.spanner.v1.ResultSet\"Q\202\323\344\223\002K\"" - + "F/v1/{session=projects/*/instances/*/dat" - + "abases/*/sessions/*}:executeSql:\001*\022\276\001\n\023E" - + "xecuteStreamingSql\022$.google.spanner.v1.E" - + "xecuteSqlRequest\032#.google.spanner.v1.Par" - + "tialResultSet\"Z\202\323\344\223\002T\"O/v1/{session=proj" - + "ects/*/instances/*/databases/*/sessions/" - + "*}:executeStreamingSql:\001*0\001\022\300\001\n\017ExecuteB" - + "atchDml\022).google.spanner.v1.ExecuteBatch" - + "DmlRequest\032*.google.spanner.v1.ExecuteBa" - + "tchDmlResponse\"V\202\323\344\223\002P\"K/v1/{session=pro" - + "jects/*/instances/*/databases/*/sessions" - + "/*}:executeBatchDml:\001*\022\221\001\n\004Read\022\036.google" - + ".spanner.v1.ReadRequest\032\034.google.spanner" - + ".v1.ResultSet\"K\202\323\344\223\002E\"@/v1/{session=proj" - + "ects/*/instances/*/databases/*/sessions/" - + "*}:read:\001*\022\254\001\n\rStreamingRead\022\036.google.sp" - + "anner.v1.ReadRequest\032#.google.spanner.v1" - + ".PartialResultSet\"T\202\323\344\223\002N\"I/v1/{session=" - + "projects/*/instances/*/databases/*/sessi" - + "ons/*}:streamingRead:\001*0\001\022\311\001\n\020BeginTrans" - + "action\022*.google.spanner.v1.BeginTransact" - + "ionRequest\032\036.google.spanner.v1.Transacti" - + "on\"i\332A\017session,options\202\323\344\223\002Q\"L/v1/{sessi" - + "on=projects/*/instances/*/databases/*/se" - + "ssions/*}:beginTransaction:\001*\022\353\001\n\006Commit" - + "\022 .google.spanner.v1.CommitRequest\032!.goo" - + "gle.spanner.v1.CommitResponse\"\233\001\332A sessi" - + "on,transaction_id,mutations\332A(session,si" - + "ngle_use_transaction,mutations\202\323\344\223\002G\"B/v" + + "B\003\340A\002\022\r\n\005index\030\004 \001(\t\022\024\n\007columns\030\005 \003(\tB\003\340" + + "A\002\022/\n\007key_set\030\006 \001(\0132\031.google.spanner.v1." + + "KeySetB\003\340A\002\022\r\n\005limit\030\010 \001(\003\022\024\n\014resume_tok" + + "en\030\t \001(\014\022\027\n\017partition_token\030\n \001(\014\022:\n\017req" + + "uest_options\030\013 \001(\0132!.google.spanner.v1.R" + + "equestOptions\022E\n\025directed_read_options\030\016" + + " \001(\0132&.google.spanner.v1.DirectedReadOpt" + + "ions\022\032\n\022data_boost_enabled\030\017 \001(\010\022=\n\010orde" + + "r_by\030\020 \001(\0162&.google.spanner.v1.ReadReque" + + "st.OrderByB\003\340A\001\022?\n\tlock_hint\030\021 \001(\0162\'.goo" + + "gle.spanner.v1.ReadRequest.LockHintB\003\340A\001" + + "\"T\n\007OrderBy\022\030\n\024ORDER_BY_UNSPECIFIED\020\000\022\030\n" + + "\024ORDER_BY_PRIMARY_KEY\020\001\022\025\n\021ORDER_BY_NO_O" + + "RDER\020\002\"T\n\010LockHint\022\031\n\025LOCK_HINT_UNSPECIF" + + "IED\020\000\022\024\n\020LOCK_HINT_SHARED\020\001\022\027\n\023LOCK_HINT" + + "_EXCLUSIVE\020\002\"\203\002\n\027BeginTransactionRequest" + + "\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.googl" + + "eapis.com/Session\022;\n\007options\030\002 \001(\0132%.goo" + + "gle.spanner.v1.TransactionOptionsB\003\340A\002\022:" + + "\n\017request_options\030\003 \001(\0132!.google.spanner" + + ".v1.RequestOptions\0226\n\014mutation_key\030\004 \001(\013" + + "2\033.google.spanner.v1.MutationB\003\340A\001\"\320\003\n\rC" + + "ommitRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036s" + + "panner.googleapis.com/Session\022\030\n\016transac" + + "tion_id\030\002 \001(\014H\000\022G\n\026single_use_transactio" + + "n\030\003 \001(\0132%.google.spanner.v1.TransactionO" + + "ptionsH\000\022.\n\tmutations\030\004 \003(\0132\033.google.spa" + + "nner.v1.Mutation\022\033\n\023return_commit_stats\030" + + "\005 \001(\010\0228\n\020max_commit_delay\030\010 \001(\0132\031.google" + + ".protobuf.DurationB\003\340A\001\022:\n\017request_optio" + + "ns\030\006 \001(\0132!.google.spanner.v1.RequestOpti" + + "ons\022Q\n\017precommit_token\030\t \001(\01323.google.sp" + + "anner.v1.MultiplexedSessionPrecommitToke" + + "nB\003\340A\001B\r\n\013transaction\"g\n\017RollbackRequest" + + "\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.googl" + + "eapis.com/Session\022\033\n\016transaction_id\030\002 \001(" + + "\014B\003\340A\002\"\316\002\n\021BatchWriteRequest\0227\n\007session\030" + + "\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.com/Se" + + "ssion\022:\n\017request_options\030\003 \001(\0132!.google." + + "spanner.v1.RequestOptions\022P\n\017mutation_gr" + + "oups\030\004 \003(\01322.google.spanner.v1.BatchWrit" + + "eRequest.MutationGroupB\003\340A\002\022,\n\037exclude_t" + + "xn_from_change_streams\030\005 \001(\010B\003\340A\001\032D\n\rMut" + + "ationGroup\0223\n\tmutations\030\001 \003(\0132\033.google.s" + + "panner.v1.MutationB\003\340A\002\"\177\n\022BatchWriteRes" + + "ponse\022\017\n\007indexes\030\001 \003(\005\022\"\n\006status\030\002 \001(\0132\022" + + ".google.rpc.Status\0224\n\020commit_timestamp\030\003" + + " \001(\0132\032.google.protobuf.Timestamp2\213\030\n\007Spa" + + "nner\022\246\001\n\rCreateSession\022\'.google.spanner." + + "v1.CreateSessionRequest\032\032.google.spanner" + + ".v1.Session\"P\332A\010database\202\323\344\223\002?\":/v1/{dat" + + "abase=projects/*/instances/*/databases/*" + + "}/sessions:\001*\022\340\001\n\023BatchCreateSessions\022-." + + "google.spanner.v1.BatchCreateSessionsReq" + + "uest\032..google.spanner.v1.BatchCreateSess" + + "ionsResponse\"j\332A\026database,session_count\202" + + "\323\344\223\002K\"F/v1/{database=projects/*/instance" + + "s/*/databases/*}/sessions:batchCreate:\001*" + + "\022\227\001\n\nGetSession\022$.google.spanner.v1.GetS" + + "essionRequest\032\032.google.spanner.v1.Sessio" + + "n\"G\332A\004name\202\323\344\223\002:\0228/v1/{name=projects/*/i" + + "nstances/*/databases/*/sessions/*}\022\256\001\n\014L" + + "istSessions\022&.google.spanner.v1.ListSess" + + "ionsRequest\032\'.google.spanner.v1.ListSess" + + "ionsResponse\"M\332A\010database\202\323\344\223\002<\022:/v1/{da" + + "tabase=projects/*/instances/*/databases/" + + "*}/sessions\022\231\001\n\rDeleteSession\022\'.google.s" + + "panner.v1.DeleteSessionRequest\032\026.google." + + "protobuf.Empty\"G\332A\004name\202\323\344\223\002:*8/v1/{name" + + "=projects/*/instances/*/databases/*/sess" + + "ions/*}\022\243\001\n\nExecuteSql\022$.google.spanner." + + "v1.ExecuteSqlRequest\032\034.google.spanner.v1" + + ".ResultSet\"Q\202\323\344\223\002K\"F/v1/{session=project" + + "s/*/instances/*/databases/*/sessions/*}:" + + "executeSql:\001*\022\276\001\n\023ExecuteStreamingSql\022$." + + "google.spanner.v1.ExecuteSqlRequest\032#.go" + + "ogle.spanner.v1.PartialResultSet\"Z\202\323\344\223\002T" + + "\"O/v1/{session=projects/*/instances/*/da" + + "tabases/*/sessions/*}:executeStreamingSq" + + "l:\001*0\001\022\300\001\n\017ExecuteBatchDml\022).google.span" + + "ner.v1.ExecuteBatchDmlRequest\032*.google.s" + + "panner.v1.ExecuteBatchDmlResponse\"V\202\323\344\223\002" + + "P\"K/v1/{session=projects/*/instances/*/d" + + "atabases/*/sessions/*}:executeBatchDml:\001" + + "*\022\221\001\n\004Read\022\036.google.spanner.v1.ReadReque" + + "st\032\034.google.spanner.v1.ResultSet\"K\202\323\344\223\002E" + + "\"@/v1/{session=projects/*/instances/*/da" + + "tabases/*/sessions/*}:read:\001*\022\254\001\n\rStream" + + "ingRead\022\036.google.spanner.v1.ReadRequest\032" + + "#.google.spanner.v1.PartialResultSet\"T\202\323" + + "\344\223\002N\"I/v1/{session=projects/*/instances/" + + "*/databases/*/sessions/*}:streamingRead:" + + "\001*0\001\022\311\001\n\020BeginTransaction\022*.google.spann" + + "er.v1.BeginTransactionRequest\032\036.google.s" + + "panner.v1.Transaction\"i\332A\017session,option" + + "s\202\323\344\223\002Q\"L/v1/{session=projects/*/instanc" + + "es/*/databases/*/sessions/*}:beginTransa" + + "ction:\001*\022\353\001\n\006Commit\022 .google.spanner.v1." + + "CommitRequest\032!.google.spanner.v1.Commit" + + "Response\"\233\001\332A session,transaction_id,mut" + + "ations\332A(session,single_use_transaction," + + "mutations\202\323\344\223\002G\"B/v1/{session=projects/*" + + "/instances/*/databases/*/sessions/*}:com" + + "mit:\001*\022\260\001\n\010Rollback\022\".google.spanner.v1." + + "RollbackRequest\032\026.google.protobuf.Empty\"" + + "h\332A\026session,transaction_id\202\323\344\223\002I\"D/v1/{s" + + "ession=projects/*/instances/*/databases/" + + "*/sessions/*}:rollback:\001*\022\267\001\n\016PartitionQ" + + "uery\022(.google.spanner.v1.PartitionQueryR" + + "equest\032$.google.spanner.v1.PartitionResp" + + "onse\"U\202\323\344\223\002O\"J/v1/{session=projects/*/in" + + "stances/*/databases/*/sessions/*}:partit" + + "ionQuery:\001*\022\264\001\n\rPartitionRead\022\'.google.s" + + "panner.v1.PartitionReadRequest\032$.google." + + "spanner.v1.PartitionResponse\"T\202\323\344\223\002N\"I/v" + "1/{session=projects/*/instances/*/databa" - + "ses/*/sessions/*}:commit:\001*\022\260\001\n\010Rollback" - + "\022\".google.spanner.v1.RollbackRequest\032\026.g" - + "oogle.protobuf.Empty\"h\332A\026session,transac" - + "tion_id\202\323\344\223\002I\"D/v1/{session=projects/*/i" - + "nstances/*/databases/*/sessions/*}:rollb" - + "ack:\001*\022\267\001\n\016PartitionQuery\022(.google.spann" - + "er.v1.PartitionQueryRequest\032$.google.spa" - + "nner.v1.PartitionResponse\"U\202\323\344\223\002O\"J/v1/{" - + "session=projects/*/instances/*/databases" - + "/*/sessions/*}:partitionQuery:\001*\022\264\001\n\rPar" - + "titionRead\022\'.google.spanner.v1.Partition" - + "ReadRequest\032$.google.spanner.v1.Partitio" - + "nResponse\"T\202\323\344\223\002N\"I/v1/{session=projects" - + "/*/instances/*/databases/*/sessions/*}:p" - + "artitionRead:\001*\022\310\001\n\nBatchWrite\022$.google." - + "spanner.v1.BatchWriteRequest\032%.google.sp" - + "anner.v1.BatchWriteResponse\"k\332A\027session," - + "mutation_groups\202\323\344\223\002K\"F/v1/{session=proj" - + "ects/*/instances/*/databases/*/sessions/" - + "*}:batchWrite:\001*0\001\032w\312A\026spanner.googleapi" - + "s.com\322A[https://www.googleapis.com/auth/" - + "cloud-platform,https://www.googleapis.co" - + "m/auth/spanner.dataB\221\002\n\025com.google.spann" - + "er.v1B\014SpannerProtoP\001Z5cloud.google.com/" - + "go/spanner/apiv1/spannerpb;spannerpb\252\002\027G" - + "oogle.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Sp" - + "anner\\V1\352\002\032Google::Cloud::Spanner::V1\352A_" - + "\n\037spanner.googleapis.com/Database\022