From 7ff7cb229ee45092ae6068f0f4be9f82c7fa5f40 Mon Sep 17 00:00:00 2001 From: rajatrb Date: Mon, 5 Jun 2023 09:31:53 +0000 Subject: [PATCH 01/23] feat: add support for BatchWriteAtleastOnce --- .../google/cloud/spanner/DatabaseClient.java | 8 + .../cloud/spanner/DatabaseClientImpl.java | 24 + .../com/google/cloud/spanner/SessionImpl.java | 42 + .../com/google/cloud/spanner/SessionPool.java | 35 + .../com/google/cloud/spanner/SpannerImpl.java | 1 + .../cloud/spanner/spi/v1/GapicSpannerRpc.java | 10 + .../cloud/spanner/spi/v1/SpannerRpc.java | 3 + .../cloud/spanner/v1/SpannerClient.java | 37 + .../cloud/spanner/v1/SpannerSettings.java | 13 + .../cloud/spanner/v1/gapic_metadata.json | 3 + .../spanner/v1/stub/GrpcSpannerStub.java | 30 + .../spanner/v1/stub/HttpJsonSpannerStub.java | 54 + .../cloud/spanner/v1/stub/SpannerStub.java | 6 + .../spanner/v1/stub/SpannerStubSettings.java | 28 + .../cloud/spanner/v1/MockSpannerImpl.java | 23 + .../spanner/v1/SpannerClientHttpJsonTest.java | 11 + .../cloud/spanner/v1/SpannerClientTest.java | 58 + .../com/google/spanner/v1/SpannerGrpc.java | 120 +- .../spanner/admin/database/v1/Backup.java | 97 +- .../spanner/admin/database/v1/BackupInfo.java | 5 - .../admin/database/v1/BackupOrBuilder.java | 4 + .../admin/database/v1/BackupProto.java | 190 +-- .../admin/database/v1/CommonProto.java | 49 +- .../v1/CopyBackupEncryptionConfig.java | 5 - .../admin/database/v1/CopyBackupMetadata.java | 5 - .../admin/database/v1/CopyBackupRequest.java | 5 - .../v1/CreateBackupEncryptionConfig.java | 5 - .../database/v1/CreateBackupMetadata.java | 5 - .../database/v1/CreateBackupRequest.java | 5 - .../database/v1/CreateDatabaseMetadata.java | 5 - .../database/v1/CreateDatabaseRequest.java | 47 +- .../spanner/admin/database/v1/Database.java | 60 +- .../admin/database/v1/DatabaseOrBuilder.java | 12 + .../admin/database/v1/DatabaseRole.java | 5 - .../database/v1/DdlStatementActionInfo.java | 1161 +++++++++++++ .../v1/DdlStatementActionInfoOrBuilder.java | 148 ++ .../database/v1/DeleteBackupRequest.java | 5 - .../database/v1/DropDatabaseRequest.java | 5 - .../admin/database/v1/EncryptionConfig.java | 5 - .../admin/database/v1/EncryptionInfo.java | 5 - .../admin/database/v1/GetBackupRequest.java | 5 - .../database/v1/GetDatabaseDdlRequest.java | 5 - .../database/v1/GetDatabaseDdlResponse.java | 47 +- .../admin/database/v1/GetDatabaseRequest.java | 5 - .../v1/ListBackupOperationsRequest.java | 47 +- .../ListBackupOperationsRequestOrBuilder.java | 12 + .../v1/ListBackupOperationsResponse.java | 5 - .../admin/database/v1/ListBackupsRequest.java | 47 +- .../v1/ListBackupsRequestOrBuilder.java | 12 + .../database/v1/ListBackupsResponse.java | 5 - .../v1/ListDatabaseOperationsRequest.java | 47 +- ...istDatabaseOperationsRequestOrBuilder.java | 12 + .../v1/ListDatabaseOperationsResponse.java | 5 - .../database/v1/ListDatabaseRolesRequest.java | 5 - .../v1/ListDatabaseRolesResponse.java | 5 - .../database/v1/ListDatabasesRequest.java | 5 - .../database/v1/ListDatabasesResponse.java | 5 - .../admin/database/v1/OperationProgress.java | 5 - .../v1/OptimizeRestoredDatabaseMetadata.java | 5 - .../v1/RestoreDatabaseEncryptionConfig.java | 5 - .../database/v1/RestoreDatabaseMetadata.java | 7 +- .../v1/RestoreDatabaseMetadataOrBuilder.java | 3 +- .../database/v1/RestoreDatabaseRequest.java | 7 +- .../v1/RestoreDatabaseRequestOrBuilder.java | 2 +- .../admin/database/v1/RestoreInfo.java | 7 +- .../database/v1/RestoreInfoOrBuilder.java | 2 +- .../v1/SpannerDatabaseAdminProto.java | 528 +++--- .../database/v1/UpdateBackupRequest.java | 5 - .../v1/UpdateDatabaseDdlMetadata.java | 880 +++++++--- .../UpdateDatabaseDdlMetadataOrBuilder.java | 125 +- .../database/v1/UpdateDatabaseDdlRequest.java | 63 +- .../v1/UpdateDatabaseDdlRequestOrBuilder.java | 4 + .../database/v1/UpdateDatabaseMetadata.java | 5 - .../database/v1/UpdateDatabaseRequest.java | 5 - .../database/v1/spanner_database_admin.proto | 40 +- .../v1/CreateInstanceConfigMetadata.java | 5 - .../v1/CreateInstanceConfigRequest.java | 5 - .../instance/v1/CreateInstanceMetadata.java | 5 - .../instance/v1/CreateInstanceRequest.java | 5 - .../v1/DeleteInstanceConfigRequest.java | 5 - .../instance/v1/DeleteInstanceRequest.java | 5 - .../instance/v1/GetInstanceConfigRequest.java | 5 - .../admin/instance/v1/GetInstanceRequest.java | 5 - .../spanner/admin/instance/v1/Instance.java | 87 +- .../admin/instance/v1/InstanceConfig.java | 75 +- .../instance/v1/InstanceConfigOrBuilder.java | 15 + .../admin/instance/v1/InstanceOrBuilder.java | 17 + .../ListInstanceConfigOperationsRequest.java | 47 +- ...tanceConfigOperationsRequestOrBuilder.java | 12 + .../ListInstanceConfigOperationsResponse.java | 5 - .../v1/ListInstanceConfigsRequest.java | 5 - .../v1/ListInstanceConfigsResponse.java | 5 - .../instance/v1/ListInstancesRequest.java | 26 +- .../v1/ListInstancesRequestOrBuilder.java | 6 + .../instance/v1/ListInstancesResponse.java | 5 - .../admin/instance/v1/OperationProgress.java | 5 - .../admin/instance/v1/ReplicaInfo.java | 11 +- .../v1/SpannerInstanceAdminProto.java | 379 ++--- .../v1/UpdateInstanceConfigMetadata.java | 5 - .../v1/UpdateInstanceConfigRequest.java | 5 - .../instance/v1/UpdateInstanceMetadata.java | 5 - .../instance/v1/UpdateInstanceRequest.java | 5 - .../v1/BatchCreateSessionsRequest.java | 5 - .../v1/BatchCreateSessionsResponse.java | 5 - .../google/spanner/v1/BatchWriteRequest.java | 1435 +++++++++++++++++ .../v1/BatchWriteRequestOrBuilder.java | 150 ++ .../google/spanner/v1/BatchWriteResponse.java | 1221 ++++++++++++++ .../v1/BatchWriteResponseOrBuilder.java | 139 ++ .../spanner/v1/BeginTransactionRequest.java | 5 - .../com/google/spanner/v1/CommitRequest.java | 7 +- .../spanner/v1/CommitRequestOrBuilder.java | 2 +- .../com/google/spanner/v1/CommitResponse.java | 10 - .../spanner/v1/CreateSessionRequest.java | 5 - .../spanner/v1/DeleteSessionRequest.java | 5 - .../spanner/v1/ExecuteBatchDmlRequest.java | 125 +- .../v1/ExecuteBatchDmlRequestOrBuilder.java | 9 + .../spanner/v1/ExecuteBatchDmlResponse.java | 40 +- .../v1/ExecuteBatchDmlResponseOrBuilder.java | 5 + .../google/spanner/v1/ExecuteSqlRequest.java | 225 ++- .../v1/ExecuteSqlRequestOrBuilder.java | 29 + .../google/spanner/v1/GetSessionRequest.java | 5 - .../java/com/google/spanner/v1/KeyRange.java | 63 +- .../google/spanner/v1/KeyRangeOrBuilder.java | 4 +- .../java/com/google/spanner/v1/KeySet.java | 7 +- .../spanner/v1/ListSessionsRequest.java | 26 +- .../v1/ListSessionsRequestOrBuilder.java | 6 + .../spanner/v1/ListSessionsResponse.java | 5 - .../java/com/google/spanner/v1/Mutation.java | 95 +- .../google/spanner/v1/MutationOrBuilder.java | 8 +- .../com/google/spanner/v1/MutationProto.java | 24 +- .../google/spanner/v1/PartialResultSet.java | 327 +++- .../spanner/v1/PartialResultSetOrBuilder.java | 70 + .../java/com/google/spanner/v1/Partition.java | 5 - .../google/spanner/v1/PartitionOptions.java | 13 +- .../spanner/v1/PartitionOptionsOrBuilder.java | 2 + .../spanner/v1/PartitionQueryRequest.java | 71 +- .../v1/PartitionQueryRequestOrBuilder.java | 19 + .../spanner/v1/PartitionReadRequest.java | 58 +- .../v1/PartitionReadRequestOrBuilder.java | 3 + .../google/spanner/v1/PartitionResponse.java | 5 - .../java/com/google/spanner/v1/PlanNode.java | 27 +- .../google/spanner/v1/PlanNodeOrBuilder.java | 3 + .../java/com/google/spanner/v1/QueryPlan.java | 5 - .../com/google/spanner/v1/ReadRequest.java | 74 +- .../spanner/v1/ReadRequestOrBuilder.java | 7 + .../com/google/spanner/v1/RequestOptions.java | 7 +- .../java/com/google/spanner/v1/ResultSet.java | 5 - .../google/spanner/v1/ResultSetMetadata.java | 29 +- .../v1/ResultSetMetadataOrBuilder.java | 6 + .../com/google/spanner/v1/ResultSetStats.java | 19 +- .../spanner/v1/ResultSetStatsOrBuilder.java | 5 +- .../google/spanner/v1/RollbackRequest.java | 5 - .../java/com/google/spanner/v1/Session.java | 27 +- .../google/spanner/v1/SessionOrBuilder.java | 10 + .../com/google/spanner/v1/SpannerProto.java | 476 +++--- .../com/google/spanner/v1/StructType.java | 10 - .../com/google/spanner/v1/Transaction.java | 21 +- .../google/spanner/v1/TransactionOptions.java | 342 +++- .../v1/TransactionOptionsOrBuilder.java | 11 +- .../spanner/v1/TransactionOrBuilder.java | 4 + .../spanner/v1/TransactionSelector.java | 9 +- .../v1/TransactionSelectorOrBuilder.java | 2 +- .../main/java/com/google/spanner/v1/Type.java | 5 - .../java/com/google/spanner/v1/TypeCode.java | 7 + .../java/com/google/spanner/v1/TypeProto.java | 40 +- .../proto/google/spanner/v1/spanner.proto | 45 + 166 files changed, 8711 insertions(+), 1799 deletions(-) create mode 100644 proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java create mode 100644 proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java create mode 100644 proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java create mode 100644 proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java create mode 100644 proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java create mode 100644 proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java index a82225d5f44..8ef2e669d95 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java @@ -16,10 +16,12 @@ package com.google.cloud.spanner; +import com.google.api.gax.rpc.ServerStream; import com.google.cloud.Timestamp; import com.google.cloud.spanner.Options.RpcPriority; import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.Options.UpdateOption; +import com.google.spanner.v1.BatchWriteResponse; /** * Interface for all the APIs that are used to read/write data into a Cloud Spanner database. An @@ -191,6 +193,12 @@ CommitResponse writeWithOptions(Iterable mutations, TransactionOption. CommitResponse writeAtLeastOnceWithOptions( Iterable mutations, TransactionOption... options) throws SpannerException; + ServerStream batchWriteAtleastOnce(Iterable mutations) + throws SpannerException; + + ServerStream batchWriteAtleastOnceWithOptions( + Iterable mutations, TransactionOption... options) throws SpannerException; + /** * Returns a context in which a single read can be performed using {@link TimestampBound#strong()} * concurrency. This method will return a {@link ReadContext} that will not return the read diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java index a2a46b5a198..4ea303f1bf9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java @@ -16,6 +16,7 @@ package com.google.cloud.spanner; +import com.google.api.gax.rpc.ServerStream; import com.google.cloud.Timestamp; import com.google.cloud.spanner.Options.TransactionOption; import com.google.cloud.spanner.Options.UpdateOption; @@ -24,6 +25,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.util.concurrent.ListenableFuture; +import com.google.spanner.v1.BatchWriteResponse; import io.opencensus.common.Scope; import io.opencensus.trace.Span; import io.opencensus.trace.Tracer; @@ -106,6 +108,28 @@ public CommitResponse writeAtLeastOnceWithOptions( } } + @Override + public ServerStream batchWriteAtleastOnce(final Iterable mutations) + throws SpannerException { + return batchWriteAtleastOnceWithOptions(mutations); + } + + @Override + public ServerStream batchWriteAtleastOnceWithOptions( + final Iterable mutations, final TransactionOption... options) + throws SpannerException { + Span span = tracer.spanBuilder(READ_WRITE_TRANSACTION).startSpan(); + try (Scope s = tracer.withSpan(span)) { + return runWithSessionRetry( + session -> session.batchWriteAtleastOnceWithOptions(mutations, options)); + } catch (RuntimeException e) { + TraceUtil.setWithFailure(span, e); + throw e; + } finally { + span.end(TraceUtil.END_SPAN_OPTIONS); + } + } + @Override public ReadContext singleUse() { Span span = tracer.spanBuilder(READ_ONLY_TRANSACTION).startSpan(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java index 2bef8e3ada4..906bfb11970 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java @@ -21,6 +21,7 @@ import com.google.api.core.ApiFuture; import com.google.api.core.SettableApiFuture; +import com.google.api.gax.rpc.ServerStream; import com.google.cloud.Timestamp; import com.google.cloud.spanner.AbstractReadContext.MultiUseReadOnlyTransaction; import com.google.cloud.spanner.AbstractReadContext.SingleReadContext; @@ -35,6 +36,8 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.protobuf.ByteString; import com.google.protobuf.Empty; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.RequestOptions; @@ -195,6 +198,45 @@ public CommitResponse writeAtLeastOnceWithOptions( } } + @Override + public ServerStream batchWriteAtleastOnce(Iterable mutations) + throws SpannerException { + return batchWriteAtleastOnceWithOptions(mutations); + } + + @Override + public ServerStream batchWriteAtleastOnceWithOptions( + Iterable mutations, TransactionOption... transactionOptions) + throws SpannerException { + setActive(null); + Options batchWriteRequestOptions = Options.fromTransactionOptions(transactionOptions); + List mutationsProto = new ArrayList<>(); + Mutation.toProto(mutations, mutationsProto); + final BatchWriteRequest.Builder requestBuilder = + BatchWriteRequest.newBuilder().setSession(name).addAllMutations(mutationsProto); + if (batchWriteRequestOptions.hasPriority() || batchWriteRequestOptions.hasTag()) { + RequestOptions.Builder requestOptionsBuilder = RequestOptions.newBuilder(); + if (batchWriteRequestOptions.hasPriority()) { + requestOptionsBuilder.setPriority(batchWriteRequestOptions.priority()); + } + if (batchWriteRequestOptions.hasTag()) { + requestOptionsBuilder.setTransactionTag(batchWriteRequestOptions.tag()); + } + requestBuilder.setRequestOptions(requestOptionsBuilder.build()); + } + Span span = tracer.spanBuilder(SpannerImpl.BATCH_WRITE).startSpan(); + try (Scope s = tracer.withSpan(span)) { + ServerStream response = + spanner.getRpc().batchWriteAtleastOnce(requestBuilder.build(), this.options); + return response; + } catch (RuntimeException e) { + TraceUtil.setWithFailure(span, e); + throw e; + } finally { + span.end(TraceUtil.END_SPAN_OPTIONS); + } + } + @Override public ReadContext singleUse() { return singleUse(TimestampBound.strong()); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java index 371ff652b6f..979ab2c13c3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java @@ -43,6 +43,7 @@ import com.google.api.core.ApiFutures; import com.google.api.core.SettableApiFuture; import com.google.api.gax.core.ExecutorProvider; +import com.google.api.gax.rpc.ServerStream; import com.google.cloud.Timestamp; import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.grpc.GrpcTransportOptions.ExecutorFactory; @@ -67,6 +68,7 @@ import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.SettableFuture; import com.google.protobuf.Empty; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.ResultSetStats; import io.opencensus.common.Scope; import io.opencensus.metrics.DerivedLongCumulative; @@ -1170,6 +1172,22 @@ public CommitResponse writeAtLeastOnceWithOptions( } } + @Override + public ServerStream batchWriteAtleastOnce(Iterable mutations) + throws SpannerException { + return batchWriteAtleastOnceWithOptions(mutations); + } + + @Override + public ServerStream batchWriteAtleastOnceWithOptions( + Iterable mutations, TransactionOption... options) throws SpannerException { + try { + return get().batchWriteAtleastOnceWithOptions(mutations, options); + } finally { + close(); + } + } + @Override public ReadContext singleUse() { try { @@ -1417,6 +1435,23 @@ public CommitResponse writeAtLeastOnceWithOptions( } } + @Override + public ServerStream batchWriteAtleastOnce(Iterable mutations) + throws SpannerException { + return batchWriteAtleastOnceWithOptions(mutations); + } + + @Override + public ServerStream batchWriteAtleastOnceWithOptions( + Iterable mutations, TransactionOption... options) throws SpannerException { + try { + markUsed(); + return delegate.batchWriteAtleastOnceWithOptions(mutations, options); + } catch (SpannerException e) { + throw lastException = e; + } + } + @Override public long executePartitionedUpdate(Statement stmt, UpdateOption... options) throws SpannerException { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java index 721be9cd762..5ff916bbe93 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java @@ -66,6 +66,7 @@ class SpannerImpl extends BaseService implements Spanner { static final String COMMIT = "CloudSpannerOperation.Commit"; static final String QUERY = "CloudSpannerOperation.ExecuteStreamingQuery"; static final String READ = "CloudSpannerOperation.ExecuteStreamingRead"; + static final String BATCH_WRITE = "CloudSpannerOperation.BatchWrite"; private static final Object CLIENT_ID_LOCK = new Object(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 53954097822..26aa9ae6423 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -156,6 +156,8 @@ import com.google.spanner.admin.instance.v1.UpdateInstanceMetadata; import com.google.spanner.admin.instance.v1.UpdateInstanceRequest; import com.google.spanner.v1.BatchCreateSessionsRequest; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -1660,6 +1662,14 @@ public ServerStream executeStreamingPartitionedDml( return partitionedDmlStub.executeStreamingSqlCallable().call(request, context); } + @Override + public ServerStream batchWriteAtleastOnce( + BatchWriteRequest request, @Nullable Map options) { + GrpcCallContext context = + newCallContext(options, request.getSession(), request, SpannerGrpc.getBatchWriteMethod()); + return spannerStub.batchWriteCallable().call(request, context); + } + @Override public StreamingCall executeQuery( ExecuteSqlRequest request, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java index 27adf89a235..bf803f6e11a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java @@ -376,6 +376,9 @@ ApiFuture executeQueryAsync( ServerStream executeStreamingPartitionedDml( ExecuteSqlRequest request, @Nullable Map options, Duration timeout); + ServerStream batchWriteAtleastOnce( + BatchWriteRequest request, @Nullable Map options); + /** * Executes a query with streaming result. * diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java index a40ad087b66..d5e62ff39d9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java @@ -32,6 +32,8 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -1268,6 +1270,41 @@ public final ServerStreamingCallable streamingRea return stub.streamingReadCallable(); } + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Batches the supplied mutations in a collection of efficient transactions. The mutations are + * applied non-atomically in an unspecified order and thus, they must be independent of each + * other. Partial failure is possible, i.e., some mutations may have been applied successfully, + * while some may have failed. The results of individual batches are streamed into the response as + * and when the batches are applied. + * + *

Sample code: + * + *

{@code
+   * // This snippet has been automatically generated and should be regarded as a code template only.
+   * // It will require modifications to work:
+   * // - It may require correct/in-range values for request initialization.
+   * // - It may require specifying regional endpoints when creating the service client as shown in
+   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
+   * try (SpannerClient spannerClient = SpannerClient.create()) {
+   *   BatchWriteRequest request =
+   *       BatchWriteRequest.newBuilder()
+   *           .setSession(
+   *               SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString())
+   *           .addAllMutations(new ArrayList())
+   *           .setRequestOptions(RequestOptions.newBuilder().build())
+   *           .build();
+   *   ServerStream stream = spannerClient.batchWriteCallable().call(request);
+   *   for (BatchWriteResponse response : stream) {
+   *     // Do something when a response is received.
+   *   }
+   * }
+   * }
+ */ + public final ServerStreamingCallable batchWriteCallable() { + return stub.batchWriteCallable(); + } + // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Begins a new transaction. This step can often be skipped: diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java index 6cec68b9a21..53c3cb760c9 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java @@ -35,6 +35,8 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -152,6 +154,11 @@ public ServerStreamingCallSettings streamingReadS return ((SpannerStubSettings) getStubSettings()).streamingReadSettings(); } + /** Returns the object with the settings used for calls to batchWrite. */ + public ServerStreamingCallSettings batchWriteSettings() { + return ((SpannerStubSettings) getStubSettings()).batchWriteSettings(); + } + /** Returns the object with the settings used for calls to beginTransaction. */ public UnaryCallSettings beginTransactionSettings() { return ((SpannerStubSettings) getStubSettings()).beginTransactionSettings(); @@ -347,6 +354,12 @@ public UnaryCallSettings.Builder readSettings() { return getStubSettingsBuilder().streamingReadSettings(); } + /** Returns the builder for the settings used for calls to batchWrite. */ + public ServerStreamingCallSettings.Builder + batchWriteSettings() { + return getStubSettingsBuilder().batchWriteSettings(); + } + /** Returns the builder for the settings used for calls to beginTransaction. */ public UnaryCallSettings.Builder beginTransactionSettings() { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/gapic_metadata.json b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/gapic_metadata.json index 26711916dbb..a44723b0730 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/gapic_metadata.json +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/gapic_metadata.json @@ -13,6 +13,9 @@ "BatchCreateSessions": { "methods": ["batchCreateSessions", "batchCreateSessions", "batchCreateSessions", "batchCreateSessionsCallable"] }, + "BatchWrite": { + "methods": ["batchWriteCallable"] + }, "BeginTransaction": { "methods": ["beginTransaction", "beginTransaction", "beginTransaction", "beginTransactionCallable"] }, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java index 0e99079a91f..f694672f1b3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java @@ -30,6 +30,8 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -156,6 +158,15 @@ public class GrpcSpannerStub extends SpannerStub { .setResponseMarshaller(ProtoUtils.marshaller(PartialResultSet.getDefaultInstance())) .build(); + private static final MethodDescriptor + batchWriteMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.SERVER_STREAMING) + .setFullMethodName("google.spanner.v1.Spanner/BatchWrite") + .setRequestMarshaller(ProtoUtils.marshaller(BatchWriteRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(BatchWriteResponse.getDefaultInstance())) + .build(); + private static final MethodDescriptor beginTransactionMethodDescriptor = MethodDescriptor.newBuilder() @@ -217,6 +228,7 @@ public class GrpcSpannerStub extends SpannerStub { executeBatchDmlCallable; private final UnaryCallable readCallable; private final ServerStreamingCallable streamingReadCallable; + private final ServerStreamingCallable batchWriteCallable; private final UnaryCallable beginTransactionCallable; private final UnaryCallable commitCallable; private final UnaryCallable rollbackCallable; @@ -364,6 +376,16 @@ protected GrpcSpannerStub( return params.build(); }) .build(); + GrpcCallSettings batchWriteTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(batchWriteMethodDescriptor) + .setParamsExtractor( + request -> { + ImmutableMap.Builder params = ImmutableMap.builder(); + params.put("session", String.valueOf(request.getSession())); + return params.build(); + }) + .build(); GrpcCallSettings beginTransactionTransportSettings = GrpcCallSettings.newBuilder() .setMethodDescriptor(beginTransactionMethodDescriptor) @@ -452,6 +474,9 @@ protected GrpcSpannerStub( this.streamingReadCallable = callableFactory.createServerStreamingCallable( streamingReadTransportSettings, settings.streamingReadSettings(), clientContext); + this.batchWriteCallable = + callableFactory.createServerStreamingCallable( + batchWriteTransportSettings, settings.batchWriteSettings(), clientContext); this.beginTransactionCallable = callableFactory.createUnaryCallable( beginTransactionTransportSettings, settings.beginTransactionSettings(), clientContext); @@ -533,6 +558,11 @@ public ServerStreamingCallable streamingReadCalla return streamingReadCallable; } + @Override + public ServerStreamingCallable batchWriteCallable() { + return batchWriteCallable; + } + @Override public UnaryCallable beginTransactionCallable() { return beginTransactionCallable; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java index 776f27e49db..dbe39c9bd49 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java @@ -35,6 +35,8 @@ import com.google.protobuf.TypeRegistry; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -434,6 +436,43 @@ public class HttpJsonSpannerStub extends SpannerStub { .build()) .build(); + private static final ApiMethodDescriptor + batchWriteMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.spanner.v1.Spanner/BatchWrite") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.SERVER_STREAMING) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{session=projects/*/instances/*/databases/*/sessions/*}:batchWrite", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "session", request.getSession()); + return fields; + }) + .setQueryParamsExtractor( + request -> { + Map> fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); + return fields; + }) + .setRequestBodyExtractor( + request -> + ProtoRestSerializer.create() + .toBody("*", request.toBuilder().clearSession().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(BatchWriteResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + private static final ApiMethodDescriptor beginTransactionMethodDescriptor = ApiMethodDescriptor.newBuilder() @@ -632,6 +671,7 @@ public class HttpJsonSpannerStub extends SpannerStub { executeBatchDmlCallable; private final UnaryCallable readCallable; private final ServerStreamingCallable streamingReadCallable; + private final ServerStreamingCallable batchWriteCallable; private final UnaryCallable beginTransactionCallable; private final UnaryCallable commitCallable; private final UnaryCallable rollbackCallable; @@ -730,6 +770,11 @@ protected HttpJsonSpannerStub( .setMethodDescriptor(streamingReadMethodDescriptor) .setTypeRegistry(typeRegistry) .build(); + HttpJsonCallSettings batchWriteTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(batchWriteMethodDescriptor) + .setTypeRegistry(typeRegistry) + .build(); HttpJsonCallSettings beginTransactionTransportSettings = HttpJsonCallSettings.newBuilder() .setMethodDescriptor(beginTransactionMethodDescriptor) @@ -793,6 +838,9 @@ protected HttpJsonSpannerStub( this.streamingReadCallable = callableFactory.createServerStreamingCallable( streamingReadTransportSettings, settings.streamingReadSettings(), clientContext); + this.batchWriteCallable = + callableFactory.createServerStreamingCallable( + batchWriteTransportSettings, settings.batchWriteSettings(), clientContext); this.beginTransactionCallable = callableFactory.createUnaryCallable( beginTransactionTransportSettings, settings.beginTransactionSettings(), clientContext); @@ -826,6 +874,7 @@ public static List getMethodDescriptors() { methodDescriptors.add(executeBatchDmlMethodDescriptor); methodDescriptors.add(readMethodDescriptor); methodDescriptors.add(streamingReadMethodDescriptor); + methodDescriptors.add(batchWriteMethodDescriptor); methodDescriptors.add(beginTransactionMethodDescriptor); methodDescriptors.add(commitMethodDescriptor); methodDescriptors.add(rollbackMethodDescriptor); @@ -891,6 +940,11 @@ public ServerStreamingCallable streamingReadCalla return streamingReadCallable; } + @Override + public ServerStreamingCallable batchWriteCallable() { + return batchWriteCallable; + } + @Override public UnaryCallable beginTransactionCallable() { return beginTransactionCallable; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java index 7f7a4d95d49..17e78093cd4 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java @@ -24,6 +24,8 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -101,6 +103,10 @@ public ServerStreamingCallable streamingReadCalla throw new UnsupportedOperationException("Not implemented: streamingReadCallable()"); } + public ServerStreamingCallable batchWriteCallable() { + throw new UnsupportedOperationException("Not implemented: batchWriteCallable()"); + } + public UnaryCallable beginTransactionCallable() { throw new UnsupportedOperationException("Not implemented: beginTransactionCallable()"); } 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 ff5a6b9bb28..78b300aa39e 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 @@ -51,6 +51,8 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -136,6 +138,8 @@ public class SpannerStubSettings extends StubSettings { executeBatchDmlSettings; private final UnaryCallSettings readSettings; private final ServerStreamingCallSettings streamingReadSettings; + private final ServerStreamingCallSettings + batchWriteSettings; private final UnaryCallSettings beginTransactionSettings; private final UnaryCallSettings commitSettings; private final UnaryCallSettings rollbackSettings; @@ -249,6 +253,11 @@ public ServerStreamingCallSettings streamingReadS return streamingReadSettings; } + /** Returns the object with the settings used for calls to batchWrite. */ + public ServerStreamingCallSettings batchWriteSettings() { + return batchWriteSettings; + } + /** Returns the object with the settings used for calls to beginTransaction. */ public UnaryCallSettings beginTransactionSettings() { return beginTransactionSettings; @@ -388,6 +397,7 @@ protected SpannerStubSettings(Builder settingsBuilder) throws IOException { executeBatchDmlSettings = settingsBuilder.executeBatchDmlSettings().build(); readSettings = settingsBuilder.readSettings().build(); streamingReadSettings = settingsBuilder.streamingReadSettings().build(); + batchWriteSettings = settingsBuilder.batchWriteSettings().build(); beginTransactionSettings = settingsBuilder.beginTransactionSettings().build(); commitSettings = settingsBuilder.commitSettings().build(); rollbackSettings = settingsBuilder.rollbackSettings().build(); @@ -414,6 +424,8 @@ public static class Builder extends StubSettings.Builder readSettings; private final ServerStreamingCallSettings.Builder streamingReadSettings; + private final ServerStreamingCallSettings.Builder + batchWriteSettings; private final UnaryCallSettings.Builder beginTransactionSettings; private final UnaryCallSettings.Builder commitSettings; @@ -439,6 +451,7 @@ public static class Builder extends StubSettings.BuildernewArrayList(StatusCode.Code.UNAVAILABLE))); definitions.put( "no_retry_0_codes", ImmutableSet.copyOf(Lists.newArrayList())); + definitions.put("no_retry_codes", ImmutableSet.copyOf(Lists.newArrayList())); RETRYABLE_CODE_DEFINITIONS = definitions.build(); } @@ -488,6 +501,8 @@ public static class Builder extends StubSettings.Builder readSettings() { return streamingReadSettings; } + /** Returns the builder for the settings used for calls to batchWrite. */ + public ServerStreamingCallSettings.Builder + batchWriteSettings() { + return batchWriteSettings; + } + /** Returns the builder for the settings used for calls to beginTransaction. */ public UnaryCallSettings.Builder beginTransactionSettings() { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java index d6176e1f277..303e5cb9f1d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java @@ -21,6 +21,8 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -288,6 +290,27 @@ public void streamingRead( } } + @Override + public void batchWrite( + BatchWriteRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof BatchWriteResponse) { + requests.add(request); + responseObserver.onNext(((BatchWriteResponse) response)); + responseObserver.onCompleted(); + } else if (response instanceof Exception) { + responseObserver.onError(((Exception) response)); + } else { + responseObserver.onError( + new IllegalArgumentException( + String.format( + "Unrecognized response type %s for method BatchWrite, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + BatchWriteResponse.class.getName(), + Exception.class.getName()))); + } + } + @Override public void beginTransaction( BeginTransactionRequest request, StreamObserver responseObserver) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java index 04bd5df2166..adcc245e4be 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java @@ -806,6 +806,17 @@ public void streamingReadExceptionTest() throws Exception { mockService.addException(exception); } + @Test + public void batchWriteTest() throws Exception {} + + @Test + public void batchWriteExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + } + @Test public void beginTransactionTest() throws Exception { Transaction expectedResponse = 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 9e23c7a0523..d9e88c6ef13 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 @@ -39,6 +39,8 @@ import com.google.rpc.Status; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; +import com.google.spanner.v1.BatchWriteRequest; +import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -895,6 +897,62 @@ public void streamingReadExceptionTest() throws Exception { } } + @Test + public void batchWriteTest() throws Exception { + BatchWriteResponse expectedResponse = + BatchWriteResponse.newBuilder() + .addAllIndexes(new ArrayList()) + .setStatus(Status.newBuilder().build()) + .setCommitTimestamp(Timestamp.newBuilder().build()) + .build(); + mockSpanner.addResponse(expectedResponse); + BatchWriteRequest request = + BatchWriteRequest.newBuilder() + .setSession( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .addAllMutations(new ArrayList()) + .setRequestOptions(RequestOptions.newBuilder().build()) + .build(); + + MockStreamObserver responseObserver = new MockStreamObserver<>(); + + ServerStreamingCallable callable = + client.batchWriteCallable(); + callable.serverStreamingCall(request, responseObserver); + + List actualResponses = responseObserver.future().get(); + Assert.assertEquals(1, actualResponses.size()); + Assert.assertEquals(expectedResponse, actualResponses.get(0)); + } + + @Test + public void batchWriteExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockSpanner.addException(exception); + BatchWriteRequest request = + BatchWriteRequest.newBuilder() + .setSession( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .addAllMutations(new ArrayList()) + .setRequestOptions(RequestOptions.newBuilder().build()) + .build(); + + MockStreamObserver responseObserver = new MockStreamObserver<>(); + + ServerStreamingCallable callable = + client.batchWriteCallable(); + callable.serverStreamingCall(request, responseObserver); + + try { + List actualResponses = responseObserver.future().get(); + Assert.fail("No exception thrown"); + } catch (ExecutionException e) { + Assert.assertTrue(e.getCause() instanceof InvalidArgumentException); + InvalidArgumentException apiException = ((InvalidArgumentException) e.getCause()); + Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode()); + } + } + @Test public void beginTransactionTest() throws Exception { Transaction expectedResponse = diff --git a/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java b/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java index 59ab44cc122..6b5cdcb134f 100644 --- a/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java +++ b/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java @@ -450,6 +450,47 @@ private SpannerGrpc() {} return getStreamingReadMethod; } + private static volatile io.grpc.MethodDescriptor< + com.google.spanner.v1.BatchWriteRequest, com.google.spanner.v1.BatchWriteResponse> + getBatchWriteMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "BatchWrite", + requestType = com.google.spanner.v1.BatchWriteRequest.class, + responseType = com.google.spanner.v1.BatchWriteResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) + public static io.grpc.MethodDescriptor< + com.google.spanner.v1.BatchWriteRequest, com.google.spanner.v1.BatchWriteResponse> + getBatchWriteMethod() { + io.grpc.MethodDescriptor< + com.google.spanner.v1.BatchWriteRequest, com.google.spanner.v1.BatchWriteResponse> + getBatchWriteMethod; + if ((getBatchWriteMethod = SpannerGrpc.getBatchWriteMethod) == null) { + synchronized (SpannerGrpc.class) { + if ((getBatchWriteMethod = SpannerGrpc.getBatchWriteMethod) == null) { + SpannerGrpc.getBatchWriteMethod = + getBatchWriteMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "BatchWrite")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.v1.BatchWriteRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.v1.BatchWriteResponse.getDefaultInstance())) + .setSchemaDescriptor(new SpannerMethodDescriptorSupplier("BatchWrite")) + .build(); + } + } + } + return getBatchWriteMethod; + } + private static volatile io.grpc.MethodDescriptor< com.google.spanner.v1.BeginTransactionRequest, com.google.spanner.v1.Transaction> getBeginTransactionMethod; @@ -897,6 +938,24 @@ default void streamingRead( getStreamingReadMethod(), responseObserver); } + /** + * + * + *
+     * Batches the supplied mutations in a collection of efficient transactions.
+     * The mutations are applied non-atomically in an unspecified order and
+     * thus, they must be independent of each other. Partial failure is possible,
+     * i.e., some mutations may have been applied successfully, while some may
+     * have failed. The results of individual batches are streamed into the
+     * response as and when the batches are applied.
+     * 
+ */ + default void batchWrite( + com.google.spanner.v1.BatchWriteRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getBatchWriteMethod(), responseObserver); + } + /** * * @@ -1253,6 +1312,25 @@ public void streamingRead( responseObserver); } + /** + * + * + *
+     * Batches the supplied mutations in a collection of efficient transactions.
+     * The mutations are applied non-atomically in an unspecified order and
+     * thus, they must be independent of each other. Partial failure is possible,
+     * i.e., some mutations may have been applied successfully, while some may
+     * have failed. The results of individual batches are streamed into the
+     * response as and when the batches are applied.
+     * 
+ */ + public void batchWrite( + com.google.spanner.v1.BatchWriteRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncServerStreamingCall( + getChannel().newCall(getBatchWriteMethod(), getCallOptions()), request, responseObserver); + } + /** * * @@ -1574,6 +1652,24 @@ public java.util.Iterator streamingRead( getChannel(), getStreamingReadMethod(), getCallOptions(), request); } + /** + * + * + *
+     * Batches the supplied mutations in a collection of efficient transactions.
+     * The mutations are applied non-atomically in an unspecified order and
+     * thus, they must be independent of each other. Partial failure is possible,
+     * i.e., some mutations may have been applied successfully, while some may
+     * have failed. The results of individual batches are streamed into the
+     * response as and when the batches are applied.
+     * 
+ */ + public java.util.Iterator batchWrite( + com.google.spanner.v1.BatchWriteRequest request) { + return io.grpc.stub.ClientCalls.blockingServerStreamingCall( + getChannel(), getBatchWriteMethod(), getCallOptions(), request); + } + /** * * @@ -1971,11 +2067,12 @@ public com.google.common.util.concurrent.ListenableFuture implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -2049,6 +2146,12 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv (io.grpc.stub.StreamObserver) responseObserver); break; + case METHODID_BATCH_WRITE: + serviceImpl.batchWrite( + (com.google.spanner.v1.BatchWriteRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; case METHODID_BEGIN_TRANSACTION: serviceImpl.beginTransaction( (com.google.spanner.v1.BeginTransactionRequest) request, @@ -2157,6 +2260,12 @@ public static final io.grpc.ServerServiceDefinition bindService(AsyncService ser new MethodHandlers< com.google.spanner.v1.ReadRequest, com.google.spanner.v1.PartialResultSet>( service, METHODID_STREAMING_READ))) + .addMethod( + getBatchWriteMethod(), + io.grpc.stub.ServerCalls.asyncServerStreamingCall( + new MethodHandlers< + com.google.spanner.v1.BatchWriteRequest, + com.google.spanner.v1.BatchWriteResponse>(service, METHODID_BATCH_WRITE))) .addMethod( getBeginTransactionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -2246,6 +2355,7 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() { .addMethod(getExecuteBatchDmlMethod()) .addMethod(getReadMethod()) .addMethod(getStreamingReadMethod()) + .addMethod(getBatchWriteMethod()) .addMethod(getBeginTransactionMethod()) .addMethod(getCommitMethod()) .addMethod(getRollbackMethod()) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java index d5132408edd..83815908c09 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java @@ -41,9 +41,9 @@ private Backup() { database_ = ""; name_ = ""; state_ = 0; - referencingDatabases_ = com.google.protobuf.LazyStringArrayList.EMPTY; + referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList(); databaseDialect_ = 0; - referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY; + referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList(); } @java.lang.Override @@ -52,11 +52,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new Backup(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_Backup_descriptor; @@ -416,11 +411,13 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { *
    * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
    * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+   *
    * A globally unique identifier for the backup which cannot be
    * changed. Values are of the form
    * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
    * The final segment of the name must be between 2 and 60 characters
    * in length.
+   *
    * The backup is stored in the location(s) specified in the instance
    * configuration of the instance containing the backup, identified
    * by the prefix of the backup name of the form
@@ -449,11 +446,13 @@ public java.lang.String getName() {
    * 
    * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
    * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+   *
    * A globally unique identifier for the backup which cannot be
    * changed. Values are of the form
    * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
    * The final segment of the name must be between 2 and 60 characters
    * in length.
+   *
    * The backup is stored in the location(s) specified in the instance
    * configuration of the instance containing the backup, identified
    * by the prefix of the backup name of the form
@@ -592,7 +591,8 @@ public com.google.spanner.admin.database.v1.Backup.State getState() {
   public static final int REFERENCING_DATABASES_FIELD_NUMBER = 7;
 
   @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringList referencingDatabases_;
+  private com.google.protobuf.LazyStringArrayList referencingDatabases_ =
+      com.google.protobuf.LazyStringArrayList.emptyList();
   /**
    *
    *
@@ -784,7 +784,8 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect()
   public static final int REFERENCING_BACKUPS_FIELD_NUMBER = 11;
 
   @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringList referencingBackups_;
+  private com.google.protobuf.LazyStringArrayList referencingBackups_ =
+      com.google.protobuf.LazyStringArrayList.emptyList();
   /**
    *
    *
@@ -1304,16 +1305,14 @@ public Builder clear() {
       }
       sizeBytes_ = 0L;
       state_ = 0;
-      referencingDatabases_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      bitField0_ = (bitField0_ & ~0x00000080);
+      referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList();
       encryptionInfo_ = null;
       if (encryptionInfoBuilder_ != null) {
         encryptionInfoBuilder_.dispose();
         encryptionInfoBuilder_ = null;
       }
       databaseDialect_ = 0;
-      referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      bitField0_ = (bitField0_ & ~0x00000400);
+      referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList();
       maxExpireTime_ = null;
       if (maxExpireTimeBuilder_ != null) {
         maxExpireTimeBuilder_.dispose();
@@ -1346,7 +1345,6 @@ public com.google.spanner.admin.database.v1.Backup build() {
     public com.google.spanner.admin.database.v1.Backup buildPartial() {
       com.google.spanner.admin.database.v1.Backup result =
           new com.google.spanner.admin.database.v1.Backup(this);
-      buildPartialRepeatedFields(result);
       if (bitField0_ != 0) {
         buildPartial0(result);
       }
@@ -1354,19 +1352,6 @@ public com.google.spanner.admin.database.v1.Backup buildPartial() {
       return result;
     }
 
-    private void buildPartialRepeatedFields(com.google.spanner.admin.database.v1.Backup result) {
-      if (((bitField0_ & 0x00000080) != 0)) {
-        referencingDatabases_ = referencingDatabases_.getUnmodifiableView();
-        bitField0_ = (bitField0_ & ~0x00000080);
-      }
-      result.referencingDatabases_ = referencingDatabases_;
-      if (((bitField0_ & 0x00000400) != 0)) {
-        referencingBackups_ = referencingBackups_.getUnmodifiableView();
-        bitField0_ = (bitField0_ & ~0x00000400);
-      }
-      result.referencingBackups_ = referencingBackups_;
-    }
-
     private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) {
       int from_bitField0_ = bitField0_;
       if (((from_bitField0_ & 0x00000001) != 0)) {
@@ -1391,6 +1376,10 @@ private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) {
       if (((from_bitField0_ & 0x00000040) != 0)) {
         result.state_ = state_;
       }
+      if (((from_bitField0_ & 0x00000080) != 0)) {
+        referencingDatabases_.makeImmutable();
+        result.referencingDatabases_ = referencingDatabases_;
+      }
       if (((from_bitField0_ & 0x00000100) != 0)) {
         result.encryptionInfo_ =
             encryptionInfoBuilder_ == null ? encryptionInfo_ : encryptionInfoBuilder_.build();
@@ -1398,6 +1387,10 @@ private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) {
       if (((from_bitField0_ & 0x00000200) != 0)) {
         result.databaseDialect_ = databaseDialect_;
       }
+      if (((from_bitField0_ & 0x00000400) != 0)) {
+        referencingBackups_.makeImmutable();
+        result.referencingBackups_ = referencingBackups_;
+      }
       if (((from_bitField0_ & 0x00000800) != 0)) {
         result.maxExpireTime_ =
             maxExpireTimeBuilder_ == null ? maxExpireTime_ : maxExpireTimeBuilder_.build();
@@ -1477,7 +1470,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Backup other) {
       if (!other.referencingDatabases_.isEmpty()) {
         if (referencingDatabases_.isEmpty()) {
           referencingDatabases_ = other.referencingDatabases_;
-          bitField0_ = (bitField0_ & ~0x00000080);
+          bitField0_ |= 0x00000080;
         } else {
           ensureReferencingDatabasesIsMutable();
           referencingDatabases_.addAll(other.referencingDatabases_);
@@ -1493,7 +1486,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Backup other) {
       if (!other.referencingBackups_.isEmpty()) {
         if (referencingBackups_.isEmpty()) {
           referencingBackups_ = other.referencingBackups_;
-          bitField0_ = (bitField0_ & ~0x00000400);
+          bitField0_ |= 0x00000400;
         } else {
           ensureReferencingBackupsIsMutable();
           referencingBackups_.addAll(other.referencingBackups_);
@@ -2193,11 +2186,13 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
+     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2225,11 +2220,13 @@ public java.lang.String getName() {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
+     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2257,11 +2254,13 @@ public com.google.protobuf.ByteString getNameBytes() {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
+     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2288,11 +2287,13 @@ public Builder setName(java.lang.String value) {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
+     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2315,11 +2316,13 @@ public Builder clearName() {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
+     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2716,14 +2719,14 @@ public Builder clearState() {
       return this;
     }
 
-    private com.google.protobuf.LazyStringList referencingDatabases_ =
-        com.google.protobuf.LazyStringArrayList.EMPTY;
+    private com.google.protobuf.LazyStringArrayList referencingDatabases_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
 
     private void ensureReferencingDatabasesIsMutable() {
-      if (!((bitField0_ & 0x00000080) != 0)) {
+      if (!referencingDatabases_.isModifiable()) {
         referencingDatabases_ = new com.google.protobuf.LazyStringArrayList(referencingDatabases_);
-        bitField0_ |= 0x00000080;
       }
+      bitField0_ |= 0x00000080;
     }
     /**
      *
@@ -2745,7 +2748,8 @@ private void ensureReferencingDatabasesIsMutable() {
      * @return A list containing the referencingDatabases.
      */
     public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() {
-      return referencingDatabases_.getUnmodifiableView();
+      referencingDatabases_.makeImmutable();
+      return referencingDatabases_;
     }
     /**
      *
@@ -2842,6 +2846,7 @@ public Builder setReferencingDatabases(int index, java.lang.String value) {
       }
       ensureReferencingDatabasesIsMutable();
       referencingDatabases_.set(index, value);
+      bitField0_ |= 0x00000080;
       onChanged();
       return this;
     }
@@ -2871,6 +2876,7 @@ public Builder addReferencingDatabases(java.lang.String value) {
       }
       ensureReferencingDatabasesIsMutable();
       referencingDatabases_.add(value);
+      bitField0_ |= 0x00000080;
       onChanged();
       return this;
     }
@@ -2897,6 +2903,7 @@ public Builder addReferencingDatabases(java.lang.String value) {
     public Builder addAllReferencingDatabases(java.lang.Iterable values) {
       ensureReferencingDatabasesIsMutable();
       com.google.protobuf.AbstractMessageLite.Builder.addAll(values, referencingDatabases_);
+      bitField0_ |= 0x00000080;
       onChanged();
       return this;
     }
@@ -2920,8 +2927,9 @@ public Builder addAllReferencingDatabases(java.lang.Iterable v
      * @return This builder for chaining.
      */
     public Builder clearReferencingDatabases() {
-      referencingDatabases_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList();
       bitField0_ = (bitField0_ & ~0x00000080);
+      ;
       onChanged();
       return this;
     }
@@ -2952,6 +2960,7 @@ public Builder addReferencingDatabasesBytes(com.google.protobuf.ByteString value
       checkByteStringIsUtf8(value);
       ensureReferencingDatabasesIsMutable();
       referencingDatabases_.add(value);
+      bitField0_ |= 0x00000080;
       onChanged();
       return this;
     }
@@ -3262,14 +3271,14 @@ public Builder clearDatabaseDialect() {
       return this;
     }
 
-    private com.google.protobuf.LazyStringList referencingBackups_ =
-        com.google.protobuf.LazyStringArrayList.EMPTY;
+    private com.google.protobuf.LazyStringArrayList referencingBackups_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
 
     private void ensureReferencingBackupsIsMutable() {
-      if (!((bitField0_ & 0x00000400) != 0)) {
+      if (!referencingBackups_.isModifiable()) {
         referencingBackups_ = new com.google.protobuf.LazyStringArrayList(referencingBackups_);
-        bitField0_ |= 0x00000400;
       }
+      bitField0_ |= 0x00000400;
     }
     /**
      *
@@ -3291,7 +3300,8 @@ private void ensureReferencingBackupsIsMutable() {
      * @return A list containing the referencingBackups.
      */
     public com.google.protobuf.ProtocolStringList getReferencingBackupsList() {
-      return referencingBackups_.getUnmodifiableView();
+      referencingBackups_.makeImmutable();
+      return referencingBackups_;
     }
     /**
      *
@@ -3388,6 +3398,7 @@ public Builder setReferencingBackups(int index, java.lang.String value) {
       }
       ensureReferencingBackupsIsMutable();
       referencingBackups_.set(index, value);
+      bitField0_ |= 0x00000400;
       onChanged();
       return this;
     }
@@ -3417,6 +3428,7 @@ public Builder addReferencingBackups(java.lang.String value) {
       }
       ensureReferencingBackupsIsMutable();
       referencingBackups_.add(value);
+      bitField0_ |= 0x00000400;
       onChanged();
       return this;
     }
@@ -3443,6 +3455,7 @@ public Builder addReferencingBackups(java.lang.String value) {
     public Builder addAllReferencingBackups(java.lang.Iterable values) {
       ensureReferencingBackupsIsMutable();
       com.google.protobuf.AbstractMessageLite.Builder.addAll(values, referencingBackups_);
+      bitField0_ |= 0x00000400;
       onChanged();
       return this;
     }
@@ -3466,8 +3479,9 @@ public Builder addAllReferencingBackups(java.lang.Iterable val
      * @return This builder for chaining.
      */
     public Builder clearReferencingBackups() {
-      referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList();
       bitField0_ = (bitField0_ & ~0x00000400);
+      ;
       onChanged();
       return this;
     }
@@ -3498,6 +3512,7 @@ public Builder addReferencingBackupsBytes(com.google.protobuf.ByteString value)
       checkByteStringIsUtf8(value);
       ensureReferencingBackupsIsMutable();
       referencingBackups_.add(value);
+      bitField0_ |= 0x00000400;
       onChanged();
       return this;
     }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java
index 978bcbcccb9..0bb89ec6c08 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new BackupInfo();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_BackupInfo_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
index e3fe5ccf08c..77a157a819b 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
@@ -156,11 +156,13 @@ public interface BackupOrBuilder
    * 
    * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
    * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+   *
    * A globally unique identifier for the backup which cannot be
    * changed. Values are of the form
    * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
    * The final segment of the name must be between 2 and 60 characters
    * in length.
+   *
    * The backup is stored in the location(s) specified in the instance
    * configuration of the instance containing the backup, identified
    * by the prefix of the backup name of the form
@@ -178,11 +180,13 @@ public interface BackupOrBuilder
    * 
    * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
    * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
+   *
    * A globally unique identifier for the backup which cannot be
    * changed. Values are of the form
    * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
    * The final segment of the name must be between 2 and 60 characters
    * in length.
+   *
    * The backup is stored in the location(s) specified in the instance
    * configuration of the instance containing the backup, identified
    * by the prefix of the backup name of the form
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
index 0d0d3d7b1d3..ed23e270715 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
@@ -103,105 +103,105 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "g/operations.proto\032 google/protobuf/fiel"
           + "d_mask.proto\032\037google/protobuf/timestamp."
           + "proto\032-google/spanner/admin/database/v1/"
-          + "common.proto\"\303\006\n\006Backup\0226\n\010database\030\002 \001("
+          + "common.proto\"\313\006\n\006Backup\0226\n\010database\030\002 \001("
           + "\tB$\372A!\n\037spanner.googleapis.com/Database\022"
           + "0\n\014version_time\030\t \001(\0132\032.google.protobuf."
           + "Timestamp\022/\n\013expire_time\030\003 \001(\0132\032.google."
-          + "protobuf.Timestamp\022\014\n\004name\030\001 \001(\t\0224\n\013crea"
+          + "protobuf.Timestamp\022\014\n\004name\030\001 \001(\t\0225\n\013crea"
           + "te_time\030\004 \001(\0132\032.google.protobuf.Timestam"
-          + "pB\003\340A\003\022\027\n\nsize_bytes\030\005 \001(\003B\003\340A\003\022B\n\005state"
-          + "\030\006 \001(\0162..google.spanner.admin.database.v"
-          + "1.Backup.StateB\003\340A\003\022F\n\025referencing_datab"
-          + "ases\030\007 \003(\tB\'\340A\003\372A!\n\037spanner.googleapis.c"
-          + "om/Database\022N\n\017encryption_info\030\010 \001(\01320.g"
-          + "oogle.spanner.admin.database.v1.Encrypti"
-          + "onInfoB\003\340A\003\022P\n\020database_dialect\030\n \001(\01621."
-          + "google.spanner.admin.database.v1.Databas"
-          + "eDialectB\003\340A\003\022B\n\023referencing_backups\030\013 \003"
-          + "(\tB%\340A\003\372A\037\n\035spanner.googleapis.com/Backu"
-          + "p\0228\n\017max_expire_time\030\014 \001(\0132\032.google.prot"
-          + "obuf.TimestampB\003\340A\003\"7\n\005State\022\025\n\021STATE_UN"
-          + "SPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005READY\020\002:\\\352A"
-          + "Y\n\035spanner.googleapis.com/Backup\0228projec"
-          + "ts/{project}/instances/{instance}/backup"
-          + "s/{backup}\"\205\002\n\023CreateBackupRequest\0227\n\006pa"
-          + "rent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.c"
-          + "om/Instance\022\026\n\tbackup_id\030\002 \001(\tB\003\340A\002\022=\n\006b"
-          + "ackup\030\003 \001(\0132(.google.spanner.admin.datab"
-          + "ase.v1.BackupB\003\340A\002\022^\n\021encryption_config\030"
-          + "\004 \001(\0132>.google.spanner.admin.database.v1"
-          + ".CreateBackupEncryptionConfigB\003\340A\001\"\370\001\n\024C"
-          + "reateBackupMetadata\0220\n\004name\030\001 \001(\tB\"\372A\037\n\035"
-          + "spanner.googleapis.com/Backup\0226\n\010databas"
-          + "e\030\002 \001(\tB$\372A!\n\037spanner.googleapis.com/Dat"
-          + "abase\022E\n\010progress\030\003 \001(\01323.google.spanner"
-          + ".admin.database.v1.OperationProgress\022/\n\013"
-          + "cancel_time\030\004 \001(\0132\032.google.protobuf.Time"
-          + "stamp\"\266\002\n\021CopyBackupRequest\0227\n\006parent\030\001 "
-          + "\001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Inst"
-          + "ance\022\026\n\tbackup_id\030\002 \001(\tB\003\340A\002\022<\n\rsource_b"
-          + "ackup\030\003 \001(\tB%\340A\002\372A\037\n\035spanner.googleapis."
-          + "com/Backup\0224\n\013expire_time\030\004 \001(\0132\032.google"
-          + ".protobuf.TimestampB\003\340A\002\022\\\n\021encryption_c"
-          + "onfig\030\005 \001(\0132<.google.spanner.admin.datab"
-          + "ase.v1.CopyBackupEncryptionConfigB\003\340A\001\"\371"
-          + "\001\n\022CopyBackupMetadata\0220\n\004name\030\001 \001(\tB\"\372A\037"
-          + "\n\035spanner.googleapis.com/Backup\0229\n\rsourc"
-          + "e_backup\030\002 \001(\tB\"\372A\037\n\035spanner.googleapis."
-          + "com/Backup\022E\n\010progress\030\003 \001(\01323.google.sp"
-          + "anner.admin.database.v1.OperationProgres"
-          + "s\022/\n\013cancel_time\030\004 \001(\0132\032.google.protobuf"
-          + ".Timestamp\"\212\001\n\023UpdateBackupRequest\022=\n\006ba"
-          + "ckup\030\001 \001(\0132(.google.spanner.admin.databa"
-          + "se.v1.BackupB\003\340A\002\0224\n\013update_mask\030\002 \001(\0132\032"
-          + ".google.protobuf.FieldMaskB\003\340A\002\"G\n\020GetBa"
-          + "ckupRequest\0223\n\004name\030\001 \001(\tB%\340A\002\372A\037\n\035spann"
-          + "er.googleapis.com/Backup\"J\n\023DeleteBackup"
-          + "Request\0223\n\004name\030\001 \001(\tB%\340A\002\372A\037\n\035spanner.g"
-          + "oogleapis.com/Backup\"\204\001\n\022ListBackupsRequ"
-          + "est\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.goo"
-          + "gleapis.com/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\t"
-          + "page_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"i\n\023L"
-          + "istBackupsResponse\0229\n\007backups\030\001 \003(\0132(.go"
-          + "ogle.spanner.admin.database.v1.Backup\022\027\n"
-          + "\017next_page_token\030\002 \001(\t\"\215\001\n\033ListBackupOpe"
-          + "rationsRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037"
-          + "spanner.googleapis.com/Instance\022\016\n\006filte"
-          + "r\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_token"
-          + "\030\004 \001(\t\"j\n\034ListBackupOperationsResponse\0221"
-          + "\n\noperations\030\001 \003(\0132\035.google.longrunning."
-          + "Operation\022\027\n\017next_page_token\030\002 \001(\t\"\342\001\n\nB"
-          + "ackupInfo\0222\n\006backup\030\001 \001(\tB\"\372A\037\n\035spanner."
-          + "googleapis.com/Backup\0220\n\014version_time\030\004 "
-          + "\001(\0132\032.google.protobuf.Timestamp\022/\n\013creat"
-          + "e_time\030\002 \001(\0132\032.google.protobuf.Timestamp"
-          + "\022=\n\017source_database\030\003 \001(\tB$\372A!\n\037spanner."
-          + "googleapis.com/Database\"\335\002\n\034CreateBackup"
-          + "EncryptionConfig\022k\n\017encryption_type\030\001 \001("
-          + "\0162M.google.spanner.admin.database.v1.Cre"
-          + "ateBackupEncryptionConfig.EncryptionType"
-          + "B\003\340A\002\022?\n\014kms_key_name\030\002 \001(\tB)\340A\001\372A#\n!clo"
-          + "udkms.googleapis.com/CryptoKey\"\216\001\n\016Encry"
-          + "ptionType\022\037\n\033ENCRYPTION_TYPE_UNSPECIFIED"
-          + "\020\000\022\033\n\027USE_DATABASE_ENCRYPTION\020\001\022\035\n\031GOOGL"
-          + "E_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MANAG"
-          + "ED_ENCRYPTION\020\003\"\351\002\n\032CopyBackupEncryption"
-          + "Config\022i\n\017encryption_type\030\001 \001(\0162K.google"
-          + ".spanner.admin.database.v1.CopyBackupEnc"
-          + "ryptionConfig.EncryptionTypeB\003\340A\002\022?\n\014kms"
-          + "_key_name\030\002 \001(\tB)\340A\001\372A#\n!cloudkms.google"
-          + "apis.com/CryptoKey\"\236\001\n\016EncryptionType\022\037\n"
-          + "\033ENCRYPTION_TYPE_UNSPECIFIED\020\000\022+\n\'USE_CO"
-          + "NFIG_DEFAULT_OR_BACKUP_ENCRYPTION\020\001\022\035\n\031G"
-          + "OOGLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_M"
-          + "ANAGED_ENCRYPTION\020\003B\375\001\n$com.google.spann"
-          + "er.admin.database.v1B\013BackupProtoP\001ZFclo"
-          + "ud.google.com/go/spanner/admin/database/"
-          + "apiv1/databasepb;databasepb\252\002&Google.Clo"
-          + "ud.Spanner.Admin.Database.V1\312\002&Google\\Cl"
-          + "oud\\Spanner\\Admin\\Database\\V1\352\002+Google::"
-          + "Cloud::Spanner::Admin::Database::V1b\006pro"
-          + "to3"
+          + "pB\004\342A\001\003\022\030\n\nsize_bytes\030\005 \001(\003B\004\342A\001\003\022C\n\005sta"
+          + "te\030\006 \001(\0162..google.spanner.admin.database"
+          + ".v1.Backup.StateB\004\342A\001\003\022G\n\025referencing_da"
+          + "tabases\030\007 \003(\tB(\342A\001\003\372A!\n\037spanner.googleap"
+          + "is.com/Database\022O\n\017encryption_info\030\010 \001(\013"
+          + "20.google.spanner.admin.database.v1.Encr"
+          + "yptionInfoB\004\342A\001\003\022Q\n\020database_dialect\030\n \001"
+          + "(\01621.google.spanner.admin.database.v1.Da"
+          + "tabaseDialectB\004\342A\001\003\022C\n\023referencing_backu"
+          + "ps\030\013 \003(\tB&\342A\001\003\372A\037\n\035spanner.googleapis.co"
+          + "m/Backup\0229\n\017max_expire_time\030\014 \001(\0132\032.goog"
+          + "le.protobuf.TimestampB\004\342A\001\003\"7\n\005State\022\025\n\021"
+          + "STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005REA"
+          + "DY\020\002:\\\352AY\n\035spanner.googleapis.com/Backup"
+          + "\0228projects/{project}/instances/{instance"
+          + "}/backups/{backup}\"\211\002\n\023CreateBackupReque"
+          + "st\0228\n\006parent\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.goo"
+          + "gleapis.com/Instance\022\027\n\tbackup_id\030\002 \001(\tB"
+          + "\004\342A\001\002\022>\n\006backup\030\003 \001(\0132(.google.spanner.a"
+          + "dmin.database.v1.BackupB\004\342A\001\002\022_\n\021encrypt"
+          + "ion_config\030\004 \001(\0132>.google.spanner.admin."
+          + "database.v1.CreateBackupEncryptionConfig"
+          + "B\004\342A\001\001\"\370\001\n\024CreateBackupMetadata\0220\n\004name\030"
+          + "\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com/Backu"
+          + "p\0226\n\010database\030\002 \001(\tB$\372A!\n\037spanner.google"
+          + "apis.com/Database\022E\n\010progress\030\003 \001(\01323.go"
+          + "ogle.spanner.admin.database.v1.Operation"
+          + "Progress\022/\n\013cancel_time\030\004 \001(\0132\032.google.p"
+          + "rotobuf.Timestamp\"\273\002\n\021CopyBackupRequest\022"
+          + "8\n\006parent\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.google"
+          + "apis.com/Instance\022\027\n\tbackup_id\030\002 \001(\tB\004\342A"
+          + "\001\002\022=\n\rsource_backup\030\003 \001(\tB&\342A\001\002\372A\037\n\035span"
+          + "ner.googleapis.com/Backup\0225\n\013expire_time"
+          + "\030\004 \001(\0132\032.google.protobuf.TimestampB\004\342A\001\002"
+          + "\022]\n\021encryption_config\030\005 \001(\0132<.google.spa"
+          + "nner.admin.database.v1.CopyBackupEncrypt"
+          + "ionConfigB\004\342A\001\001\"\371\001\n\022CopyBackupMetadata\0220"
+          + "\n\004name\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.co"
+          + "m/Backup\0229\n\rsource_backup\030\002 \001(\tB\"\372A\037\n\035sp"
+          + "anner.googleapis.com/Backup\022E\n\010progress\030"
+          + "\003 \001(\01323.google.spanner.admin.database.v1"
+          + ".OperationProgress\022/\n\013cancel_time\030\004 \001(\0132"
+          + "\032.google.protobuf.Timestamp\"\214\001\n\023UpdateBa"
+          + "ckupRequest\022>\n\006backup\030\001 \001(\0132(.google.spa"
+          + "nner.admin.database.v1.BackupB\004\342A\001\002\0225\n\013u"
+          + "pdate_mask\030\002 \001(\0132\032.google.protobuf.Field"
+          + "MaskB\004\342A\001\002\"H\n\020GetBackupRequest\0224\n\004name\030\001"
+          + " \001(\tB&\342A\001\002\372A\037\n\035spanner.googleapis.com/Ba"
+          + "ckup\"K\n\023DeleteBackupRequest\0224\n\004name\030\001 \001("
+          + "\tB&\342A\001\002\372A\037\n\035spanner.googleapis.com/Backu"
+          + "p\"\205\001\n\022ListBackupsRequest\0228\n\006parent\030\001 \001(\t"
+          + "B(\342A\001\002\372A!\n\037spanner.googleapis.com/Instan"
+          + "ce\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n"
+          + "\npage_token\030\004 \001(\t\"i\n\023ListBackupsResponse"
+          + "\0229\n\007backups\030\001 \003(\0132(.google.spanner.admin"
+          + ".database.v1.Backup\022\027\n\017next_page_token\030\002"
+          + " \001(\t\"\216\001\n\033ListBackupOperationsRequest\0228\n\006"
+          + "parent\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.googleapi"
+          + "s.com/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_s"
+          + "ize\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"j\n\034ListBac"
+          + "kupOperationsResponse\0221\n\noperations\030\001 \003("
+          + "\0132\035.google.longrunning.Operation\022\027\n\017next"
+          + "_page_token\030\002 \001(\t\"\342\001\n\nBackupInfo\0222\n\006back"
+          + "up\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com/Ba"
+          + "ckup\0220\n\014version_time\030\004 \001(\0132\032.google.prot"
+          + "obuf.Timestamp\022/\n\013create_time\030\002 \001(\0132\032.go"
+          + "ogle.protobuf.Timestamp\022=\n\017source_databa"
+          + "se\030\003 \001(\tB$\372A!\n\037spanner.googleapis.com/Da"
+          + "tabase\"\337\002\n\034CreateBackupEncryptionConfig\022"
+          + "l\n\017encryption_type\030\001 \001(\0162M.google.spanne"
+          + "r.admin.database.v1.CreateBackupEncrypti"
+          + "onConfig.EncryptionTypeB\004\342A\001\002\022@\n\014kms_key"
+          + "_name\030\002 \001(\tB*\342A\001\001\372A#\n!cloudkms.googleapi"
+          + "s.com/CryptoKey\"\216\001\n\016EncryptionType\022\037\n\033EN"
+          + "CRYPTION_TYPE_UNSPECIFIED\020\000\022\033\n\027USE_DATAB"
+          + "ASE_ENCRYPTION\020\001\022\035\n\031GOOGLE_DEFAULT_ENCRY"
+          + "PTION\020\002\022\037\n\033CUSTOMER_MANAGED_ENCRYPTION\020\003"
+          + "\"\353\002\n\032CopyBackupEncryptionConfig\022j\n\017encry"
+          + "ption_type\030\001 \001(\0162K.google.spanner.admin."
+          + "database.v1.CopyBackupEncryptionConfig.E"
+          + "ncryptionTypeB\004\342A\001\002\022@\n\014kms_key_name\030\002 \001("
+          + "\tB*\342A\001\001\372A#\n!cloudkms.googleapis.com/Cryp"
+          + "toKey\"\236\001\n\016EncryptionType\022\037\n\033ENCRYPTION_T"
+          + "YPE_UNSPECIFIED\020\000\022+\n\'USE_CONFIG_DEFAULT_"
+          + "OR_BACKUP_ENCRYPTION\020\001\022\035\n\031GOOGLE_DEFAULT"
+          + "_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MANAGED_ENCRYP"
+          + "TION\020\003B\375\001\n$com.google.spanner.admin.data"
+          + "base.v1B\013BackupProtoP\001ZFcloud.google.com"
+          + "/go/spanner/admin/database/apiv1/databas"
+          + "epb;databasepb\252\002&Google.Cloud.Spanner.Ad"
+          + "min.Database.V1\312\002&Google\\Cloud\\Spanner\\A"
+          + "dmin\\Database\\V1\352\002+Google::Cloud::Spanne"
+          + "r::Admin::Database::V1b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
index a381d3c5122..0f5840f6f15 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
@@ -58,31 +58,32 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "tobuf.Timestamp\022,\n\010end_time\030\003 \001(\0132\032.goog"
           + "le.protobuf.Timestamp\"P\n\020EncryptionConfi"
           + "g\022<\n\014kms_key_name\030\002 \001(\tB&\372A#\n!cloudkms.g"
-          + "oogleapis.com/CryptoKey\"\302\002\n\016EncryptionIn"
-          + "fo\022S\n\017encryption_type\030\003 \001(\01625.google.spa"
+          + "oogleapis.com/CryptoKey\"\305\002\n\016EncryptionIn"
+          + "fo\022T\n\017encryption_type\030\003 \001(\01625.google.spa"
           + "nner.admin.database.v1.EncryptionInfo.Ty"
-          + "peB\003\340A\003\0222\n\021encryption_status\030\004 \001(\0132\022.goo"
-          + "gle.rpc.StatusB\003\340A\003\022I\n\017kms_key_version\030\002"
-          + " \001(\tB0\340A\003\372A*\n(cloudkms.googleapis.com/Cr"
-          + "yptoKeyVersion\"\\\n\004Type\022\024\n\020TYPE_UNSPECIFI"
-          + "ED\020\000\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020\001\022\037\n\033C"
-          + "USTOMER_MANAGED_ENCRYPTION\020\002*\\\n\017Database"
-          + "Dialect\022 \n\034DATABASE_DIALECT_UNSPECIFIED\020"
-          + "\000\022\027\n\023GOOGLE_STANDARD_SQL\020\001\022\016\n\nPOSTGRESQL"
-          + "\020\002B\242\004\n$com.google.spanner.admin.database"
-          + ".v1B\013CommonProtoP\001ZFcloud.google.com/go/"
-          + "spanner/admin/database/apiv1/databasepb;"
-          + "databasepb\252\002&Google.Cloud.Spanner.Admin."
-          + "Database.V1\312\002&Google\\Cloud\\Spanner\\Admin"
-          + "\\Database\\V1\352\002+Google::Cloud::Spanner::A"
-          + "dmin::Database::V1\352Ax\n!cloudkms.googleap"
-          + "is.com/CryptoKey\022Sprojects/{project}/loc"
-          + "ations/{location}/keyRings/{key_ring}/cr"
-          + "yptoKeys/{crypto_key}\352A\246\001\n(cloudkms.goog"
-          + "leapis.com/CryptoKeyVersion\022zprojects/{p"
-          + "roject}/locations/{location}/keyRings/{k"
-          + "ey_ring}/cryptoKeys/{crypto_key}/cryptoK"
-          + "eyVersions/{crypto_key_version}b\006proto3"
+          + "peB\004\342A\001\003\0223\n\021encryption_status\030\004 \001(\0132\022.go"
+          + "ogle.rpc.StatusB\004\342A\001\003\022J\n\017kms_key_version"
+          + "\030\002 \001(\tB1\342A\001\003\372A*\n(cloudkms.googleapis.com"
+          + "/CryptoKeyVersion\"\\\n\004Type\022\024\n\020TYPE_UNSPEC"
+          + "IFIED\020\000\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020\001\022\037"
+          + "\n\033CUSTOMER_MANAGED_ENCRYPTION\020\002*\\\n\017Datab"
+          + "aseDialect\022 \n\034DATABASE_DIALECT_UNSPECIFI"
+          + "ED\020\000\022\027\n\023GOOGLE_STANDARD_SQL\020\001\022\016\n\nPOSTGRE"
+          + "SQL\020\002B\242\004\n$com.google.spanner.admin.datab"
+          + "ase.v1B\013CommonProtoP\001ZFcloud.google.com/"
+          + "go/spanner/admin/database/apiv1/database"
+          + "pb;databasepb\252\002&Google.Cloud.Spanner.Adm"
+          + "in.Database.V1\312\002&Google\\Cloud\\Spanner\\Ad"
+          + "min\\Database\\V1\352\002+Google::Cloud::Spanner"
+          + "::Admin::Database::V1\352Ax\n!cloudkms.googl"
+          + "eapis.com/CryptoKey\022Sprojects/{project}/"
+          + "locations/{location}/keyRings/{key_ring}"
+          + "/cryptoKeys/{crypto_key}\352A\246\001\n(cloudkms.g"
+          + "oogleapis.com/CryptoKeyVersion\022zprojects"
+          + "/{project}/locations/{location}/keyRings"
+          + "/{key_ring}/cryptoKeys/{crypto_key}/cryp"
+          + "toKeyVersions/{crypto_key_version}b\006prot"
+          + "o3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java
index 3b571fd926b..bfa78ae301f 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CopyBackupEncryptionConfig();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java
index f2bc437a1ad..63db05c5083 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CopyBackupMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java
index 810c5043ce9..62cbd05991d 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CopyBackupRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java
index 1381514795c..72efb786d53 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateBackupEncryptionConfig();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java
index c534895357a..83c3b45c003 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateBackupMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java
index 96197d756b5..3ac0f2c8558 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateBackupRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CreateBackupRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java
index b24893c407a..ebcc297cbba 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateDatabaseMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java
index e393b538ff4..38317542e4c 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java
@@ -40,7 +40,7 @@ private CreateDatabaseRequest(com.google.protobuf.GeneratedMessageV3.Builder
   private CreateDatabaseRequest() {
     parent_ = "";
     createStatement_ = "";
-    extraStatements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    extraStatements_ = com.google.protobuf.LazyStringArrayList.emptyList();
     databaseDialect_ = 0;
   }
 
@@ -50,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateDatabaseRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_descriptor;
@@ -189,7 +184,8 @@ public com.google.protobuf.ByteString getCreateStatementBytes() {
   public static final int EXTRA_STATEMENTS_FIELD_NUMBER = 3;
 
   @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringList extraStatements_;
+  private com.google.protobuf.LazyStringArrayList extraStatements_ =
+      com.google.protobuf.LazyStringArrayList.emptyList();
   /**
    *
    *
@@ -618,8 +614,7 @@ public Builder clear() {
       bitField0_ = 0;
       parent_ = "";
       createStatement_ = "";
-      extraStatements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-      bitField0_ = (bitField0_ & ~0x00000004);
+      extraStatements_ = com.google.protobuf.LazyStringArrayList.emptyList();
       encryptionConfig_ = null;
       if (encryptionConfigBuilder_ != null) {
         encryptionConfigBuilder_.dispose();
@@ -653,7 +648,6 @@ public com.google.spanner.admin.database.v1.CreateDatabaseRequest build() {
     public com.google.spanner.admin.database.v1.CreateDatabaseRequest buildPartial() {
       com.google.spanner.admin.database.v1.CreateDatabaseRequest result =
           new com.google.spanner.admin.database.v1.CreateDatabaseRequest(this);
-      buildPartialRepeatedFields(result);
       if (bitField0_ != 0) {
         buildPartial0(result);
       }
@@ -661,15 +655,6 @@ public com.google.spanner.admin.database.v1.CreateDatabaseRequest buildPartial()
       return result;
     }
 
-    private void buildPartialRepeatedFields(
-        com.google.spanner.admin.database.v1.CreateDatabaseRequest result) {
-      if (((bitField0_ & 0x00000004) != 0)) {
-        extraStatements_ = extraStatements_.getUnmodifiableView();
-        bitField0_ = (bitField0_ & ~0x00000004);
-      }
-      result.extraStatements_ = extraStatements_;
-    }
-
     private void buildPartial0(com.google.spanner.admin.database.v1.CreateDatabaseRequest result) {
       int from_bitField0_ = bitField0_;
       if (((from_bitField0_ & 0x00000001) != 0)) {
@@ -678,6 +663,10 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CreateDatabaseRe
       if (((from_bitField0_ & 0x00000002) != 0)) {
         result.createStatement_ = createStatement_;
       }
+      if (((from_bitField0_ & 0x00000004) != 0)) {
+        extraStatements_.makeImmutable();
+        result.extraStatements_ = extraStatements_;
+      }
       if (((from_bitField0_ & 0x00000008) != 0)) {
         result.encryptionConfig_ =
             encryptionConfigBuilder_ == null ? encryptionConfig_ : encryptionConfigBuilder_.build();
@@ -746,7 +735,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.CreateDatabaseRequ
       if (!other.extraStatements_.isEmpty()) {
         if (extraStatements_.isEmpty()) {
           extraStatements_ = other.extraStatements_;
-          bitField0_ = (bitField0_ & ~0x00000004);
+          bitField0_ |= 0x00000004;
         } else {
           ensureExtraStatementsIsMutable();
           extraStatements_.addAll(other.extraStatements_);
@@ -1083,14 +1072,14 @@ public Builder setCreateStatementBytes(com.google.protobuf.ByteString value) {
       return this;
     }
 
-    private com.google.protobuf.LazyStringList extraStatements_ =
-        com.google.protobuf.LazyStringArrayList.EMPTY;
+    private com.google.protobuf.LazyStringArrayList extraStatements_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
 
     private void ensureExtraStatementsIsMutable() {
-      if (!((bitField0_ & 0x00000004) != 0)) {
+      if (!extraStatements_.isModifiable()) {
         extraStatements_ = new com.google.protobuf.LazyStringArrayList(extraStatements_);
-        bitField0_ |= 0x00000004;
       }
+      bitField0_ |= 0x00000004;
     }
     /**
      *
@@ -1107,7 +1096,8 @@ private void ensureExtraStatementsIsMutable() {
      * @return A list containing the extraStatements.
      */
     public com.google.protobuf.ProtocolStringList getExtraStatementsList() {
-      return extraStatements_.getUnmodifiableView();
+      extraStatements_.makeImmutable();
+      return extraStatements_;
     }
     /**
      *
@@ -1184,6 +1174,7 @@ public Builder setExtraStatements(int index, java.lang.String value) {
       }
       ensureExtraStatementsIsMutable();
       extraStatements_.set(index, value);
+      bitField0_ |= 0x00000004;
       onChanged();
       return this;
     }
@@ -1208,6 +1199,7 @@ public Builder addExtraStatements(java.lang.String value) {
       }
       ensureExtraStatementsIsMutable();
       extraStatements_.add(value);
+      bitField0_ |= 0x00000004;
       onChanged();
       return this;
     }
@@ -1229,6 +1221,7 @@ public Builder addExtraStatements(java.lang.String value) {
     public Builder addAllExtraStatements(java.lang.Iterable values) {
       ensureExtraStatementsIsMutable();
       com.google.protobuf.AbstractMessageLite.Builder.addAll(values, extraStatements_);
+      bitField0_ |= 0x00000004;
       onChanged();
       return this;
     }
@@ -1247,8 +1240,9 @@ public Builder addAllExtraStatements(java.lang.Iterable values
      * @return This builder for chaining.
      */
     public Builder clearExtraStatements() {
-      extraStatements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      extraStatements_ = com.google.protobuf.LazyStringArrayList.emptyList();
       bitField0_ = (bitField0_ & ~0x00000004);
+      ;
       onChanged();
       return this;
     }
@@ -1274,6 +1268,7 @@ public Builder addExtraStatementsBytes(com.google.protobuf.ByteString value) {
       checkByteStringIsUtf8(value);
       ensureExtraStatementsIsMutable();
       extraStatements_.add(value);
+      bitField0_ |= 0x00000004;
       onChanged();
       return this;
     }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java
index f982cfe291a..c87638bef4d 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java
@@ -52,11 +52,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new Database();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_Database_descriptor;
@@ -119,6 +114,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum {
      * 
      * The database is fully created and ready for use, but is still
      * being optimized for performance and cannot handle full load.
+     *
      * In this state, the database still references the backup
      * it was restore from, preventing the backup
      * from being deleted. When optimizations are complete, the full performance
@@ -169,6 +165,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum {
      * 
      * The database is fully created and ready for use, but is still
      * being optimized for performance and cannot handle full load.
+     *
      * In this state, the database still references the backup
      * it was restore from, preventing the backup
      * from being deleted. When optimizations are complete, the full performance
@@ -550,8 +547,10 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig
    * Output only. For databases that are using customer managed encryption, this
    * field contains the encryption information for the database, such as
    * encryption state and the Cloud KMS key versions that are in use.
+   *
    * For databases that are using Google default or other types of encryption,
    * this field is empty.
+   *
    * This field is propagated lazily from the backend. There might be a delay
    * from when a key version is being used and when it appears in this field.
    * 
@@ -572,8 +571,10 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -594,8 +595,10 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -615,8 +618,10 @@ public int getEncryptionInfoCount() { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -636,8 +641,10 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo(int * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -789,6 +796,7 @@ public com.google.protobuf.TimestampOrBuilder getEarliestVersionTimeOrBuilder() *
    * Output only. The read-write region which contains the database's leader
    * replicas.
+   *
    * This is the same as the value of default_leader
    * database option set using DatabaseAdmin.CreateDatabase or
    * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -816,6 +824,7 @@ public java.lang.String getDefaultLeader() {
    * 
    * Output only. The read-write region which contains the database's leader
    * replicas.
+   *
    * This is the same as the value of default_leader
    * database option set using DatabaseAdmin.CreateDatabase or
    * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -2503,8 +2512,10 @@ private void ensureEncryptionInfoIsMutable() {
      * Output only. For databases that are using customer managed encryption, this
      * field contains the encryption information for the database, such as
      * encryption state and the Cloud KMS key versions that are in use.
+     *
      * For databases that are using Google default or other types of encryption,
      * this field is empty.
+     *
      * This field is propagated lazily from the backend. There might be a delay
      * from when a key version is being used and when it appears in this field.
      * 
@@ -2528,8 +2539,10 @@ private void ensureEncryptionInfoIsMutable() { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2552,8 +2565,10 @@ public int getEncryptionInfoCount() { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2576,8 +2591,10 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo(int * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2607,8 +2624,10 @@ public Builder setEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2635,8 +2654,10 @@ public Builder setEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2665,8 +2686,10 @@ public Builder addEncryptionInfo(com.google.spanner.admin.database.v1.Encryption * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2696,8 +2719,10 @@ public Builder addEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2724,8 +2749,10 @@ public Builder addEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2752,8 +2779,10 @@ public Builder addEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2780,8 +2809,10 @@ public Builder addAllEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2807,8 +2838,10 @@ public Builder clearEncryptionInfo() { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2834,8 +2867,10 @@ public Builder removeEncryptionInfo(int index) { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2855,8 +2890,10 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder getEncryption * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2880,8 +2917,10 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2905,8 +2944,10 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2926,8 +2967,10 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryption * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -2949,8 +2992,10 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryption * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. * @@ -3359,6 +3404,7 @@ public com.google.protobuf.TimestampOrBuilder getEarliestVersionTimeOrBuilder() *
      * Output only. The read-write region which contains the database's leader
      * replicas.
+     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -3385,6 +3431,7 @@ public java.lang.String getDefaultLeader() {
      * 
      * Output only. The read-write region which contains the database's leader
      * replicas.
+     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -3411,6 +3458,7 @@ public com.google.protobuf.ByteString getDefaultLeaderBytes() {
      * 
      * Output only. The read-write region which contains the database's leader
      * replicas.
+     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -3436,6 +3484,7 @@ public Builder setDefaultLeader(java.lang.String value) {
      * 
      * Output only. The read-write region which contains the database's leader
      * replicas.
+     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -3457,6 +3506,7 @@ public Builder clearDefaultLeader() {
      * 
      * Output only. The read-write region which contains the database's leader
      * replicas.
+     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java
index 0252781fe91..2dd394d2c7c 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java
@@ -224,8 +224,10 @@ public interface DatabaseOrBuilder
    * Output only. For databases that are using customer managed encryption, this
    * field contains the encryption information for the database, such as
    * encryption state and the Cloud KMS key versions that are in use.
+   *
    * For databases that are using Google default or other types of encryption,
    * this field is empty.
+   *
    * This field is propagated lazily from the backend. There might be a delay
    * from when a key version is being used and when it appears in this field.
    * 
@@ -242,8 +244,10 @@ public interface DatabaseOrBuilder * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -260,8 +264,10 @@ public interface DatabaseOrBuilder * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -278,8 +284,10 @@ public interface DatabaseOrBuilder * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -297,8 +305,10 @@ public interface DatabaseOrBuilder * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. + * * For databases that are using Google default or other types of encryption, * this field is empty. + * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -402,6 +412,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr *
    * Output only. The read-write region which contains the database's leader
    * replicas.
+   *
    * This is the same as the value of default_leader
    * database option set using DatabaseAdmin.CreateDatabase or
    * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -418,6 +429,7 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr
    * 
    * Output only. The read-write region which contains the database's leader
    * replicas.
+   *
    * This is the same as the value of default_leader
    * database option set using DatabaseAdmin.CreateDatabase or
    * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java
index 42caf41f84f..d0f86946079 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java
@@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new DatabaseRole();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java
new file mode 100644
index 00000000000..8c57d14fb9b
--- /dev/null
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java
@@ -0,0 +1,1161 @@
+/*
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/spanner/admin/database/v1/spanner_database_admin.proto
+
+package com.google.spanner.admin.database.v1;
+
+/**
+ *
+ *
+ * 
+ * Action information extracted from a DDL statement. This proto is used to
+ * display the brief info of the DDL statement for the operation
+ * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl].
+ * 
+ * + * Protobuf type {@code google.spanner.admin.database.v1.DdlStatementActionInfo} + */ +public final class DdlStatementActionInfo extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.DdlStatementActionInfo) + DdlStatementActionInfoOrBuilder { + private static final long serialVersionUID = 0L; + // Use DdlStatementActionInfo.newBuilder() to construct. + private DdlStatementActionInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private DdlStatementActionInfo() { + action_ = ""; + entityType_ = ""; + entityNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new DdlStatementActionInfo(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.DdlStatementActionInfo.class, + com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder.class); + } + + public static final int ACTION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object action_ = ""; + /** + * + * + *
+   * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+   * This field is a non-empty string.
+   * 
+ * + * string action = 1; + * + * @return The action. + */ + @java.lang.Override + public java.lang.String getAction() { + java.lang.Object ref = action_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + action_ = s; + return s; + } + } + /** + * + * + *
+   * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+   * This field is a non-empty string.
+   * 
+ * + * string action = 1; + * + * @return The bytes for action. + */ + @java.lang.Override + public com.google.protobuf.ByteString getActionBytes() { + java.lang.Object ref = action_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + action_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ENTITY_TYPE_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object entityType_ = ""; + /** + * + * + *
+   * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+   * This field can be empty string for some DDL statement,
+   * e.g. for statement "ANALYZE", `entity_type` = "".
+   * 
+ * + * string entity_type = 2; + * + * @return The entityType. + */ + @java.lang.Override + public java.lang.String getEntityType() { + java.lang.Object ref = entityType_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + entityType_ = s; + return s; + } + } + /** + * + * + *
+   * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+   * This field can be empty string for some DDL statement,
+   * e.g. for statement "ANALYZE", `entity_type` = "".
+   * 
+ * + * string entity_type = 2; + * + * @return The bytes for entityType. + */ + @java.lang.Override + public com.google.protobuf.ByteString getEntityTypeBytes() { + java.lang.Object ref = entityType_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + entityType_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ENTITY_NAMES_FIELD_NUMBER = 3; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList entityNames_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + /** + * + * + *
+   * The entity name(s) being operated on the DDL statement.
+   * E.g.
+   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+   * 3. For statement "ANALYZE", `entity_names` = [].
+   * 
+ * + * repeated string entity_names = 3; + * + * @return A list containing the entityNames. + */ + public com.google.protobuf.ProtocolStringList getEntityNamesList() { + return entityNames_; + } + /** + * + * + *
+   * The entity name(s) being operated on the DDL statement.
+   * E.g.
+   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+   * 3. For statement "ANALYZE", `entity_names` = [].
+   * 
+ * + * repeated string entity_names = 3; + * + * @return The count of entityNames. + */ + public int getEntityNamesCount() { + return entityNames_.size(); + } + /** + * + * + *
+   * The entity name(s) being operated on the DDL statement.
+   * E.g.
+   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+   * 3. For statement "ANALYZE", `entity_names` = [].
+   * 
+ * + * repeated string entity_names = 3; + * + * @param index The index of the element to return. + * @return The entityNames at the given index. + */ + public java.lang.String getEntityNames(int index) { + return entityNames_.get(index); + } + /** + * + * + *
+   * The entity name(s) being operated on the DDL statement.
+   * E.g.
+   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+   * 3. For statement "ANALYZE", `entity_names` = [].
+   * 
+ * + * repeated string entity_names = 3; + * + * @param index The index of the value to return. + * @return The bytes of the entityNames at the given index. + */ + public com.google.protobuf.ByteString getEntityNamesBytes(int index) { + return entityNames_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(action_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, action_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(entityType_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, entityType_); + } + for (int i = 0; i < entityNames_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, entityNames_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(action_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, action_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(entityType_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, entityType_); + } + { + int dataSize = 0; + for (int i = 0; i < entityNames_.size(); i++) { + dataSize += computeStringSizeNoTag(entityNames_.getRaw(i)); + } + size += dataSize; + size += 1 * getEntityNamesList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.admin.database.v1.DdlStatementActionInfo)) { + return super.equals(obj); + } + com.google.spanner.admin.database.v1.DdlStatementActionInfo other = + (com.google.spanner.admin.database.v1.DdlStatementActionInfo) obj; + + if (!getAction().equals(other.getAction())) return false; + if (!getEntityType().equals(other.getEntityType())) return false; + if (!getEntityNamesList().equals(other.getEntityNamesList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ACTION_FIELD_NUMBER; + hash = (53 * hash) + getAction().hashCode(); + hash = (37 * hash) + ENTITY_TYPE_FIELD_NUMBER; + hash = (53 * hash) + getEntityType().hashCode(); + if (getEntityNamesCount() > 0) { + hash = (37 * hash) + ENTITY_NAMES_FIELD_NUMBER; + hash = (53 * hash) + getEntityNamesList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder( + com.google.spanner.admin.database.v1.DdlStatementActionInfo prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * + * + *
+   * Action information extracted from a DDL statement. This proto is used to
+   * display the brief info of the DDL statement for the operation
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl].
+   * 
+ * + * Protobuf type {@code google.spanner.admin.database.v1.DdlStatementActionInfo} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.DdlStatementActionInfo) + com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.admin.database.v1.DdlStatementActionInfo.class, + com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder.class); + } + + // Construct using com.google.spanner.admin.database.v1.DdlStatementActionInfo.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + action_ = ""; + entityType_ = ""; + entityNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto + .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.DdlStatementActionInfo getDefaultInstanceForType() { + return com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.DdlStatementActionInfo build() { + com.google.spanner.admin.database.v1.DdlStatementActionInfo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.DdlStatementActionInfo buildPartial() { + com.google.spanner.admin.database.v1.DdlStatementActionInfo result = + new com.google.spanner.admin.database.v1.DdlStatementActionInfo(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.admin.database.v1.DdlStatementActionInfo result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.action_ = action_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.entityType_ = entityType_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + entityNames_.makeImmutable(); + result.entityNames_ = entityNames_; + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.admin.database.v1.DdlStatementActionInfo) { + return mergeFrom((com.google.spanner.admin.database.v1.DdlStatementActionInfo) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.admin.database.v1.DdlStatementActionInfo other) { + if (other == com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance()) + return this; + if (!other.getAction().isEmpty()) { + action_ = other.action_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getEntityType().isEmpty()) { + entityType_ = other.entityType_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (!other.entityNames_.isEmpty()) { + if (entityNames_.isEmpty()) { + entityNames_ = other.entityNames_; + bitField0_ |= 0x00000004; + } else { + ensureEntityNamesIsMutable(); + entityNames_.addAll(other.entityNames_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + action_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + entityType_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + java.lang.String s = input.readStringRequireUtf8(); + ensureEntityNamesIsMutable(); + entityNames_.add(s); + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object action_ = ""; + /** + * + * + *
+     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+     * This field is a non-empty string.
+     * 
+ * + * string action = 1; + * + * @return The action. + */ + public java.lang.String getAction() { + java.lang.Object ref = action_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + action_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * + * + *
+     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+     * This field is a non-empty string.
+     * 
+ * + * string action = 1; + * + * @return The bytes for action. + */ + public com.google.protobuf.ByteString getActionBytes() { + java.lang.Object ref = action_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + action_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * + * + *
+     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+     * This field is a non-empty string.
+     * 
+ * + * string action = 1; + * + * @param value The action to set. + * @return This builder for chaining. + */ + public Builder setAction(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + action_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+     * This field is a non-empty string.
+     * 
+ * + * string action = 1; + * + * @return This builder for chaining. + */ + public Builder clearAction() { + action_ = getDefaultInstance().getAction(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * + * + *
+     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+     * This field is a non-empty string.
+     * 
+ * + * string action = 1; + * + * @param value The bytes for action to set. + * @return This builder for chaining. + */ + public Builder setActionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + action_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object entityType_ = ""; + /** + * + * + *
+     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+     * This field can be empty string for some DDL statement,
+     * e.g. for statement "ANALYZE", `entity_type` = "".
+     * 
+ * + * string entity_type = 2; + * + * @return The entityType. + */ + public java.lang.String getEntityType() { + java.lang.Object ref = entityType_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + entityType_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * + * + *
+     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+     * This field can be empty string for some DDL statement,
+     * e.g. for statement "ANALYZE", `entity_type` = "".
+     * 
+ * + * string entity_type = 2; + * + * @return The bytes for entityType. + */ + public com.google.protobuf.ByteString getEntityTypeBytes() { + java.lang.Object ref = entityType_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + entityType_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * + * + *
+     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+     * This field can be empty string for some DDL statement,
+     * e.g. for statement "ANALYZE", `entity_type` = "".
+     * 
+ * + * string entity_type = 2; + * + * @param value The entityType to set. + * @return This builder for chaining. + */ + public Builder setEntityType(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + entityType_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+     * This field can be empty string for some DDL statement,
+     * e.g. for statement "ANALYZE", `entity_type` = "".
+     * 
+ * + * string entity_type = 2; + * + * @return This builder for chaining. + */ + public Builder clearEntityType() { + entityType_ = getDefaultInstance().getEntityType(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + /** + * + * + *
+     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+     * This field can be empty string for some DDL statement,
+     * e.g. for statement "ANALYZE", `entity_type` = "".
+     * 
+ * + * string entity_type = 2; + * + * @param value The bytes for entityType to set. + * @return This builder for chaining. + */ + public Builder setEntityTypeBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + entityType_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.LazyStringArrayList entityNames_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensureEntityNamesIsMutable() { + if (!entityNames_.isModifiable()) { + entityNames_ = new com.google.protobuf.LazyStringArrayList(entityNames_); + } + bitField0_ |= 0x00000004; + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @return A list containing the entityNames. + */ + public com.google.protobuf.ProtocolStringList getEntityNamesList() { + entityNames_.makeImmutable(); + return entityNames_; + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @return The count of entityNames. + */ + public int getEntityNamesCount() { + return entityNames_.size(); + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @param index The index of the element to return. + * @return The entityNames at the given index. + */ + public java.lang.String getEntityNames(int index) { + return entityNames_.get(index); + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @param index The index of the value to return. + * @return The bytes of the entityNames at the given index. + */ + public com.google.protobuf.ByteString getEntityNamesBytes(int index) { + return entityNames_.getByteString(index); + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @param index The index to set the value at. + * @param value The entityNames to set. + * @return This builder for chaining. + */ + public Builder setEntityNames(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureEntityNamesIsMutable(); + entityNames_.set(index, value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @param value The entityNames to add. + * @return This builder for chaining. + */ + public Builder addEntityNames(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensureEntityNamesIsMutable(); + entityNames_.add(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @param values The entityNames to add. + * @return This builder for chaining. + */ + public Builder addAllEntityNames(java.lang.Iterable values) { + ensureEntityNamesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, entityNames_); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @return This builder for chaining. + */ + public Builder clearEntityNames() { + entityNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + ; + onChanged(); + return this; + } + /** + * + * + *
+     * The entity name(s) being operated on the DDL statement.
+     * E.g.
+     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+     * 3. For statement "ANALYZE", `entity_names` = [].
+     * 
+ * + * repeated string entity_names = 3; + * + * @param value The bytes of the entityNames to add. + * @return This builder for chaining. + */ + public Builder addEntityNamesBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensureEntityNamesIsMutable(); + entityNames_.add(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + @java.lang.Override + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.DdlStatementActionInfo) + } + + // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.DdlStatementActionInfo) + private static final com.google.spanner.admin.database.v1.DdlStatementActionInfo DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.DdlStatementActionInfo(); + } + + public static com.google.spanner.admin.database.v1.DdlStatementActionInfo getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DdlStatementActionInfo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.admin.database.v1.DdlStatementActionInfo getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java new file mode 100644 index 00000000000..77632b556eb --- /dev/null +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java @@ -0,0 +1,148 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/admin/database/v1/spanner_database_admin.proto + +package com.google.spanner.admin.database.v1; + +public interface DdlStatementActionInfoOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.DdlStatementActionInfo) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+   * This field is a non-empty string.
+   * 
+ * + * string action = 1; + * + * @return The action. + */ + java.lang.String getAction(); + /** + * + * + *
+   * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
+   * This field is a non-empty string.
+   * 
+ * + * string action = 1; + * + * @return The bytes for action. + */ + com.google.protobuf.ByteString getActionBytes(); + + /** + * + * + *
+   * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+   * This field can be empty string for some DDL statement,
+   * e.g. for statement "ANALYZE", `entity_type` = "".
+   * 
+ * + * string entity_type = 2; + * + * @return The entityType. + */ + java.lang.String getEntityType(); + /** + * + * + *
+   * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
+   * This field can be empty string for some DDL statement,
+   * e.g. for statement "ANALYZE", `entity_type` = "".
+   * 
+ * + * string entity_type = 2; + * + * @return The bytes for entityType. + */ + com.google.protobuf.ByteString getEntityTypeBytes(); + + /** + * + * + *
+   * The entity name(s) being operated on the DDL statement.
+   * E.g.
+   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+   * 3. For statement "ANALYZE", `entity_names` = [].
+   * 
+ * + * repeated string entity_names = 3; + * + * @return A list containing the entityNames. + */ + java.util.List getEntityNamesList(); + /** + * + * + *
+   * The entity name(s) being operated on the DDL statement.
+   * E.g.
+   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+   * 3. For statement "ANALYZE", `entity_names` = [].
+   * 
+ * + * repeated string entity_names = 3; + * + * @return The count of entityNames. + */ + int getEntityNamesCount(); + /** + * + * + *
+   * The entity name(s) being operated on the DDL statement.
+   * E.g.
+   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+   * 3. For statement "ANALYZE", `entity_names` = [].
+   * 
+ * + * repeated string entity_names = 3; + * + * @param index The index of the element to return. + * @return The entityNames at the given index. + */ + java.lang.String getEntityNames(int index); + /** + * + * + *
+   * The entity name(s) being operated on the DDL statement.
+   * E.g.
+   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
+   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
+   * 3. For statement "ANALYZE", `entity_names` = [].
+   * 
+ * + * repeated string entity_names = 3; + * + * @param index The index of the value to return. + * @return The bytes of the entityNames at the given index. + */ + com.google.protobuf.ByteString getEntityNamesBytes(int index); +} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java index e095273e163..b7ec86f086c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DeleteBackupRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java index 2aea18dad1a..401e68627a3 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DropDatabaseRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java index 1ef8ecc89c4..77046a46e50 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new EncryptionConfig(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionConfig_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java index 87cecf2d4a4..b5a473e4b8b 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java @@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new EncryptionInfo(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionInfo_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java index 7f3cad81b14..cd3c0180bc6 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetBackupRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_GetBackupRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java index 528e3bb5d78..311555b751c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetDatabaseDdlRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java index c4ad5e76da3..fd710da5da0 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java @@ -38,7 +38,7 @@ private GetDatabaseDdlResponse(com.google.protobuf.GeneratedMessageV3.Builder } private GetDatabaseDdlResponse() { - statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; + statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); } @java.lang.Override @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetDatabaseDdlResponse(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor; @@ -70,7 +65,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int STATEMENTS_FIELD_NUMBER = 1; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringList statements_; + private com.google.protobuf.LazyStringArrayList statements_ = + com.google.protobuf.LazyStringArrayList.emptyList(); /** * * @@ -340,8 +336,7 @@ private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { public Builder clear() { super.clear(); bitField0_ = 0; - statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000001); + statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); return this; } @@ -369,7 +364,6 @@ public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse build() { public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse buildPartial() { com.google.spanner.admin.database.v1.GetDatabaseDdlResponse result = new com.google.spanner.admin.database.v1.GetDatabaseDdlResponse(this); - buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -377,17 +371,12 @@ public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse buildPartial( return result; } - private void buildPartialRepeatedFields( - com.google.spanner.admin.database.v1.GetDatabaseDdlResponse result) { - if (((bitField0_ & 0x00000001) != 0)) { - statements_ = statements_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.statements_ = statements_; - } - private void buildPartial0(com.google.spanner.admin.database.v1.GetDatabaseDdlResponse result) { int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + statements_.makeImmutable(); + result.statements_ = statements_; + } } @java.lang.Override @@ -439,7 +428,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.GetDatabaseDdlResp if (!other.statements_.isEmpty()) { if (statements_.isEmpty()) { statements_ = other.statements_; - bitField0_ = (bitField0_ & ~0x00000001); + bitField0_ |= 0x00000001; } else { ensureStatementsIsMutable(); statements_.addAll(other.statements_); @@ -498,14 +487,14 @@ public Builder mergeFrom( private int bitField0_; - private com.google.protobuf.LazyStringList statements_ = - com.google.protobuf.LazyStringArrayList.EMPTY; + private com.google.protobuf.LazyStringArrayList statements_ = + com.google.protobuf.LazyStringArrayList.emptyList(); private void ensureStatementsIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { + if (!statements_.isModifiable()) { statements_ = new com.google.protobuf.LazyStringArrayList(statements_); - bitField0_ |= 0x00000001; } + bitField0_ |= 0x00000001; } /** * @@ -520,7 +509,8 @@ private void ensureStatementsIsMutable() { * @return A list containing the statements. */ public com.google.protobuf.ProtocolStringList getStatementsList() { - return statements_.getUnmodifiableView(); + statements_.makeImmutable(); + return statements_; } /** * @@ -589,6 +579,7 @@ public Builder setStatements(int index, java.lang.String value) { } ensureStatementsIsMutable(); statements_.set(index, value); + bitField0_ |= 0x00000001; onChanged(); return this; } @@ -611,6 +602,7 @@ public Builder addStatements(java.lang.String value) { } ensureStatementsIsMutable(); statements_.add(value); + bitField0_ |= 0x00000001; onChanged(); return this; } @@ -630,6 +622,7 @@ public Builder addStatements(java.lang.String value) { public Builder addAllStatements(java.lang.Iterable values) { ensureStatementsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, statements_); + bitField0_ |= 0x00000001; onChanged(); return this; } @@ -646,8 +639,9 @@ public Builder addAllStatements(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearStatements() { - statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; + statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); bitField0_ = (bitField0_ & ~0x00000001); + ; onChanged(); return this; } @@ -671,6 +665,7 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureStatementsIsMutable(); statements_.add(value); + bitField0_ |= 0x00000001; onChanged(); return this; } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java index 2a501d6d7cf..d6b52bfbbfa 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetDatabaseRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java index 5426f3dd857..a871c005dc6 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java @@ -50,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ListBackupOperationsRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_descriptor; @@ -136,13 +131,16 @@ public com.google.protobuf.ByteString getParentBytes() { * *
    * An expression that filters the list of returned backup operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -154,10 +152,13 @@ public com.google.protobuf.ByteString getParentBytes() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
    *      `metadata.database:prod` - Returns operations where:
@@ -218,13 +219,16 @@ public java.lang.String getFilter() {
    *
    * 
    * An expression that filters the list of returned backup operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -236,10 +240,13 @@ public java.lang.String getFilter() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
    *      `metadata.database:prod` - Returns operations where:
@@ -917,13 +924,16 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *
      * 
      * An expression that filters the list of returned backup operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -935,10 +945,13 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
@@ -998,13 +1011,16 @@ public java.lang.String getFilter() {
      *
      * 
      * An expression that filters the list of returned backup operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1016,10 +1032,13 @@ public java.lang.String getFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
@@ -1079,13 +1098,16 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *
      * 
      * An expression that filters the list of returned backup operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1097,10 +1119,13 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
@@ -1159,13 +1184,16 @@ public Builder setFilter(java.lang.String value) {
      *
      * 
      * An expression that filters the list of returned backup operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1177,10 +1205,13 @@ public Builder setFilter(java.lang.String value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
@@ -1235,13 +1266,16 @@ public Builder clearFilter() {
      *
      * 
      * An expression that filters the list of returned backup operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1253,10 +1287,13 @@ public Builder clearFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
index 4d862ccc097..4268655ed60 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
@@ -59,13 +59,16 @@ public interface ListBackupOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned backup operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -77,10 +80,13 @@ public interface ListBackupOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
    *      `metadata.database:prod` - Returns operations where:
@@ -130,13 +136,16 @@ public interface ListBackupOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned backup operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -148,10 +157,13 @@ public interface ListBackupOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
    *      `metadata.database:prod` - Returns operations where:
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
index a1a12ed3bf8..4afe5a1cc6a 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListBackupOperationsResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java
index 0140292e32b..69c1786eec9 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListBackupsRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_ListBackupsRequest_descriptor;
@@ -135,12 +130,15 @@ public com.google.protobuf.ByteString getParentBytes() {
    *
    * 
    * An expression that filters the list of returned backups.
+   *
    * A filter expression consists of a field name, a comparison operator, and a
    * value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+   *
    *   * `name`
    *   * `database`
    *   * `state`
@@ -148,10 +146,13 @@ public com.google.protobuf.ByteString getParentBytes() {
    *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `size_bytes`
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `name:Howl` - The backup's name contains the string "howl".
    *   * `database:prod`
    *          - The database's name contains the string "prod".
@@ -186,12 +187,15 @@ public java.lang.String getFilter() {
    *
    * 
    * An expression that filters the list of returned backups.
+   *
    * A filter expression consists of a field name, a comparison operator, and a
    * value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+   *
    *   * `name`
    *   * `database`
    *   * `state`
@@ -199,10 +203,13 @@ public java.lang.String getFilter() {
    *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `size_bytes`
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `name:Howl` - The backup's name contains the string "howl".
    *   * `database:prod`
    *          - The database's name contains the string "prod".
@@ -849,12 +856,15 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *
      * 
      * An expression that filters the list of returned backups.
+     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -862,10 +872,13 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
@@ -899,12 +912,15 @@ public java.lang.String getFilter() {
      *
      * 
      * An expression that filters the list of returned backups.
+     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -912,10 +928,13 @@ public java.lang.String getFilter() {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
@@ -949,12 +968,15 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *
      * 
      * An expression that filters the list of returned backups.
+     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -962,10 +984,13 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
@@ -998,12 +1023,15 @@ public Builder setFilter(java.lang.String value) {
      *
      * 
      * An expression that filters the list of returned backups.
+     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -1011,10 +1039,13 @@ public Builder setFilter(java.lang.String value) {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
@@ -1043,12 +1074,15 @@ public Builder clearFilter() {
      *
      * 
      * An expression that filters the list of returned backups.
+     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -1056,10 +1090,13 @@ public Builder clearFilter() {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java
index 4ea911b53ce..3c253ef05bf 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java
@@ -59,12 +59,15 @@ public interface ListBackupsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned backups.
+   *
    * A filter expression consists of a field name, a comparison operator, and a
    * value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+   *
    *   * `name`
    *   * `database`
    *   * `state`
@@ -72,10 +75,13 @@ public interface ListBackupsRequestOrBuilder
    *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `size_bytes`
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `name:Howl` - The backup's name contains the string "howl".
    *   * `database:prod`
    *          - The database's name contains the string "prod".
@@ -99,12 +105,15 @@ public interface ListBackupsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned backups.
+   *
    * A filter expression consists of a field name, a comparison operator, and a
    * value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
+   *
    *   * `name`
    *   * `database`
    *   * `state`
@@ -112,10 +121,13 @@ public interface ListBackupsRequestOrBuilder
    *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `size_bytes`
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `name:Howl` - The backup's name contains the string "howl".
    *   * `database:prod`
    *          - The database's name contains the string "prod".
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java
index e320ee4aba2..8c06fc77b79 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListBackupsResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_ListBackupsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
index 9bf375def87..4b0abaf18d2 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
@@ -50,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabaseOperationsRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor;
@@ -136,13 +131,16 @@ public com.google.protobuf.ByteString getParentBytes() {
    *
    * 
    * An expression that filters the list of returned operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -154,10 +152,13 @@ public com.google.protobuf.ByteString getParentBytes() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
    *     `(metadata.source_type:BACKUP) AND` \
@@ -194,13 +195,16 @@ public java.lang.String getFilter() {
    *
    * 
    * An expression that filters the list of returned operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -212,10 +216,13 @@ public java.lang.String getFilter() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
    *     `(metadata.source_type:BACKUP) AND` \
@@ -873,13 +880,16 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -891,10 +901,13 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
@@ -930,13 +943,16 @@ public java.lang.String getFilter() {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -948,10 +964,13 @@ public java.lang.String getFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
@@ -987,13 +1006,16 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1005,10 +1027,13 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
@@ -1043,13 +1068,16 @@ public Builder setFilter(java.lang.String value) {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1061,10 +1089,13 @@ public Builder setFilter(java.lang.String value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
@@ -1095,13 +1126,16 @@ public Builder clearFilter() {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1113,10 +1147,13 @@ public Builder clearFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
index e020307e57f..4d1f7f23c82 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
@@ -59,13 +59,16 @@ public interface ListDatabaseOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -77,10 +80,13 @@ public interface ListDatabaseOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
    *     `(metadata.source_type:BACKUP) AND` \
@@ -106,13 +112,16 @@ public interface ListDatabaseOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -124,10 +133,13 @@ public interface ListDatabaseOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
    *     `(metadata.source_type:BACKUP) AND` \
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java
index 763faff8830..110f68ff83d 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java
@@ -50,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabaseOperationsResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java
index 4b7453090ce..e26e0089963 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabaseRolesRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java
index ac539aa5acf..442ed797d6f 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabaseRolesResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java
index eac171f8df9..c6c3c695459 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabasesRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java
index dd3ce964137..6063e3bb8a3 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabasesResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java
index dceff032df0..7a4a49e58e6 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java
@@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new OperationProgress();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.CommonProto
         .internal_static_google_spanner_admin_database_v1_OperationProgress_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java
index ce652f5318f..372757476db 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java
@@ -51,11 +51,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new OptimizeRestoredDatabaseMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java
index 54aa3135f07..19523910055 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RestoreDatabaseEncryptionConfig();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java
index 0225666e1ff..49ca8fde967 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java
@@ -50,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RestoreDatabaseMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor;
@@ -71,6 +66,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
   }
 
   private int sourceInfoCase_ = 0;
+
+  @SuppressWarnings("serial")
   private java.lang.Object sourceInfo_;
 
   public enum SourceInfoCase
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java
index 35ad6d76e9d..a6b1bc97877 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java
@@ -259,6 +259,5 @@ public interface RestoreDatabaseMetadataOrBuilder
    */
   com.google.protobuf.ByteString getOptimizeDatabaseOperationNameBytes();
 
-  public com.google.spanner.admin.database.v1.RestoreDatabaseMetadata.SourceInfoCase
-      getSourceInfoCase();
+  com.google.spanner.admin.database.v1.RestoreDatabaseMetadata.SourceInfoCase getSourceInfoCase();
 }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java
index c89cf015544..96d866db827 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RestoreDatabaseRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor;
@@ -70,6 +65,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
   }
 
   private int sourceCase_ = 0;
+
+  @SuppressWarnings("serial")
   private java.lang.Object source_;
 
   public enum SourceCase
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java
index f7c1c6e1f82..e2047038bd5 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java
@@ -188,5 +188,5 @@ public interface RestoreDatabaseRequestOrBuilder
   com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfigOrBuilder
       getEncryptionConfigOrBuilder();
 
-  public com.google.spanner.admin.database.v1.RestoreDatabaseRequest.SourceCase getSourceCase();
+  com.google.spanner.admin.database.v1.RestoreDatabaseRequest.SourceCase getSourceCase();
 }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java
index e76b3bcef86..02c67d53686 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java
@@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RestoreInfo();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_RestoreInfo_descriptor;
@@ -68,6 +63,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
   }
 
   private int sourceInfoCase_ = 0;
+
+  @SuppressWarnings("serial")
   private java.lang.Object sourceInfo_;
 
   public enum SourceInfoCase
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java
index f1b55bcc5f5..d02746a0ed6 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java
@@ -86,5 +86,5 @@ public interface RestoreInfoOrBuilder
    */
   com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrBuilder();
 
-  public com.google.spanner.admin.database.v1.RestoreInfo.SourceInfoCase getSourceInfoCase();
+  com.google.spanner.admin.database.v1.RestoreInfo.SourceInfoCase getSourceInfoCase();
 }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
index 0045ee30f35..4ac1d45264c 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
@@ -67,6 +67,10 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r
       internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+      internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor;
+  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
       internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
@@ -144,249 +148,253 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "ource_type\030\001 \001(\01623.google.spanner.admin."
           + "database.v1.RestoreSourceType\022C\n\013backup_"
           + "info\030\002 \001(\0132,.google.spanner.admin.databa"
-          + "se.v1.BackupInfoH\000B\r\n\013source_info\"\312\006\n\010Da"
-          + "tabase\022\021\n\004name\030\001 \001(\tB\003\340A\002\022D\n\005state\030\002 \001(\016"
-          + "20.google.spanner.admin.database.v1.Data"
-          + "base.StateB\003\340A\003\0224\n\013create_time\030\003 \001(\0132\032.g"
-          + "oogle.protobuf.TimestampB\003\340A\003\022H\n\014restore"
-          + "_info\030\004 \001(\0132-.google.spanner.admin.datab"
-          + "ase.v1.RestoreInfoB\003\340A\003\022R\n\021encryption_co"
-          + "nfig\030\005 \001(\01322.google.spanner.admin.databa"
-          + "se.v1.EncryptionConfigB\003\340A\003\022N\n\017encryptio"
-          + "n_info\030\010 \003(\01320.google.spanner.admin.data"
-          + "base.v1.EncryptionInfoB\003\340A\003\022%\n\030version_r"
-          + "etention_period\030\006 \001(\tB\003\340A\003\022>\n\025earliest_v"
-          + "ersion_time\030\007 \001(\0132\032.google.protobuf.Time"
-          + "stampB\003\340A\003\022\033\n\016default_leader\030\t \001(\tB\003\340A\003\022"
-          + "P\n\020database_dialect\030\n \001(\01621.google.spann"
-          + "er.admin.database.v1.DatabaseDialectB\003\340A"
-          + "\003\022\036\n\026enable_drop_protection\030\013 \001(\010\022\030\n\013rec"
-          + "onciling\030\014 \001(\010B\003\340A\003\"M\n\005State\022\025\n\021STATE_UN"
-          + "SPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005READY\020\002\022\024\n\020"
-          + "READY_OPTIMIZING\020\003:b\352A_\n\037spanner.googlea"
-          + "pis.com/Database\022\202\323\344\223\002/\022-"
-          + "/v1/{parent=projects/*/instances/*}/data"
-          + "bases\332A\006parent\022\244\002\n\016CreateDatabase\0227.goog"
-          + "le.spanner.admin.database.v1.CreateDatab"
-          + "aseRequest\032\035.google.longrunning.Operatio"
-          + "n\"\271\001\202\323\344\223\0022\"-/v1/{parent=projects/*/insta"
-          + "nces/*}/databases:\001*\332A\027parent,create_sta"
-          + "tement\312Ad\n)google.spanner.admin.database"
-          + ".v1.Database\0227google.spanner.admin.datab"
-          + "ase.v1.CreateDatabaseMetadata\022\255\001\n\013GetDat"
-          + "abase\0224.google.spanner.admin.database.v1"
-          + ".GetDatabaseRequest\032*.google.spanner.adm"
-          + "in.database.v1.Database\"<\202\323\344\223\002/\022-/v1/{na"
-          + "me=projects/*/instances/*/databases/*}\332A"
-          + "\004name\022\357\001\n\016UpdateDatabase\0227.google.spanne"
-          + "r.admin.database.v1.UpdateDatabaseReques"
-          + "t\032\035.google.longrunning.Operation\"\204\001\202\323\344\223\002"
-          + "B26/v1/{database.name=projects/*/instanc"
-          + "es/*/databases/*}:\010database\332A\024database,u"
-          + "pdate_mask\312A\"\n\010Database\022\026UpdateDatabaseM"
-          + "etadata\022\235\002\n\021UpdateDatabaseDdl\022:.google.s"
-          + "panner.admin.database.v1.UpdateDatabaseD"
-          + "dlRequest\032\035.google.longrunning.Operation"
-          + "\"\254\001\202\323\344\223\002:25/v1/{database=projects/*/inst"
-          + "ances/*/databases/*}/ddl:\001*\332A\023database,s"
-          + "tatements\312AS\n\025google.protobuf.Empty\022:goo"
-          + "gle.spanner.admin.database.v1.UpdateData"
-          + "baseDdlMetadata\022\243\001\n\014DropDatabase\0225.googl"
-          + "e.spanner.admin.database.v1.DropDatabase"
-          + "Request\032\026.google.protobuf.Empty\"D\202\323\344\223\0023*"
-          + "1/v1/{database=projects/*/instances/*/da"
-          + "tabases/*}\332A\010database\022\315\001\n\016GetDatabaseDdl"
-          + "\0227.google.spanner.admin.database.v1.GetD"
-          + "atabaseDdlRequest\0328.google.spanner.admin"
-          + ".database.v1.GetDatabaseDdlResponse\"H\202\323\344"
-          + "\223\0027\0225/v1/{database=projects/*/instances/"
-          + "*/databases/*}/ddl\332A\010database\022\353\001\n\014SetIam"
-          + "Policy\022\".google.iam.v1.SetIamPolicyReque"
-          + "st\032\025.google.iam.v1.Policy\"\237\001\202\323\344\223\002\206\001\">/v1"
-          + "/{resource=projects/*/instances/*/databa"
-          + "ses/*}:setIamPolicy:\001*ZA\"/v1/{"
-          + "resource=projects/*/instances/*/database"
-          + "s/*}:getIamPolicy:\001*ZA\".google.spanner.admin.databa"
-          + "se.v1.ListBackupOperationsResponse\"E\202\323\344\223"
-          + "\0026\0224/v1/{parent=projects/*/instances/*}/"
-          + "backupOperations\332A\006parent\022\334\001\n\021ListDataba"
-          + "seRoles\022:.google.spanner.admin.database."
-          + "v1.ListDatabaseRolesRequest\032;.google.spa"
-          + "nner.admin.database.v1.ListDatabaseRoles"
-          + "Response\"N\202\323\344\223\002?\022=/v1/{parent=projects/*"
-          + "/instances/*/databases/*}/databaseRoles\332"
-          + "A\006parent\032x\312A\026spanner.googleapis.com\322A\\ht"
-          + "tps://www.googleapis.com/auth/cloud-plat"
-          + "form,https://www.googleapis.com/auth/spa"
-          + "nner.adminB\330\002\n$com.google.spanner.admin."
-          + "database.v1B\031SpannerDatabaseAdminProtoP\001"
-          + "ZFcloud.google.com/go/spanner/admin/data"
-          + "base/apiv1/databasepb;databasepb\252\002&Googl"
-          + "e.Cloud.Spanner.Admin.Database.V1\312\002&Goog"
-          + "le\\Cloud\\Spanner\\Admin\\Database\\V1\352\002+Goo"
-          + "gle::Cloud::Spanner::Admin::Database::V1"
-          + "\352AJ\n\037spanner.googleapis.com/Instance\022\'pr"
-          + "ojects/{project}/instances/{instance}b\006p"
-          + "roto3"
+          + "is.com/Database\022E\n\010progress\030\002 \001(\01323.goog"
+          + "le.spanner.admin.database.v1.OperationPr"
+          + "ogress\"\237\001\n\014DatabaseRole\022\022\n\004name\030\001 \001(\tB\004\342"
+          + "A\001\002:{\352Ax\n#spanner.googleapis.com/Databas"
+          + "eRole\022Qprojects/{project}/instances/{ins"
+          + "tance}/databases/{database}/databaseRole"
+          + "s/{role}\"{\n\030ListDatabaseRolesRequest\0228\n\006"
+          + "parent\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.googleapi"
+          + "s.com/Database\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npag"
+          + "e_token\030\003 \001(\t\"|\n\031ListDatabaseRolesRespon"
+          + "se\022F\n\016database_roles\030\001 \003(\0132..google.span"
+          + "ner.admin.database.v1.DatabaseRole\022\027\n\017ne"
+          + "xt_page_token\030\002 \001(\t*5\n\021RestoreSourceType"
+          + "\022\024\n\020TYPE_UNSPECIFIED\020\000\022\n\n\006BACKUP\020\0012\356%\n\rD"
+          + "atabaseAdmin\022\300\001\n\rListDatabases\0226.google."
+          + "spanner.admin.database.v1.ListDatabasesR"
+          + "equest\0327.google.spanner.admin.database.v"
+          + "1.ListDatabasesResponse\">\332A\006parent\202\323\344\223\002/"
+          + "\022-/v1/{parent=projects/*/instances/*}/da"
+          + "tabases\022\244\002\n\016CreateDatabase\0227.google.span"
+          + "ner.admin.database.v1.CreateDatabaseRequ"
+          + "est\032\035.google.longrunning.Operation\"\271\001\312Ad"
+          + "\n)google.spanner.admin.database.v1.Datab"
+          + "ase\0227google.spanner.admin.database.v1.Cr"
+          + "eateDatabaseMetadata\332A\027parent,create_sta"
+          + "tement\202\323\344\223\0022\"-/v1/{parent=projects/*/ins"
+          + "tances/*}/databases:\001*\022\255\001\n\013GetDatabase\0224"
+          + ".google.spanner.admin.database.v1.GetDat"
+          + "abaseRequest\032*.google.spanner.admin.data"
+          + "base.v1.Database\"<\332A\004name\202\323\344\223\002/\022-/v1/{na"
+          + "me=projects/*/instances/*/databases/*}\022\357"
+          + "\001\n\016UpdateDatabase\0227.google.spanner.admin"
+          + ".database.v1.UpdateDatabaseRequest\032\035.goo"
+          + "gle.longrunning.Operation\"\204\001\312A\"\n\010Databas"
+          + "e\022\026UpdateDatabaseMetadata\332A\024database,upd"
+          + "ate_mask\202\323\344\223\002B26/v1/{database.name=proje"
+          + "cts/*/instances/*/databases/*}:\010database"
+          + "\022\235\002\n\021UpdateDatabaseDdl\022:.google.spanner."
+          + "admin.database.v1.UpdateDatabaseDdlReque"
+          + "st\032\035.google.longrunning.Operation\"\254\001\312AS\n"
+          + "\025google.protobuf.Empty\022:google.spanner.a"
+          + "dmin.database.v1.UpdateDatabaseDdlMetada"
+          + "ta\332A\023database,statements\202\323\344\223\002:25/v1/{dat"
+          + "abase=projects/*/instances/*/databases/*"
+          + "}/ddl:\001*\022\243\001\n\014DropDatabase\0225.google.spann"
+          + "er.admin.database.v1.DropDatabaseRequest"
+          + "\032\026.google.protobuf.Empty\"D\332A\010database\202\323\344"
+          + "\223\0023*1/v1/{database=projects/*/instances/"
+          + "*/databases/*}\022\315\001\n\016GetDatabaseDdl\0227.goog"
+          + "le.spanner.admin.database.v1.GetDatabase"
+          + "DdlRequest\0328.google.spanner.admin.databa"
+          + "se.v1.GetDatabaseDdlResponse\"H\332A\010databas"
+          + "e\202\323\344\223\0027\0225/v1/{database=projects/*/instan"
+          + "ces/*/databases/*}/ddl\022\353\001\n\014SetIamPolicy\022"
+          + "\".google.iam.v1.SetIamPolicyRequest\032\025.go"
+          + "ogle.iam.v1.Policy\"\237\001\332A\017resource,policy\202"
+          + "\323\344\223\002\206\001\">/v1/{resource=projects/*/instanc"
+          + "es/*/databases/*}:setIamPolicy:\001*ZA\"/"
+          + "v1/{resource=projects/*/instances/*/data"
+          + "bases/*}:getIamPolicy:\001*ZA\".google.spanner.admin.database.v1.L"
+          + "istBackupOperationsResponse\"E\332A\006parent\202\323"
+          + "\344\223\0026\0224/v1/{parent=projects/*/instances/*"
+          + "}/backupOperations\022\334\001\n\021ListDatabaseRoles"
+          + "\022:.google.spanner.admin.database.v1.List"
+          + "DatabaseRolesRequest\032;.google.spanner.ad"
+          + "min.database.v1.ListDatabaseRolesRespons"
+          + "e\"N\332A\006parent\202\323\344\223\002?\022=/v1/{parent=projects"
+          + "/*/instances/*/databases/*}/databaseRole"
+          + "s\032x\312A\026spanner.googleapis.com\322A\\https://w"
+          + "ww.googleapis.com/auth/cloud-platform,ht"
+          + "tps://www.googleapis.com/auth/spanner.ad"
+          + "minB\330\002\n$com.google.spanner.admin.databas"
+          + "e.v1B\031SpannerDatabaseAdminProtoP\001ZFcloud"
+          + ".google.com/go/spanner/admin/database/ap"
+          + "iv1/databasepb;databasepb\252\002&Google.Cloud"
+          + ".Spanner.Admin.Database.V1\312\002&Google\\Clou"
+          + "d\\Spanner\\Admin\\Database\\V1\352\002+Google::Cl"
+          + "oud::Spanner::Admin::Database::V1\352AJ\n\037sp"
+          + "anner.googleapis.com/Instance\022\'projects/"
+          + "{project}/instances/{instance}b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -496,16 +504,24 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
             new java.lang.String[] {
               "Database", "Statements", "OperationId",
             });
-    internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor =
+    internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor =
         getDescriptor().getMessageTypes().get(10);
+    internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable =
+        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+            internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor,
+            new java.lang.String[] {
+              "Action", "EntityType", "EntityNames",
+            });
+    internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor =
+        getDescriptor().getMessageTypes().get(11);
     internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor,
             new java.lang.String[] {
-              "Database", "Statements", "CommitTimestamps", "Throttled", "Progress",
+              "Database", "Statements", "CommitTimestamps", "Throttled", "Progress", "Actions",
             });
     internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor =
-        getDescriptor().getMessageTypes().get(11);
+        getDescriptor().getMessageTypes().get(12);
     internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor,
@@ -513,7 +529,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Database",
             });
     internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor =
-        getDescriptor().getMessageTypes().get(12);
+        getDescriptor().getMessageTypes().get(13);
     internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor,
@@ -521,7 +537,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Database",
             });
     internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor =
-        getDescriptor().getMessageTypes().get(13);
+        getDescriptor().getMessageTypes().get(14);
     internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor,
@@ -529,7 +545,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Statements",
             });
     internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor =
-        getDescriptor().getMessageTypes().get(14);
+        getDescriptor().getMessageTypes().get(15);
     internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor,
@@ -537,7 +553,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Parent", "Filter", "PageSize", "PageToken",
             });
     internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor =
-        getDescriptor().getMessageTypes().get(15);
+        getDescriptor().getMessageTypes().get(16);
     internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor,
@@ -545,7 +561,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Operations", "NextPageToken",
             });
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor =
-        getDescriptor().getMessageTypes().get(16);
+        getDescriptor().getMessageTypes().get(17);
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor,
@@ -553,7 +569,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Parent", "DatabaseId", "Backup", "EncryptionConfig", "Source",
             });
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor =
-        getDescriptor().getMessageTypes().get(17);
+        getDescriptor().getMessageTypes().get(18);
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor,
@@ -561,7 +577,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "EncryptionType", "KmsKeyName",
             });
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor =
-        getDescriptor().getMessageTypes().get(18);
+        getDescriptor().getMessageTypes().get(19);
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor,
@@ -575,7 +591,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "SourceInfo",
             });
     internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor =
-        getDescriptor().getMessageTypes().get(19);
+        getDescriptor().getMessageTypes().get(20);
     internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor,
@@ -583,7 +599,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Name", "Progress",
             });
     internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor =
-        getDescriptor().getMessageTypes().get(20);
+        getDescriptor().getMessageTypes().get(21);
     internal_static_google_spanner_admin_database_v1_DatabaseRole_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor,
@@ -591,7 +607,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Name",
             });
     internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor =
-        getDescriptor().getMessageTypes().get(21);
+        getDescriptor().getMessageTypes().get(22);
     internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor,
@@ -599,7 +615,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Parent", "PageSize", "PageToken",
             });
     internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor =
-        getDescriptor().getMessageTypes().get(22);
+        getDescriptor().getMessageTypes().get(23);
     internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor,
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java
index ccd25df5763..9da77849b35 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java
@@ -45,11 +45,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateBackupRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java
index d4625807d12..0e9f3b0a5d3 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java
@@ -40,9 +40,10 @@ private UpdateDatabaseDdlMetadata(com.google.protobuf.GeneratedMessageV3.Builder
 
   private UpdateDatabaseDdlMetadata() {
     database_ = "";
-    statements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    statements_ = com.google.protobuf.LazyStringArrayList.emptyList();
     commitTimestamps_ = java.util.Collections.emptyList();
     progress_ = java.util.Collections.emptyList();
+    actions_ = java.util.Collections.emptyList();
   }
 
   @java.lang.Override
@@ -51,11 +52,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateDatabaseDdlMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor;
@@ -125,7 +121,8 @@ public com.google.protobuf.ByteString getDatabaseBytes() {
   public static final int STATEMENTS_FIELD_NUMBER = 2;
 
   @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringList statements_;
+  private com.google.protobuf.LazyStringArrayList statements_ =
+      com.google.protobuf.LazyStringArrayList.emptyList();
   /**
    *
    *
@@ -276,7 +273,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampsOrBuilder(int i
    *
    *
    * 
-   * Output only. When true, indicates that the operation is throttled e.g
+   * Output only. When true, indicates that the operation is throttled e.g.
    * due to resource constraints. When resources become available the operation
    * will resume and this field will be false again.
    * 
@@ -299,13 +296,12 @@ public boolean getThrottled() { * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -319,13 +315,12 @@ public java.util.List ge * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -340,13 +335,12 @@ public java.util.List ge * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -360,13 +354,12 @@ public int getProgressCount() { * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -380,13 +373,12 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress(int in * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -397,6 +389,85 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre return progress_.get(index); } + public static final int ACTIONS_FIELD_NUMBER = 6; + + @SuppressWarnings("serial") + private java.util.List actions_; + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + @java.lang.Override + public java.util.List + getActionsList() { + return actions_; + } + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + @java.lang.Override + public java.util.List< + ? extends com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> + getActionsOrBuilderList() { + return actions_; + } + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + @java.lang.Override + public int getActionsCount() { + return actions_.size(); + } + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(int index) { + return actions_.get(index); + } + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + @java.lang.Override + public com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getActionsOrBuilder( + int index) { + return actions_.get(index); + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -426,6 +497,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < progress_.size(); i++) { output.writeMessage(5, progress_.get(i)); } + for (int i = 0; i < actions_.size(); i++) { + output.writeMessage(6, actions_.get(i)); + } getUnknownFields().writeTo(output); } @@ -455,6 +529,9 @@ public int getSerializedSize() { for (int i = 0; i < progress_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, progress_.get(i)); } + for (int i = 0; i < actions_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, actions_.get(i)); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -476,6 +553,7 @@ public boolean equals(final java.lang.Object obj) { if (!getCommitTimestampsList().equals(other.getCommitTimestampsList())) return false; if (getThrottled() != other.getThrottled()) return false; if (!getProgressList().equals(other.getProgressList())) return false; + if (!getActionsList().equals(other.getActionsList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -503,6 +581,10 @@ public int hashCode() { hash = (37 * hash) + PROGRESS_FIELD_NUMBER; hash = (53 * hash) + getProgressList().hashCode(); } + if (getActionsCount() > 0) { + hash = (37 * hash) + ACTIONS_FIELD_NUMBER; + hash = (53 * hash) + getActionsList().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -645,8 +727,7 @@ public Builder clear() { super.clear(); bitField0_ = 0; database_ = ""; - statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000002); + statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); if (commitTimestampsBuilder_ == null) { commitTimestamps_ = java.util.Collections.emptyList(); } else { @@ -662,6 +743,13 @@ public Builder clear() { progressBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000010); + if (actionsBuilder_ == null) { + actions_ = java.util.Collections.emptyList(); + } else { + actions_ = null; + actionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); return this; } @@ -700,11 +788,6 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata buildParti private void buildPartialRepeatedFields( com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata result) { - if (((bitField0_ & 0x00000002) != 0)) { - statements_ = statements_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.statements_ = statements_; if (commitTimestampsBuilder_ == null) { if (((bitField0_ & 0x00000004) != 0)) { commitTimestamps_ = java.util.Collections.unmodifiableList(commitTimestamps_); @@ -723,6 +806,15 @@ private void buildPartialRepeatedFields( } else { result.progress_ = progressBuilder_.build(); } + if (actionsBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0)) { + actions_ = java.util.Collections.unmodifiableList(actions_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.actions_ = actions_; + } else { + result.actions_ = actionsBuilder_.build(); + } } private void buildPartial0( @@ -731,6 +823,10 @@ private void buildPartial0( if (((from_bitField0_ & 0x00000001) != 0)) { result.database_ = database_; } + if (((from_bitField0_ & 0x00000002) != 0)) { + statements_.makeImmutable(); + result.statements_ = statements_; + } if (((from_bitField0_ & 0x00000008) != 0)) { result.throttled_ = throttled_; } @@ -791,7 +887,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlM if (!other.statements_.isEmpty()) { if (statements_.isEmpty()) { statements_ = other.statements_; - bitField0_ = (bitField0_ & ~0x00000002); + bitField0_ |= 0x00000002; } else { ensureStatementsIsMutable(); statements_.addAll(other.statements_); @@ -855,6 +951,33 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlM } } } + if (actionsBuilder_ == null) { + if (!other.actions_.isEmpty()) { + if (actions_.isEmpty()) { + actions_ = other.actions_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureActionsIsMutable(); + actions_.addAll(other.actions_); + } + onChanged(); + } + } else { + if (!other.actions_.isEmpty()) { + if (actionsBuilder_.isEmpty()) { + actionsBuilder_.dispose(); + actionsBuilder_ = null; + actions_ = other.actions_; + bitField0_ = (bitField0_ & ~0x00000020); + actionsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders + ? getActionsFieldBuilder() + : null; + } else { + actionsBuilder_.addAllMessages(other.actions_); + } + } + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -926,6 +1049,20 @@ public Builder mergeFrom( } break; } // case 42 + case 50: + { + com.google.spanner.admin.database.v1.DdlStatementActionInfo m = + input.readMessage( + com.google.spanner.admin.database.v1.DdlStatementActionInfo.parser(), + extensionRegistry); + if (actionsBuilder_ == null) { + ensureActionsIsMutable(); + actions_.add(m); + } else { + actionsBuilder_.addMessage(m); + } + break; + } // case 50 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1051,14 +1188,14 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringList statements_ = - com.google.protobuf.LazyStringArrayList.EMPTY; + private com.google.protobuf.LazyStringArrayList statements_ = + com.google.protobuf.LazyStringArrayList.emptyList(); private void ensureStatementsIsMutable() { - if (!((bitField0_ & 0x00000002) != 0)) { + if (!statements_.isModifiable()) { statements_ = new com.google.protobuf.LazyStringArrayList(statements_); - bitField0_ |= 0x00000002; } + bitField0_ |= 0x00000002; } /** * @@ -1073,7 +1210,8 @@ private void ensureStatementsIsMutable() { * @return A list containing the statements. */ public com.google.protobuf.ProtocolStringList getStatementsList() { - return statements_.getUnmodifiableView(); + statements_.makeImmutable(); + return statements_; } /** * @@ -1142,6 +1280,7 @@ public Builder setStatements(int index, java.lang.String value) { } ensureStatementsIsMutable(); statements_.set(index, value); + bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1164,6 +1303,7 @@ public Builder addStatements(java.lang.String value) { } ensureStatementsIsMutable(); statements_.add(value); + bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1183,6 +1323,7 @@ public Builder addStatements(java.lang.String value) { public Builder addAllStatements(java.lang.Iterable values) { ensureStatementsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, statements_); + bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1199,8 +1340,9 @@ public Builder addAllStatements(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearStatements() { - statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; + statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); bitField0_ = (bitField0_ & ~0x00000002); + ; onChanged(); return this; } @@ -1224,6 +1366,7 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureStatementsIsMutable(); statements_.add(value); + bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1621,7 +1764,7 @@ public java.util.List getCommitTimestamps * * *
-     * Output only. When true, indicates that the operation is throttled e.g
+     * Output only. When true, indicates that the operation is throttled e.g.
      * due to resource constraints. When resources become available the operation
      * will resume and this field will be false again.
      * 
@@ -1638,7 +1781,7 @@ public boolean getThrottled() { * * *
-     * Output only. When true, indicates that the operation is throttled e.g
+     * Output only. When true, indicates that the operation is throttled e.g.
      * due to resource constraints. When resources become available the operation
      * will resume and this field will be false again.
      * 
@@ -1659,7 +1802,7 @@ public Builder setThrottled(boolean value) { * * *
-     * Output only. When true, indicates that the operation is throttled e.g
+     * Output only. When true, indicates that the operation is throttled e.g.
      * due to resource constraints. When resources become available the operation
      * will resume and this field will be false again.
      * 
@@ -1698,13 +1841,12 @@ private void ensureProgressIsMutable() { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1722,13 +1864,12 @@ private void ensureProgressIsMutable() { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1745,13 +1886,12 @@ public int getProgressCount() { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1768,13 +1908,12 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress(int in * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1798,13 +1937,12 @@ public Builder setProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1825,13 +1963,12 @@ public Builder setProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1854,13 +1991,12 @@ public Builder addProgress(com.google.spanner.admin.database.v1.OperationProgres * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1884,13 +2020,12 @@ public Builder addProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1911,13 +2046,12 @@ public Builder addProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1938,13 +2072,12 @@ public Builder addProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1966,13 +2099,12 @@ public Builder addAllProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1992,13 +2124,12 @@ public Builder clearProgress() { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2018,13 +2149,12 @@ public Builder removeProgress(int index) { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2038,13 +2168,12 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgres * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2062,13 +2191,12 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2086,13 +2214,12 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2106,13 +2233,12 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgres * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2128,13 +2254,12 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgres * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-     * Currently, only index creation statements will have a continuously
-     * updating progress.
-     * For non-index creation statements, `progress[i]` will have start time
-     * and end time populated with commit timestamp of operation,
-     * as well as a progress of 100% once the operation has completed.
-     * `progress[i]` is the operation progress for `statements[i]`.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+     * operations. All DDL statements will have continuously updating progress,
+     * and `progress[i]` is the operation progress for `statements[i]`. Also,
+     * `progress[i]` will have start time and end time populated with commit
+     * timestamp of operation, as well as a progress of 100% once the operation
+     * has completed.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2161,6 +2286,389 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgres return progressBuilder_; } + private java.util.List actions_ = + java.util.Collections.emptyList(); + + private void ensureActionsIsMutable() { + if (!((bitField0_ & 0x00000020) != 0)) { + actions_ = + new java.util.ArrayList( + actions_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.admin.database.v1.DdlStatementActionInfo, + com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, + com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> + actionsBuilder_; + + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public java.util.List + getActionsList() { + if (actionsBuilder_ == null) { + return java.util.Collections.unmodifiableList(actions_); + } else { + return actionsBuilder_.getMessageList(); + } + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public int getActionsCount() { + if (actionsBuilder_ == null) { + return actions_.size(); + } else { + return actionsBuilder_.getCount(); + } + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(int index) { + if (actionsBuilder_ == null) { + return actions_.get(index); + } else { + return actionsBuilder_.getMessage(index); + } + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder setActions( + int index, com.google.spanner.admin.database.v1.DdlStatementActionInfo value) { + if (actionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureActionsIsMutable(); + actions_.set(index, value); + onChanged(); + } else { + actionsBuilder_.setMessage(index, value); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder setActions( + int index, + com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder builderForValue) { + if (actionsBuilder_ == null) { + ensureActionsIsMutable(); + actions_.set(index, builderForValue.build()); + onChanged(); + } else { + actionsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder addActions(com.google.spanner.admin.database.v1.DdlStatementActionInfo value) { + if (actionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureActionsIsMutable(); + actions_.add(value); + onChanged(); + } else { + actionsBuilder_.addMessage(value); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder addActions( + int index, com.google.spanner.admin.database.v1.DdlStatementActionInfo value) { + if (actionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureActionsIsMutable(); + actions_.add(index, value); + onChanged(); + } else { + actionsBuilder_.addMessage(index, value); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder addActions( + com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder builderForValue) { + if (actionsBuilder_ == null) { + ensureActionsIsMutable(); + actions_.add(builderForValue.build()); + onChanged(); + } else { + actionsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder addActions( + int index, + com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder builderForValue) { + if (actionsBuilder_ == null) { + ensureActionsIsMutable(); + actions_.add(index, builderForValue.build()); + onChanged(); + } else { + actionsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder addAllActions( + java.lang.Iterable + values) { + if (actionsBuilder_ == null) { + ensureActionsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, actions_); + onChanged(); + } else { + actionsBuilder_.addAllMessages(values); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder clearActions() { + if (actionsBuilder_ == null) { + actions_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + actionsBuilder_.clear(); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public Builder removeActions(int index) { + if (actionsBuilder_ == null) { + ensureActionsIsMutable(); + actions_.remove(index); + onChanged(); + } else { + actionsBuilder_.remove(index); + } + return this; + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder getActionsBuilder( + int index) { + return getActionsFieldBuilder().getBuilder(index); + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getActionsOrBuilder( + int index) { + if (actionsBuilder_ == null) { + return actions_.get(index); + } else { + return actionsBuilder_.getMessageOrBuilder(index); + } + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public java.util.List< + ? extends com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> + getActionsOrBuilderList() { + if (actionsBuilder_ != null) { + return actionsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(actions_); + } + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addActionsBuilder() { + return getActionsFieldBuilder() + .addBuilder( + com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance()); + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addActionsBuilder( + int index) { + return getActionsFieldBuilder() + .addBuilder( + index, + com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance()); + } + /** + * + * + *
+     * The brief action info for the DDL statements.
+     * `actions[i]` is the brief info for `statements[i]`.
+     * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + public java.util.List + getActionsBuilderList() { + return getActionsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.admin.database.v1.DdlStatementActionInfo, + com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, + com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> + getActionsFieldBuilder() { + if (actionsBuilder_ == null) { + actionsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.admin.database.v1.DdlStatementActionInfo, + com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, + com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder>( + actions_, ((bitField0_ & 0x00000020) != 0), getParentForChildren(), isClean()); + actions_ = null; + } + return actionsBuilder_; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java index 0557d7314d1..5b435a6844c 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java @@ -169,7 +169,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * * *
-   * Output only. When true, indicates that the operation is throttled e.g
+   * Output only. When true, indicates that the operation is throttled e.g.
    * due to resource constraints. When resources become available the operation
    * will resume and this field will be false again.
    * 
@@ -185,13 +185,12 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -202,13 +201,12 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -219,13 +217,12 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -236,13 +233,12 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -254,16 +250,73 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
-   * Currently, only index creation statements will have a continuously
-   * updating progress.
-   * For non-index creation statements, `progress[i]` will have start time
-   * and end time populated with commit timestamp of operation,
-   * as well as a progress of 100% once the operation has completed.
-   * `progress[i]` is the operation progress for `statements[i]`.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
+   * operations. All DDL statements will have continuously updating progress,
+   * and `progress[i]` is the operation progress for `statements[i]`. Also,
+   * `progress[i]` will have start time and end time populated with commit
+   * timestamp of operation, as well as a progress of 100% once the operation
+   * has completed.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; */ com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgressOrBuilder(int index); + + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + java.util.List getActionsList(); + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(int index); + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + int getActionsCount(); + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + java.util.List + getActionsOrBuilderList(); + /** + * + * + *
+   * The brief action info for the DDL statements.
+   * `actions[i]` is the brief info for `statements[i]`.
+   * 
+ * + * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; + */ + com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getActionsOrBuilder( + int index); } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java index a2c59a7b9b6..aa78a8f7a15 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java @@ -32,6 +32,7 @@ * there is some data-related problem like a `NULL` value in a column to * which `NOT NULL` would be added). If a statement fails, all * subsequent statements in the batch are automatically cancelled. + * * Each batch of statements is assigned a name which can be used with * the [Operations][google.longrunning.Operations] API to monitor * progress. See the @@ -53,7 +54,7 @@ private UpdateDatabaseDdlRequest(com.google.protobuf.GeneratedMessageV3.Builder< private UpdateDatabaseDdlRequest() { database_ = ""; - statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; + statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); operationId_ = ""; } @@ -63,11 +64,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new UpdateDatabaseDdlRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor; @@ -141,7 +137,8 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public static final int STATEMENTS_FIELD_NUMBER = 2; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringList statements_; + private com.google.protobuf.LazyStringArrayList statements_ = + com.google.protobuf.LazyStringArrayList.emptyList(); /** * * @@ -213,6 +210,7 @@ public com.google.protobuf.ByteString getStatementsBytes(int index) { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -220,6 +218,7 @@ public com.google.protobuf.ByteString getStatementsBytes(int index) { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -252,6 +251,7 @@ public java.lang.String getOperationId() { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -259,6 +259,7 @@ public java.lang.String getOperationId() { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -483,6 +484,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * there is some data-related problem like a `NULL` value in a column to * which `NOT NULL` would be added). If a statement fails, all * subsequent statements in the batch are automatically cancelled. + * * Each batch of statements is assigned a name which can be used with * the [Operations][google.longrunning.Operations] API to monitor * progress. See the @@ -523,8 +525,7 @@ public Builder clear() { super.clear(); bitField0_ = 0; database_ = ""; - statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000002); + statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); operationId_ = ""; return this; } @@ -554,7 +555,6 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest build() { public com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest buildPartial() { com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest result = new com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest(this); - buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -562,21 +562,16 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest buildPartia return result; } - private void buildPartialRepeatedFields( - com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest result) { - if (((bitField0_ & 0x00000002) != 0)) { - statements_ = statements_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.statements_ = statements_; - } - private void buildPartial0( com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { result.database_ = database_; } + if (((from_bitField0_ & 0x00000002) != 0)) { + statements_.makeImmutable(); + result.statements_ = statements_; + } if (((from_bitField0_ & 0x00000004) != 0)) { result.operationId_ = operationId_; } @@ -637,7 +632,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlR if (!other.statements_.isEmpty()) { if (statements_.isEmpty()) { statements_ = other.statements_; - bitField0_ = (bitField0_ & ~0x00000002); + bitField0_ |= 0x00000002; } else { ensureStatementsIsMutable(); statements_.addAll(other.statements_); @@ -829,14 +824,14 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringList statements_ = - com.google.protobuf.LazyStringArrayList.EMPTY; + private com.google.protobuf.LazyStringArrayList statements_ = + com.google.protobuf.LazyStringArrayList.emptyList(); private void ensureStatementsIsMutable() { - if (!((bitField0_ & 0x00000002) != 0)) { + if (!statements_.isModifiable()) { statements_ = new com.google.protobuf.LazyStringArrayList(statements_); - bitField0_ |= 0x00000002; } + bitField0_ |= 0x00000002; } /** * @@ -850,7 +845,8 @@ private void ensureStatementsIsMutable() { * @return A list containing the statements. */ public com.google.protobuf.ProtocolStringList getStatementsList() { - return statements_.getUnmodifiableView(); + statements_.makeImmutable(); + return statements_; } /** * @@ -915,6 +911,7 @@ public Builder setStatements(int index, java.lang.String value) { } ensureStatementsIsMutable(); statements_.set(index, value); + bitField0_ |= 0x00000002; onChanged(); return this; } @@ -936,6 +933,7 @@ public Builder addStatements(java.lang.String value) { } ensureStatementsIsMutable(); statements_.add(value); + bitField0_ |= 0x00000002; onChanged(); return this; } @@ -954,6 +952,7 @@ public Builder addStatements(java.lang.String value) { public Builder addAllStatements(java.lang.Iterable values) { ensureStatementsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, statements_); + bitField0_ |= 0x00000002; onChanged(); return this; } @@ -969,8 +968,9 @@ public Builder addAllStatements(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearStatements() { - statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; + statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); bitField0_ = (bitField0_ & ~0x00000002); + ; onChanged(); return this; } @@ -993,6 +993,7 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureStatementsIsMutable(); statements_.add(value); + bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1006,6 +1007,7 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1013,6 +1015,7 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -1044,6 +1047,7 @@ public java.lang.String getOperationId() { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1051,6 +1055,7 @@ public java.lang.String getOperationId() { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -1082,6 +1087,7 @@ public com.google.protobuf.ByteString getOperationIdBytes() { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1089,6 +1095,7 @@ public com.google.protobuf.ByteString getOperationIdBytes() { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -1119,6 +1126,7 @@ public Builder setOperationId(java.lang.String value) { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1126,6 +1134,7 @@ public Builder setOperationId(java.lang.String value) { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -1152,6 +1161,7 @@ public Builder clearOperationId() { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1159,6 +1169,7 @@ public Builder clearOperationId() { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java index cad7c3a28a2..0933a94e09e 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java @@ -111,6 +111,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -118,6 +119,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -139,6 +141,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. + * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -146,6 +149,7 @@ public interface UpdateDatabaseDdlRequestOrBuilder * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. + * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java index f37b1ad1ef6..e42f634cdf0 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java @@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new UpdateDatabaseMetadata(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java index c496653a2fd..bb83a712eec 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java @@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new UpdateDatabaseRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto index f45bb932fda..6cf0e5a4b94 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto @@ -676,6 +676,27 @@ message UpdateDatabaseDdlRequest { string operation_id = 3; } +// Action information extracted from a DDL statement. This proto is used to +// display the brief info of the DDL statement for the operation +// [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]. +message DdlStatementActionInfo { + // The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc. + // This field is a non-empty string. + string action = 1; + + // The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc. + // This field can be empty string for some DDL statement, + // e.g. for statement "ANALYZE", `entity_type` = "". + string entity_type = 2; + + // The entity name(s) being operated on the DDL statement. + // E.g. + // 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"]. + // 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"]. + // 3. For statement "ANALYZE", `entity_names` = []. + repeated string entity_names = 3; +} + // Metadata type for the operation returned by // [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]. message UpdateDatabaseDdlMetadata { @@ -693,20 +714,23 @@ message UpdateDatabaseDdlMetadata { // timestamp for the statement `statements[i]`. repeated google.protobuf.Timestamp commit_timestamps = 3; - // Output only. When true, indicates that the operation is throttled e.g + // Output only. When true, indicates that the operation is throttled e.g. // due to resource constraints. When resources become available the operation // will resume and this field will be false again. bool throttled = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; // The progress of the - // [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations. - // Currently, only index creation statements will have a continuously - // updating progress. - // For non-index creation statements, `progress[i]` will have start time - // and end time populated with commit timestamp of operation, - // as well as a progress of 100% once the operation has completed. - // `progress[i]` is the operation progress for `statements[i]`. + // [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] + // operations. All DDL statements will have continuously updating progress, + // and `progress[i]` is the operation progress for `statements[i]`. Also, + // `progress[i]` will have start time and end time populated with commit + // timestamp of operation, as well as a progress of 100% once the operation + // has completed. repeated OperationProgress progress = 5; + + // The brief action info for the DDL statements. + // `actions[i]` is the brief info for `statements[i]`. + repeated DdlStatementActionInfo actions = 6; } // The request for [DropDatabase][google.spanner.admin.database.v1.DatabaseAdmin.DropDatabase]. diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java index ddb0edf39fc..7957451eb76 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java @@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateInstanceConfigMetadata(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java index 0d9bd2336fb..f283c425854 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java @@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateInstanceConfigRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java index 5dbce1d85d0..72dad2442f8 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java @@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateInstanceMetadata(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java index 5bc14b342f4..1e3de9da213 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java @@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateInstanceRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java index 97f3875a680..cd5397978a0 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java @@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DeleteInstanceConfigRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java index cbfa1e94aef..362cafcb798 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java @@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DeleteInstanceRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java index 80d5c4007ad..11b2d456206 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java @@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetInstanceConfigRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java index 5e5f96640b0..fb836dd7a2f 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java @@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetInstanceRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java index b2adc5f5222..3f81d952f62 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java @@ -42,7 +42,7 @@ private Instance() { config_ = ""; displayName_ = ""; state_ = 0; - endpointUris_ = com.google.protobuf.LazyStringArrayList.EMPTY; + endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); } @java.lang.Override @@ -51,11 +51,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new Instance(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_Instance_descriptor; @@ -426,6 +421,7 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -449,6 +445,7 @@ public int getNodeCount() { * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -548,12 +545,15 @@ public int getLabelsCount() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -587,12 +587,15 @@ public java.util.Map getLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -617,12 +620,15 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -654,12 +660,15 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -685,7 +694,8 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public static final int ENDPOINT_URIS_FIELD_NUMBER = 8; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringList endpointUris_; + private com.google.protobuf.LazyStringArrayList endpointUris_ = + com.google.protobuf.LazyStringArrayList.emptyList(); /** * * @@ -1176,8 +1186,7 @@ public Builder clear() { processingUnits_ = 0; state_ = 0; internalGetMutableLabels().clear(); - endpointUris_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000080); + endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); createTime_ = null; if (createTimeBuilder_ != null) { createTimeBuilder_.dispose(); @@ -1215,7 +1224,6 @@ public com.google.spanner.admin.instance.v1.Instance build() { public com.google.spanner.admin.instance.v1.Instance buildPartial() { com.google.spanner.admin.instance.v1.Instance result = new com.google.spanner.admin.instance.v1.Instance(this); - buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -1223,14 +1231,6 @@ public com.google.spanner.admin.instance.v1.Instance buildPartial() { return result; } - private void buildPartialRepeatedFields(com.google.spanner.admin.instance.v1.Instance result) { - if (((bitField0_ & 0x00000080) != 0)) { - endpointUris_ = endpointUris_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000080); - } - result.endpointUris_ = endpointUris_; - } - private void buildPartial0(com.google.spanner.admin.instance.v1.Instance result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1255,6 +1255,10 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.Instance result) result.labels_ = internalGetLabels(); result.labels_.makeImmutable(); } + if (((from_bitField0_ & 0x00000080) != 0)) { + endpointUris_.makeImmutable(); + result.endpointUris_ = endpointUris_; + } if (((from_bitField0_ & 0x00000100) != 0)) { result.createTime_ = createTimeBuilder_ == null ? createTime_ : createTimeBuilder_.build(); } @@ -1337,7 +1341,7 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.Instance other) { if (!other.endpointUris_.isEmpty()) { if (endpointUris_.isEmpty()) { endpointUris_ = other.endpointUris_; - bitField0_ = (bitField0_ & ~0x00000080); + bitField0_ |= 0x00000080; } else { ensureEndpointUrisIsMutable(); endpointUris_.addAll(other.endpointUris_); @@ -1834,6 +1838,7 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1855,6 +1860,7 @@ public int getNodeCount() { * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1880,6 +1886,7 @@ public Builder setNodeCount(int value) { * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1904,6 +1911,7 @@ public Builder clearNodeCount() { * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1924,6 +1932,7 @@ public int getProcessingUnits() { * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1948,6 +1957,7 @@ public Builder setProcessingUnits(int value) { * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -2121,12 +2131,15 @@ public int getLabelsCount() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2160,12 +2173,15 @@ public java.util.Map getLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2190,12 +2206,15 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2227,12 +2246,15 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2270,12 +2292,15 @@ public Builder clearLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2309,12 +2334,15 @@ public java.util.Map getMutableLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2346,12 +2374,15 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2368,14 +2399,14 @@ public Builder putAllLabels(java.util.Map va return this; } - private com.google.protobuf.LazyStringList endpointUris_ = - com.google.protobuf.LazyStringArrayList.EMPTY; + private com.google.protobuf.LazyStringArrayList endpointUris_ = + com.google.protobuf.LazyStringArrayList.emptyList(); private void ensureEndpointUrisIsMutable() { - if (!((bitField0_ & 0x00000080) != 0)) { + if (!endpointUris_.isModifiable()) { endpointUris_ = new com.google.protobuf.LazyStringArrayList(endpointUris_); - bitField0_ |= 0x00000080; } + bitField0_ |= 0x00000080; } /** * @@ -2389,7 +2420,8 @@ private void ensureEndpointUrisIsMutable() { * @return A list containing the endpointUris. */ public com.google.protobuf.ProtocolStringList getEndpointUrisList() { - return endpointUris_.getUnmodifiableView(); + endpointUris_.makeImmutable(); + return endpointUris_; } /** * @@ -2454,6 +2486,7 @@ public Builder setEndpointUris(int index, java.lang.String value) { } ensureEndpointUrisIsMutable(); endpointUris_.set(index, value); + bitField0_ |= 0x00000080; onChanged(); return this; } @@ -2475,6 +2508,7 @@ public Builder addEndpointUris(java.lang.String value) { } ensureEndpointUrisIsMutable(); endpointUris_.add(value); + bitField0_ |= 0x00000080; onChanged(); return this; } @@ -2493,6 +2527,7 @@ public Builder addEndpointUris(java.lang.String value) { public Builder addAllEndpointUris(java.lang.Iterable values) { ensureEndpointUrisIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, endpointUris_); + bitField0_ |= 0x00000080; onChanged(); return this; } @@ -2508,8 +2543,9 @@ public Builder addAllEndpointUris(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearEndpointUris() { - endpointUris_ = com.google.protobuf.LazyStringArrayList.EMPTY; + endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); bitField0_ = (bitField0_ & ~0x00000080); + ; onChanged(); return this; } @@ -2532,6 +2568,7 @@ public Builder addEndpointUrisBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureEndpointUrisIsMutable(); endpointUris_.add(value); + bitField0_ |= 0x00000080; onChanged(); return this; } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java index e8b1cd418e3..0351972ca66 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java @@ -46,7 +46,7 @@ private InstanceConfig() { optionalReplicas_ = java.util.Collections.emptyList(); baseConfig_ = ""; etag_ = ""; - leaderOptions_ = com.google.protobuf.LazyStringArrayList.EMPTY; + leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); state_ = 0; } @@ -56,11 +56,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new InstanceConfig(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_InstanceConfig_descriptor; @@ -813,12 +808,15 @@ public int getLabelsCount() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -852,12 +850,15 @@ public java.util.Map getLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -882,12 +883,15 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -919,12 +923,15 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -1019,7 +1026,8 @@ public com.google.protobuf.ByteString getEtagBytes() { public static final int LEADER_OPTIONS_FIELD_NUMBER = 4; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringList leaderOptions_; + private com.google.protobuf.LazyStringArrayList leaderOptions_ = + com.google.protobuf.LazyStringArrayList.emptyList(); /** * * @@ -1497,8 +1505,7 @@ public Builder clear() { baseConfig_ = ""; internalGetMutableLabels().clear(); etag_ = ""; - leaderOptions_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000100); + leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); reconciling_ = false; state_ = 0; return this; @@ -1556,11 +1563,6 @@ private void buildPartialRepeatedFields( } else { result.optionalReplicas_ = optionalReplicasBuilder_.build(); } - if (((bitField0_ & 0x00000100) != 0)) { - leaderOptions_ = leaderOptions_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000100); - } - result.leaderOptions_ = leaderOptions_; } private void buildPartial0(com.google.spanner.admin.instance.v1.InstanceConfig result) { @@ -1584,6 +1586,10 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.InstanceConfig r if (((from_bitField0_ & 0x00000080) != 0)) { result.etag_ = etag_; } + if (((from_bitField0_ & 0x00000100) != 0)) { + leaderOptions_.makeImmutable(); + result.leaderOptions_ = leaderOptions_; + } if (((from_bitField0_ & 0x00000200) != 0)) { result.reconciling_ = reconciling_; } @@ -1720,7 +1726,7 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstanceConfig oth if (!other.leaderOptions_.isEmpty()) { if (leaderOptions_.isEmpty()) { leaderOptions_ = other.leaderOptions_; - bitField0_ = (bitField0_ & ~0x00000100); + bitField0_ |= 0x00000100; } else { ensureLeaderOptionsIsMutable(); leaderOptions_.addAll(other.leaderOptions_); @@ -3137,12 +3143,15 @@ public int getLabelsCount() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3176,12 +3185,15 @@ public java.util.Map getLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3206,12 +3218,15 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3243,12 +3258,15 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3286,12 +3304,15 @@ public Builder clearLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3325,12 +3346,15 @@ public java.util.Map getMutableLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3362,12 +3386,15 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3535,14 +3562,14 @@ public Builder setEtagBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringList leaderOptions_ = - com.google.protobuf.LazyStringArrayList.EMPTY; + private com.google.protobuf.LazyStringArrayList leaderOptions_ = + com.google.protobuf.LazyStringArrayList.emptyList(); private void ensureLeaderOptionsIsMutable() { - if (!((bitField0_ & 0x00000100) != 0)) { + if (!leaderOptions_.isModifiable()) { leaderOptions_ = new com.google.protobuf.LazyStringArrayList(leaderOptions_); - bitField0_ |= 0x00000100; } + bitField0_ |= 0x00000100; } /** * @@ -3557,7 +3584,8 @@ private void ensureLeaderOptionsIsMutable() { * @return A list containing the leaderOptions. */ public com.google.protobuf.ProtocolStringList getLeaderOptionsList() { - return leaderOptions_.getUnmodifiableView(); + leaderOptions_.makeImmutable(); + return leaderOptions_; } /** * @@ -3626,6 +3654,7 @@ public Builder setLeaderOptions(int index, java.lang.String value) { } ensureLeaderOptionsIsMutable(); leaderOptions_.set(index, value); + bitField0_ |= 0x00000100; onChanged(); return this; } @@ -3648,6 +3677,7 @@ public Builder addLeaderOptions(java.lang.String value) { } ensureLeaderOptionsIsMutable(); leaderOptions_.add(value); + bitField0_ |= 0x00000100; onChanged(); return this; } @@ -3667,6 +3697,7 @@ public Builder addLeaderOptions(java.lang.String value) { public Builder addAllLeaderOptions(java.lang.Iterable values) { ensureLeaderOptionsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, leaderOptions_); + bitField0_ |= 0x00000100; onChanged(); return this; } @@ -3683,8 +3714,9 @@ public Builder addAllLeaderOptions(java.lang.Iterable values) * @return This builder for chaining. */ public Builder clearLeaderOptions() { - leaderOptions_ = com.google.protobuf.LazyStringArrayList.EMPTY; + leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); bitField0_ = (bitField0_ & ~0x00000100); + ; onChanged(); return this; } @@ -3708,6 +3740,7 @@ public Builder addLeaderOptionsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureLeaderOptionsIsMutable(); leaderOptions_.add(value); + bitField0_ |= 0x00000100; onChanged(); return this; } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java index cd54bc42865..acf1f898390 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java @@ -273,12 +273,15 @@ public interface InstanceConfigOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -300,12 +303,15 @@ public interface InstanceConfigOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -330,12 +336,15 @@ public interface InstanceConfigOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -357,12 +366,15 @@ public interface InstanceConfigOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -388,12 +400,15 @@ java.lang.String getLabelsOrDefault( * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java index 202d5c0bfe2..accad92c855 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java @@ -124,6 +124,7 @@ public interface InstanceOrBuilder * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -142,6 +143,7 @@ public interface InstanceOrBuilder * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. + * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -200,12 +202,15 @@ public interface InstanceOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -227,12 +232,15 @@ public interface InstanceOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -257,12 +265,15 @@ public interface InstanceOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -284,12 +295,15 @@ public interface InstanceOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -315,12 +329,15 @@ java.lang.String getLabelsOrDefault( * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). + * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. + * * See https://goo.gl/xmQnxf for more information on and examples of labels. + * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java index f2383b48b41..542bafb332b 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java @@ -52,11 +52,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ListInstanceConfigOperationsRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_descriptor; @@ -138,13 +133,16 @@ public com.google.protobuf.ByteString getParentBytes() { * *
    * An expression that filters the list of returned operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -158,10 +156,13 @@ public com.google.protobuf.ByteString getParentBytes() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=` \
    *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -197,13 +198,16 @@ public java.lang.String getFilter() {
    *
    * 
    * An expression that filters the list of returned operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -217,10 +221,13 @@ public java.lang.String getFilter() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=` \
    *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -883,13 +890,16 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -903,10 +913,13 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -941,13 +954,16 @@ public java.lang.String getFilter() {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -961,10 +977,13 @@ public java.lang.String getFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -999,13 +1018,16 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1019,10 +1041,13 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -1056,13 +1081,16 @@ public Builder setFilter(java.lang.String value) {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1076,10 +1104,13 @@ public Builder setFilter(java.lang.String value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -1109,13 +1140,16 @@ public Builder clearFilter() {
      *
      * 
      * An expression that filters the list of returned operations.
+     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
+     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
+     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1129,10 +1163,13 @@ public Builder clearFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
+     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
+     *
      * Here are a few examples:
+     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java
index 3e79ae5fff3..b9116f3d765 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java
@@ -59,13 +59,16 @@ public interface ListInstanceConfigOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -79,10 +82,13 @@ public interface ListInstanceConfigOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=` \
    *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -107,13 +113,16 @@ public interface ListInstanceConfigOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned operations.
+   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
+   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
+   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -127,10 +136,13 @@ public interface ListInstanceConfigOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
+   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
+   *
    * Here are a few examples:
+   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=` \
    *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java
index f120ee9ea3b..5ea6dd69395 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java
@@ -51,11 +51,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstanceConfigOperationsResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java
index ccfd7f89e98..9101130a4c0 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstanceConfigsRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java
index d5611dd1e8d..0d8cac1c67f 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstanceConfigsResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java
index 2ba8ebb3487..1236936495a 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java
@@ -50,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstancesRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_descriptor;
@@ -213,10 +208,13 @@ public com.google.protobuf.ByteString getPageTokenBytes() {
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
+   *
    *   * `name`
    *   * `display_name`
    *   * `labels.key` where key is the name of a label
+   *
    * Some examples of using filters are:
+   *
    *   * `name:*` --> The instance has a name.
    *   * `name:Howl` --> The instance's name contains the string "howl".
    *   * `name:HOWL` --> Equivalent to above.
@@ -251,10 +249,13 @@ public java.lang.String getFilter() {
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
+   *
    *   * `name`
    *   * `display_name`
    *   * `labels.key` where key is the name of a label
+   *
    * Some examples of using filters are:
+   *
    *   * `name:*` --> The instance has a name.
    *   * `name:Howl` --> The instance's name contains the string "howl".
    *   * `name:HOWL` --> Equivalent to above.
@@ -1003,10 +1004,13 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
@@ -1040,10 +1044,13 @@ public java.lang.String getFilter() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
@@ -1077,10 +1084,13 @@ public com.google.protobuf.ByteString getFilterBytes() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
@@ -1113,10 +1123,13 @@ public Builder setFilter(java.lang.String value) {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
@@ -1145,10 +1158,13 @@ public Builder clearFilter() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java
index fe48b843731..4d2e9869ded 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java
@@ -105,10 +105,13 @@ public interface ListInstancesRequestOrBuilder
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
+   *
    *   * `name`
    *   * `display_name`
    *   * `labels.key` where key is the name of a label
+   *
    * Some examples of using filters are:
+   *
    *   * `name:*` --> The instance has a name.
    *   * `name:Howl` --> The instance's name contains the string "howl".
    *   * `name:HOWL` --> Equivalent to above.
@@ -132,10 +135,13 @@ public interface ListInstancesRequestOrBuilder
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
+   *
    *   * `name`
    *   * `display_name`
    *   * `labels.key` where key is the name of a label
+   *
    * Some examples of using filters are:
+   *
    *   * `name:*` --> The instance has a name.
    *   * `name:Howl` --> The instance's name contains the string "howl".
    *   * `name:HOWL` --> Equivalent to above.
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java
index 89519d1b539..65ae986053e 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java
@@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstancesResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java
index 8a822c2c7d2..37971de7ed9 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java
@@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new OperationProgress();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.CommonProto
         .internal_static_google_spanner_admin_instance_v1_OperationProgress_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java
index 2553f2fff57..e180b6bbb6d 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java
@@ -40,11 +40,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ReplicaInfo();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ReplicaInfo_descriptor;
@@ -87,6 +82,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      *
      * 
      * Read-write replicas support both reads and writes. These replicas:
+     *
      * * Maintain a full copy of your data.
      * * Serve reads.
      * * Can vote whether to commit a write.
@@ -102,6 +98,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      *
      * 
      * Read-only replicas only support reads (not writes). Read-only replicas:
+     *
      * * Maintain a full copy of your data.
      * * Serve reads.
      * * Do not participate in voting to commit writes.
@@ -117,6 +114,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      * 
      * Witness replicas don't support reads but do participate in voting to
      * commit writes. Witness replicas:
+     *
      * * Do not maintain a full copy of data.
      * * Do not serve reads.
      * * Vote whether to commit writes.
@@ -144,6 +142,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      *
      * 
      * Read-write replicas support both reads and writes. These replicas:
+     *
      * * Maintain a full copy of your data.
      * * Serve reads.
      * * Can vote whether to commit a write.
@@ -159,6 +158,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      *
      * 
      * Read-only replicas only support reads (not writes). Read-only replicas:
+     *
      * * Maintain a full copy of your data.
      * * Serve reads.
      * * Do not participate in voting to commit writes.
@@ -174,6 +174,7 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      * 
      * Witness replicas don't support reads but do participate in voting to
      * commit writes. Witness replicas:
+     *
      * * Do not maintain a full copy of data.
      * * Do not serve reads.
      * * Vote whether to commit writes.
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java
index 3d5256cbd62..8fc561a4fa7 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java
@@ -144,203 +144,204 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "min.instance.v1.ReplicaInfo.ReplicaType\022"
           + "\037\n\027default_leader_location\030\003 \001(\010\"O\n\013Repl"
           + "icaType\022\024\n\020TYPE_UNSPECIFIED\020\000\022\016\n\nREAD_WR"
-          + "ITE\020\001\022\r\n\tREAD_ONLY\020\002\022\013\n\007WITNESS\020\003\"\276\006\n\016In"
+          + "ITE\020\001\022\r\n\tREAD_ONLY\020\002\022\013\n\007WITNESS\020\003\"\302\006\n\016In"
           + "stanceConfig\022\014\n\004name\030\001 \001(\t\022\024\n\014display_na"
-          + "me\030\002 \001(\t\022O\n\013config_type\030\005 \001(\01625.google.s"
+          + "me\030\002 \001(\t\022P\n\013config_type\030\005 \001(\01625.google.s"
           + "panner.admin.instance.v1.InstanceConfig."
-          + "TypeB\003\340A\003\022?\n\010replicas\030\003 \003(\0132-.google.spa"
-          + "nner.admin.instance.v1.ReplicaInfo\022M\n\021op"
-          + "tional_replicas\030\006 \003(\0132-.google.spanner.a"
-          + "dmin.instance.v1.ReplicaInfoB\003\340A\003\022?\n\013bas"
-          + "e_config\030\007 \001(\tB*\372A\'\n%spanner.googleapis."
-          + "com/InstanceConfig\022L\n\006labels\030\010 \003(\0132<.goo"
-          + "gle.spanner.admin.instance.v1.InstanceCo"
-          + "nfig.LabelsEntry\022\014\n\004etag\030\t \001(\t\022\026\n\016leader"
-          + "_options\030\004 \003(\t\022\030\n\013reconciling\030\n \001(\010B\003\340A\003"
-          + "\022J\n\005state\030\013 \001(\01626.google.spanner.admin.i"
-          + "nstance.v1.InstanceConfig.StateB\003\340A\003\032-\n\013"
-          + "LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:"
-          + "\0028\001\"B\n\004Type\022\024\n\020TYPE_UNSPECIFIED\020\000\022\022\n\016GOO"
-          + "GLE_MANAGED\020\001\022\020\n\014USER_MANAGED\020\002\"7\n\005State"
-          + "\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n"
-          + "\005READY\020\002:`\352A]\n%spanner.googleapis.com/In"
-          + "stanceConfig\0224projects/{project}/instanc"
-          + "eConfigs/{instance_config}\"\355\004\n\010Instance\022"
-          + "\021\n\004name\030\001 \001(\tB\003\340A\002\022=\n\006config\030\002 \001(\tB-\340A\002\372"
-          + "A\'\n%spanner.googleapis.com/InstanceConfi"
-          + "g\022\031\n\014display_name\030\003 \001(\tB\003\340A\002\022\022\n\nnode_cou"
-          + "nt\030\005 \001(\005\022\030\n\020processing_units\030\t \001(\005\022D\n\005st"
-          + "ate\030\006 \001(\01620.google.spanner.admin.instanc"
-          + "e.v1.Instance.StateB\003\340A\003\022F\n\006labels\030\007 \003(\013"
-          + "26.google.spanner.admin.instance.v1.Inst"
-          + "ance.LabelsEntry\022\025\n\rendpoint_uris\030\010 \003(\t\022"
-          + "4\n\013create_time\030\013 \001(\0132\032.google.protobuf.T"
-          + "imestampB\003\340A\003\0224\n\013update_time\030\014 \001(\0132\032.goo"
-          + "gle.protobuf.TimestampB\003\340A\003\032-\n\013LabelsEnt"
-          + "ry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"7\n\005St"
-          + "ate\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001"
-          + "\022\t\n\005READY\020\002:M\352AJ\n\037spanner.googleapis.com"
-          + "/Instance\022\'projects/{project}/instances/"
-          + "{instance}\"\210\001\n\032ListInstanceConfigsReques"
-          + "t\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresource"
-          + "manager.googleapis.com/Project\022\021\n\tpage_s"
-          + "ize\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\"\202\001\n\033ListIn"
-          + "stanceConfigsResponse\022J\n\020instance_config"
-          + "s\030\001 \003(\01320.google.spanner.admin.instance."
-          + "v1.InstanceConfig\022\027\n\017next_page_token\030\002 \001"
-          + "(\t\"W\n\030GetInstanceConfigRequest\022;\n\004name\030\001"
-          + " \001(\tB-\340A\002\372A\'\n%spanner.googleapis.com/Ins"
-          + "tanceConfig\"\352\001\n\033CreateInstanceConfigRequ"
-          + "est\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresour"
-          + "cemanager.googleapis.com/Project\022\037\n\022inst"
-          + "ance_config_id\030\002 \001(\tB\003\340A\002\022N\n\017instance_co"
-          + "nfig\030\003 \001(\01320.google.spanner.admin.instan"
-          + "ce.v1.InstanceConfigB\003\340A\002\022\025\n\rvalidate_on"
-          + "ly\030\004 \001(\010\"\272\001\n\033UpdateInstanceConfigRequest"
-          + "\022N\n\017instance_config\030\001 \001(\01320.google.spann"
-          + "er.admin.instance.v1.InstanceConfigB\003\340A\002"
-          + "\0224\n\013update_mask\030\002 \001(\0132\032.google.protobuf."
-          + "FieldMaskB\003\340A\002\022\025\n\rvalidate_only\030\003 \001(\010\"\177\n"
-          + "\033DeleteInstanceConfigRequest\022;\n\004name\030\001 \001"
-          + "(\tB-\340A\002\372A\'\n%spanner.googleapis.com/Insta"
-          + "nceConfig\022\014\n\004etag\030\002 \001(\t\022\025\n\rvalidate_only"
-          + "\030\003 \001(\010\"\241\001\n#ListInstanceConfigOperationsR"
-          + "equest\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudres"
-          + "ourcemanager.googleapis.com/Project\022\016\n\006f"
-          + "ilter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_t"
-          + "oken\030\004 \001(\t\"r\n$ListInstanceConfigOperatio"
-          + "nsResponse\0221\n\noperations\030\001 \003(\0132\035.google."
-          + "longrunning.Operation\022\027\n\017next_page_token"
-          + "\030\002 \001(\t\"{\n\022GetInstanceRequest\0225\n\004name\030\001 \001"
-          + "(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Insta"
-          + "nce\022.\n\nfield_mask\030\002 \001(\0132\032.google.protobu"
-          + "f.FieldMask\"\271\001\n\025CreateInstanceRequest\022C\n"
-          + "\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresourcemana"
-          + "ger.googleapis.com/Project\022\030\n\013instance_i"
-          + "d\030\002 \001(\tB\003\340A\002\022A\n\010instance\030\003 \001(\0132*.google."
-          + "spanner.admin.instance.v1.InstanceB\003\340A\002\""
-          + "\222\001\n\024ListInstancesRequest\022C\n\006parent\030\001 \001(\t"
-          + "B3\340A\002\372A-\n+cloudresourcemanager.googleapi"
-          + "s.com/Project\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage"
-          + "_token\030\003 \001(\t\022\016\n\006filter\030\004 \001(\t\"o\n\025ListInst"
-          + "ancesResponse\022=\n\tinstances\030\001 \003(\0132*.googl"
-          + "e.spanner.admin.instance.v1.Instance\022\027\n\017"
-          + "next_page_token\030\002 \001(\t\"\217\001\n\025UpdateInstance"
-          + "Request\022A\n\010instance\030\001 \001(\0132*.google.spann"
-          + "er.admin.instance.v1.InstanceB\003\340A\002\0223\n\nfi"
-          + "eld_mask\030\002 \001(\0132\032.google.protobuf.FieldMa"
-          + "skB\003\340A\002\"N\n\025DeleteInstanceRequest\0225\n\004name"
-          + "\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/I"
-          + "nstance\"\345\001\n\026CreateInstanceMetadata\022<\n\010in"
-          + "stance\030\001 \001(\0132*.google.spanner.admin.inst"
-          + "ance.v1.Instance\022.\n\nstart_time\030\002 \001(\0132\032.g"
-          + "oogle.protobuf.Timestamp\022/\n\013cancel_time\030"
-          + "\003 \001(\0132\032.google.protobuf.Timestamp\022,\n\010end"
-          + "_time\030\004 \001(\0132\032.google.protobuf.Timestamp\""
-          + "\345\001\n\026UpdateInstanceMetadata\022<\n\010instance\030\001"
-          + " \001(\0132*.google.spanner.admin.instance.v1."
-          + "Instance\022.\n\nstart_time\030\002 \001(\0132\032.google.pr"
-          + "otobuf.Timestamp\022/\n\013cancel_time\030\003 \001(\0132\032."
-          + "google.protobuf.Timestamp\022,\n\010end_time\030\004 "
-          + "\001(\0132\032.google.protobuf.Timestamp\"\341\001\n\034Crea"
-          + "teInstanceConfigMetadata\022I\n\017instance_con"
-          + "fig\030\001 \001(\01320.google.spanner.admin.instanc"
-          + "e.v1.InstanceConfig\022E\n\010progress\030\002 \001(\01323."
-          + "google.spanner.admin.instance.v1.Operati"
-          + "onProgress\022/\n\013cancel_time\030\003 \001(\0132\032.google"
-          + ".protobuf.Timestamp\"\341\001\n\034UpdateInstanceCo"
+          + "TypeB\004\342A\001\003\022?\n\010replicas\030\003 \003(\0132-.google.sp"
+          + "anner.admin.instance.v1.ReplicaInfo\022N\n\021o"
+          + "ptional_replicas\030\006 \003(\0132-.google.spanner."
+          + "admin.instance.v1.ReplicaInfoB\004\342A\001\003\022?\n\013b"
+          + "ase_config\030\007 \001(\tB*\372A\'\n%spanner.googleapi"
+          + "s.com/InstanceConfig\022L\n\006labels\030\010 \003(\0132<.g"
+          + "oogle.spanner.admin.instance.v1.Instance"
+          + "Config.LabelsEntry\022\014\n\004etag\030\t \001(\t\022\026\n\016lead"
+          + "er_options\030\004 \003(\t\022\031\n\013reconciling\030\n \001(\010B\004\342"
+          + "A\001\003\022K\n\005state\030\013 \001(\01626.google.spanner.admi"
+          + "n.instance.v1.InstanceConfig.StateB\004\342A\001\003"
+          + "\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 "
+          + "\001(\t:\0028\001\"B\n\004Type\022\024\n\020TYPE_UNSPECIFIED\020\000\022\022\n"
+          + "\016GOOGLE_MANAGED\020\001\022\020\n\014USER_MANAGED\020\002\"7\n\005S"
+          + "tate\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020"
+          + "\001\022\t\n\005READY\020\002:`\352A]\n%spanner.googleapis.co"
+          + "m/InstanceConfig\0224projects/{project}/ins"
+          + "tanceConfigs/{instance_config}\"\363\004\n\010Insta"
+          + "nce\022\022\n\004name\030\001 \001(\tB\004\342A\001\002\022>\n\006config\030\002 \001(\tB"
+          + ".\342A\001\002\372A\'\n%spanner.googleapis.com/Instanc"
+          + "eConfig\022\032\n\014display_name\030\003 \001(\tB\004\342A\001\002\022\022\n\nn"
+          + "ode_count\030\005 \001(\005\022\030\n\020processing_units\030\t \001("
+          + "\005\022E\n\005state\030\006 \001(\01620.google.spanner.admin."
+          + "instance.v1.Instance.StateB\004\342A\001\003\022F\n\006labe"
+          + "ls\030\007 \003(\01326.google.spanner.admin.instance"
+          + ".v1.Instance.LabelsEntry\022\025\n\rendpoint_uri"
+          + "s\030\010 \003(\t\0225\n\013create_time\030\013 \001(\0132\032.google.pr"
+          + "otobuf.TimestampB\004\342A\001\003\0225\n\013update_time\030\014 "
+          + "\001(\0132\032.google.protobuf.TimestampB\004\342A\001\003\032-\n"
+          + "\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t"
+          + ":\0028\001\"7\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010"
+          + "CREATING\020\001\022\t\n\005READY\020\002:M\352AJ\n\037spanner.goog"
+          + "leapis.com/Instance\022\'projects/{project}/"
+          + "instances/{instance}\"\211\001\n\032ListInstanceCon"
+          + "figsRequest\022D\n\006parent\030\001 \001(\tB4\342A\001\002\372A-\n+cl"
+          + "oudresourcemanager.googleapis.com/Projec"
+          + "t\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t"
+          + "\"\202\001\n\033ListInstanceConfigsResponse\022J\n\020inst"
+          + "ance_configs\030\001 \003(\01320.google.spanner.admi"
+          + "n.instance.v1.InstanceConfig\022\027\n\017next_pag"
+          + "e_token\030\002 \001(\t\"X\n\030GetInstanceConfigReques"
+          + "t\022<\n\004name\030\001 \001(\tB.\342A\001\002\372A\'\n%spanner.google"
+          + "apis.com/InstanceConfig\"\355\001\n\033CreateInstan"
+          + "ceConfigRequest\022D\n\006parent\030\001 \001(\tB4\342A\001\002\372A-"
+          + "\n+cloudresourcemanager.googleapis.com/Pr"
+          + "oject\022 \n\022instance_config_id\030\002 \001(\tB\004\342A\001\002\022"
+          + "O\n\017instance_config\030\003 \001(\01320.google.spanne"
+          + "r.admin.instance.v1.InstanceConfigB\004\342A\001\002"
+          + "\022\025\n\rvalidate_only\030\004 \001(\010\"\274\001\n\033UpdateInstan"
+          + "ceConfigRequest\022O\n\017instance_config\030\001 \001(\013"
+          + "20.google.spanner.admin.instance.v1.Inst"
+          + "anceConfigB\004\342A\001\002\0225\n\013update_mask\030\002 \001(\0132\032."
+          + "google.protobuf.FieldMaskB\004\342A\001\002\022\025\n\rvalid"
+          + "ate_only\030\003 \001(\010\"\200\001\n\033DeleteInstanceConfigR"
+          + "equest\022<\n\004name\030\001 \001(\tB.\342A\001\002\372A\'\n%spanner.g"
+          + "oogleapis.com/InstanceConfig\022\014\n\004etag\030\002 \001"
+          + "(\t\022\025\n\rvalidate_only\030\003 \001(\010\"\242\001\n#ListInstan"
+          + "ceConfigOperationsRequest\022D\n\006parent\030\001 \001("
+          + "\tB4\342A\001\002\372A-\n+cloudresourcemanager.googlea"
+          + "pis.com/Project\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_"
+          + "size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"r\n$ListIn"
+          + "stanceConfigOperationsResponse\0221\n\noperat"
+          + "ions\030\001 \003(\0132\035.google.longrunning.Operatio"
+          + "n\022\027\n\017next_page_token\030\002 \001(\t\"|\n\022GetInstanc"
+          + "eRequest\0226\n\004name\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner"
+          + ".googleapis.com/Instance\022.\n\nfield_mask\030\002"
+          + " \001(\0132\032.google.protobuf.FieldMask\"\274\001\n\025Cre"
+          + "ateInstanceRequest\022D\n\006parent\030\001 \001(\tB4\342A\001\002"
+          + "\372A-\n+cloudresourcemanager.googleapis.com"
+          + "/Project\022\031\n\013instance_id\030\002 \001(\tB\004\342A\001\002\022B\n\010i"
+          + "nstance\030\003 \001(\0132*.google.spanner.admin.ins"
+          + "tance.v1.InstanceB\004\342A\001\002\"\223\001\n\024ListInstance"
+          + "sRequest\022D\n\006parent\030\001 \001(\tB4\342A\001\002\372A-\n+cloud"
+          + "resourcemanager.googleapis.com/Project\022\021"
+          + "\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\016\n"
+          + "\006filter\030\004 \001(\t\"o\n\025ListInstancesResponse\022="
+          + "\n\tinstances\030\001 \003(\0132*.google.spanner.admin"
+          + ".instance.v1.Instance\022\027\n\017next_page_token"
+          + "\030\002 \001(\t\"\221\001\n\025UpdateInstanceRequest\022B\n\010inst"
+          + "ance\030\001 \001(\0132*.google.spanner.admin.instan"
+          + "ce.v1.InstanceB\004\342A\001\002\0224\n\nfield_mask\030\002 \001(\013"
+          + "2\032.google.protobuf.FieldMaskB\004\342A\001\002\"O\n\025De"
+          + "leteInstanceRequest\0226\n\004name\030\001 \001(\tB(\342A\001\002\372"
+          + "A!\n\037spanner.googleapis.com/Instance\"\345\001\n\026"
+          + "CreateInstanceMetadata\022<\n\010instance\030\001 \001(\013"
+          + "2*.google.spanner.admin.instance.v1.Inst"
+          + "ance\022.\n\nstart_time\030\002 \001(\0132\032.google.protob"
+          + "uf.Timestamp\022/\n\013cancel_time\030\003 \001(\0132\032.goog"
+          + "le.protobuf.Timestamp\022,\n\010end_time\030\004 \001(\0132"
+          + "\032.google.protobuf.Timestamp\"\345\001\n\026UpdateIn"
+          + "stanceMetadata\022<\n\010instance\030\001 \001(\0132*.googl"
+          + "e.spanner.admin.instance.v1.Instance\022.\n\n"
+          + "start_time\030\002 \001(\0132\032.google.protobuf.Times"
+          + "tamp\022/\n\013cancel_time\030\003 \001(\0132\032.google.proto"
+          + "buf.Timestamp\022,\n\010end_time\030\004 \001(\0132\032.google"
+          + ".protobuf.Timestamp\"\341\001\n\034CreateInstanceCo"
           + "nfigMetadata\022I\n\017instance_config\030\001 \001(\01320."
           + "google.spanner.admin.instance.v1.Instanc"
           + "eConfig\022E\n\010progress\030\002 \001(\01323.google.spann"
           + "er.admin.instance.v1.OperationProgress\022/"
           + "\n\013cancel_time\030\003 \001(\0132\032.google.protobuf.Ti"
-          + "mestamp2\362\030\n\rInstanceAdmin\022\314\001\n\023ListInstan"
-          + "ceConfigs\022<.google.spanner.admin.instanc"
-          + "e.v1.ListInstanceConfigsRequest\032=.google"
-          + ".spanner.admin.instance.v1.ListInstanceC"
-          + "onfigsResponse\"8\202\323\344\223\002)\022\'/v1/{parent=proj"
-          + "ects/*}/instanceConfigs\332A\006parent\022\271\001\n\021Get"
-          + "InstanceConfig\022:.google.spanner.admin.in"
-          + "stance.v1.GetInstanceConfigRequest\0320.goo"
-          + "gle.spanner.admin.instance.v1.InstanceCo"
-          + "nfig\"6\202\323\344\223\002)\022\'/v1/{name=projects/*/insta"
-          + "nceConfigs/*}\332A\004name\022\310\002\n\024CreateInstanceC"
-          + "onfig\022=.google.spanner.admin.instance.v1"
-          + ".CreateInstanceConfigRequest\032\035.google.lo"
-          + "ngrunning.Operation\"\321\001\202\323\344\223\002,\"\'/v1/{paren"
-          + "t=projects/*}/instanceConfigs:\001*\332A)paren"
-          + "t,instance_config,instance_config_id\312Ap\n"
-          + "/google.spanner.admin.instance.v1.Instan"
-          + "ceConfig\022=google.spanner.admin.instance."
-          + "v1.CreateInstanceConfigMetadata\022\312\002\n\024Upda"
-          + "teInstanceConfig\022=.google.spanner.admin."
-          + "instance.v1.UpdateInstanceConfigRequest\032"
-          + "\035.google.longrunning.Operation\"\323\001\202\323\344\223\002<2"
-          + "7/v1/{instance_config.name=projects/*/in"
-          + "stanceConfigs/*}:\001*\332A\033instance_config,up"
-          + "date_mask\312Ap\n/google.spanner.admin.insta"
-          + "nce.v1.InstanceConfig\022=google.spanner.ad"
-          + "min.instance.v1.UpdateInstanceConfigMeta"
-          + "data\022\245\001\n\024DeleteInstanceConfig\022=.google.s"
-          + "panner.admin.instance.v1.DeleteInstanceC"
-          + "onfigRequest\032\026.google.protobuf.Empty\"6\202\323"
-          + "\344\223\002)*\'/v1/{name=projects/*/instanceConfi"
-          + "gs/*}\332A\004name\022\360\001\n\034ListInstanceConfigOpera"
-          + "tions\022E.google.spanner.admin.instance.v1"
-          + ".ListInstanceConfigOperationsRequest\032F.g"
-          + "oogle.spanner.admin.instance.v1.ListInst"
-          + "anceConfigOperationsResponse\"A\202\323\344\223\0022\0220/v"
-          + "1/{parent=projects/*}/instanceConfigOper"
-          + "ations\332A\006parent\022\264\001\n\rListInstances\0226.goog"
+          + "mestamp\"\341\001\n\034UpdateInstanceConfigMetadata"
+          + "\022I\n\017instance_config\030\001 \001(\01320.google.spann"
+          + "er.admin.instance.v1.InstanceConfig\022E\n\010p"
+          + "rogress\030\002 \001(\01323.google.spanner.admin.ins"
+          + "tance.v1.OperationProgress\022/\n\013cancel_tim"
+          + "e\030\003 \001(\0132\032.google.protobuf.Timestamp2\362\030\n\r"
+          + "InstanceAdmin\022\314\001\n\023ListInstanceConfigs\022<."
+          + "google.spanner.admin.instance.v1.ListIns"
+          + "tanceConfigsRequest\032=.google.spanner.adm"
+          + "in.instance.v1.ListInstanceConfigsRespon"
+          + "se\"8\332A\006parent\202\323\344\223\002)\022\'/v1/{parent=project"
+          + "s/*}/instanceConfigs\022\271\001\n\021GetInstanceConf"
+          + "ig\022:.google.spanner.admin.instance.v1.Ge"
+          + "tInstanceConfigRequest\0320.google.spanner."
+          + "admin.instance.v1.InstanceConfig\"6\332A\004nam"
+          + "e\202\323\344\223\002)\022\'/v1/{name=projects/*/instanceCo"
+          + "nfigs/*}\022\310\002\n\024CreateInstanceConfig\022=.goog"
+          + "le.spanner.admin.instance.v1.CreateInsta"
+          + "nceConfigRequest\032\035.google.longrunning.Op"
+          + "eration\"\321\001\312Ap\n/google.spanner.admin.inst"
+          + "ance.v1.InstanceConfig\022=google.spanner.a"
+          + "dmin.instance.v1.CreateInstanceConfigMet"
+          + "adata\332A)parent,instance_config,instance_"
+          + "config_id\202\323\344\223\002,\"\'/v1/{parent=projects/*}"
+          + "/instanceConfigs:\001*\022\312\002\n\024UpdateInstanceCo"
+          + "nfig\022=.google.spanner.admin.instance.v1."
+          + "UpdateInstanceConfigRequest\032\035.google.lon"
+          + "grunning.Operation\"\323\001\312Ap\n/google.spanner"
+          + ".admin.instance.v1.InstanceConfig\022=googl"
+          + "e.spanner.admin.instance.v1.UpdateInstan"
+          + "ceConfigMetadata\332A\033instance_config,updat"
+          + "e_mask\202\323\344\223\002<27/v1/{instance_config.name="
+          + "projects/*/instanceConfigs/*}:\001*\022\245\001\n\024Del"
+          + "eteInstanceConfig\022=.google.spanner.admin"
+          + ".instance.v1.DeleteInstanceConfigRequest"
+          + "\032\026.google.protobuf.Empty\"6\332A\004name\202\323\344\223\002)*"
+          + "\'/v1/{name=projects/*/instanceConfigs/*}"
+          + "\022\360\001\n\034ListInstanceConfigOperations\022E.goog"
           + "le.spanner.admin.instance.v1.ListInstanc"
-          + "esRequest\0327.google.spanner.admin.instanc"
-          + "e.v1.ListInstancesResponse\"2\202\323\344\223\002#\022!/v1/"
-          + "{parent=projects/*}/instances\332A\006parent\022\241"
-          + "\001\n\013GetInstance\0224.google.spanner.admin.in"
-          + "stance.v1.GetInstanceRequest\032*.google.sp"
-          + "anner.admin.instance.v1.Instance\"0\202\323\344\223\002#"
-          + "\022!/v1/{name=projects/*/instances/*}\332A\004na"
-          + "me\022\234\002\n\016CreateInstance\0227.google.spanner.a"
-          + "dmin.instance.v1.CreateInstanceRequest\032\035"
-          + ".google.longrunning.Operation\"\261\001\202\323\344\223\002&\"!"
-          + "/v1/{parent=projects/*}/instances:\001*\332A\033p"
-          + "arent,instance_id,instance\312Ad\n)google.sp"
-          + "anner.admin.instance.v1.Instance\0227google"
-          + ".spanner.admin.instance.v1.CreateInstanc"
-          + "eMetadata\022\235\002\n\016UpdateInstance\0227.google.sp"
-          + "anner.admin.instance.v1.UpdateInstanceRe"
-          + "quest\032\035.google.longrunning.Operation\"\262\001\202"
-          + "\323\344\223\002/2*/v1/{instance.name=projects/*/ins"
-          + "tances/*}:\001*\332A\023instance,field_mask\312Ad\n)g"
-          + "oogle.spanner.admin.instance.v1.Instance"
-          + "\0227google.spanner.admin.instance.v1.Updat"
-          + "eInstanceMetadata\022\223\001\n\016DeleteInstance\0227.g"
-          + "oogle.spanner.admin.instance.v1.DeleteIn"
-          + "stanceRequest\032\026.google.protobuf.Empty\"0\202"
-          + "\323\344\223\002#*!/v1/{name=projects/*/instances/*}"
-          + "\332A\004name\022\232\001\n\014SetIamPolicy\022\".google.iam.v1"
-          + ".SetIamPolicyRequest\032\025.google.iam.v1.Pol"
-          + "icy\"O\202\323\344\223\0027\"2/v1/{resource=projects/*/in"
-          + "stances/*}:setIamPolicy:\001*\332A\017resource,po"
-          + "licy\022\223\001\n\014GetIamPolicy\022\".google.iam.v1.Ge"
-          + "tIamPolicyRequest\032\025.google.iam.v1.Policy"
-          + "\"H\202\323\344\223\0027\"2/v1/{resource=projects/*/insta"
-          + "nces/*}:getIamPolicy:\001*\332A\010resource\022\305\001\n\022T"
-          + "estIamPermissions\022(.google.iam.v1.TestIa"
-          + "mPermissionsRequest\032).google.iam.v1.Test"
-          + "IamPermissionsResponse\"Z\202\323\344\223\002=\"8/v1/{res"
-          + "ource=projects/*/instances/*}:testIamPer"
-          + "missions:\001*\332A\024resource,permissions\032x\312A\026s"
-          + "panner.googleapis.com\322A\\https://www.goog"
-          + "leapis.com/auth/cloud-platform,https://w"
-          + "ww.googleapis.com/auth/spanner.adminB\213\002\n"
-          + "$com.google.spanner.admin.instance.v1B\031S"
-          + "pannerInstanceAdminProtoP\001ZFcloud.google"
-          + ".com/go/spanner/admin/instance/apiv1/ins"
-          + "tancepb;instancepb\252\002&Google.Cloud.Spanne"
-          + "r.Admin.Instance.V1\312\002&Google\\Cloud\\Spann"
-          + "er\\Admin\\Instance\\V1\352\002+Google::Cloud::Sp"
-          + "anner::Admin::Instance::V1b\006proto3"
+          + "eConfigOperationsRequest\032F.google.spanne"
+          + "r.admin.instance.v1.ListInstanceConfigOp"
+          + "erationsResponse\"A\332A\006parent\202\323\344\223\0022\0220/v1/{"
+          + "parent=projects/*}/instanceConfigOperati"
+          + "ons\022\264\001\n\rListInstances\0226.google.spanner.a"
+          + "dmin.instance.v1.ListInstancesRequest\0327."
+          + "google.spanner.admin.instance.v1.ListIns"
+          + "tancesResponse\"2\332A\006parent\202\323\344\223\002#\022!/v1/{pa"
+          + "rent=projects/*}/instances\022\241\001\n\013GetInstan"
+          + "ce\0224.google.spanner.admin.instance.v1.Ge"
+          + "tInstanceRequest\032*.google.spanner.admin."
+          + "instance.v1.Instance\"0\332A\004name\202\323\344\223\002#\022!/v1"
+          + "/{name=projects/*/instances/*}\022\234\002\n\016Creat"
+          + "eInstance\0227.google.spanner.admin.instanc"
+          + "e.v1.CreateInstanceRequest\032\035.google.long"
+          + "running.Operation\"\261\001\312Ad\n)google.spanner."
+          + "admin.instance.v1.Instance\0227google.spann"
+          + "er.admin.instance.v1.CreateInstanceMetad"
+          + "ata\332A\033parent,instance_id,instance\202\323\344\223\002&\""
+          + "!/v1/{parent=projects/*}/instances:\001*\022\235\002"
+          + "\n\016UpdateInstance\0227.google.spanner.admin."
+          + "instance.v1.UpdateInstanceRequest\032\035.goog"
+          + "le.longrunning.Operation\"\262\001\312Ad\n)google.s"
+          + "panner.admin.instance.v1.Instance\0227googl"
+          + "e.spanner.admin.instance.v1.UpdateInstan"
+          + "ceMetadata\332A\023instance,field_mask\202\323\344\223\002/2*"
+          + "/v1/{instance.name=projects/*/instances/"
+          + "*}:\001*\022\223\001\n\016DeleteInstance\0227.google.spanne"
+          + "r.admin.instance.v1.DeleteInstanceReques"
+          + "t\032\026.google.protobuf.Empty\"0\332A\004name\202\323\344\223\002#"
+          + "*!/v1/{name=projects/*/instances/*}\022\232\001\n\014"
+          + "SetIamPolicy\022\".google.iam.v1.SetIamPolic"
+          + "yRequest\032\025.google.iam.v1.Policy\"O\332A\017reso"
+          + "urce,policy\202\323\344\223\0027\"2/v1/{resource=project"
+          + "s/*/instances/*}:setIamPolicy:\001*\022\223\001\n\014Get"
+          + "IamPolicy\022\".google.iam.v1.GetIamPolicyRe"
+          + "quest\032\025.google.iam.v1.Policy\"H\332A\010resourc"
+          + "e\202\323\344\223\0027\"2/v1/{resource=projects/*/instan"
+          + "ces/*}:getIamPolicy:\001*\022\305\001\n\022TestIamPermis"
+          + "sions\022(.google.iam.v1.TestIamPermissions"
+          + "Request\032).google.iam.v1.TestIamPermissio"
+          + "nsResponse\"Z\332A\024resource,permissions\202\323\344\223\002"
+          + "=\"8/v1/{resource=projects/*/instances/*}"
+          + ":testIamPermissions:\001*\032x\312A\026spanner.googl"
+          + "eapis.com\322A\\https://www.googleapis.com/a"
+          + "uth/cloud-platform,https://www.googleapi"
+          + "s.com/auth/spanner.adminB\213\002\n$com.google."
+          + "spanner.admin.instance.v1B\031SpannerInstan"
+          + "ceAdminProtoP\001ZFcloud.google.com/go/span"
+          + "ner/admin/instance/apiv1/instancepb;inst"
+          + "ancepb\252\002&Google.Cloud.Spanner.Admin.Inst"
+          + "ance.V1\312\002&Google\\Cloud\\Spanner\\Admin\\Ins"
+          + "tance\\V1\352\002+Google::Cloud::Spanner::Admin"
+          + "::Instance::V1b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java
index 5a22311f981..48f2e9e1683 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java
@@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateInstanceConfigMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java
index 9c93dda8798..d2916ab0a74 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java
@@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateInstanceConfigRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java
index a421f384777..291ad67bc82 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java
@@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateInstanceMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java
index b8eaa2160d8..3c734c86d6e 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java
@@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateInstanceRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java
index 9b92cd1cb03..1bdb2f44a29 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java
@@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new BatchCreateSessionsRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_BatchCreateSessionsRequest_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java
index a53a5644317..9a8d1c91120 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java
@@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new BatchCreateSessionsResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_BatchCreateSessionsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java
new file mode 100644
index 00000000000..ce7b0ed7634
--- /dev/null
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java
@@ -0,0 +1,1435 @@
+/*
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: google/spanner/v1/spanner.proto
+
+package com.google.spanner.v1;
+
+/**
+ *
+ *
+ * 
+ * The request for [BatchWrite][Spanner.BatchWrite].
+ * 
+ * + * Protobuf type {@code google.spanner.v1.BatchWriteRequest} + */ +public final class BatchWriteRequest extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchWriteRequest) + BatchWriteRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use BatchWriteRequest.newBuilder() to construct. + private BatchWriteRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private BatchWriteRequest() { + session_ = ""; + mutations_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new BatchWriteRequest(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.BatchWriteRequest.class, + com.google.spanner.v1.BatchWriteRequest.Builder.class); + } + + public static final int SESSION_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object session_ = ""; + /** + * + * + *
+   * The session in which the batch request is to be run.
+   * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The session. + */ + @java.lang.Override + public java.lang.String getSession() { + java.lang.Object ref = session_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + session_ = s; + return s; + } + } + /** + * + * + *
+   * The session in which the batch request is to be run.
+   * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for session. + */ + @java.lang.Override + public com.google.protobuf.ByteString getSessionBytes() { + java.lang.Object ref = session_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + session_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int MUTATIONS_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private java.util.List mutations_; + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List getMutationsList() { + return mutations_; + } + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public java.util.List + getMutationsOrBuilderList() { + return mutations_; + } + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public int getMutationsCount() { + return mutations_.size(); + } + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.v1.Mutation getMutations(int index) { + return mutations_.get(index); + } + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) { + return mutations_.get(index); + } + + public static final int REQUEST_OPTIONS_FIELD_NUMBER = 3; + private com.google.spanner.v1.RequestOptions requestOptions_; + /** + * + * + *
+   * Common options for this request.
+   * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + * + * @return Whether the requestOptions field is set. + */ + @java.lang.Override + public boolean hasRequestOptions() { + return requestOptions_ != null; + } + /** + * + * + *
+   * Common options for this request.
+   * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + * + * @return The requestOptions. + */ + @java.lang.Override + public com.google.spanner.v1.RequestOptions getRequestOptions() { + return requestOptions_ == null + ? com.google.spanner.v1.RequestOptions.getDefaultInstance() + : requestOptions_; + } + /** + * + * + *
+   * Common options for this request.
+   * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + @java.lang.Override + public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder() { + return requestOptions_ == null + ? com.google.spanner.v1.RequestOptions.getDefaultInstance() + : requestOptions_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); + } + for (int i = 0; i < mutations_.size(); i++) { + output.writeMessage(2, mutations_.get(i)); + } + if (requestOptions_ != null) { + output.writeMessage(3, getRequestOptions()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); + } + for (int i = 0; i < mutations_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, mutations_.get(i)); + } + if (requestOptions_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getRequestOptions()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.BatchWriteRequest)) { + return super.equals(obj); + } + com.google.spanner.v1.BatchWriteRequest other = (com.google.spanner.v1.BatchWriteRequest) obj; + + if (!getSession().equals(other.getSession())) return false; + if (!getMutationsList().equals(other.getMutationsList())) return false; + if (hasRequestOptions() != other.hasRequestOptions()) return false; + if (hasRequestOptions()) { + if (!getRequestOptions().equals(other.getRequestOptions())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + SESSION_FIELD_NUMBER; + hash = (53 * hash) + getSession().hashCode(); + if (getMutationsCount() > 0) { + hash = (37 * hash) + MUTATIONS_FIELD_NUMBER; + hash = (53 * hash) + getMutationsList().hashCode(); + } + if (hasRequestOptions()) { + hash = (37 * hash) + REQUEST_OPTIONS_FIELD_NUMBER; + hash = (53 * hash) + getRequestOptions().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.BatchWriteRequest parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.BatchWriteRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.BatchWriteRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * + * + *
+   * The request for [BatchWrite][Spanner.BatchWrite].
+   * 
+ * + * Protobuf type {@code google.spanner.v1.BatchWriteRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchWriteRequest) + com.google.spanner.v1.BatchWriteRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.BatchWriteRequest.class, + com.google.spanner.v1.BatchWriteRequest.Builder.class); + } + + // Construct using com.google.spanner.v1.BatchWriteRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + session_ = ""; + if (mutationsBuilder_ == null) { + mutations_ = java.util.Collections.emptyList(); + } else { + mutations_ = null; + mutationsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + requestOptions_ = null; + if (requestOptionsBuilder_ != null) { + requestOptionsBuilder_.dispose(); + requestOptionsBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteRequest_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.BatchWriteRequest getDefaultInstanceForType() { + return com.google.spanner.v1.BatchWriteRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.BatchWriteRequest build() { + com.google.spanner.v1.BatchWriteRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.BatchWriteRequest buildPartial() { + com.google.spanner.v1.BatchWriteRequest result = + new com.google.spanner.v1.BatchWriteRequest(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.spanner.v1.BatchWriteRequest result) { + if (mutationsBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0)) { + mutations_ = java.util.Collections.unmodifiableList(mutations_); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.mutations_ = mutations_; + } else { + result.mutations_ = mutationsBuilder_.build(); + } + } + + private void buildPartial0(com.google.spanner.v1.BatchWriteRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.session_ = session_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.requestOptions_ = + requestOptionsBuilder_ == null ? requestOptions_ : requestOptionsBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.BatchWriteRequest) { + return mergeFrom((com.google.spanner.v1.BatchWriteRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.BatchWriteRequest other) { + if (other == com.google.spanner.v1.BatchWriteRequest.getDefaultInstance()) return this; + if (!other.getSession().isEmpty()) { + session_ = other.session_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (mutationsBuilder_ == null) { + if (!other.mutations_.isEmpty()) { + if (mutations_.isEmpty()) { + mutations_ = other.mutations_; + bitField0_ = (bitField0_ & ~0x00000002); + } else { + ensureMutationsIsMutable(); + mutations_.addAll(other.mutations_); + } + onChanged(); + } + } else { + if (!other.mutations_.isEmpty()) { + if (mutationsBuilder_.isEmpty()) { + mutationsBuilder_.dispose(); + mutationsBuilder_ = null; + mutations_ = other.mutations_; + bitField0_ = (bitField0_ & ~0x00000002); + mutationsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders + ? getMutationsFieldBuilder() + : null; + } else { + mutationsBuilder_.addAllMessages(other.mutations_); + } + } + } + if (other.hasRequestOptions()) { + mergeRequestOptions(other.getRequestOptions()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: + { + session_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + com.google.spanner.v1.Mutation m = + input.readMessage(com.google.spanner.v1.Mutation.parser(), extensionRegistry); + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.add(m); + } else { + mutationsBuilder_.addMessage(m); + } + break; + } // case 18 + case 26: + { + input.readMessage(getRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private java.lang.Object session_ = ""; + /** + * + * + *
+     * The session in which the batch request is to be run.
+     * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The session. + */ + public java.lang.String getSession() { + java.lang.Object ref = session_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + session_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * + * + *
+     * The session in which the batch request is to be run.
+     * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for session. + */ + public com.google.protobuf.ByteString getSessionBytes() { + java.lang.Object ref = session_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + session_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * + * + *
+     * The session in which the batch request is to be run.
+     * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The session to set. + * @return This builder for chaining. + */ + public Builder setSession(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + session_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * + * + *
+     * The session in which the batch request is to be run.
+     * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearSession() { + session_ = getDefaultInstance().getSession(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + /** + * + * + *
+     * The session in which the batch request is to be run.
+     * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for session to set. + * @return This builder for chaining. + */ + public Builder setSessionBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + session_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.util.List mutations_ = + java.util.Collections.emptyList(); + + private void ensureMutationsIsMutable() { + if (!((bitField0_ & 0x00000002) != 0)) { + mutations_ = new java.util.ArrayList(mutations_); + bitField0_ |= 0x00000002; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.v1.Mutation, + com.google.spanner.v1.Mutation.Builder, + com.google.spanner.v1.MutationOrBuilder> + mutationsBuilder_; + + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getMutationsList() { + if (mutationsBuilder_ == null) { + return java.util.Collections.unmodifiableList(mutations_); + } else { + return mutationsBuilder_.getMessageList(); + } + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public int getMutationsCount() { + if (mutationsBuilder_ == null) { + return mutations_.size(); + } else { + return mutationsBuilder_.getCount(); + } + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.Mutation getMutations(int index) { + if (mutationsBuilder_ == null) { + return mutations_.get(index); + } else { + return mutationsBuilder_.getMessage(index); + } + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setMutations(int index, com.google.spanner.v1.Mutation value) { + if (mutationsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMutationsIsMutable(); + mutations_.set(index, value); + onChanged(); + } else { + mutationsBuilder_.setMessage(index, value); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setMutations(int index, com.google.spanner.v1.Mutation.Builder builderForValue) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.set(index, builderForValue.build()); + onChanged(); + } else { + mutationsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addMutations(com.google.spanner.v1.Mutation value) { + if (mutationsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMutationsIsMutable(); + mutations_.add(value); + onChanged(); + } else { + mutationsBuilder_.addMessage(value); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addMutations(int index, com.google.spanner.v1.Mutation value) { + if (mutationsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMutationsIsMutable(); + mutations_.add(index, value); + onChanged(); + } else { + mutationsBuilder_.addMessage(index, value); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addMutations(com.google.spanner.v1.Mutation.Builder builderForValue) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.add(builderForValue.build()); + onChanged(); + } else { + mutationsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addMutations(int index, com.google.spanner.v1.Mutation.Builder builderForValue) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.add(index, builderForValue.build()); + onChanged(); + } else { + mutationsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder addAllMutations( + java.lang.Iterable values) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, mutations_); + onChanged(); + } else { + mutationsBuilder_.addAllMessages(values); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearMutations() { + if (mutationsBuilder_ == null) { + mutations_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + } else { + mutationsBuilder_.clear(); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder removeMutations(int index) { + if (mutationsBuilder_ == null) { + ensureMutationsIsMutable(); + mutations_.remove(index); + onChanged(); + } else { + mutationsBuilder_.remove(index); + } + return this; + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.Mutation.Builder getMutationsBuilder(int index) { + return getMutationsFieldBuilder().getBuilder(index); + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) { + if (mutationsBuilder_ == null) { + return mutations_.get(index); + } else { + return mutationsBuilder_.getMessageOrBuilder(index); + } + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List + getMutationsOrBuilderList() { + if (mutationsBuilder_ != null) { + return mutationsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(mutations_); + } + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.Mutation.Builder addMutationsBuilder() { + return getMutationsFieldBuilder() + .addBuilder(com.google.spanner.v1.Mutation.getDefaultInstance()); + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.v1.Mutation.Builder addMutationsBuilder(int index) { + return getMutationsFieldBuilder() + .addBuilder(index, com.google.spanner.v1.Mutation.getDefaultInstance()); + } + /** + * + * + *
+     * The mutations to be applied non-atomically.
+     * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public java.util.List getMutationsBuilderList() { + return getMutationsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.v1.Mutation, + com.google.spanner.v1.Mutation.Builder, + com.google.spanner.v1.MutationOrBuilder> + getMutationsFieldBuilder() { + if (mutationsBuilder_ == null) { + mutationsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilderV3< + com.google.spanner.v1.Mutation, + com.google.spanner.v1.Mutation.Builder, + com.google.spanner.v1.MutationOrBuilder>( + mutations_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean()); + mutations_ = null; + } + return mutationsBuilder_; + } + + private com.google.spanner.v1.RequestOptions requestOptions_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.v1.RequestOptions, + com.google.spanner.v1.RequestOptions.Builder, + com.google.spanner.v1.RequestOptionsOrBuilder> + requestOptionsBuilder_; + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + * + * @return Whether the requestOptions field is set. + */ + public boolean hasRequestOptions() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + * + * @return The requestOptions. + */ + public com.google.spanner.v1.RequestOptions getRequestOptions() { + if (requestOptionsBuilder_ == null) { + return requestOptions_ == null + ? com.google.spanner.v1.RequestOptions.getDefaultInstance() + : requestOptions_; + } else { + return requestOptionsBuilder_.getMessage(); + } + } + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + public Builder setRequestOptions(com.google.spanner.v1.RequestOptions value) { + if (requestOptionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + requestOptions_ = value; + } else { + requestOptionsBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + public Builder setRequestOptions(com.google.spanner.v1.RequestOptions.Builder builderForValue) { + if (requestOptionsBuilder_ == null) { + requestOptions_ = builderForValue.build(); + } else { + requestOptionsBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + public Builder mergeRequestOptions(com.google.spanner.v1.RequestOptions value) { + if (requestOptionsBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) + && requestOptions_ != null + && requestOptions_ != com.google.spanner.v1.RequestOptions.getDefaultInstance()) { + getRequestOptionsBuilder().mergeFrom(value); + } else { + requestOptions_ = value; + } + } else { + requestOptionsBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + public Builder clearRequestOptions() { + bitField0_ = (bitField0_ & ~0x00000004); + requestOptions_ = null; + if (requestOptionsBuilder_ != null) { + requestOptionsBuilder_.dispose(); + requestOptionsBuilder_ = null; + } + onChanged(); + return this; + } + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + public com.google.spanner.v1.RequestOptions.Builder getRequestOptionsBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getRequestOptionsFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder() { + if (requestOptionsBuilder_ != null) { + return requestOptionsBuilder_.getMessageOrBuilder(); + } else { + return requestOptions_ == null + ? com.google.spanner.v1.RequestOptions.getDefaultInstance() + : requestOptions_; + } + } + /** + * + * + *
+     * Common options for this request.
+     * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.v1.RequestOptions, + com.google.spanner.v1.RequestOptions.Builder, + com.google.spanner.v1.RequestOptionsOrBuilder> + getRequestOptionsFieldBuilder() { + if (requestOptionsBuilder_ == null) { + requestOptionsBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.v1.RequestOptions, + com.google.spanner.v1.RequestOptions.Builder, + com.google.spanner.v1.RequestOptionsOrBuilder>( + getRequestOptions(), getParentForChildren(), isClean()); + requestOptions_ = null; + } + return requestOptionsBuilder_; + } + + @java.lang.Override + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchWriteRequest) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.BatchWriteRequest) + private static final com.google.spanner.v1.BatchWriteRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.BatchWriteRequest(); + } + + public static com.google.spanner.v1.BatchWriteRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BatchWriteRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.BatchWriteRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java new file mode 100644 index 00000000000..155fcb2c811 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java @@ -0,0 +1,150 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/v1/spanner.proto + +package com.google.spanner.v1; + +public interface BatchWriteRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.BatchWriteRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * The session in which the batch request is to be run.
+   * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The session. + */ + java.lang.String getSession(); + /** + * + * + *
+   * The session in which the batch request is to be run.
+   * 
+ * + * + * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for session. + */ + com.google.protobuf.ByteString getSessionBytes(); + + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List getMutationsList(); + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.v1.Mutation getMutations(int index); + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + int getMutationsCount(); + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + java.util.List getMutationsOrBuilderList(); + /** + * + * + *
+   * The mutations to be applied non-atomically.
+   * 
+ * + * + * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index); + + /** + * + * + *
+   * Common options for this request.
+   * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + * + * @return Whether the requestOptions field is set. + */ + boolean hasRequestOptions(); + /** + * + * + *
+   * Common options for this request.
+   * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + * + * @return The requestOptions. + */ + com.google.spanner.v1.RequestOptions getRequestOptions(); + /** + * + * + *
+   * Common options for this request.
+   * 
+ * + * .google.spanner.v1.RequestOptions request_options = 3; + */ + com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java new file mode 100644 index 00000000000..07a048ffc99 --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java @@ -0,0 +1,1221 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/v1/spanner.proto + +package com.google.spanner.v1; + +/** + * + * + *
+ * The result of applying a batch of mutations.
+ * 
+ * + * Protobuf type {@code google.spanner.v1.BatchWriteResponse} + */ +public final class BatchWriteResponse extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchWriteResponse) + BatchWriteResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use BatchWriteResponse.newBuilder() to construct. + private BatchWriteResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private BatchWriteResponse() { + indexes_ = emptyIntList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new BatchWriteResponse(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.BatchWriteResponse.class, + com.google.spanner.v1.BatchWriteResponse.Builder.class); + } + + public static final int INDEXES_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList indexes_; + /** + * + * + *
+   * The mutations applied in this batch. The values index into the `mutations`
+   * field in the corresponding BatchWriteRequest.
+   * 
+ * + * repeated int32 indexes = 1; + * + * @return A list containing the indexes. + */ + @java.lang.Override + public java.util.List getIndexesList() { + return indexes_; + } + /** + * + * + *
+   * The mutations applied in this batch. The values index into the `mutations`
+   * field in the corresponding BatchWriteRequest.
+   * 
+ * + * repeated int32 indexes = 1; + * + * @return The count of indexes. + */ + public int getIndexesCount() { + return indexes_.size(); + } + /** + * + * + *
+   * The mutations applied in this batch. The values index into the `mutations`
+   * field in the corresponding BatchWriteRequest.
+   * 
+ * + * repeated int32 indexes = 1; + * + * @param index The index of the element to return. + * @return The indexes at the given index. + */ + public int getIndexes(int index) { + return indexes_.getInt(index); + } + + private int indexesMemoizedSerializedSize = -1; + + public static final int STATUS_FIELD_NUMBER = 2; + private com.google.rpc.Status status_; + /** + * + * + *
+   * An `OK` status indicates success. Any other status indicates a failure.
+   * 
+ * + * .google.rpc.Status status = 2; + * + * @return Whether the status field is set. + */ + @java.lang.Override + public boolean hasStatus() { + return status_ != null; + } + /** + * + * + *
+   * An `OK` status indicates success. Any other status indicates a failure.
+   * 
+ * + * .google.rpc.Status status = 2; + * + * @return The status. + */ + @java.lang.Override + public com.google.rpc.Status getStatus() { + return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; + } + /** + * + * + *
+   * An `OK` status indicates success. Any other status indicates a failure.
+   * 
+ * + * .google.rpc.Status status = 2; + */ + @java.lang.Override + public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { + return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; + } + + public static final int COMMIT_TIMESTAMP_FIELD_NUMBER = 3; + private com.google.protobuf.Timestamp commitTimestamp_; + /** + * + * + *
+   * The commit timestamp of the transaction that applied this batch.
+   * Present if `status` is `OK`, absent otherwise.
+   * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + * + * @return Whether the commitTimestamp field is set. + */ + @java.lang.Override + public boolean hasCommitTimestamp() { + return commitTimestamp_ != null; + } + /** + * + * + *
+   * The commit timestamp of the transaction that applied this batch.
+   * Present if `status` is `OK`, absent otherwise.
+   * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + * + * @return The commitTimestamp. + */ + @java.lang.Override + public com.google.protobuf.Timestamp getCommitTimestamp() { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + /** + * + * + *
+   * The commit timestamp of the transaction that applied this batch.
+   * Present if `status` is `OK`, absent otherwise.
+   * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + @java.lang.Override + public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getSerializedSize(); + if (getIndexesList().size() > 0) { + output.writeUInt32NoTag(10); + output.writeUInt32NoTag(indexesMemoizedSerializedSize); + } + for (int i = 0; i < indexes_.size(); i++) { + output.writeInt32NoTag(indexes_.getInt(i)); + } + if (status_ != null) { + output.writeMessage(2, getStatus()); + } + if (commitTimestamp_ != null) { + output.writeMessage(3, getCommitTimestamp()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < indexes_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(indexes_.getInt(i)); + } + size += dataSize; + if (!getIndexesList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize); + } + indexesMemoizedSerializedSize = dataSize; + } + if (status_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getStatus()); + } + if (commitTimestamp_ != null) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getCommitTimestamp()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.spanner.v1.BatchWriteResponse)) { + return super.equals(obj); + } + com.google.spanner.v1.BatchWriteResponse other = (com.google.spanner.v1.BatchWriteResponse) obj; + + if (!getIndexesList().equals(other.getIndexesList())) return false; + if (hasStatus() != other.hasStatus()) return false; + if (hasStatus()) { + if (!getStatus().equals(other.getStatus())) return false; + } + if (hasCommitTimestamp() != other.hasCommitTimestamp()) return false; + if (hasCommitTimestamp()) { + if (!getCommitTimestamp().equals(other.getCommitTimestamp())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getIndexesCount() > 0) { + hash = (37 * hash) + INDEXES_FIELD_NUMBER; + hash = (53 * hash) + getIndexesList().hashCode(); + } + if (hasStatus()) { + hash = (37 * hash) + STATUS_FIELD_NUMBER; + hash = (53 * hash) + getStatus().hashCode(); + } + if (hasCommitTimestamp()) { + hash = (37 * hash) + COMMIT_TIMESTAMP_FIELD_NUMBER; + hash = (53 * hash) + getCommitTimestamp().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.BatchWriteResponse parseDelimitedFrom( + java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( + PARSER, input, extensionRegistry); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.v1.BatchWriteResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException( + PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.google.spanner.v1.BatchWriteResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * + * + *
+   * The result of applying a batch of mutations.
+   * 
+ * + * Protobuf type {@code google.spanner.v1.BatchWriteResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchWriteResponse) + com.google.spanner.v1.BatchWriteResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.v1.BatchWriteResponse.class, + com.google.spanner.v1.BatchWriteResponse.Builder.class); + } + + // Construct using com.google.spanner.v1.BatchWriteResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + indexes_ = emptyIntList(); + status_ = null; + if (statusBuilder_ != null) { + statusBuilder_.dispose(); + statusBuilder_ = null; + } + commitTimestamp_ = null; + if (commitTimestampBuilder_ != null) { + commitTimestampBuilder_.dispose(); + commitTimestampBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.v1.SpannerProto + .internal_static_google_spanner_v1_BatchWriteResponse_descriptor; + } + + @java.lang.Override + public com.google.spanner.v1.BatchWriteResponse getDefaultInstanceForType() { + return com.google.spanner.v1.BatchWriteResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.v1.BatchWriteResponse build() { + com.google.spanner.v1.BatchWriteResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.v1.BatchWriteResponse buildPartial() { + com.google.spanner.v1.BatchWriteResponse result = + new com.google.spanner.v1.BatchWriteResponse(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.google.spanner.v1.BatchWriteResponse result) { + if (((bitField0_ & 0x00000001) != 0)) { + indexes_.makeImmutable(); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.indexes_ = indexes_; + } + + private void buildPartial0(com.google.spanner.v1.BatchWriteResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.status_ = statusBuilder_ == null ? status_ : statusBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.commitTimestamp_ = + commitTimestampBuilder_ == null ? commitTimestamp_ : commitTimestampBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.spanner.v1.BatchWriteResponse) { + return mergeFrom((com.google.spanner.v1.BatchWriteResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.v1.BatchWriteResponse other) { + if (other == com.google.spanner.v1.BatchWriteResponse.getDefaultInstance()) return this; + if (!other.indexes_.isEmpty()) { + if (indexes_.isEmpty()) { + indexes_ = other.indexes_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureIndexesIsMutable(); + indexes_.addAll(other.indexes_); + } + onChanged(); + } + if (other.hasStatus()) { + mergeStatus(other.getStatus()); + } + if (other.hasCommitTimestamp()) { + mergeCommitTimestamp(other.getCommitTimestamp()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: + { + int v = input.readInt32(); + ensureIndexesIsMutable(); + indexes_.addInt(v); + break; + } // case 8 + case 10: + { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureIndexesIsMutable(); + while (input.getBytesUntilLimit() > 0) { + indexes_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } // case 10 + case 18: + { + input.readMessage(getStatusFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + input.readMessage(getCommitTimestampFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000004; + break; + } // case 26 + default: + { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + + private int bitField0_; + + private com.google.protobuf.Internal.IntList indexes_ = emptyIntList(); + + private void ensureIndexesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + indexes_ = mutableCopy(indexes_); + bitField0_ |= 0x00000001; + } + } + /** + * + * + *
+     * The mutations applied in this batch. The values index into the `mutations`
+     * field in the corresponding BatchWriteRequest.
+     * 
+ * + * repeated int32 indexes = 1; + * + * @return A list containing the indexes. + */ + public java.util.List getIndexesList() { + return ((bitField0_ & 0x00000001) != 0) + ? java.util.Collections.unmodifiableList(indexes_) + : indexes_; + } + /** + * + * + *
+     * The mutations applied in this batch. The values index into the `mutations`
+     * field in the corresponding BatchWriteRequest.
+     * 
+ * + * repeated int32 indexes = 1; + * + * @return The count of indexes. + */ + public int getIndexesCount() { + return indexes_.size(); + } + /** + * + * + *
+     * The mutations applied in this batch. The values index into the `mutations`
+     * field in the corresponding BatchWriteRequest.
+     * 
+ * + * repeated int32 indexes = 1; + * + * @param index The index of the element to return. + * @return The indexes at the given index. + */ + public int getIndexes(int index) { + return indexes_.getInt(index); + } + /** + * + * + *
+     * The mutations applied in this batch. The values index into the `mutations`
+     * field in the corresponding BatchWriteRequest.
+     * 
+ * + * repeated int32 indexes = 1; + * + * @param index The index to set the value at. + * @param value The indexes to set. + * @return This builder for chaining. + */ + public Builder setIndexes(int index, int value) { + + ensureIndexesIsMutable(); + indexes_.setInt(index, value); + onChanged(); + return this; + } + /** + * + * + *
+     * The mutations applied in this batch. The values index into the `mutations`
+     * field in the corresponding BatchWriteRequest.
+     * 
+ * + * repeated int32 indexes = 1; + * + * @param value The indexes to add. + * @return This builder for chaining. + */ + public Builder addIndexes(int value) { + + ensureIndexesIsMutable(); + indexes_.addInt(value); + onChanged(); + return this; + } + /** + * + * + *
+     * The mutations applied in this batch. The values index into the `mutations`
+     * field in the corresponding BatchWriteRequest.
+     * 
+ * + * repeated int32 indexes = 1; + * + * @param values The indexes to add. + * @return This builder for chaining. + */ + public Builder addAllIndexes(java.lang.Iterable values) { + ensureIndexesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, indexes_); + onChanged(); + return this; + } + /** + * + * + *
+     * The mutations applied in this batch. The values index into the `mutations`
+     * field in the corresponding BatchWriteRequest.
+     * 
+ * + * repeated int32 indexes = 1; + * + * @return This builder for chaining. + */ + public Builder clearIndexes() { + indexes_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + private com.google.rpc.Status status_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> + statusBuilder_; + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + * + * @return Whether the status field is set. + */ + public boolean hasStatus() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + * + * @return The status. + */ + public com.google.rpc.Status getStatus() { + if (statusBuilder_ == null) { + return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; + } else { + return statusBuilder_.getMessage(); + } + } + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + */ + public Builder setStatus(com.google.rpc.Status value) { + if (statusBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + status_ = value; + } else { + statusBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + */ + public Builder setStatus(com.google.rpc.Status.Builder builderForValue) { + if (statusBuilder_ == null) { + status_ = builderForValue.build(); + } else { + statusBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + */ + public Builder mergeStatus(com.google.rpc.Status value) { + if (statusBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && status_ != null + && status_ != com.google.rpc.Status.getDefaultInstance()) { + getStatusBuilder().mergeFrom(value); + } else { + status_ = value; + } + } else { + statusBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + */ + public Builder clearStatus() { + bitField0_ = (bitField0_ & ~0x00000002); + status_ = null; + if (statusBuilder_ != null) { + statusBuilder_.dispose(); + statusBuilder_ = null; + } + onChanged(); + return this; + } + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + */ + public com.google.rpc.Status.Builder getStatusBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getStatusFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + */ + public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { + if (statusBuilder_ != null) { + return statusBuilder_.getMessageOrBuilder(); + } else { + return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; + } + } + /** + * + * + *
+     * An `OK` status indicates success. Any other status indicates a failure.
+     * 
+ * + * .google.rpc.Status status = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> + getStatusFieldBuilder() { + if (statusBuilder_ == null) { + statusBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.rpc.Status, + com.google.rpc.Status.Builder, + com.google.rpc.StatusOrBuilder>(getStatus(), getParentForChildren(), isClean()); + status_ = null; + } + return statusBuilder_; + } + + private com.google.protobuf.Timestamp commitTimestamp_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + commitTimestampBuilder_; + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + * + * @return Whether the commitTimestamp field is set. + */ + public boolean hasCommitTimestamp() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + * + * @return The commitTimestamp. + */ + public com.google.protobuf.Timestamp getCommitTimestamp() { + if (commitTimestampBuilder_ == null) { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } else { + return commitTimestampBuilder_.getMessage(); + } + } + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + public Builder setCommitTimestamp(com.google.protobuf.Timestamp value) { + if (commitTimestampBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + commitTimestamp_ = value; + } else { + commitTimestampBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + public Builder setCommitTimestamp(com.google.protobuf.Timestamp.Builder builderForValue) { + if (commitTimestampBuilder_ == null) { + commitTimestamp_ = builderForValue.build(); + } else { + commitTimestampBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + public Builder mergeCommitTimestamp(com.google.protobuf.Timestamp value) { + if (commitTimestampBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0) + && commitTimestamp_ != null + && commitTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { + getCommitTimestampBuilder().mergeFrom(value); + } else { + commitTimestamp_ = value; + } + } else { + commitTimestampBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + public Builder clearCommitTimestamp() { + bitField0_ = (bitField0_ & ~0x00000004); + commitTimestamp_ = null; + if (commitTimestampBuilder_ != null) { + commitTimestampBuilder_.dispose(); + commitTimestampBuilder_ = null; + } + onChanged(); + return this; + } + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + public com.google.protobuf.Timestamp.Builder getCommitTimestampBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getCommitTimestampFieldBuilder().getBuilder(); + } + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { + if (commitTimestampBuilder_ != null) { + return commitTimestampBuilder_.getMessageOrBuilder(); + } else { + return commitTimestamp_ == null + ? com.google.protobuf.Timestamp.getDefaultInstance() + : commitTimestamp_; + } + } + /** + * + * + *
+     * The commit timestamp of the transaction that applied this batch.
+     * Present if `status` is `OK`, absent otherwise.
+     * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder> + getCommitTimestampFieldBuilder() { + if (commitTimestampBuilder_ == null) { + commitTimestampBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Timestamp, + com.google.protobuf.Timestamp.Builder, + com.google.protobuf.TimestampOrBuilder>( + getCommitTimestamp(), getParentForChildren(), isClean()); + commitTimestamp_ = null; + } + return commitTimestampBuilder_; + } + + @java.lang.Override + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchWriteResponse) + } + + // @@protoc_insertion_point(class_scope:google.spanner.v1.BatchWriteResponse) + private static final com.google.spanner.v1.BatchWriteResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.v1.BatchWriteResponse(); + } + + public static com.google.spanner.v1.BatchWriteResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public BatchWriteResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.google.spanner.v1.BatchWriteResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java new file mode 100644 index 00000000000..19b07b7205e --- /dev/null +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java @@ -0,0 +1,139 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: google/spanner/v1/spanner.proto + +package com.google.spanner.v1; + +public interface BatchWriteResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.v1.BatchWriteResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * The mutations applied in this batch. The values index into the `mutations`
+   * field in the corresponding BatchWriteRequest.
+   * 
+ * + * repeated int32 indexes = 1; + * + * @return A list containing the indexes. + */ + java.util.List getIndexesList(); + /** + * + * + *
+   * The mutations applied in this batch. The values index into the `mutations`
+   * field in the corresponding BatchWriteRequest.
+   * 
+ * + * repeated int32 indexes = 1; + * + * @return The count of indexes. + */ + int getIndexesCount(); + /** + * + * + *
+   * The mutations applied in this batch. The values index into the `mutations`
+   * field in the corresponding BatchWriteRequest.
+   * 
+ * + * repeated int32 indexes = 1; + * + * @param index The index of the element to return. + * @return The indexes at the given index. + */ + int getIndexes(int index); + + /** + * + * + *
+   * An `OK` status indicates success. Any other status indicates a failure.
+   * 
+ * + * .google.rpc.Status status = 2; + * + * @return Whether the status field is set. + */ + boolean hasStatus(); + /** + * + * + *
+   * An `OK` status indicates success. Any other status indicates a failure.
+   * 
+ * + * .google.rpc.Status status = 2; + * + * @return The status. + */ + com.google.rpc.Status getStatus(); + /** + * + * + *
+   * An `OK` status indicates success. Any other status indicates a failure.
+   * 
+ * + * .google.rpc.Status status = 2; + */ + com.google.rpc.StatusOrBuilder getStatusOrBuilder(); + + /** + * + * + *
+   * The commit timestamp of the transaction that applied this batch.
+   * Present if `status` is `OK`, absent otherwise.
+   * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + * + * @return Whether the commitTimestamp field is set. + */ + boolean hasCommitTimestamp(); + /** + * + * + *
+   * The commit timestamp of the transaction that applied this batch.
+   * Present if `status` is `OK`, absent otherwise.
+   * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + * + * @return The commitTimestamp. + */ + com.google.protobuf.Timestamp getCommitTimestamp(); + /** + * + * + *
+   * The commit timestamp of the transaction that applied this batch.
+   * Present if `status` is `OK`, absent otherwise.
+   * 
+ * + * .google.protobuf.Timestamp commit_timestamp = 3; + */ + com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder(); +} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java index d676fd87ea6..fae0074b1ca 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new BeginTransactionRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BeginTransactionRequest_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java index 9d5d7d5891b..a052d9059b4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java @@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CommitRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CommitRequest_descriptor; @@ -69,6 +64,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } private int transactionCase_ = 0; + + @SuppressWarnings("serial") private java.lang.Object transaction_; public enum TransactionCase diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java index 67704563b20..c55778357bb 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java @@ -247,5 +247,5 @@ public interface CommitRequestOrBuilder */ com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder(); - public com.google.spanner.v1.CommitRequest.TransactionCase getTransactionCase(); + com.google.spanner.v1.CommitRequest.TransactionCase getTransactionCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java index 89661b86be0..f3331b717f4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java @@ -45,11 +45,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CommitResponse(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_descriptor; @@ -116,11 +111,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CommitStats(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_CommitStats_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java index fe3fc6e7e6b..68c912c6598 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateSessionRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CreateSessionRequest_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java index f285dd8124e..26f385c994c 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DeleteSessionRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DeleteSessionRequest_descriptor; 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 c4392561ad7..3c9f88a1e4e 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 @@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ExecuteBatchDmlRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_descriptor; @@ -103,12 +98,16 @@ public interface StatementOrBuilder * *
      * Parameter names and values that bind to placeholders in the DML string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -122,12 +121,16 @@ public interface StatementOrBuilder * *
      * Parameter names and values that bind to placeholders in the DML string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -141,12 +144,16 @@ public interface StatementOrBuilder * *
      * Parameter names and values that bind to placeholders in the DML string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -161,6 +168,7 @@ public interface StatementOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -177,6 +185,7 @@ public interface StatementOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -196,6 +205,7 @@ public interface StatementOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -212,6 +222,7 @@ public interface StatementOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -232,6 +243,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -271,11 +283,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new Statement(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_descriptor; @@ -360,12 +367,16 @@ public com.google.protobuf.ByteString getSqlBytes() { * *
      * Parameter names and values that bind to placeholders in the DML string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -382,12 +393,16 @@ public boolean hasParams() { * *
      * Parameter names and values that bind to placeholders in the DML string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -404,12 +419,16 @@ public com.google.protobuf.Struct getParams() { * *
      * Parameter names and values that bind to placeholders in the DML string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -457,6 +476,7 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -485,6 +505,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -504,6 +525,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -531,6 +553,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1104,12 +1127,16 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1125,12 +1152,16 @@ public boolean hasParams() { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1150,12 +1181,16 @@ public com.google.protobuf.Struct getParams() { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1179,12 +1214,16 @@ public Builder setParams(com.google.protobuf.Struct value) { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1205,12 +1244,16 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1237,12 +1280,16 @@ public Builder mergeParams(com.google.protobuf.Struct value) { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1263,12 +1310,16 @@ public Builder clearParams() { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1284,12 +1335,16 @@ public com.google.protobuf.Struct.Builder getParamsBuilder() { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1307,12 +1362,16 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { * *
        * Parameter names and values that bind to placeholders in the DML string.
+       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
+       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
+       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1371,6 +1430,7 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1399,6 +1459,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1418,6 +1479,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1445,6 +1507,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1478,6 +1541,7 @@ public Builder clearParamTypes() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1506,6 +1570,7 @@ public java.util.Map getMutablePar * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1532,6 +1597,7 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1673,6 +1739,7 @@ public com.google.protobuf.ByteString getSessionBytes() { * *
    * Required. The transaction to use. Must be a read-write transaction.
+   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -1693,6 +1760,7 @@ public boolean hasTransaction() {
    *
    * 
    * Required. The transaction to use. Must be a read-write transaction.
+   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -1715,6 +1783,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() {
    *
    * 
    * Required. The transaction to use. Must be a read-write transaction.
+   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -1743,6 +1812,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
    * serially, such that the effects of statement `i` are visible to statement
    * `i+1`. Each statement must be a DML statement. Execution stops at the
    * first failed statement; the remaining statements are not executed.
+   *
    * Callers must provide at least one statement.
    * 
* @@ -1763,6 +1833,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -1783,6 +1854,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -1802,6 +1874,7 @@ public int getStatementsCount() { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -1821,6 +1894,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement getStatements(int * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -1843,6 +1917,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously @@ -2534,6 +2609,7 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { * *
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2553,6 +2629,7 @@ public boolean hasTransaction() {
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2578,6 +2655,7 @@ public com.google.spanner.v1.TransactionSelector getTransaction() {
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2605,6 +2683,7 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) {
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2630,6 +2709,7 @@ public Builder setTransaction(
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2660,6 +2740,7 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value)
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2684,6 +2765,7 @@ public Builder clearTransaction() {
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2703,6 +2785,7 @@ public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder()
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2726,6 +2809,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
+     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2778,6 +2862,7 @@ private void ensureStatementsIsMutable() {
      * serially, such that the effects of statement `i` are visible to statement
      * `i+1`. Each statement must be a DML statement. Execution stops at the
      * first failed statement; the remaining statements are not executed.
+     *
      * Callers must provide at least one statement.
      * 
* @@ -2801,6 +2886,7 @@ private void ensureStatementsIsMutable() { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -2823,6 +2909,7 @@ public int getStatementsCount() { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -2845,6 +2932,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement getStatements(int * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -2874,6 +2962,7 @@ public Builder setStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -2900,6 +2989,7 @@ public Builder setStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -2928,6 +3018,7 @@ public Builder addStatements(com.google.spanner.v1.ExecuteBatchDmlRequest.Statem * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -2957,6 +3048,7 @@ public Builder addStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -2983,6 +3075,7 @@ public Builder addStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3009,6 +3102,7 @@ public Builder addStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3036,6 +3130,7 @@ public Builder addAllStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3061,6 +3156,7 @@ public Builder clearStatements() { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3086,6 +3182,7 @@ public Builder removeStatements(int index) { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3105,6 +3202,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder getStateme * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3128,6 +3226,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3151,6 +3250,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3170,6 +3270,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3191,6 +3292,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -3228,6 +3330,7 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously @@ -3249,6 +3352,7 @@ public long getSeqno() { * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously @@ -3274,6 +3378,7 @@ public Builder setSeqno(long value) { * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously 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 87364106697..b0ecb6ff7ca 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 @@ -57,6 +57,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * *
    * Required. The transaction to use. Must be a read-write transaction.
+   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -74,6 +75,7 @@ public interface ExecuteBatchDmlRequestOrBuilder
    *
    * 
    * Required. The transaction to use. Must be a read-write transaction.
+   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -91,6 +93,7 @@ public interface ExecuteBatchDmlRequestOrBuilder
    *
    * 
    * Required. The transaction to use. Must be a read-write transaction.
+   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -110,6 +113,7 @@ public interface ExecuteBatchDmlRequestOrBuilder
    * serially, such that the effects of statement `i` are visible to statement
    * `i+1`. Each statement must be a DML statement. Execution stops at the
    * first failed statement; the remaining statements are not executed.
+   *
    * Callers must provide at least one statement.
    * 
* @@ -126,6 +130,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -142,6 +147,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -158,6 +164,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -175,6 +182,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. + * * Callers must provide at least one statement. *
* @@ -191,6 +199,7 @@ public interface ExecuteBatchDmlRequestOrBuilder * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java index 3e7163fe1be..b467bf5feb0 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java @@ -26,16 +26,22 @@ * of [ResultSet][google.spanner.v1.ResultSet] messages, one for each DML statement that has successfully * executed, in the same order as the statements in the request. If a statement * fails, the status in the response body identifies the cause of the failure. + * * To check for DML statements that failed, use the following approach: + * * 1. Check the status in the response message. The [google.rpc.Code][google.rpc.Code] enum * value `OK` indicates that all statements were executed successfully. * 2. If the status was not `OK`, check the number of result sets in the * response. If the response contains `N` [ResultSet][google.spanner.v1.ResultSet] messages, then * statement `N+1` in the request failed. + * * Example 1: + * * * Request: 5 DML statements, all executed successfully. * * Response: 5 [ResultSet][google.spanner.v1.ResultSet] messages, with the status `OK`. + * * Example 2: + * * * Request: 5 DML statements. The third statement has a syntax error. * * Response: 2 [ResultSet][google.spanner.v1.ResultSet] messages, and a syntax error (`INVALID_ARGUMENT`) * status. The number of [ResultSet][google.spanner.v1.ResultSet] messages indicates that the third @@ -64,11 +70,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ExecuteBatchDmlResponse(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlResponse_descriptor; @@ -96,6 +97,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -114,6 +116,7 @@ public java.util.List getResultSetsList() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -133,6 +136,7 @@ public java.util.List getResultSetsList() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -151,6 +155,7 @@ public int getResultSetsCount() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -169,6 +174,7 @@ public com.google.spanner.v1.ResultSet getResultSets(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -412,16 +418,22 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * of [ResultSet][google.spanner.v1.ResultSet] messages, one for each DML statement that has successfully * executed, in the same order as the statements in the request. If a statement * fails, the status in the response body identifies the cause of the failure. + * * To check for DML statements that failed, use the following approach: + * * 1. Check the status in the response message. The [google.rpc.Code][google.rpc.Code] enum * value `OK` indicates that all statements were executed successfully. * 2. If the status was not `OK`, check the number of result sets in the * response. If the response contains `N` [ResultSet][google.spanner.v1.ResultSet] messages, then * statement `N+1` in the request failed. + * * Example 1: + * * * Request: 5 DML statements, all executed successfully. * * Response: 5 [ResultSet][google.spanner.v1.ResultSet] messages, with the status `OK`. + * * Example 2: + * * * Request: 5 DML statements. The third statement has a syntax error. * * Response: 2 [ResultSet][google.spanner.v1.ResultSet] messages, and a syntax error (`INVALID_ARGUMENT`) * status. The number of [ResultSet][google.spanner.v1.ResultSet] messages indicates that the third @@ -688,6 +700,7 @@ private void ensureResultSetsIsMutable() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -709,6 +722,7 @@ public java.util.List getResultSetsList() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -730,6 +744,7 @@ public int getResultSetsCount() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -751,6 +766,7 @@ public com.google.spanner.v1.ResultSet getResultSets(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -778,6 +794,7 @@ public Builder setResultSets(int index, com.google.spanner.v1.ResultSet value) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -803,6 +820,7 @@ public Builder setResultSets( * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -830,6 +848,7 @@ public Builder addResultSets(com.google.spanner.v1.ResultSet value) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -857,6 +876,7 @@ public Builder addResultSets(int index, com.google.spanner.v1.ResultSet value) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -881,6 +901,7 @@ public Builder addResultSets(com.google.spanner.v1.ResultSet.Builder builderForV * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -906,6 +927,7 @@ public Builder addResultSets( * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -931,6 +953,7 @@ public Builder addAllResultSets( * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -955,6 +978,7 @@ public Builder clearResultSets() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -979,6 +1003,7 @@ public Builder removeResultSets(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -996,6 +1021,7 @@ public com.google.spanner.v1.ResultSet.Builder getResultSetsBuilder(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1017,6 +1043,7 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1039,6 +1066,7 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1057,6 +1085,7 @@ public com.google.spanner.v1.ResultSet.Builder addResultSetsBuilder() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1075,6 +1104,7 @@ public com.google.spanner.v1.ResultSet.Builder addResultSetsBuilder(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java index b2891c067a8..ac45d58c2fc 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java @@ -31,6 +31,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -46,6 +47,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -61,6 +63,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -76,6 +79,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -91,6 +95,7 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. + * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
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 70f4c8219c2..8418e41cc38 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 @@ -52,11 +52,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ExecuteSqlRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteSqlRequest_descriptor; @@ -254,20 +249,26 @@ public interface QueryOptionsOrBuilder * *
      * An option to control the selection of optimizer version.
+     *
      * This parameter allows individual queries to pick different query
      * optimizer versions.
+     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the
      * latest supported query optimizer version. If not specified, Cloud Spanner
      * uses the optimizer version set at the database level options. Any other
      * positive integer (from the list of supported optimizer versions)
      * overrides the default optimizer version for query execution.
+     *
      * The list of supported optimizer versions can be queried from
      * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+     *
      * Executing a SQL statement with an invalid optimizer version fails with
      * an `INVALID_ARGUMENT` error.
+     *
      * See
      * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
      * for more information on managing the query optimizer.
+     *
      * The `optimizer_version` statement hint has precedence over this setting.
      * 
* @@ -281,20 +282,26 @@ public interface QueryOptionsOrBuilder * *
      * An option to control the selection of optimizer version.
+     *
      * This parameter allows individual queries to pick different query
      * optimizer versions.
+     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the
      * latest supported query optimizer version. If not specified, Cloud Spanner
      * uses the optimizer version set at the database level options. Any other
      * positive integer (from the list of supported optimizer versions)
      * overrides the default optimizer version for query execution.
+     *
      * The list of supported optimizer versions can be queried from
      * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+     *
      * Executing a SQL statement with an invalid optimizer version fails with
      * an `INVALID_ARGUMENT` error.
+     *
      * See
      * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
      * for more information on managing the query optimizer.
+     *
      * The `optimizer_version` statement hint has precedence over this setting.
      * 
* @@ -309,20 +316,26 @@ public interface QueryOptionsOrBuilder * *
      * An option to control the selection of optimizer statistics package.
+     *
      * This parameter allows individual queries to use a different query
      * optimizer statistics package.
+     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the latest
      * generated statistics package. If not specified, Cloud Spanner uses
      * the statistics package set at the database level options, or the latest
      * package if the database option is not set.
+     *
      * The statistics package requested by the query has to be exempt from
      * garbage collection. This can be achieved with the following DDL
      * statement:
+     *
      * ```
      * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
      * ```
+     *
      * The list of available statistics packages can be queried from
      * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+     *
      * Executing a SQL statement with an invalid optimizer statistics package
      * or with a statistics package that allows garbage collection fails with
      * an `INVALID_ARGUMENT` error.
@@ -338,20 +351,26 @@ public interface QueryOptionsOrBuilder
      *
      * 
      * An option to control the selection of optimizer statistics package.
+     *
      * This parameter allows individual queries to use a different query
      * optimizer statistics package.
+     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the latest
      * generated statistics package. If not specified, Cloud Spanner uses
      * the statistics package set at the database level options, or the latest
      * package if the database option is not set.
+     *
      * The statistics package requested by the query has to be exempt from
      * garbage collection. This can be achieved with the following DDL
      * statement:
+     *
      * ```
      * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
      * ```
+     *
      * The list of available statistics packages can be queried from
      * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+     *
      * Executing a SQL statement with an invalid optimizer statistics package
      * or with a statistics package that allows garbage collection fails with
      * an `INVALID_ARGUMENT` error.
@@ -393,11 +412,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new QueryOptions();
     }
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-      return this.unknownFields;
-    }
-
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.SpannerProto
           .internal_static_google_spanner_v1_ExecuteSqlRequest_QueryOptions_descriptor;
@@ -422,20 +436,26 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      *
      * 
      * An option to control the selection of optimizer version.
+     *
      * This parameter allows individual queries to pick different query
      * optimizer versions.
+     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the
      * latest supported query optimizer version. If not specified, Cloud Spanner
      * uses the optimizer version set at the database level options. Any other
      * positive integer (from the list of supported optimizer versions)
      * overrides the default optimizer version for query execution.
+     *
      * The list of supported optimizer versions can be queried from
      * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+     *
      * Executing a SQL statement with an invalid optimizer version fails with
      * an `INVALID_ARGUMENT` error.
+     *
      * See
      * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
      * for more information on managing the query optimizer.
+     *
      * The `optimizer_version` statement hint has precedence over this setting.
      * 
* @@ -460,20 +480,26 @@ public java.lang.String getOptimizerVersion() { * *
      * An option to control the selection of optimizer version.
+     *
      * This parameter allows individual queries to pick different query
      * optimizer versions.
+     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the
      * latest supported query optimizer version. If not specified, Cloud Spanner
      * uses the optimizer version set at the database level options. Any other
      * positive integer (from the list of supported optimizer versions)
      * overrides the default optimizer version for query execution.
+     *
      * The list of supported optimizer versions can be queried from
      * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+     *
      * Executing a SQL statement with an invalid optimizer version fails with
      * an `INVALID_ARGUMENT` error.
+     *
      * See
      * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
      * for more information on managing the query optimizer.
+     *
      * The `optimizer_version` statement hint has precedence over this setting.
      * 
* @@ -503,20 +529,26 @@ public com.google.protobuf.ByteString getOptimizerVersionBytes() { * *
      * An option to control the selection of optimizer statistics package.
+     *
      * This parameter allows individual queries to use a different query
      * optimizer statistics package.
+     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the latest
      * generated statistics package. If not specified, Cloud Spanner uses
      * the statistics package set at the database level options, or the latest
      * package if the database option is not set.
+     *
      * The statistics package requested by the query has to be exempt from
      * garbage collection. This can be achieved with the following DDL
      * statement:
+     *
      * ```
      * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
      * ```
+     *
      * The list of available statistics packages can be queried from
      * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+     *
      * Executing a SQL statement with an invalid optimizer statistics package
      * or with a statistics package that allows garbage collection fails with
      * an `INVALID_ARGUMENT` error.
@@ -543,20 +575,26 @@ public java.lang.String getOptimizerStatisticsPackage() {
      *
      * 
      * An option to control the selection of optimizer statistics package.
+     *
      * This parameter allows individual queries to use a different query
      * optimizer statistics package.
+     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the latest
      * generated statistics package. If not specified, Cloud Spanner uses
      * the statistics package set at the database level options, or the latest
      * package if the database option is not set.
+     *
      * The statistics package requested by the query has to be exempt from
      * garbage collection. This can be achieved with the following DDL
      * statement:
+     *
      * ```
      * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
      * ```
+     *
      * The list of available statistics packages can be queried from
      * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+     *
      * Executing a SQL statement with an invalid optimizer statistics package
      * or with a statistics package that allows garbage collection fails with
      * an `INVALID_ARGUMENT` error.
@@ -959,20 +997,26 @@ public Builder mergeFrom(
        *
        * 
        * An option to control the selection of optimizer version.
+       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
+       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
+       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
+       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -996,20 +1040,26 @@ public java.lang.String getOptimizerVersion() { * *
        * An option to control the selection of optimizer version.
+       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
+       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
+       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
+       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1033,20 +1083,26 @@ public com.google.protobuf.ByteString getOptimizerVersionBytes() { * *
        * An option to control the selection of optimizer version.
+       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
+       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
+       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
+       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1069,20 +1125,26 @@ public Builder setOptimizerVersion(java.lang.String value) { * *
        * An option to control the selection of optimizer version.
+       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
+       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
+       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
+       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1101,20 +1163,26 @@ public Builder clearOptimizerVersion() { * *
        * An option to control the selection of optimizer version.
+       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
+       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
+       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
+       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
+       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1140,20 +1208,26 @@ public Builder setOptimizerVersionBytes(com.google.protobuf.ByteString value) { * *
        * An option to control the selection of optimizer statistics package.
+       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
+       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
+       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
+       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1179,20 +1253,26 @@ public java.lang.String getOptimizerStatisticsPackage() {
        *
        * 
        * An option to control the selection of optimizer statistics package.
+       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
+       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
+       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
+       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1218,20 +1298,26 @@ public com.google.protobuf.ByteString getOptimizerStatisticsPackageBytes() {
        *
        * 
        * An option to control the selection of optimizer statistics package.
+       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
+       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
+       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
+       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1256,20 +1342,26 @@ public Builder setOptimizerStatisticsPackage(java.lang.String value) {
        *
        * 
        * An option to control the selection of optimizer statistics package.
+       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
+       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
+       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
+       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1290,20 +1382,26 @@ public Builder clearOptimizerStatisticsPackage() {
        *
        * 
        * An option to control the selection of optimizer statistics package.
+       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
+       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
+       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
+       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
+       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
+       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1451,11 +1549,14 @@ public com.google.protobuf.ByteString getSessionBytes() {
    *
    * 
    * The transaction to use.
+   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
+   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
+   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -1472,11 +1573,14 @@ public boolean hasTransaction() { * *
    * The transaction to use.
+   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
+   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
+   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -1495,11 +1599,14 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { * *
    * The transaction to use.
+   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
+   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
+   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -1570,13 +1677,17 @@ public com.google.protobuf.ByteString getSqlBytes() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -1593,13 +1704,17 @@ public boolean hasParams() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -1616,13 +1731,17 @@ public com.google.protobuf.Struct getParams() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -1669,6 +1788,7 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1697,6 +1817,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1716,6 +1837,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1743,6 +1865,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1856,10 +1979,12 @@ public com.google.protobuf.ByteString getPartitionToken() { * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. + * * Required for DML statements. Ignored for queries. *
* @@ -1980,6 +2105,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( *
    * If this is for a partitioned query and this field is set to `true`, the
    * request will be executed via Spanner independent compute resources.
+   *
    * If the field is set to `true` but the request does not set
    * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
    * 
@@ -2779,11 +2905,14 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2799,11 +2928,14 @@ public boolean hasTransaction() { * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2825,11 +2957,14 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2853,11 +2988,14 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) { * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2879,11 +3017,14 @@ public Builder setTransaction( * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2910,11 +3051,14 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value) * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2935,11 +3079,14 @@ public Builder clearTransaction() { * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2955,11 +3102,14 @@ public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder() * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2979,11 +3129,14 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * *
      * The transaction to use.
+     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
+     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
+     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -3123,13 +3276,17 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3145,13 +3302,17 @@ public boolean hasParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3171,13 +3332,17 @@ public com.google.protobuf.Struct getParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3201,13 +3366,17 @@ public Builder setParams(com.google.protobuf.Struct value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3228,13 +3397,17 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3261,13 +3434,17 @@ public Builder mergeParams(com.google.protobuf.Struct value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3288,13 +3465,17 @@ public Builder clearParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3310,13 +3491,17 @@ public com.google.protobuf.Struct.Builder getParamsBuilder() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3334,13 +3519,17 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3398,6 +3587,7 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3426,6 +3616,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3445,6 +3636,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3472,6 +3664,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3505,6 +3698,7 @@ public Builder clearParamTypes() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3533,6 +3727,7 @@ public java.util.Map getMutablePar * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3559,6 +3754,7 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3818,10 +4014,12 @@ public Builder clearPartitionToken() { * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. + * * Required for DML statements. Ignored for queries. *
* @@ -3840,10 +4038,12 @@ public long getSeqno() { * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. + * * Required for DML statements. Ignored for queries. *
* @@ -3866,10 +4066,12 @@ public Builder setSeqno(long value) { * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. + * * Required for DML statements. Ignored for queries. *
* @@ -4260,6 +4462,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( *
      * If this is for a partitioned query and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
+     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
@@ -4278,6 +4481,7 @@ public boolean getDataBoostEnabled() { *
      * If this is for a partitioned query and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
+     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
@@ -4300,6 +4504,7 @@ public Builder setDataBoostEnabled(boolean value) { *
      * If this is for a partitioned query and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
+     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
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 832c2f3c503..1bfb3f43749 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 @@ -57,11 +57,14 @@ public interface ExecuteSqlRequestOrBuilder * *
    * The transaction to use.
+   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
+   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
+   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -75,11 +78,14 @@ public interface ExecuteSqlRequestOrBuilder * *
    * The transaction to use.
+   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
+   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
+   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -93,11 +99,14 @@ public interface ExecuteSqlRequestOrBuilder * *
    * The transaction to use.
+   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
+   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
+   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -135,13 +144,17 @@ public interface ExecuteSqlRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -155,13 +168,17 @@ public interface ExecuteSqlRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -175,13 +192,17 @@ public interface ExecuteSqlRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -196,6 +217,7 @@ public interface ExecuteSqlRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -212,6 +234,7 @@ public interface ExecuteSqlRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -231,6 +254,7 @@ public interface ExecuteSqlRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -247,6 +271,7 @@ public interface ExecuteSqlRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -267,6 +292,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -347,10 +373,12 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. + * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. + * * Required for DML statements. Ignored for queries. *
* @@ -436,6 +464,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( *
    * If this is for a partitioned query and this field is set to `true`, the
    * request will be executed via Spanner independent compute resources.
+   *
    * If the field is set to `true` but the request does not set
    * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
    * 
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java index cef307ed07e..0a78d665a60 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetSessionRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_GetSessionRequest_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java index 2848ab4bdd3..6eb2bd0e2ac 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java @@ -23,64 +23,91 @@ * *
  * KeyRange represents a range of rows in a table or index.
+ *
  * A range has a start key and an end key. These keys can be open or
  * closed, indicating if the range includes rows with that key.
+ *
  * Keys are represented by lists, where the ith value in the list
  * corresponds to the ith component of the table or index primary key.
  * Individual values are encoded as described
  * [here][google.spanner.v1.TypeCode].
+ *
  * For example, consider the following table definition:
+ *
  *     CREATE TABLE UserEvents (
  *       UserName STRING(MAX),
  *       EventDate STRING(10)
  *     ) PRIMARY KEY(UserName, EventDate);
+ *
  * The following keys name rows in this table:
+ *
  *     ["Bob", "2014-09-23"]
  *     ["Alfred", "2015-06-12"]
+ *
  * Since the `UserEvents` table's `PRIMARY KEY` clause names two
  * columns, each `UserEvents` key has two elements; the first is the
  * `UserName`, and the second is the `EventDate`.
+ *
  * Key ranges with multiple components are interpreted
  * lexicographically by component using the table or index key's declared
  * sort order. For example, the following range returns all events for
  * user `"Bob"` that occurred in the year 2015:
+ *
  *     "start_closed": ["Bob", "2015-01-01"]
  *     "end_closed": ["Bob", "2015-12-31"]
+ *
  * Start and end keys can omit trailing key components. This affects the
  * inclusion and exclusion of rows that exactly match the provided key
  * components: if the key is closed, then rows that exactly match the
  * provided components are included; if the key is open, then rows
  * that exactly match are not included.
+ *
  * For example, the following range includes all events for `"Bob"` that
  * occurred during and after the year 2000:
+ *
  *     "start_closed": ["Bob", "2000-01-01"]
  *     "end_closed": ["Bob"]
+ *
  * The next example retrieves all events for `"Bob"`:
+ *
  *     "start_closed": ["Bob"]
  *     "end_closed": ["Bob"]
+ *
  * To retrieve events before the year 2000:
+ *
  *     "start_closed": ["Bob"]
  *     "end_open": ["Bob", "2000-01-01"]
+ *
  * The following range includes all rows in the table:
+ *
  *     "start_closed": []
  *     "end_closed": []
+ *
  * This range returns all users whose `UserName` begins with any
  * character from A to C:
+ *
  *     "start_closed": ["A"]
  *     "end_open": ["D"]
+ *
  * This range returns all users whose `UserName` begins with B:
+ *
  *     "start_closed": ["B"]
  *     "end_open": ["C"]
+ *
  * Key ranges honor column sort order. For example, suppose a table is
  * defined as follows:
+ *
  *     CREATE TABLE DescendingSortedTable {
  *       Key INT64,
  *       ...
  *     ) PRIMARY KEY(Key DESC);
+ *
  * The following range retrieves all rows with key values between 1
  * and 100 inclusive:
+ *
  *     "start_closed": ["100"]
  *     "end_closed": ["1"]
+ *
  * Note that 100 is passed as the start, and 1 is passed as the end,
  * because `Key` is a descending column in the schema.
  * 
@@ -105,11 +132,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new KeyRange(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.KeysProto.internal_static_google_spanner_v1_KeyRange_descriptor; } @@ -124,6 +146,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } private int startKeyTypeCase_ = 0; + + @SuppressWarnings("serial") private java.lang.Object startKeyType_; public enum StartKeyTypeCase @@ -171,6 +195,8 @@ public StartKeyTypeCase getStartKeyTypeCase() { } private int endKeyTypeCase_ = 0; + + @SuppressWarnings("serial") private java.lang.Object endKeyType_; public enum EndKeyTypeCase @@ -664,64 +690,91 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * *
    * KeyRange represents a range of rows in a table or index.
+   *
    * A range has a start key and an end key. These keys can be open or
    * closed, indicating if the range includes rows with that key.
+   *
    * Keys are represented by lists, where the ith value in the list
    * corresponds to the ith component of the table or index primary key.
    * Individual values are encoded as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * For example, consider the following table definition:
+   *
    *     CREATE TABLE UserEvents (
    *       UserName STRING(MAX),
    *       EventDate STRING(10)
    *     ) PRIMARY KEY(UserName, EventDate);
+   *
    * The following keys name rows in this table:
+   *
    *     ["Bob", "2014-09-23"]
    *     ["Alfred", "2015-06-12"]
+   *
    * Since the `UserEvents` table's `PRIMARY KEY` clause names two
    * columns, each `UserEvents` key has two elements; the first is the
    * `UserName`, and the second is the `EventDate`.
+   *
    * Key ranges with multiple components are interpreted
    * lexicographically by component using the table or index key's declared
    * sort order. For example, the following range returns all events for
    * user `"Bob"` that occurred in the year 2015:
+   *
    *     "start_closed": ["Bob", "2015-01-01"]
    *     "end_closed": ["Bob", "2015-12-31"]
+   *
    * Start and end keys can omit trailing key components. This affects the
    * inclusion and exclusion of rows that exactly match the provided key
    * components: if the key is closed, then rows that exactly match the
    * provided components are included; if the key is open, then rows
    * that exactly match are not included.
+   *
    * For example, the following range includes all events for `"Bob"` that
    * occurred during and after the year 2000:
+   *
    *     "start_closed": ["Bob", "2000-01-01"]
    *     "end_closed": ["Bob"]
+   *
    * The next example retrieves all events for `"Bob"`:
+   *
    *     "start_closed": ["Bob"]
    *     "end_closed": ["Bob"]
+   *
    * To retrieve events before the year 2000:
+   *
    *     "start_closed": ["Bob"]
    *     "end_open": ["Bob", "2000-01-01"]
+   *
    * The following range includes all rows in the table:
+   *
    *     "start_closed": []
    *     "end_closed": []
+   *
    * This range returns all users whose `UserName` begins with any
    * character from A to C:
+   *
    *     "start_closed": ["A"]
    *     "end_open": ["D"]
+   *
    * This range returns all users whose `UserName` begins with B:
+   *
    *     "start_closed": ["B"]
    *     "end_open": ["C"]
+   *
    * Key ranges honor column sort order. For example, suppose a table is
    * defined as follows:
+   *
    *     CREATE TABLE DescendingSortedTable {
    *       Key INT64,
    *       ...
    *     ) PRIMARY KEY(Key DESC);
+   *
    * The following range retrieves all rows with key values between 1
    * and 100 inclusive:
+   *
    *     "start_closed": ["100"]
    *     "end_closed": ["1"]
+   *
    * Note that 100 is passed as the start, and 1 is passed as the end,
    * because `Key` is a descending column in the schema.
    * 
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java index c6a5e89496f..77a2acdc324 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java @@ -175,7 +175,7 @@ public interface KeyRangeOrBuilder */ com.google.protobuf.ListValueOrBuilder getEndOpenOrBuilder(); - public com.google.spanner.v1.KeyRange.StartKeyTypeCase getStartKeyTypeCase(); + com.google.spanner.v1.KeyRange.StartKeyTypeCase getStartKeyTypeCase(); - public com.google.spanner.v1.KeyRange.EndKeyTypeCase getEndKeyTypeCase(); + com.google.spanner.v1.KeyRange.EndKeyTypeCase getEndKeyTypeCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java index fca1f9f6fbb..d89ccd74fcb 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java @@ -25,6 +25,7 @@ * `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All * the keys are expected to be in the same table or index. The keys need * not be sorted in any particular way. + * * If the same key is specified multiple times in the set (for example * if two ranges, two keys, or a key and a range overlap), Cloud Spanner * behaves as if the key were only specified once. @@ -53,11 +54,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new KeySet(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.KeysProto.internal_static_google_spanner_v1_KeySet_descriptor; } @@ -438,6 +434,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All * the keys are expected to be in the same table or index. The keys need * not be sorted in any particular way. + * * If the same key is specified multiple times in the set (for example * if two ranges, two keys, or a key and a range overlap), Cloud Spanner * behaves as if the key were only specified once. diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java index fb6f3e29725..067526b246f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java @@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ListSessionsRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ListSessionsRequest_descriptor; @@ -208,8 +203,11 @@ public com.google.protobuf.ByteString getPageTokenBytes() { *
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
+   *
    *   * `labels.key` where key is the name of a label
+   *
    * Some examples of using filters are:
+   *
    *   * `labels.env:*` --> The session has the label "env".
    *   * `labels.env:dev` --> The session has the label "env" and the value of
    *                        the label contains the string "dev".
@@ -237,8 +235,11 @@ public java.lang.String getFilter() {
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
+   *
    *   * `labels.key` where key is the name of a label
+   *
    * Some examples of using filters are:
+   *
    *   * `labels.env:*` --> The session has the label "env".
    *   * `labels.env:dev` --> The session has the label "env" and the value of
    *                        the label contains the string "dev".
@@ -967,8 +968,11 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
@@ -995,8 +999,11 @@ public java.lang.String getFilter() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
@@ -1023,8 +1030,11 @@ public com.google.protobuf.ByteString getFilterBytes() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
@@ -1050,8 +1060,11 @@ public Builder setFilter(java.lang.String value) {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
@@ -1073,8 +1086,11 @@ public Builder clearFilter() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
+     *
      *   * `labels.key` where key is the name of a label
+     *
      * Some examples of using filters are:
+     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java
index 98c63809bbc..9588536d71d 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java
@@ -101,8 +101,11 @@ public interface ListSessionsRequestOrBuilder
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
+   *
    *   * `labels.key` where key is the name of a label
+   *
    * Some examples of using filters are:
+   *
    *   * `labels.env:*` --> The session has the label "env".
    *   * `labels.env:dev` --> The session has the label "env" and the value of
    *                        the label contains the string "dev".
@@ -119,8 +122,11 @@ public interface ListSessionsRequestOrBuilder
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
+   *
    *   * `labels.key` where key is the name of a label
+   *
    * Some examples of using filters are:
+   *
    *   * `labels.env:*` --> The session has the label "env".
    *   * `labels.env:dev` --> The session has the label "env" and the value of
    *                        the label contains the string "dev".
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java
index 204cd5a790f..820f48dcd7f 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListSessionsResponse();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_ListSessionsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java
index 9c06e66de8f..96d2dcea3ea 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java
@@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new Mutation();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.MutationProto
         .internal_static_google_spanner_v1_Mutation_descriptor;
@@ -101,6 +96,7 @@ public interface WriteOrBuilder
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -116,6 +112,7 @@ public interface WriteOrBuilder
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -131,6 +128,7 @@ public interface WriteOrBuilder
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -147,6 +145,7 @@ public interface WriteOrBuilder
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -267,7 +266,7 @@ private Write(com.google.protobuf.GeneratedMessageV3.Builder builder) {
 
     private Write() {
       table_ = "";
-      columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      columns_ = com.google.protobuf.LazyStringArrayList.emptyList();
       values_ = java.util.Collections.emptyList();
     }
 
@@ -277,11 +276,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new Write();
     }
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-      return this.unknownFields;
-    }
-
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.MutationProto
           .internal_static_google_spanner_v1_Mutation_Write_descriptor;
@@ -351,12 +345,14 @@ public com.google.protobuf.ByteString getTableBytes() {
     public static final int COLUMNS_FIELD_NUMBER = 2;
 
     @SuppressWarnings("serial")
-    private com.google.protobuf.LazyStringList columns_;
+    private com.google.protobuf.LazyStringArrayList columns_ =
+        com.google.protobuf.LazyStringArrayList.emptyList();
     /**
      *
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -374,6 +370,7 @@ public com.google.protobuf.ProtocolStringList getColumnsList() {
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -391,6 +388,7 @@ public int getColumnsCount() {
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -409,6 +407,7 @@ public java.lang.String getColumns(int index) {
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -757,8 +756,7 @@ public Builder clear() {
         super.clear();
         bitField0_ = 0;
         table_ = "";
-        columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
-        bitField0_ = (bitField0_ & ~0x00000002);
+        columns_ = com.google.protobuf.LazyStringArrayList.emptyList();
         if (valuesBuilder_ == null) {
           values_ = java.util.Collections.emptyList();
         } else {
@@ -802,11 +800,6 @@ public com.google.spanner.v1.Mutation.Write buildPartial() {
       }
 
       private void buildPartialRepeatedFields(com.google.spanner.v1.Mutation.Write result) {
-        if (((bitField0_ & 0x00000002) != 0)) {
-          columns_ = columns_.getUnmodifiableView();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        }
-        result.columns_ = columns_;
         if (valuesBuilder_ == null) {
           if (((bitField0_ & 0x00000004) != 0)) {
             values_ = java.util.Collections.unmodifiableList(values_);
@@ -823,6 +816,10 @@ private void buildPartial0(com.google.spanner.v1.Mutation.Write result) {
         if (((from_bitField0_ & 0x00000001) != 0)) {
           result.table_ = table_;
         }
+        if (((from_bitField0_ & 0x00000002) != 0)) {
+          columns_.makeImmutable();
+          result.columns_ = columns_;
+        }
       }
 
       @java.lang.Override
@@ -880,7 +877,7 @@ public Builder mergeFrom(com.google.spanner.v1.Mutation.Write other) {
         if (!other.columns_.isEmpty()) {
           if (columns_.isEmpty()) {
             columns_ = other.columns_;
-            bitField0_ = (bitField0_ & ~0x00000002);
+            bitField0_ |= 0x00000002;
           } else {
             ensureColumnsIsMutable();
             columns_.addAll(other.columns_);
@@ -1090,20 +1087,21 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) {
         return this;
       }
 
-      private com.google.protobuf.LazyStringList columns_ =
-          com.google.protobuf.LazyStringArrayList.EMPTY;
+      private com.google.protobuf.LazyStringArrayList columns_ =
+          com.google.protobuf.LazyStringArrayList.emptyList();
 
       private void ensureColumnsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
+        if (!columns_.isModifiable()) {
           columns_ = new com.google.protobuf.LazyStringArrayList(columns_);
-          bitField0_ |= 0x00000002;
         }
+        bitField0_ |= 0x00000002;
       }
       /**
        *
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1114,13 +1112,15 @@ private void ensureColumnsIsMutable() {
        * @return A list containing the columns.
        */
       public com.google.protobuf.ProtocolStringList getColumnsList() {
-        return columns_.getUnmodifiableView();
+        columns_.makeImmutable();
+        return columns_;
       }
       /**
        *
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1138,6 +1138,7 @@ public int getColumnsCount() {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1156,6 +1157,7 @@ public java.lang.String getColumns(int index) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1174,6 +1176,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1191,6 +1194,7 @@ public Builder setColumns(int index, java.lang.String value) {
         }
         ensureColumnsIsMutable();
         columns_.set(index, value);
+        bitField0_ |= 0x00000002;
         onChanged();
         return this;
       }
@@ -1199,6 +1203,7 @@ public Builder setColumns(int index, java.lang.String value) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1215,6 +1220,7 @@ public Builder addColumns(java.lang.String value) {
         }
         ensureColumnsIsMutable();
         columns_.add(value);
+        bitField0_ |= 0x00000002;
         onChanged();
         return this;
       }
@@ -1223,6 +1229,7 @@ public Builder addColumns(java.lang.String value) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1236,6 +1243,7 @@ public Builder addColumns(java.lang.String value) {
       public Builder addAllColumns(java.lang.Iterable values) {
         ensureColumnsIsMutable();
         com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columns_);
+        bitField0_ |= 0x00000002;
         onChanged();
         return this;
       }
@@ -1244,6 +1252,7 @@ public Builder addAllColumns(java.lang.Iterable values) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1254,8 +1263,9 @@ public Builder addAllColumns(java.lang.Iterable values) {
        * @return This builder for chaining.
        */
       public Builder clearColumns() {
-        columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        columns_ = com.google.protobuf.LazyStringArrayList.emptyList();
         bitField0_ = (bitField0_ & ~0x00000002);
+        ;
         onChanged();
         return this;
       }
@@ -1264,6 +1274,7 @@ public Builder clearColumns() {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
+       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1281,6 +1292,7 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) {
         checkByteStringIsUtf8(value);
         ensureColumnsIsMutable();
         columns_.add(value);
+        bitField0_ |= 0x00000002;
         onChanged();
         return this;
       }
@@ -1930,11 +1942,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new Delete();
     }
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-      return this.unknownFields;
-    }
-
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.MutationProto
           .internal_static_google_spanner_v1_Mutation_Delete_descriptor;
@@ -2841,6 +2848,8 @@ public com.google.spanner.v1.Mutation.Delete getDefaultInstanceForType() {
   }
 
   private int operationCase_ = 0;
+
+  @SuppressWarnings("serial")
   private java.lang.Object operation_;
 
   public enum OperationCase
@@ -3012,6 +3021,7 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() {
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
+   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -3032,6 +3042,7 @@ public boolean hasInsertOrUpdate() {
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
+   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -3055,6 +3066,7 @@ public com.google.spanner.v1.Mutation.Write getInsertOrUpdate() {
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
+   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -3079,6 +3091,7 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder(
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
+   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -3101,6 +3114,7 @@ public boolean hasReplace() {
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
+   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -3126,6 +3140,7 @@ public com.google.spanner.v1.Mutation.Write getReplace() {
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
+   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -4154,6 +4169,7 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4174,6 +4190,7 @@ public boolean hasInsertOrUpdate() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4204,6 +4221,7 @@ public com.google.spanner.v1.Mutation.Write getInsertOrUpdate() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4231,6 +4249,7 @@ public Builder setInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4255,6 +4274,7 @@ public Builder setInsertOrUpdate(com.google.spanner.v1.Mutation.Write.Builder bu
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4292,6 +4312,7 @@ public Builder mergeInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4322,6 +4343,7 @@ public Builder clearInsertOrUpdate() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4339,6 +4361,7 @@ public com.google.spanner.v1.Mutation.Write.Builder getInsertOrUpdateBuilder() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4364,6 +4387,7 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder(
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
+     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4408,6 +4432,7 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder(
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4430,6 +4455,7 @@ public boolean hasReplace() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4462,6 +4488,7 @@ public com.google.spanner.v1.Mutation.Write getReplace() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4491,6 +4518,7 @@ public Builder setReplace(com.google.spanner.v1.Mutation.Write value) {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4517,6 +4545,7 @@ public Builder setReplace(com.google.spanner.v1.Mutation.Write.Builder builderFo
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4556,6 +4585,7 @@ public Builder mergeReplace(com.google.spanner.v1.Mutation.Write value) {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4588,6 +4618,7 @@ public Builder clearReplace() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4607,6 +4638,7 @@ public com.google.spanner.v1.Mutation.Write.Builder getReplaceBuilder() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4634,6 +4666,7 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getReplaceOrBuilder() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
+     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java
index c91b2bbb83f..f448af6710f 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java
@@ -106,6 +106,7 @@ public interface MutationOrBuilder
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
+   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -123,6 +124,7 @@ public interface MutationOrBuilder
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
+   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -140,6 +142,7 @@ public interface MutationOrBuilder
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
+   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -157,6 +160,7 @@ public interface MutationOrBuilder
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
+   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -176,6 +180,7 @@ public interface MutationOrBuilder
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
+   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -195,6 +200,7 @@ public interface MutationOrBuilder
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
+   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -243,5 +249,5 @@ public interface MutationOrBuilder
    */
   com.google.spanner.v1.Mutation.DeleteOrBuilder getDeleteOrBuilder();
 
-  public com.google.spanner.v1.Mutation.OperationCase getOperationCase();
+  com.google.spanner.v1.Mutation.OperationCase getOperationCase();
 }
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
index a1706fc4cd1..ca64bf3a9b8 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
@@ -51,24 +51,24 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
       "\n google/spanner/v1/mutation.proto\022\021goog"
           + "le.spanner.v1\032\037google/api/field_behavior"
           + ".proto\032\034google/protobuf/struct.proto\032\034go"
-          + "ogle/spanner/v1/keys.proto\"\325\003\n\010Mutation\022"
+          + "ogle/spanner/v1/keys.proto\"\330\003\n\010Mutation\022"
           + "3\n\006insert\030\001 \001(\0132!.google.spanner.v1.Muta"
           + "tion.WriteH\000\0223\n\006update\030\002 \001(\0132!.google.sp"
           + "anner.v1.Mutation.WriteH\000\022=\n\020insert_or_u"
           + "pdate\030\003 \001(\0132!.google.spanner.v1.Mutation"
           + ".WriteH\000\0224\n\007replace\030\004 \001(\0132!.google.spann"
           + "er.v1.Mutation.WriteH\000\0224\n\006delete\030\005 \001(\0132\""
-          + ".google.spanner.v1.Mutation.DeleteH\000\032X\n\005"
-          + "Write\022\022\n\005table\030\001 \001(\tB\003\340A\002\022\017\n\007columns\030\002 \003"
-          + "(\t\022*\n\006values\030\003 \003(\0132\032.google.protobuf.Lis"
-          + "tValue\032M\n\006Delete\022\022\n\005table\030\001 \001(\tB\003\340A\002\022/\n\007"
-          + "key_set\030\002 \001(\0132\031.google.spanner.v1.KeySet"
-          + "B\003\340A\002B\013\n\toperationB\260\001\n\025com.google.spanne"
-          + "r.v1B\rMutationProtoP\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::V1b\006p"
-          + "roto3"
+          + ".google.spanner.v1.Mutation.DeleteH\000\032Y\n\005"
+          + "Write\022\023\n\005table\030\001 \001(\tB\004\342A\001\002\022\017\n\007columns\030\002 "
+          + "\003(\t\022*\n\006values\030\003 \003(\0132\032.google.protobuf.Li"
+          + "stValue\032O\n\006Delete\022\023\n\005table\030\001 \001(\tB\004\342A\001\002\0220"
+          + "\n\007key_set\030\002 \001(\0132\031.google.spanner.v1.KeyS"
+          + "etB\004\342A\001\002B\013\n\toperationB\260\001\n\025com.google.spa"
+          + "nner.v1B\rMutationProtoP\001Z5cloud.google.c"
+          + "om/go/spanner/apiv1/spannerpb;spannerpb\252"
+          + "\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Cloud"
+          + "\\Spanner\\V1\352\002\032Google::Cloud::Spanner::V1"
+          + "b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java
index 4453ef0c119..04457063afb 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java
@@ -50,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new PartialResultSet();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.ResultSetProto
         .internal_static_google_spanner_v1_PartialResultSet_descriptor;
@@ -136,13 +131,16 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() {
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -151,27 +149,37 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() {
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -187,6 +195,7 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() {
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -207,13 +216,16 @@ public java.util.List getValuesList() {
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -222,27 +234,37 @@ public java.util.List getValuesList() {
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -258,6 +280,7 @@ public java.util.List getValuesList() {
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -278,13 +301,16 @@ public java.util.List getValuesOrB
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -293,27 +319,37 @@ public java.util.List getValuesOrB
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -329,6 +365,7 @@ public java.util.List getValuesOrB
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -349,13 +386,16 @@ public int getValuesCount() {
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -364,27 +404,37 @@ public int getValuesCount() {
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -400,6 +450,7 @@ public int getValuesCount() {
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -420,13 +471,16 @@ public com.google.protobuf.Value getValues(int index) {
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -435,27 +489,37 @@ public com.google.protobuf.Value getValues(int index) {
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -471,6 +535,7 @@ public com.google.protobuf.Value getValues(int index) {
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -1296,13 +1361,16 @@ private void ensureValuesIsMutable() {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1311,27 +1379,37 @@ private void ensureValuesIsMutable() {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1347,6 +1425,7 @@ private void ensureValuesIsMutable() {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1370,13 +1449,16 @@ public java.util.List getValuesList() {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1385,27 +1467,37 @@ public java.util.List getValuesList() {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1421,6 +1513,7 @@ public java.util.List getValuesList() {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1444,13 +1537,16 @@ public int getValuesCount() {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1459,27 +1555,37 @@ public int getValuesCount() {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1495,6 +1601,7 @@ public int getValuesCount() {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1518,13 +1625,16 @@ public com.google.protobuf.Value getValues(int index) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1533,27 +1643,37 @@ public com.google.protobuf.Value getValues(int index) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1569,6 +1689,7 @@ public com.google.protobuf.Value getValues(int index) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1598,13 +1719,16 @@ public Builder setValues(int index, com.google.protobuf.Value value) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1613,27 +1737,37 @@ public Builder setValues(int index, com.google.protobuf.Value value) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1649,6 +1783,7 @@ public Builder setValues(int index, com.google.protobuf.Value value) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1675,13 +1810,16 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1690,27 +1828,37 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1726,6 +1874,7 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1755,13 +1904,16 @@ public Builder addValues(com.google.protobuf.Value value) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1770,27 +1922,37 @@ public Builder addValues(com.google.protobuf.Value value) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1806,6 +1968,7 @@ public Builder addValues(com.google.protobuf.Value value) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1835,13 +1998,16 @@ public Builder addValues(int index, com.google.protobuf.Value value) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1850,27 +2016,37 @@ public Builder addValues(int index, com.google.protobuf.Value value) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1886,6 +2062,7 @@ public Builder addValues(int index, com.google.protobuf.Value value) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1912,13 +2089,16 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1927,27 +2107,37 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1963,6 +2153,7 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1989,13 +2180,16 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2004,27 +2198,37 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2040,6 +2244,7 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -2066,13 +2271,16 @@ public Builder addAllValues(java.lang.Iterable getValuesOrB
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2453,27 +2731,37 @@ public java.util.List getValuesOrB
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2489,6 +2777,7 @@ public java.util.List getValuesOrB
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -2508,13 +2797,16 @@ public com.google.protobuf.Value.Builder addValuesBuilder() {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2523,27 +2815,37 @@ public com.google.protobuf.Value.Builder addValuesBuilder() {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2559,6 +2861,7 @@ public com.google.protobuf.Value.Builder addValuesBuilder() {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -2579,13 +2882,16 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
+     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
+     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2594,27 +2900,37 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
+     *
      * Some examples of merging:
+     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
+     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
+     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2630,6 +2946,7 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
+     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java
index 60b851170fa..d0fb0a05c77 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java
@@ -70,13 +70,16 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -85,27 +88,37 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -121,6 +134,7 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -138,13 +152,16 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -153,27 +170,37 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -189,6 +216,7 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -206,13 +234,16 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -221,27 +252,37 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -257,6 +298,7 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -274,13 +316,16 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -289,27 +334,37 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -325,6 +380,7 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -342,13 +398,16 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
+   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
+   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
+   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -357,27 +416,37 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
+   *
    * Some examples of merging:
+   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
+   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
+   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
+   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -393,6 +462,7 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
+   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java
index c052325fad6..c25d69935af 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new Partition();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_Partition_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java
index fb704ea89af..52c32ec4de8 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java
@@ -46,11 +46,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new PartitionOptions();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_PartitionOptions_descriptor;
@@ -74,6 +69,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
    * 
    * **Note:** This hint is currently ignored by PartitionQuery and
    * PartitionRead requests.
+   *
    * The desired data size for each partition generated.  The default for this
    * option is currently 1 GiB.  This is only a hint. The actual size of each
    * partition may be smaller or larger than this size request.
@@ -96,6 +92,7 @@ public long getPartitionSizeBytes() {
    * 
    * **Note:** This hint is currently ignored by PartitionQuery and
    * PartitionRead requests.
+   *
    * The desired maximum number of partitions to return.  For example, this may
    * be set to the number of workers available.  The default for this option
    * is currently 10,000. The maximum value is currently 200,000.  This is only
@@ -480,6 +477,7 @@ public Builder mergeFrom(
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
+     *
      * The desired data size for each partition generated.  The default for this
      * option is currently 1 GiB.  This is only a hint. The actual size of each
      * partition may be smaller or larger than this size request.
@@ -499,6 +497,7 @@ public long getPartitionSizeBytes() {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
+     *
      * The desired data size for each partition generated.  The default for this
      * option is currently 1 GiB.  This is only a hint. The actual size of each
      * partition may be smaller or larger than this size request.
@@ -522,6 +521,7 @@ public Builder setPartitionSizeBytes(long value) {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
+     *
      * The desired data size for each partition generated.  The default for this
      * option is currently 1 GiB.  This is only a hint. The actual size of each
      * partition may be smaller or larger than this size request.
@@ -545,6 +545,7 @@ public Builder clearPartitionSizeBytes() {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
+     *
      * The desired maximum number of partitions to return.  For example, this may
      * be set to the number of workers available.  The default for this option
      * is currently 10,000. The maximum value is currently 200,000.  This is only
@@ -566,6 +567,7 @@ public long getMaxPartitions() {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
+     *
      * The desired maximum number of partitions to return.  For example, this may
      * be set to the number of workers available.  The default for this option
      * is currently 10,000. The maximum value is currently 200,000.  This is only
@@ -591,6 +593,7 @@ public Builder setMaxPartitions(long value) {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
+     *
      * The desired maximum number of partitions to return.  For example, this may
      * be set to the number of workers available.  The default for this option
      * is currently 10,000. The maximum value is currently 200,000.  This is only
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java
index e1461014cb9..07d763cbf90 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java
@@ -29,6 +29,7 @@ public interface PartitionOptionsOrBuilder
    * 
    * **Note:** This hint is currently ignored by PartitionQuery and
    * PartitionRead requests.
+   *
    * The desired data size for each partition generated.  The default for this
    * option is currently 1 GiB.  This is only a hint. The actual size of each
    * partition may be smaller or larger than this size request.
@@ -46,6 +47,7 @@ public interface PartitionOptionsOrBuilder
    * 
    * **Note:** This hint is currently ignored by PartitionQuery and
    * PartitionRead requests.
+   *
    * The desired maximum number of partitions to return.  For example, this may
    * be set to the number of workers available.  The default for this option
    * is currently 10,000. The maximum value is currently 200,000.  This is only
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java
index bb5809c2692..47b4bcfc6a2 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new PartitionQueryRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_PartitionQueryRequest_descriptor;
@@ -201,6 +196,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
    * union operator conceptually divides one or more tables into multiple
    * splits, remotely evaluates a subquery independently on each split, and
    * then unions all results.
+   *
    * This must not contain DML commands, such as INSERT, UPDATE, or
    * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
    * PartitionedDml transaction for large, partition-friendly DML operations.
@@ -232,6 +228,7 @@ public java.lang.String getSql() {
    * union operator conceptually divides one or more tables into multiple
    * splits, remotely evaluates a subquery independently on each split, and
    * then unions all results.
+   *
    * This must not contain DML commands, such as INSERT, UPDATE, or
    * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
    * PartitionedDml transaction for large, partition-friendly DML operations.
@@ -261,12 +258,16 @@ public com.google.protobuf.ByteString getSqlBytes() {
    *
    * 
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -283,12 +284,16 @@ public boolean hasParams() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -305,12 +310,16 @@ public com.google.protobuf.Struct getParams() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -357,6 +366,7 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -385,6 +395,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -404,6 +415,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -431,6 +443,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1340,6 +1353,7 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. + * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1370,6 +1384,7 @@ public java.lang.String getSql() { * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. + * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1400,6 +1415,7 @@ public com.google.protobuf.ByteString getSqlBytes() { * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. + * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1429,6 +1445,7 @@ public Builder setSql(java.lang.String value) { * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. + * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1454,6 +1471,7 @@ public Builder clearSql() { * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. + * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1486,12 +1504,16 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1507,12 +1529,16 @@ public boolean hasParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1532,12 +1558,16 @@ public com.google.protobuf.Struct getParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1561,12 +1591,16 @@ public Builder setParams(com.google.protobuf.Struct value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1587,12 +1621,16 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1619,12 +1657,16 @@ public Builder mergeParams(com.google.protobuf.Struct value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1645,12 +1687,16 @@ public Builder clearParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1666,12 +1712,16 @@ public com.google.protobuf.Struct.Builder getParamsBuilder() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1689,12 +1739,16 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
+     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
+     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
+     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1752,6 +1806,7 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1780,6 +1835,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1799,6 +1855,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1826,6 +1883,7 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1859,6 +1917,7 @@ public Builder clearParamTypes() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1887,6 +1946,7 @@ public java.util.Map getMutablePar * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1913,6 +1973,7 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java index 7c71cf32d5e..03858c082d1 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java @@ -100,6 +100,7 @@ public interface PartitionQueryRequestOrBuilder * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. + * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -120,6 +121,7 @@ public interface PartitionQueryRequestOrBuilder * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. + * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -136,12 +138,16 @@ public interface PartitionQueryRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -155,12 +161,16 @@ public interface PartitionQueryRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -174,12 +184,16 @@ public interface PartitionQueryRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
+   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
+   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
+   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
+   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -194,6 +208,7 @@ public interface PartitionQueryRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -210,6 +225,7 @@ public interface PartitionQueryRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -229,6 +245,7 @@ public interface PartitionQueryRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -245,6 +262,7 @@ public interface PartitionQueryRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -265,6 +283,7 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. + * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java index 46155e66a27..8b8d2a6b4f6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java @@ -41,7 +41,7 @@ private PartitionReadRequest() { session_ = ""; table_ = ""; index_ = ""; - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; + columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); } @java.lang.Override @@ -50,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new PartitionReadRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionReadRequest_descriptor; @@ -287,7 +282,8 @@ public com.google.protobuf.ByteString getIndexBytes() { public static final int COLUMNS_FIELD_NUMBER = 5; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringList columns_; + private com.google.protobuf.LazyStringArrayList columns_ = + com.google.protobuf.LazyStringArrayList.emptyList(); /** * * @@ -361,6 +357,7 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -381,6 +378,7 @@ public boolean hasKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -401,6 +399,7 @@ public com.google.spanner.v1.KeySet getKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -744,8 +743,7 @@ public Builder clear() { } table_ = ""; index_ = ""; - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000010); + columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); keySet_ = null; if (keySetBuilder_ != null) { keySetBuilder_.dispose(); @@ -783,7 +781,6 @@ public com.google.spanner.v1.PartitionReadRequest build() { public com.google.spanner.v1.PartitionReadRequest buildPartial() { com.google.spanner.v1.PartitionReadRequest result = new com.google.spanner.v1.PartitionReadRequest(this); - buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -791,14 +788,6 @@ public com.google.spanner.v1.PartitionReadRequest buildPartial() { return result; } - private void buildPartialRepeatedFields(com.google.spanner.v1.PartitionReadRequest result) { - if (((bitField0_ & 0x00000010) != 0)) { - columns_ = columns_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.columns_ = columns_; - } - private void buildPartial0(com.google.spanner.v1.PartitionReadRequest result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -814,6 +803,10 @@ private void buildPartial0(com.google.spanner.v1.PartitionReadRequest result) { if (((from_bitField0_ & 0x00000008) != 0)) { result.index_ = index_; } + if (((from_bitField0_ & 0x00000010) != 0)) { + columns_.makeImmutable(); + result.columns_ = columns_; + } if (((from_bitField0_ & 0x00000020) != 0)) { result.keySet_ = keySetBuilder_ == null ? keySet_ : keySetBuilder_.build(); } @@ -889,7 +882,7 @@ public Builder mergeFrom(com.google.spanner.v1.PartitionReadRequest other) { if (!other.columns_.isEmpty()) { if (columns_.isEmpty()) { columns_ = other.columns_; - bitField0_ = (bitField0_ & ~0x00000010); + bitField0_ |= 0x00000010; } else { ensureColumnsIsMutable(); columns_.addAll(other.columns_); @@ -1522,14 +1515,14 @@ public Builder setIndexBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringList columns_ = - com.google.protobuf.LazyStringArrayList.EMPTY; + private com.google.protobuf.LazyStringArrayList columns_ = + com.google.protobuf.LazyStringArrayList.emptyList(); private void ensureColumnsIsMutable() { - if (!((bitField0_ & 0x00000010) != 0)) { + if (!columns_.isModifiable()) { columns_ = new com.google.protobuf.LazyStringArrayList(columns_); - bitField0_ |= 0x00000010; } + bitField0_ |= 0x00000010; } /** * @@ -1544,7 +1537,8 @@ private void ensureColumnsIsMutable() { * @return A list containing the columns. */ public com.google.protobuf.ProtocolStringList getColumnsList() { - return columns_.getUnmodifiableView(); + columns_.makeImmutable(); + return columns_; } /** * @@ -1613,6 +1607,7 @@ public Builder setColumns(int index, java.lang.String value) { } ensureColumnsIsMutable(); columns_.set(index, value); + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1635,6 +1630,7 @@ public Builder addColumns(java.lang.String value) { } ensureColumnsIsMutable(); columns_.add(value); + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1654,6 +1650,7 @@ public Builder addColumns(java.lang.String value) { public Builder addAllColumns(java.lang.Iterable values) { ensureColumnsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columns_); + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1670,8 +1667,9 @@ public Builder addAllColumns(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearColumns() { - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; + columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); bitField0_ = (bitField0_ & ~0x00000010); + ; onChanged(); return this; } @@ -1695,6 +1693,7 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureColumnsIsMutable(); columns_.add(value); + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1713,6 +1712,7 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1732,6 +1732,7 @@ public boolean hasKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1755,6 +1756,7 @@ public com.google.spanner.v1.KeySet getKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1782,6 +1784,7 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1806,6 +1809,7 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1836,6 +1840,7 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1860,6 +1865,7 @@ public Builder clearKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1879,6 +1885,7 @@ public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1900,6 +1907,7 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java index 3b178f71836..2f6a285bc43 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java @@ -207,6 +207,7 @@ public interface PartitionReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -224,6 +225,7 @@ public interface PartitionReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -241,6 +243,7 @@ public interface PartitionReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java index 5216448c858..66ba370b276 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java @@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new PartitionResponse(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionResponse_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java index 21fc82e6924..6507cb2656f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java @@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new PlanNode(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_descriptor; @@ -355,11 +350,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ChildLink(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ChildLink_descriptor; @@ -1420,11 +1410,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ShortRepresentation(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ShortRepresentation_descriptor; @@ -2624,6 +2609,7 @@ public com.google.spanner.v1.PlanNode.ShortRepresentation getShortRepresentation * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -2645,6 +2631,7 @@ public boolean hasMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -2666,6 +2653,7 @@ public com.google.protobuf.Struct getMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4109,6 +4097,7 @@ public Builder clearShortRepresentation() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4129,6 +4118,7 @@ public boolean hasMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4153,6 +4143,7 @@ public com.google.protobuf.Struct getMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4181,6 +4172,7 @@ public Builder setMetadata(com.google.protobuf.Struct value) { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4206,6 +4198,7 @@ public Builder setMetadata(com.google.protobuf.Struct.Builder builderForValue) { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4237,6 +4230,7 @@ public Builder mergeMetadata(com.google.protobuf.Struct value) { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4262,6 +4256,7 @@ public Builder clearMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4282,6 +4277,7 @@ public com.google.protobuf.Struct.Builder getMetadataBuilder() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4304,6 +4300,7 @@ public com.google.protobuf.StructOrBuilder getMetadataOrBuilder() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java index fa57b333d5f..0ba896c5717 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java @@ -188,6 +188,7 @@ public interface PlanNodeOrBuilder * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -206,6 +207,7 @@ public interface PlanNodeOrBuilder * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -224,6 +226,7 @@ public interface PlanNodeOrBuilder * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: + * * { * "parameter_reference": "param1", * "parameter_type": "array" diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java index 609fb5cd3ae..54d2be319de 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java @@ -47,11 +47,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new QueryPlan(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_QueryPlan_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java index 5b75750eabf..54129945d8c 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java @@ -42,7 +42,7 @@ private ReadRequest() { session_ = ""; table_ = ""; index_ = ""; - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; + columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); resumeToken_ = com.google.protobuf.ByteString.EMPTY; partitionToken_ = com.google.protobuf.ByteString.EMPTY; } @@ -53,11 +53,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ReadRequest(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ReadRequest_descriptor; @@ -290,7 +285,8 @@ public com.google.protobuf.ByteString getIndexBytes() { public static final int COLUMNS_FIELD_NUMBER = 5; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringList columns_; + private com.google.protobuf.LazyStringArrayList columns_ = + com.google.protobuf.LazyStringArrayList.emptyList(); /** * * @@ -364,10 +360,12 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -388,10 +386,12 @@ public boolean hasKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -412,10 +412,12 @@ public com.google.spanner.v1.KeySet getKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -549,6 +551,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( *
    * If this is for a partitioned read and this field is set to `true`, the
    * request will be executed via Spanner independent compute resources.
+   *
    * If the field is set to `true` but the request does not set
    * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
    * 
@@ -879,8 +882,7 @@ public Builder clear() { } table_ = ""; index_ = ""; - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00000010); + columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); keySet_ = null; if (keySetBuilder_ != null) { keySetBuilder_.dispose(); @@ -921,7 +923,6 @@ public com.google.spanner.v1.ReadRequest build() { @java.lang.Override public com.google.spanner.v1.ReadRequest buildPartial() { com.google.spanner.v1.ReadRequest result = new com.google.spanner.v1.ReadRequest(this); - buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -929,14 +930,6 @@ public com.google.spanner.v1.ReadRequest buildPartial() { return result; } - private void buildPartialRepeatedFields(com.google.spanner.v1.ReadRequest result) { - if (((bitField0_ & 0x00000010) != 0)) { - columns_ = columns_.getUnmodifiableView(); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.columns_ = columns_; - } - private void buildPartial0(com.google.spanner.v1.ReadRequest result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -952,6 +945,10 @@ private void buildPartial0(com.google.spanner.v1.ReadRequest result) { if (((from_bitField0_ & 0x00000008) != 0)) { result.index_ = index_; } + if (((from_bitField0_ & 0x00000010) != 0)) { + columns_.makeImmutable(); + result.columns_ = columns_; + } if (((from_bitField0_ & 0x00000020) != 0)) { result.keySet_ = keySetBuilder_ == null ? keySet_ : keySetBuilder_.build(); } @@ -1039,7 +1036,7 @@ public Builder mergeFrom(com.google.spanner.v1.ReadRequest other) { if (!other.columns_.isEmpty()) { if (columns_.isEmpty()) { columns_ = other.columns_; - bitField0_ = (bitField0_ & ~0x00000010); + bitField0_ |= 0x00000010; } else { ensureColumnsIsMutable(); columns_.addAll(other.columns_); @@ -1707,14 +1704,14 @@ public Builder setIndexBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringList columns_ = - com.google.protobuf.LazyStringArrayList.EMPTY; + private com.google.protobuf.LazyStringArrayList columns_ = + com.google.protobuf.LazyStringArrayList.emptyList(); private void ensureColumnsIsMutable() { - if (!((bitField0_ & 0x00000010) != 0)) { + if (!columns_.isModifiable()) { columns_ = new com.google.protobuf.LazyStringArrayList(columns_); - bitField0_ |= 0x00000010; } + bitField0_ |= 0x00000010; } /** * @@ -1729,7 +1726,8 @@ private void ensureColumnsIsMutable() { * @return A list containing the columns. */ public com.google.protobuf.ProtocolStringList getColumnsList() { - return columns_.getUnmodifiableView(); + columns_.makeImmutable(); + return columns_; } /** * @@ -1798,6 +1796,7 @@ public Builder setColumns(int index, java.lang.String value) { } ensureColumnsIsMutable(); columns_.set(index, value); + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1820,6 +1819,7 @@ public Builder addColumns(java.lang.String value) { } ensureColumnsIsMutable(); columns_.add(value); + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1839,6 +1839,7 @@ public Builder addColumns(java.lang.String value) { public Builder addAllColumns(java.lang.Iterable values) { ensureColumnsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columns_); + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1855,8 +1856,9 @@ public Builder addAllColumns(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearColumns() { - columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; + columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); bitField0_ = (bitField0_ & ~0x00000010); + ; onChanged(); return this; } @@ -1880,6 +1882,7 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureColumnsIsMutable(); columns_.add(value); + bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1898,10 +1901,12 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1921,10 +1926,12 @@ public boolean hasKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1948,10 +1955,12 @@ public com.google.spanner.v1.KeySet getKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1979,10 +1988,12 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2007,10 +2018,12 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2041,10 +2054,12 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2069,10 +2084,12 @@ public Builder clearKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2092,10 +2109,12 @@ public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2117,10 +2136,12 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2527,6 +2548,7 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( *
      * If this is for a partitioned read and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
+     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
@@ -2545,6 +2567,7 @@ public boolean getDataBoostEnabled() { *
      * If this is for a partitioned read and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
+     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
@@ -2567,6 +2590,7 @@ public Builder setDataBoostEnabled(boolean value) { *
      * If this is for a partitioned read and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
+     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java index fc986d632d4..3bdf94f7ebd 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java @@ -207,10 +207,12 @@ public interface ReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -228,10 +230,12 @@ public interface ReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -249,10 +253,12 @@ public interface ReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. + * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. + * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -351,6 +357,7 @@ public interface ReadRequestOrBuilder *
    * If this is for a partitioned read and this field is set to `true`, the
    * request will be executed via Spanner independent compute resources.
+   *
    * If the field is set to `true` but the request does not set
    * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
    * 
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java index bdce7978e3a..3b43c192884 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java @@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new RequestOptions(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_RequestOptions_descriptor; @@ -75,8 +70,10 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { *
    * The relative priority for requests. Note that priority is not applicable
    * for [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
+   *
    * The priority acts as a hint to the Cloud Spanner scheduler and does not
    * guarantee priority or order of execution. For example:
+   *
    * * Some parts of a write operation always execute at `PRIORITY_HIGH`,
    *   regardless of the specified priority. This may cause you to see an
    *   increase in high priority workload even when executing a low priority
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java
index 574ee4b5d29..c2982901a17 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ResultSet();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.ResultSetProto
         .internal_static_google_spanner_v1_ResultSet_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java
index 6c2261da657..a195b930323 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java
@@ -45,11 +45,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ResultSetMetadata();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.ResultSetProto
         .internal_static_google_spanner_v1_ResultSetMetadata_descriptor;
@@ -74,6 +69,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -95,6 +91,7 @@ public boolean hasRowType() {
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -116,6 +113,7 @@ public com.google.spanner.v1.StructType getRowType() {
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -193,6 +191,7 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() {
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -216,6 +215,7 @@ public boolean hasUndeclaredParameters() {
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -241,6 +241,7 @@ public com.google.spanner.v1.StructType getUndeclaredParameters() {
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -684,6 +685,7 @@ public Builder mergeFrom(
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -704,6 +706,7 @@ public boolean hasRowType() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -728,6 +731,7 @@ public com.google.spanner.v1.StructType getRowType() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -756,6 +760,7 @@ public Builder setRowType(com.google.spanner.v1.StructType value) {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -781,6 +786,7 @@ public Builder setRowType(com.google.spanner.v1.StructType.Builder builderForVal
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -812,6 +818,7 @@ public Builder mergeRowType(com.google.spanner.v1.StructType value) {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -837,6 +844,7 @@ public Builder clearRowType() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -857,6 +865,7 @@ public com.google.spanner.v1.StructType.Builder getRowTypeBuilder() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -879,6 +888,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1111,6 +1121,7 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1133,6 +1144,7 @@ public boolean hasUndeclaredParameters() {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1161,6 +1173,7 @@ public com.google.spanner.v1.StructType getUndeclaredParameters() {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1191,6 +1204,7 @@ public Builder setUndeclaredParameters(com.google.spanner.v1.StructType value) {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1219,6 +1233,7 @@ public Builder setUndeclaredParameters(
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1252,6 +1267,7 @@ public Builder mergeUndeclaredParameters(com.google.spanner.v1.StructType value)
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1279,6 +1295,7 @@ public Builder clearUndeclaredParameters() {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1301,6 +1318,7 @@ public com.google.spanner.v1.StructType.Builder getUndeclaredParametersBuilder()
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1327,6 +1345,7 @@ public com.google.spanner.v1.StructTypeOrBuilder getUndeclaredParametersOrBuilde
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
+     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
index 38216902ce7..ec11a259891 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
@@ -30,6 +30,7 @@ public interface ResultSetMetadataOrBuilder
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -48,6 +49,7 @@ public interface ResultSetMetadataOrBuilder
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -66,6 +68,7 @@ public interface ResultSetMetadataOrBuilder
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -123,6 +126,7 @@ public interface ResultSetMetadataOrBuilder
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -143,6 +147,7 @@ public interface ResultSetMetadataOrBuilder
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -163,6 +168,7 @@ public interface ResultSetMetadataOrBuilder
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
+   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java
index 3c940cb8d13..b4472630c26 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java
@@ -45,11 +45,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ResultSetStats();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.ResultSetProto
         .internal_static_google_spanner_v1_ResultSetStats_descriptor;
@@ -66,6 +61,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
   }
 
   private int rowCountCase_ = 0;
+
+  @SuppressWarnings("serial")
   private java.lang.Object rowCount_;
 
   public enum RowCountCase
@@ -167,6 +164,7 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() {
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
+   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -189,6 +187,7 @@ public boolean hasQueryStats() {
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
+   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -211,6 +210,7 @@ public com.google.protobuf.Struct getQueryStats() {
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
+   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -958,6 +958,7 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -979,6 +980,7 @@ public boolean hasQueryStats() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1004,6 +1006,7 @@ public com.google.protobuf.Struct getQueryStats() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1033,6 +1036,7 @@ public Builder setQueryStats(com.google.protobuf.Struct value) {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1059,6 +1063,7 @@ public Builder setQueryStats(com.google.protobuf.Struct.Builder builderForValue)
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1091,6 +1096,7 @@ public Builder mergeQueryStats(com.google.protobuf.Struct value) {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1117,6 +1123,7 @@ public Builder clearQueryStats() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1138,6 +1145,7 @@ public com.google.protobuf.Struct.Builder getQueryStatsBuilder() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1161,6 +1169,7 @@ public com.google.protobuf.StructOrBuilder getQueryStatsOrBuilder() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
+     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java
index 9a01e754b41..049091eeb0c 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java
@@ -65,6 +65,7 @@ public interface ResultSetStatsOrBuilder
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
+   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -84,6 +85,7 @@ public interface ResultSetStatsOrBuilder
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
+   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -103,6 +105,7 @@ public interface ResultSetStatsOrBuilder
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
+   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -166,5 +169,5 @@ public interface ResultSetStatsOrBuilder
    */
   long getRowCountLowerBound();
 
-  public com.google.spanner.v1.ResultSetStats.RowCountCase getRowCountCase();
+  com.google.spanner.v1.ResultSetStats.RowCountCase getRowCountCase();
 }
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java
index ceb4ac4591a..d079779e349 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RollbackRequest();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_RollbackRequest_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java
index 60f04ef5517..30a10b81938 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java
@@ -48,11 +48,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new Session();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto.internal_static_google_spanner_v1_Session_descriptor;
   }
@@ -159,11 +154,13 @@ public int getLabelsCount() {
    *
    * 
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -187,11 +184,13 @@ public java.util.Map getLabels() { * *
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -206,11 +205,13 @@ public java.util.Map getLabelsMap() { * *
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -232,11 +233,13 @@ public java.util.Map getLabelsMap() { * *
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -1033,11 +1036,13 @@ public int getLabelsCount() { * *
      * The labels for the session.
+     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
+     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1061,11 +1066,13 @@ public java.util.Map getLabels() { * *
      * The labels for the session.
+     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
+     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1080,11 +1087,13 @@ public java.util.Map getLabelsMap() { * *
      * The labels for the session.
+     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
+     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1106,11 +1115,13 @@ public java.util.Map getLabelsMap() { * *
      * The labels for the session.
+     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
+     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1138,11 +1149,13 @@ public Builder clearLabels() { * *
      * The labels for the session.
+     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
+     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1166,11 +1179,13 @@ public java.util.Map getMutableLabels() { * *
      * The labels for the session.
+     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
+     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1192,11 +1207,13 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * *
      * The labels for the session.
+     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
+     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java index 71da8b1240f..15a932664ab 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java @@ -53,11 +53,13 @@ public interface SessionOrBuilder * *
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -69,11 +71,13 @@ public interface SessionOrBuilder * *
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -88,11 +92,13 @@ public interface SessionOrBuilder * *
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -104,11 +110,13 @@ public interface SessionOrBuilder * *
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -124,11 +132,13 @@ java.lang.String getLabelsOrDefault( * *
    * The labels for the session.
+   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
+   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* 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 4cf68b20170..137106bafd9 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 @@ -31,6 +31,14 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r internal_static_google_spanner_v1_CreateSessionRequest_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_google_spanner_v1_CreateSessionRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_BatchWriteRequest_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_v1_BatchWriteResponse_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_BatchCreateSessionsRequest_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable @@ -156,206 +164,220 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "gle/spanner/v1/mutation.proto\032\"google/sp" + "anner/v1/result_set.proto\032#google/spanne" + "r/v1/transaction.proto\032\034google/spanner/v" - + "1/type.proto\"\203\001\n\024CreateSessionRequest\0229\n" - + "\010database\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googlea" - + "pis.com/Database\0220\n\007session\030\002 \001(\0132\032.goog" - + "le.spanner.v1.SessionB\003\340A\002\"\251\001\n\032BatchCrea" - + "teSessionsRequest\0229\n\010database\030\001 \001(\tB\'\340A\002" - + "\372A!\n\037spanner.googleapis.com/Database\0224\n\020" - + "session_template\030\002 \001(\0132\032.google.spanner." - + "v1.Session\022\032\n\rsession_count\030\003 \001(\005B\003\340A\002\"J" - + "\n\033BatchCreateSessionsResponse\022+\n\007session" - + "\030\001 \003(\0132\032.google.spanner.v1.Session\"\211\003\n\007S" - + "ession\022\021\n\004name\030\001 \001(\tB\003\340A\003\0226\n\006labels\030\002 \003(" - + "\0132&.google.spanner.v1.Session.LabelsEntr" - + "y\0224\n\013create_time\030\003 \001(\0132\032.google.protobuf" - + ".TimestampB\003\340A\003\022B\n\031approximate_last_use_" - + "time\030\004 \001(\0132\032.google.protobuf.TimestampB\003" - + "\340A\003\022\024\n\014creator_role\030\005 \001(\t\032-\n\013LabelsEntry" - + "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001:t\352Aq\n\036s" - + "panner.googleapis.com/Session\022Oprojects/" - + "{project}/instances/{instance}/databases" - + "/{database}/sessions/{session}\"I\n\021GetSes" - + "sionRequest\0224\n\004name\030\001 \001(\tB&\340A\002\372A \n\036spann" - + "er.googleapis.com/Session\"\207\001\n\023ListSessio" - + "nsRequest\0229\n\010database\030\001 \001(\tB\'\340A\002\372A!\n\037spa" - + "nner.googleapis.com/Database\022\021\n\tpage_siz" - + "e\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\016\n\006filter\030\004 " - + "\001(\t\"]\n\024ListSessionsResponse\022,\n\010sessions\030" - + "\001 \003(\0132\032.google.spanner.v1.Session\022\027\n\017nex" - + "t_page_token\030\002 \001(\t\"L\n\024DeleteSessionReque" - + "st\0224\n\004name\030\001 \001(\tB&\340A\002\372A \n\036spanner.google" - + "apis.com/Session\"\334\001\n\016RequestOptions\022<\n\010p" - + "riority\030\001 \001(\0162*.google.spanner.v1.Reques" - + "tOptions.Priority\022\023\n\013request_tag\030\002 \001(\t\022\027" - + "\n\017transaction_tag\030\003 \001(\t\"^\n\010Priority\022\030\n\024P" - + "RIORITY_UNSPECIFIED\020\000\022\020\n\014PRIORITY_LOW\020\001\022" - + "\023\n\017PRIORITY_MEDIUM\020\002\022\021\n\rPRIORITY_HIGH\020\003\"" - + "\200\006\n\021ExecuteSqlRequest\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." - + "TransactionSelector\022\020\n\003sql\030\003 \001(\tB\003\340A\002\022\'\n" - + "\006params\030\004 \001(\0132\027.google.protobuf.Struct\022I" - + "\n\013param_types\030\005 \003(\01324.google.spanner.v1." - + "ExecuteSqlRequest.ParamTypesEntry\022\024\n\014res" - + "ume_token\030\006 \001(\014\022B\n\nquery_mode\030\007 \001(\0162..go" - + "ogle.spanner.v1.ExecuteSqlRequest.QueryM" - + "ode\022\027\n\017partition_token\030\010 \001(\014\022\r\n\005seqno\030\t " - + "\001(\003\022H\n\rquery_options\030\n \001(\01321.google.span" - + "ner.v1.ExecuteSqlRequest.QueryOptions\022:\n" - + "\017request_options\030\013 \001(\0132!.google.spanner." - + "v1.RequestOptions\022\032\n\022data_boost_enabled\030" - + "\020 \001(\010\032O\n\014QueryOptions\022\031\n\021optimizer_versi" - + "on\030\001 \001(\t\022$\n\034optimizer_statistics_package" - + "\030\002 \001(\t\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\".\n\tQueryMode\022\n\n\006NORMAL\020\000\022\010\n\004PLAN\020\001\022\013\n" - + "\007PROFILE\020\002\"\240\004\n\026ExecuteBatchDmlRequest\0227\n" - + "\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleap" - + "is.com/Session\022@\n\013transaction\030\002 \001(\0132&.go" - + "ogle.spanner.v1.TransactionSelectorB\003\340A\002" - + "\022L\n\nstatements\030\003 \003(\01323.google.spanner.v1" - + ".ExecuteBatchDmlRequest.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\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.Struct\022X\n\013param" - + "_types\030\003 \003(\0132C.google.spanner.v1.Execute" - + "BatchDmlRequest.Statement.ParamTypesEntr" - + "y\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005val" - + "ue\030\002 \001(\0132\027.google.spanner.v1.Type:\0028\001\"p\n" - + "\027ExecuteBatchDmlResponse\0221\n\013result_sets\030" - + "\001 \003(\0132\034.google.spanner.v1.ResultSet\022\"\n\006s" - + "tatus\030\002 \001(\0132\022.google.rpc.Status\"H\n\020Parti" - + "tionOptions\022\034\n\024partition_size_bytes\030\001 \001(" - + "\003\022\026\n\016max_partitions\030\002 \001(\003\"\243\003\n\025PartitionQ" - + "ueryRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036sp" - + "anner.googleapis.com/Session\022;\n\013transact" - + "ion\030\002 \001(\0132&.google.spanner.v1.Transactio" - + "nSelector\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_ty" - + "pes\030\005 \003(\01328.google.spanner.v1.PartitionQ" - + "ueryRequest.ParamTypesEntry\022>\n\021partition" - + "_options\030\006 \001(\0132#.google.spanner.v1.Parti" - + "tionOptions\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\"\261\002\n\024PartitionReadRequest\0227\n\007sess" - + "ion\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.co" - + "m/Session\022;\n\013transaction\030\002 \001(\0132&.google." - + "spanner.v1.TransactionSelector\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.google.spanner.v1." - + "KeySetB\003\340A\002\022>\n\021partition_options\030\t \001(\0132#" - + ".google.spanner.v1.PartitionOptions\"$\n\tP" - + "artition\022\027\n\017partition_token\030\001 \001(\014\"z\n\021Par" - + "titionResponse\0220\n\npartitions\030\001 \003(\0132\034.goo" - + "gle.spanner.v1.Partition\0223\n\013transaction\030" - + "\002 \001(\0132\036.google.spanner.v1.Transaction\"\203\003" - + "\n\013ReadRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036" - + "spanner.googleapis.com/Session\022;\n\013transa" + + "1/type.proto\"\205\001\n\024CreateSessionRequest\022:\n" + + "\010database\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.google" + + "apis.com/Database\0221\n\007session\030\002 \001(\0132\032.goo" + + "gle.spanner.v1.SessionB\004\342A\001\002\"\277\001\n\021BatchWr" + + "iteRequest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036sp" + + "anner.googleapis.com/Session\0224\n\tmutation" + + "s\030\002 \003(\0132\033.google.spanner.v1.MutationB\004\342A" + + "\001\002\022:\n\017request_options\030\003 \001(\0132!.google.spa" + + "nner.v1.RequestOptions\"\177\n\022BatchWriteResp" + + "onse\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.Timestamp\"\253\001\n\032Batc" + + "hCreateSessionsRequest\022:\n\010database\030\001 \001(\t" + + "B(\342A\001\002\372A!\n\037spanner.googleapis.com/Databa" + + "se\0224\n\020session_template\030\002 \001(\0132\032.google.sp" + + "anner.v1.Session\022\033\n\rsession_count\030\003 \001(\005B" + + "\004\342A\001\002\"J\n\033BatchCreateSessionsResponse\022+\n\007" + + "session\030\001 \003(\0132\032.google.spanner.v1.Sessio" + + "n\"\214\003\n\007Session\022\022\n\004name\030\001 \001(\tB\004\342A\001\003\0226\n\006lab" + + "els\030\002 \003(\0132&.google.spanner.v1.Session.La" + + "belsEntry\0225\n\013create_time\030\003 \001(\0132\032.google." + + "protobuf.TimestampB\004\342A\001\003\022C\n\031approximate_" + + "last_use_time\030\004 \001(\0132\032.google.protobuf.Ti" + + "mestampB\004\342A\001\003\022\024\n\014creator_role\030\005 \001(\t\032-\n\013L" + + "abelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\002" + + "8\001:t\352Aq\n\036spanner.googleapis.com/Session\022" + + "Oprojects/{project}/instances/{instance}" + + "/databases/{database}/sessions/{session}" + + "\"J\n\021GetSessionRequest\0225\n\004name\030\001 \001(\tB\'\342A\001" + + "\002\372A \n\036spanner.googleapis.com/Session\"\210\001\n" + + "\023ListSessionsRequest\022:\n\010database\030\001 \001(\tB(" + + "\342A\001\002\372A!\n\037spanner.googleapis.com/Database" + + "\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022" + + "\016\n\006filter\030\004 \001(\t\"]\n\024ListSessionsResponse\022" + + ",\n\010sessions\030\001 \003(\0132\032.google.spanner.v1.Se" + + "ssion\022\027\n\017next_page_token\030\002 \001(\t\"M\n\024Delete" + + "SessionRequest\0225\n\004name\030\001 \001(\tB\'\342A\001\002\372A \n\036s" + + "panner.googleapis.com/Session\"\334\001\n\016Reques" + + "tOptions\022<\n\010priority\030\001 \001(\0162*.google.span" + + "ner.v1.RequestOptions.Priority\022\023\n\013reques" + + "t_tag\030\002 \001(\t\022\027\n\017transaction_tag\030\003 \001(\t\"^\n\010" + + "Priority\022\030\n\024PRIORITY_UNSPECIFIED\020\000\022\020\n\014PR" + + "IORITY_LOW\020\001\022\023\n\017PRIORITY_MEDIUM\020\002\022\021\n\rPRI" + + "ORITY_HIGH\020\003\"\202\006\n\021ExecuteSqlRequest\0228\n\007se" + + "ssion\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner.googleapis" + + ".com/Session\022;\n\013transaction\030\002 \001(\0132&.goog" + + "le.spanner.v1.TransactionSelector\022\021\n\003sql" + + "\030\003 \001(\tB\004\342A\001\002\022\'\n\006params\030\004 \001(\0132\027.google.pr" + + "otobuf.Struct\022I\n\013param_types\030\005 \003(\01324.goo" + + "gle.spanner.v1.ExecuteSqlRequest.ParamTy" + + "pesEntry\022\024\n\014resume_token\030\006 \001(\014\022B\n\nquery_" + + "mode\030\007 \001(\0162..google.spanner.v1.ExecuteSq" + + "lRequest.QueryMode\022\027\n\017partition_token\030\010 " + + "\001(\014\022\r\n\005seqno\030\t \001(\003\022H\n\rquery_options\030\n \001(" + + "\01321.google.spanner.v1.ExecuteSqlRequest." + + "QueryOptions\022:\n\017request_options\030\013 \001(\0132!." + + "google.spanner.v1.RequestOptions\022\032\n\022data" + + "_boost_enabled\030\020 \001(\010\032O\n\014QueryOptions\022\031\n\021" + + "optimizer_version\030\001 \001(\t\022$\n\034optimizer_sta" + + "tistics_package\030\002 \001(\t\032J\n\017ParamTypesEntry" + + "\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.google.sp" + + "anner.v1.Type:\0028\001\".\n\tQueryMode\022\n\n\006NORMAL" + + "\020\000\022\010\n\004PLAN\020\001\022\013\n\007PROFILE\020\002\"\245\004\n\026ExecuteBat" + + "chDmlRequest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036" + + "spanner.googleapis.com/Session\022A\n\013transa" + "ction\030\002 \001(\0132&.google.spanner.v1.Transact" - + "ionSelector\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(\0132\031.google.spanner.v1.KeySetB\003\340A\002\022\r\n" - + "\005limit\030\010 \001(\003\022\024\n\014resume_token\030\t \001(\014\022\027\n\017pa" - + "rtition_token\030\n \001(\014\022:\n\017request_options\030\013" - + " \001(\0132!.google.spanner.v1.RequestOptions\022" - + "\032\n\022data_boost_enabled\030\017 \001(\010\"\313\001\n\027BeginTra" - + "nsactionRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A " - + "\n\036spanner.googleapis.com/Session\022;\n\007opti" - + "ons\030\002 \001(\0132%.google.spanner.v1.Transactio" - + "nOptionsB\003\340A\002\022:\n\017request_options\030\003 \001(\0132!" - + ".google.spanner.v1.RequestOptions\"\303\002\n\rCo" - + "mmitRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036sp" - + "anner.googleapis.com/Session\022\030\n\016transact" - + "ion_id\030\002 \001(\014H\000\022G\n\026single_use_transaction" - + "\030\003 \001(\0132%.google.spanner.v1.TransactionOp" - + "tionsH\000\022.\n\tmutations\030\004 \003(\0132\033.google.span" - + "ner.v1.Mutation\022\033\n\023return_commit_stats\030\005" - + " \001(\010\022:\n\017request_options\030\006 \001(\0132!.google.s" - + "panner.v1.RequestOptionsB\r\n\013transaction\"" - + "g\n\017RollbackRequest\0227\n\007session\030\001 \001(\tB&\340A\002" - + "\372A \n\036spanner.googleapis.com/Session\022\033\n\016t" - + "ransaction_id\030\002 \001(\014B\003\340A\0022\300\026\n\007Spanner\022\246\001\n" - + "\rCreateSession\022\'.google.spanner.v1.Creat" - + "eSessionRequest\032\032.google.spanner.v1.Sess" - + "ion\"P\202\323\344\223\002?\":/v1/{database=projects/*/in" - + "stances/*/databases/*}/sessions:\001*\332A\010dat" - + "abase\022\340\001\n\023BatchCreateSessions\022-.google.s" - + "panner.v1.BatchCreateSessionsRequest\032..g" - + "oogle.spanner.v1.BatchCreateSessionsResp" - + "onse\"j\202\323\344\223\002K\"F/v1/{database=projects/*/i" - + "nstances/*/databases/*}/sessions:batchCr" - + "eate:\001*\332A\026database,session_count\022\227\001\n\nGet" - + "Session\022$.google.spanner.v1.GetSessionRe" - + "quest\032\032.google.spanner.v1.Session\"G\202\323\344\223\002" - + ":\0228/v1/{name=projects/*/instances/*/data" - + "bases/*/sessions/*}\332A\004name\022\256\001\n\014ListSessi" - + "ons\022&.google.spanner.v1.ListSessionsRequ" - + "est\032\'.google.spanner.v1.ListSessionsResp" - + "onse\"M\202\323\344\223\002<\022:/v1/{database=projects/*/i" - + "nstances/*/databases/*}/sessions\332A\010datab" - + "ase\022\231\001\n\rDeleteSession\022\'.google.spanner.v" - + "1.DeleteSessionRequest\032\026.google.protobuf" - + ".Empty\"G\202\323\344\223\002:*8/v1/{name=projects/*/ins" - + "tances/*/databases/*/sessions/*}\332A\004name\022" - + "\243\001\n\nExecuteSql\022$.google.spanner.v1.Execu" - + "teSqlRequest\032\034.google.spanner.v1.ResultS" - + "et\"Q\202\323\344\223\002K\"F/v1/{session=projects/*/inst" - + "ances/*/databases/*/sessions/*}:executeS" - + "ql:\001*\022\276\001\n\023ExecuteStreamingSql\022$.google.s" - + "panner.v1.ExecuteSqlRequest\032#.google.spa" - + "nner.v1.PartialResultSet\"Z\202\323\344\223\002T\"O/v1/{s" - + "ession=projects/*/instances/*/databases/" - + "*/sessions/*}:executeStreamingSql:\001*0\001\022\300" - + "\001\n\017ExecuteBatchDml\022).google.spanner.v1.E" - + "xecuteBatchDmlRequest\032*.google.spanner.v" - + "1.ExecuteBatchDmlResponse\"V\202\323\344\223\002P\"K/v1/{" - + "session=projects/*/instances/*/databases" - + "/*/sessions/*}:executeBatchDml:\001*\022\221\001\n\004Re" - + "ad\022\036.google.spanner.v1.ReadRequest\032\034.goo" - + "gle.spanner.v1.ResultSet\"K\202\323\344\223\002E\"@/v1/{s" - + "ession=projects/*/instances/*/databases/" - + "*/sessions/*}:read:\001*\022\254\001\n\rStreamingRead\022" - + "\036.google.spanner.v1.ReadRequest\032#.google" - + ".spanner.v1.PartialResultSet\"T\202\323\344\223\002N\"I/v" - + "1/{session=projects/*/instances/*/databa" - + "ses/*/sessions/*}:streamingRead:\001*0\001\022\311\001\n" - + "\020BeginTransaction\022*.google.spanner.v1.Be" - + "ginTransactionRequest\032\036.google.spanner.v" - + "1.Transaction\"i\202\323\344\223\002Q\"L/v1/{session=proj" - + "ects/*/instances/*/databases/*/sessions/" - + "*}:beginTransaction:\001*\332A\017session,options" - + "\022\353\001\n\006Commit\022 .google.spanner.v1.CommitRe" - + "quest\032!.google.spanner.v1.CommitResponse" - + "\"\233\001\202\323\344\223\002G\"B/v1/{session=projects/*/insta" - + "nces/*/databases/*/sessions/*}:commit:\001*" - + "\332A session,transaction_id,mutations\332A(se" - + "ssion,single_use_transaction,mutations\022\260" - + "\001\n\010Rollback\022\".google.spanner.v1.Rollback" - + "Request\032\026.google.protobuf.Empty\"h\202\323\344\223\002I\"" - + "D/v1/{session=projects/*/instances/*/dat" - + "abases/*/sessions/*}:rollback:\001*\332A\026sessi" - + "on,transaction_id\022\267\001\n\016PartitionQuery\022(.g" - + "oogle.spanner.v1.PartitionQueryRequest\032$" - + ".google.spanner.v1.PartitionResponse\"U\202\323" - + "\344\223\002O\"J/v1/{session=projects/*/instances/" - + "*/databases/*/sessions/*}:partitionQuery" - + ":\001*\022\264\001\n\rPartitionRead\022\'.google.spanner.v" - + "1.PartitionReadRequest\032$.google.spanner." - + "v1.PartitionResponse\"T\202\323\344\223\002N\"I/v1/{sessi" - + "on=projects/*/instances/*/databases/*/se" - + "ssions/*}:partitionRead:\001*\032w\312A\026spanner.g" - + "oogleapis.com\322A[https://www.googleapis.c" - + "om/auth/cloud-platform,https://www.googl" - + "eapis.com/auth/spanner.dataB\221\002\n\025com.goog" - + "le.spanner.v1B\014SpannerProtoP\001Z5cloud.goo" - + "gle.com/go/spanner/apiv1/spannerpb;spann" - + "erpb\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\" - + "Cloud\\Spanner\\V1\352\002\032Google::Cloud::Spanne" - + "r::V1\352A_\n\037spanner.googleapis.com/Databas" - + "e\022\n\021partition_options\030\006 \001(\0132#.g" + + "oogle.spanner.v1.PartitionOptions\032J\n\017Par" + + "amTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\013" + + "2\027.google.spanner.v1.Type:\0028\001\"\264\002\n\024Partit" + + "ionReadRequest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A " + + "\n\036spanner.googleapis.com/Session\022;\n\013tran" + + "saction\030\002 \001(\0132&.google.spanner.v1.Transa" + + "ctionSelector\022\023\n\005table\030\003 \001(\tB\004\342A\001\002\022\r\n\005in" + + "dex\030\004 \001(\t\022\017\n\007columns\030\005 \003(\t\0220\n\007key_set\030\006 " + + "\001(\0132\031.google.spanner.v1.KeySetB\004\342A\001\002\022>\n\021" + + "partition_options\030\t \001(\0132#.google.spanner" + + ".v1.PartitionOptions\"$\n\tPartition\022\027\n\017par" + + "tition_token\030\001 \001(\014\"z\n\021PartitionResponse\022" + + "0\n\npartitions\030\001 \003(\0132\034.google.spanner.v1." + + "Partition\0223\n\013transaction\030\002 \001(\0132\036.google." + + "spanner.v1.Transaction\"\207\003\n\013ReadRequest\0228" + + "\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner.google" + + "apis.com/Session\022;\n\013transaction\030\002 \001(\0132&." + + "google.spanner.v1.TransactionSelector\022\023\n" + + "\005table\030\003 \001(\tB\004\342A\001\002\022\r\n\005index\030\004 \001(\t\022\025\n\007col" + + "umns\030\005 \003(\tB\004\342A\001\002\0220\n\007key_set\030\006 \001(\0132\031.goog" + + "le.spanner.v1.KeySetB\004\342A\001\002\022\r\n\005limit\030\010 \001(" + + "\003\022\024\n\014resume_token\030\t \001(\014\022\027\n\017partition_tok" + + "en\030\n \001(\014\022:\n\017request_options\030\013 \001(\0132!.goog" + + "le.spanner.v1.RequestOptions\022\032\n\022data_boo" + + "st_enabled\030\017 \001(\010\"\315\001\n\027BeginTransactionReq" + + "uest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner." + + "googleapis.com/Session\022<\n\007options\030\002 \001(\0132" + + "%.google.spanner.v1.TransactionOptionsB\004" + + "\342A\001\002\022:\n\017request_options\030\003 \001(\0132!.google.s" + + "panner.v1.RequestOptions\"\304\002\n\rCommitReque" + + "st\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner.go" + + "ogleapis.com/Session\022\030\n\016transaction_id\030\002" + + " \001(\014H\000\022G\n\026single_use_transaction\030\003 \001(\0132%" + + ".google.spanner.v1.TransactionOptionsH\000\022" + + ".\n\tmutations\030\004 \003(\0132\033.google.spanner.v1.M" + + "utation\022\033\n\023return_commit_stats\030\005 \001(\010\022:\n\017" + + "request_options\030\006 \001(\0132!.google.spanner.v" + + "1.RequestOptionsB\r\n\013transaction\"i\n\017Rollb" + + "ackRequest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036sp" + + "anner.googleapis.com/Session\022\034\n\016transact" + + "ion_id\030\002 \001(\014B\004\342A\001\0022\205\030\n\007Spanner\022\246\001\n\rCreat" + + "eSession\022\'.google.spanner.v1.CreateSessi" + + "onRequest\032\032.google.spanner.v1.Session\"P\332" + + "A\010database\202\323\344\223\002?\":/v1/{database=projects" + + "/*/instances/*/databases/*}/sessions:\001*\022" + + "\340\001\n\023BatchCreateSessions\022-.google.spanner" + + ".v1.BatchCreateSessionsRequest\032..google." + + "spanner.v1.BatchCreateSessionsResponse\"j" + + "\332A\026database,session_count\202\323\344\223\002K\"F/v1/{da" + + "tabase=projects/*/instances/*/databases/" + + "*}/sessions:batchCreate:\001*\022\227\001\n\nGetSessio" + + "n\022$.google.spanner.v1.GetSessionRequest\032" + + "\032.google.spanner.v1.Session\"G\332A\004name\202\323\344\223" + + "\002:\0228/v1/{name=projects/*/instances/*/dat" + + "abases/*/sessions/*}\022\256\001\n\014ListSessions\022&." + + "google.spanner.v1.ListSessionsRequest\032\'." + + "google.spanner.v1.ListSessionsResponse\"M" + + "\332A\010database\202\323\344\223\002<\022:/v1/{database=project" + + "s/*/instances/*/databases/*}/sessions\022\231\001" + + "\n\rDeleteSession\022\'.google.spanner.v1.Dele" + + "teSessionRequest\032\026.google.protobuf.Empty" + + "\"G\332A\004name\202\323\344\223\002:*8/v1/{name=projects/*/in" + + "stances/*/databases/*/sessions/*}\022\243\001\n\nEx" + + "ecuteSql\022$.google.spanner.v1.ExecuteSqlR" + + "equest\032\034.google.spanner.v1.ResultSet\"Q\202\323" + + "\344\223\002K\"F/v1/{session=projects/*/instances/" + + "*/databases/*/sessions/*}:executeSql:\001*\022" + + "\276\001\n\023ExecuteStreamingSql\022$.google.spanner" + + ".v1.ExecuteSqlRequest\032#.google.spanner.v" + + "1.PartialResultSet\"Z\202\323\344\223\002T\"O/v1/{session" + + "=projects/*/instances/*/databases/*/sess" + + "ions/*}:executeStreamingSql:\001*0\001\022\300\001\n\017Exe" + + "cuteBatchDml\022).google.spanner.v1.Execute" + + "BatchDmlRequest\032*.google.spanner.v1.Exec" + + "uteBatchDmlResponse\"V\202\323\344\223\002P\"K/v1/{sessio" + + "n=projects/*/instances/*/databases/*/ses" + + "sions/*}:executeBatchDml:\001*\022\221\001\n\004Read\022\036.g" + + "oogle.spanner.v1.ReadRequest\032\034.google.sp" + + "anner.v1.ResultSet\"K\202\323\344\223\002E\"@/v1/{session" + + "=projects/*/instances/*/databases/*/sess" + + "ions/*}:read:\001*\022\254\001\n\rStreamingRead\022\036.goog" + + "le.spanner.v1.ReadRequest\032#.google.spann" + + "er.v1.PartialResultSet\"T\202\323\344\223\002N\"I/v1/{ses" + + "sion=projects/*/instances/*/databases/*/" + + "sessions/*}:streamingRead:\001*0\001\022\302\001\n\nBatch" + + "Write\022$.google.spanner.v1.BatchWriteRequ" + + "est\032%.google.spanner.v1.BatchWriteRespon" + + "se\"e\332A\021session,mutations\202\323\344\223\002K\"F/v1/{ses" + + "sion=projects/*/instances/*/databases/*/" + + "sessions/*}:batchWrite:\001*0\001\022\311\001\n\020BeginTra" + + "nsaction\022*.google.spanner.v1.BeginTransa" + + "ctionRequest\032\036.google.spanner.v1.Transac" + + "tion\"i\332A\017session,options\202\323\344\223\002Q\"L/v1/{ses" + + "sion=projects/*/instances/*/databases/*/" + + "sessions/*}:beginTransaction:\001*\022\353\001\n\006Comm" + + "it\022 .google.spanner.v1.CommitRequest\032!.g" + + "oogle.spanner.v1.CommitResponse\"\233\001\332A ses" + + "sion,transaction_id,mutations\332A(session," + + "single_use_transaction,mutations\202\323\344\223\002G\"B" + + "/v1/{session=projects/*/instances/*/data" + + "bases/*/sessions/*}:commit:\001*\022\260\001\n\010Rollba" + + "ck\022\".google.spanner.v1.RollbackRequest\032\026" + + ".google.protobuf.Empty\"h\332A\026session,trans" + + "action_id\202\323\344\223\002I\"D/v1/{session=projects/*" + + "/instances/*/databases/*/sessions/*}:rol" + + "lback:\001*\022\267\001\n\016PartitionQuery\022(.google.spa" + + "nner.v1.PartitionQueryRequest\032$.google.s" + + "panner.v1.PartitionResponse\"U\202\323\344\223\002O\"J/v1" + + "/{session=projects/*/instances/*/databas" + + "es/*/sessions/*}:partitionQuery:\001*\022\264\001\n\rP" + + "artitionRead\022\'.google.spanner.v1.Partiti" + + "onReadRequest\032$.google.spanner.v1.Partit" + + "ionResponse\"T\202\323\344\223\002N\"I/v1/{session=projec" + + "ts/*/instances/*/databases/*/sessions/*}" + + ":partitionRead:\001*\032w\312A\026spanner.googleapis" + + ".com\322A[https://www.googleapis.com/auth/c" + + "loud-platform,https://www.googleapis.com" + + "/auth/spanner.dataB\221\002\n\025com.google.spanne" + + "r.v1B\014SpannerProtoP\001Z5cloud.google.com/g" + + "o/spanner/apiv1/spannerpb;spannerpb\252\002\027Go" + + "ogle.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Spa" + + "nner\\V1\352\002\032Google::Cloud::Spanner::V1\352A_\n" + + "\037spanner.googleapis.com/Database\022 @@ -100,6 +96,7 @@ public com.google.protobuf.ByteString getId() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -119,6 +116,7 @@ public boolean hasReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -140,6 +138,7 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -531,6 +530,7 @@ public Builder mergeFrom( * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], * [Commit][google.spanner.v1.Spanner.Commit], or * [Rollback][google.spanner.v1.Spanner.Rollback] calls. + * * Single-use read-only transactions do not have IDs, because * single-use transactions do not support multiple requests. *
@@ -552,6 +552,7 @@ public com.google.protobuf.ByteString getId() { * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], * [Commit][google.spanner.v1.Spanner.Commit], or * [Rollback][google.spanner.v1.Spanner.Rollback] calls. + * * Single-use read-only transactions do not have IDs, because * single-use transactions do not support multiple requests. *
@@ -579,6 +580,7 @@ public Builder setId(com.google.protobuf.ByteString value) { * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], * [Commit][google.spanner.v1.Spanner.Commit], or * [Rollback][google.spanner.v1.Spanner.Rollback] calls. + * * Single-use read-only transactions do not have IDs, because * single-use transactions do not support multiple requests. *
@@ -607,6 +609,7 @@ public Builder clearId() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -625,6 +628,7 @@ public boolean hasReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -649,6 +653,7 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -675,6 +680,7 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp value) { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -698,6 +704,7 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp.Builder builderFor * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -727,6 +734,7 @@ public Builder mergeReadTimestamp(com.google.protobuf.Timestamp value) { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -750,6 +758,7 @@ public Builder clearReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -768,6 +777,7 @@ public com.google.protobuf.Timestamp.Builder getReadTimestampBuilder() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -790,6 +800,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java index 85b7624ebe4..d731f85b08a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java @@ -23,18 +23,23 @@ * *
  * Transactions:
+ *
  * Each session can have at most one active transaction at a time (note that
  * standalone reads and queries use a transaction internally and do count
  * towards the one transaction limit). After the active transaction is
  * completed, the session can immediately be re-used for the next transaction.
  * It is not necessary to create a new session for each transaction.
+ *
  * Transaction modes:
+ *
  * Cloud Spanner supports three transaction modes:
+ *
  *   1. Locking read-write. This type of transaction is the only way
  *      to write data into Cloud Spanner. These transactions rely on
  *      pessimistic locking and, if necessary, two-phase commit.
  *      Locking read-write transactions may abort, requiring the
  *      application to retry.
+ *
  *   2. Snapshot read-only. Snapshot read-only transactions provide guaranteed
  *      consistency across several reads, but do not allow
  *      writes. Snapshot read-only transactions can be configured to read at
@@ -43,28 +48,35 @@
  *      guaranteed to see the effects of all transactions that have committed
  *      before the start of the read). Snapshot read-only transactions do not
  *      need to be committed.
+ *
  *      Queries on change streams must be performed with the snapshot read-only
  *      transaction mode, specifying a strong read. Please see
  *      [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong]
  *      for more details.
+ *
  *   3. Partitioned DML. This type of transaction is used to execute
  *      a single Partitioned DML statement. Partitioned DML partitions
  *      the key space and runs the DML statement over each partition
  *      in parallel using separate, internal transactions that commit
  *      independently. Partitioned DML transactions do not need to be
  *      committed.
+ *
  * For transactions that only read, snapshot read-only transactions
  * provide simpler semantics and are almost always faster. In
  * particular, read-only transactions do not take locks, so they do
  * not conflict with read-write transactions. As a consequence of not
  * taking locks, they also do not abort, so retry loops are not needed.
+ *
  * Transactions may only read-write data in a single database. They
  * may, however, read-write data in different tables within that
  * database.
+ *
  * Locking read-write transactions:
+ *
  * Locking transactions may be used to atomically read-modify-write
  * data anywhere in a database. This type of transaction is externally
  * consistent.
+ *
  * Clients should attempt to minimize the amount of time a transaction
  * is active. Faster transactions commit with higher probability
  * and cause less contention. Cloud Spanner attempts to keep read locks
@@ -74,87 +86,113 @@
  * [Rollback][google.spanner.v1.Spanner.Rollback]. Long periods of
  * inactivity at the client may cause Cloud Spanner to release a
  * transaction's locks and abort it.
+ *
  * Conceptually, a read-write transaction consists of zero or more
  * reads or SQL statements followed by
  * [Commit][google.spanner.v1.Spanner.Commit]. At any time before
  * [Commit][google.spanner.v1.Spanner.Commit], the client can send a
  * [Rollback][google.spanner.v1.Spanner.Rollback] request to abort the
  * transaction.
+ *
  * Semantics:
+ *
  * Cloud Spanner can commit the transaction if all read locks it acquired
  * are still valid at commit time, and it is able to acquire write
  * locks for all writes. Cloud Spanner can abort the transaction for any
  * reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
  * that the transaction has not modified any user data in Cloud Spanner.
+ *
  * Unless the transaction commits, Cloud Spanner makes no guarantees about
  * how long the transaction's locks were held for. It is an error to
  * use Cloud Spanner locks for any sort of mutual exclusion other than
  * between Cloud Spanner transactions themselves.
+ *
  * Retrying aborted transactions:
+ *
  * When a transaction aborts, the application can choose to retry the
  * whole transaction again. To maximize the chances of successfully
  * committing the retry, the client should execute the retry in the
  * same session as the original attempt. The original session's lock
  * priority increases with each consecutive abort, meaning that each
  * attempt has a slightly better chance of success than the previous.
+ *
  * Under some circumstances (for example, many transactions attempting to
  * modify the same row(s)), a transaction can abort many times in a
  * short period before successfully committing. Thus, it is not a good
  * idea to cap the number of retries a transaction can attempt;
  * instead, it is better to limit the total amount of time spent
  * retrying.
+ *
  * Idle transactions:
+ *
  * A transaction is considered idle if it has no outstanding reads or
  * SQL queries and has not started a read or SQL query within the last 10
  * seconds. Idle transactions can be aborted by Cloud Spanner so that they
  * don't hold on to locks indefinitely. If an idle transaction is aborted, the
  * commit will fail with error `ABORTED`.
+ *
  * If this behavior is undesirable, periodically executing a simple
  * SQL query in the transaction (for example, `SELECT 1`) prevents the
  * transaction from becoming idle.
+ *
  * Snapshot read-only transactions:
+ *
  * Snapshot read-only transactions provides a simpler method than
  * locking read-write transactions for doing several consistent
  * reads. However, this type of transaction does not support writes.
+ *
  * Snapshot transactions do not take locks. Instead, they work by
  * choosing a Cloud Spanner timestamp, then executing all reads at that
  * timestamp. Since they do not acquire locks, they do not block
  * concurrent read-write transactions.
+ *
  * Unlike locking read-write transactions, snapshot read-only
  * transactions never abort. They can fail if the chosen read
  * timestamp is garbage collected; however, the default garbage
  * collection policy is generous enough that most applications do not
  * need to worry about this in practice.
+ *
  * Snapshot read-only transactions do not need to call
  * [Commit][google.spanner.v1.Spanner.Commit] or
  * [Rollback][google.spanner.v1.Spanner.Rollback] (and in fact are not
  * permitted to do so).
+ *
  * To execute a snapshot transaction, the client specifies a timestamp
  * bound, which tells Cloud Spanner how to choose a read timestamp.
+ *
  * The types of timestamp bound are:
+ *
  *   - Strong (the default).
  *   - Bounded staleness.
  *   - Exact staleness.
+ *
  * If the Cloud Spanner database to be read is geographically distributed,
  * stale read-only transactions can execute more quickly than strong
  * or read-write transactions, because they are able to execute far
  * from the leader replica.
+ *
  * Each type of timestamp bound is discussed in detail below.
+ *
  * Strong: Strong reads are guaranteed to see the effects of all transactions
  * that have committed before the start of the read. Furthermore, all
  * rows yielded by a single read are consistent with each other -- if
  * any part of the read observes a transaction, all parts of the read
  * see the transaction.
+ *
  * Strong reads are not repeatable: two consecutive strong read-only
  * transactions might return inconsistent results if there are
  * concurrent writes. If consistency across reads is required, the
  * reads should be executed within a transaction or at an exact read
  * timestamp.
+ *
  * Queries on change streams (see below for more details) must also specify
  * the strong read timestamp bound.
+ *
  * See
  * [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong].
+ *
  * Exact staleness:
+ *
  * These timestamp bounds execute reads at a user-specified
  * timestamp. Reads at a timestamp are guaranteed to see a consistent
  * prefix of the global transaction history: they observe
@@ -163,42 +201,54 @@
  * transactions with a larger commit timestamp. They will block until
  * all conflicting transactions that may be assigned commit timestamps
  * <= the read timestamp have finished.
+ *
  * The timestamp can either be expressed as an absolute Cloud Spanner commit
  * timestamp or a staleness relative to the current time.
+ *
  * These modes do not require a "negotiation phase" to pick a
  * timestamp. As a result, they execute slightly faster than the
  * equivalent boundedly stale concurrency modes. On the other hand,
  * boundedly stale reads usually return fresher results.
+ *
  * See
  * [TransactionOptions.ReadOnly.read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp]
  * and
  * [TransactionOptions.ReadOnly.exact_staleness][google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness].
+ *
  * Bounded staleness:
+ *
  * Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
  * subject to a user-provided staleness bound. Cloud Spanner chooses the
  * newest timestamp within the staleness bound that allows execution
  * of the reads at the closest available replica without blocking.
+ *
  * All rows yielded are consistent with each other -- if any part of
  * the read observes a transaction, all parts of the read see the
  * transaction. Boundedly stale reads are not repeatable: two stale
  * reads, even if they use the same staleness bound, can execute at
  * different timestamps and thus return inconsistent results.
+ *
  * Boundedly stale reads execute in two phases: the first phase
  * negotiates a timestamp among all replicas needed to serve the
  * read. In the second phase, reads are executed at the negotiated
  * timestamp.
+ *
  * As a result of the two phase execution, bounded staleness reads are
  * usually a little slower than comparable exact staleness
  * reads. However, they are typically able to return fresher
  * results, and are more likely to execute at the closest replica.
+ *
  * Because the timestamp negotiation requires up-front knowledge of
  * which rows will be read, it can only be used with single-use
  * read-only transactions.
+ *
  * See
  * [TransactionOptions.ReadOnly.max_staleness][google.spanner.v1.TransactionOptions.ReadOnly.max_staleness]
  * and
  * [TransactionOptions.ReadOnly.min_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp].
+ *
  * Old read timestamps and garbage collection:
+ *
  * Cloud Spanner continuously garbage collects deleted and overwritten data
  * in the background to reclaim storage space. This process is known
  * as "version GC". By default, version GC reclaims versions after they
@@ -207,18 +257,23 @@
  * restriction also applies to in-progress reads and/or SQL queries whose
  * timestamp become too old while executing. Reads and SQL queries with
  * too-old read timestamps fail with the error `FAILED_PRECONDITION`.
+ *
  * You can configure and extend the `VERSION_RETENTION_PERIOD` of a
  * database up to a period as long as one week, which allows Cloud Spanner
  * to perform reads up to one week in the past.
+ *
  * Querying change Streams:
+ *
  * A Change Stream is a schema object that can be configured to watch data
  * changes on the entire database, a set of tables, or a set of columns
  * in a database.
+ *
  * When a change stream is created, Spanner automatically defines a
  * corresponding SQL Table-Valued Function (TVF) that can be used to query
  * the change records in the associated change stream using the
  * ExecuteStreamingSql API. The name of the TVF for a change stream is
  * generated from the name of the change stream: READ_<change_stream_name>.
+ *
  * All queries on change stream TVFs must be executed using the
  * ExecuteStreamingSql API with a single-use read-only transaction with a
  * strong read-only timestamp_bound. The change stream TVF allows users to
@@ -226,34 +281,44 @@
  * interest. All change records within the retention period is accessible
  * using the strong read-only timestamp_bound. All other TransactionOptions
  * are invalid for change stream queries.
+ *
  * In addition, if TransactionOptions.read_only.return_read_timestamp is set
  * to true, a special value of 2^63 - 2 will be returned in the
  * [Transaction][google.spanner.v1.Transaction] message that describes the
  * transaction, instead of a valid read timestamp. This special value should be
  * discarded and not used for any subsequent queries.
+ *
  * Please see https://cloud.google.com/spanner/docs/change-streams
  * for more details on how to query the change stream TVFs.
+ *
  * Partitioned DML transactions:
+ *
  * Partitioned DML transactions are used to execute DML statements with a
  * different execution strategy that provides different, and often better,
  * scalability properties for large, table-wide operations than DML in a
  * ReadWrite transaction. Smaller scoped statements, such as an OLTP workload,
  * should prefer using ReadWrite transactions.
+ *
  * Partitioned DML partitions the keyspace and runs the DML statement on each
  * partition in separate, internal transactions. These transactions commit
  * automatically when complete, and run independently from one another.
+ *
  * To reduce lock contention, this execution strategy only acquires read locks
  * on rows that match the WHERE clause of the statement. Additionally, the
  * smaller per-partition transactions hold locks for less time.
+ *
  * That said, Partitioned DML is not a drop-in replacement for standard DML used
  * in ReadWrite transactions.
+ *
  *  - The DML statement must be fully-partitionable. Specifically, the statement
  *    must be expressible as the union of many statements which each access only
  *    a single row of the table.
+ *
  *  - The statement is not applied atomically to all rows of the table. Rather,
  *    the statement is applied atomically to partitions of the table, in
  *    independent transactions. Secondary index rows are updated atomically
  *    with the base table rows.
+ *
  *  - Partitioned DML does not guarantee exactly-once execution semantics
  *    against a partition. The statement will be applied at least once to each
  *    partition. It is strongly recommended that the DML statement should be
@@ -261,19 +326,23 @@
  *    dangerous to run a statement such as
  *    `UPDATE table SET column = column + 1` as it could be run multiple times
  *    against some rows.
+ *
  *  - The partitions are committed automatically - there is no support for
  *    Commit or Rollback. If the call returns an error, or if the client issuing
  *    the ExecuteSql call dies, it is possible that some rows had the statement
  *    executed on them successfully. It is also possible that statement was
  *    never executed against other rows.
+ *
  *  - Partitioned DML transactions may only contain the execution of a single
  *    DML statement via ExecuteSql or ExecuteStreamingSql.
+ *
  *  - If any error is encountered during the execution of the partitioned DML
  *    operation (for instance, a UNIQUE INDEX violation, division by zero, or a
  *    value that cannot be stored due to schema constraints), then the
  *    operation is stopped at that point and an error is returned. It is
  *    possible that at this point, some partitions have been committed (or even
  *    committed multiple times), and other partitions have not been run at all.
+ *
  * Given the above, Partitioned DML is good fit for large, database-wide,
  * operations that are idempotent, such as deleting old rows from a very large
  * table.
@@ -299,11 +368,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new TransactionOptions();
   }
 
-  @java.lang.Override
-  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-    return this.unknownFields;
-  }
-
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.TransactionProto
         .internal_static_google_spanner_v1_TransactionOptions_descriptor;
@@ -379,11 +443,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new ReadWrite();
     }
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-      return this.unknownFields;
-    }
-
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.TransactionProto
           .internal_static_google_spanner_v1_TransactionOptions_ReadWrite_descriptor;
@@ -415,6 +474,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum {
        *
        * 
        * Default value.
+       *
        * If the value is not specified, the pessimistic read lock is used.
        * 
* @@ -426,6 +486,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * *
        * Pessimistic lock mode.
+       *
        * Read locks are acquired immediately on read.
        * 
* @@ -437,6 +498,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * *
        * Optimistic lock mode.
+       *
        * Locks for reads within the transaction are not acquired on read.
        * Instead the locks are acquired on a commit to validate that
        * read/queried data has not changed since the transaction started.
@@ -453,6 +515,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum {
        *
        * 
        * Default value.
+       *
        * If the value is not specified, the pessimistic read lock is used.
        * 
* @@ -464,6 +527,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * *
        * Pessimistic lock mode.
+       *
        * Read locks are acquired immediately on read.
        * 
* @@ -475,6 +539,7 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * *
        * Optimistic lock mode.
+       *
        * Locks for reads within the transaction are not acquired on read.
        * Instead the locks are acquired on a commit to validate that
        * read/queried data has not changed since the transaction started.
@@ -1151,11 +1216,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new PartitionedDml();
     }
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
-      return this.unknownFields;
-    }
-
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.TransactionProto
           .internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_descriptor;
@@ -1585,10 +1645,13 @@ public interface ReadOnlyOrBuilder
      *
      * 
      * Executes all reads at a timestamp >= `min_read_timestamp`.
+     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
+     *
      * Note that this option can only be used in single-use transactions.
+     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -1603,10 +1666,13 @@ public interface ReadOnlyOrBuilder * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
+     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
+     *
      * Note that this option can only be used in single-use transactions.
+     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -1621,10 +1687,13 @@ public interface ReadOnlyOrBuilder * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
+     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
+     *
      * Note that this option can only be used in single-use transactions.
+     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -1643,9 +1712,11 @@ public interface ReadOnlyOrBuilder * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. *
@@ -1665,9 +1736,11 @@ public interface ReadOnlyOrBuilder * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. *
@@ -1687,9 +1760,11 @@ public interface ReadOnlyOrBuilder * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. *
@@ -1707,9 +1782,11 @@ public interface ReadOnlyOrBuilder * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -1728,9 +1805,11 @@ public interface ReadOnlyOrBuilder * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -1749,9 +1828,11 @@ public interface ReadOnlyOrBuilder * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -1766,11 +1847,13 @@ public interface ReadOnlyOrBuilder *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
+     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
+     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -1786,11 +1869,13 @@ public interface ReadOnlyOrBuilder *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
+     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
+     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -1806,11 +1891,13 @@ public interface ReadOnlyOrBuilder *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
+     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
+     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -1834,8 +1921,7 @@ public interface ReadOnlyOrBuilder */ boolean getReturnReadTimestamp(); - public com.google.spanner.v1.TransactionOptions.ReadOnly.TimestampBoundCase - getTimestampBoundCase(); + com.google.spanner.v1.TransactionOptions.ReadOnly.TimestampBoundCase getTimestampBoundCase(); } /** * @@ -1864,11 +1950,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ReadOnly(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_ReadOnly_descriptor; @@ -1885,6 +1966,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } private int timestampBoundCase_ = 0; + + @SuppressWarnings("serial") private java.lang.Object timestampBound_; public enum TimestampBoundCase @@ -1983,10 +2066,13 @@ public boolean getStrong() { * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
+     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
+     *
      * Note that this option can only be used in single-use transactions.
+     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -2004,10 +2090,13 @@ public boolean hasMinReadTimestamp() { * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
+     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
+     *
      * Note that this option can only be used in single-use transactions.
+     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -2028,10 +2117,13 @@ public com.google.protobuf.Timestamp getMinReadTimestamp() { * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
+     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
+     *
      * Note that this option can only be used in single-use transactions.
+     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -2057,9 +2149,11 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. *
@@ -2082,9 +2176,11 @@ public boolean hasMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. *
@@ -2110,9 +2206,11 @@ public com.google.protobuf.Duration getMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. *
@@ -2137,9 +2235,11 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -2161,9 +2261,11 @@ public boolean hasReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -2188,9 +2290,11 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -2212,11 +2316,13 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
+     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
+     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -2235,11 +2341,13 @@ public boolean hasExactStaleness() { *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
+     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
+     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -2261,11 +2369,13 @@ public com.google.protobuf.Duration getExactStaleness() { *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
+     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
+     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -2921,10 +3031,13 @@ public Builder clearStrong() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -2942,10 +3055,13 @@ public boolean hasMinReadTimestamp() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -2973,10 +3089,13 @@ public com.google.protobuf.Timestamp getMinReadTimestamp() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3001,10 +3120,13 @@ public Builder setMinReadTimestamp(com.google.protobuf.Timestamp value) { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3026,10 +3148,13 @@ public Builder setMinReadTimestamp(com.google.protobuf.Timestamp.Builder builder * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3064,10 +3189,13 @@ public Builder mergeMinReadTimestamp(com.google.protobuf.Timestamp value) { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3095,10 +3223,13 @@ public Builder clearMinReadTimestamp() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3113,10 +3244,13 @@ public com.google.protobuf.Timestamp.Builder getMinReadTimestampBuilder() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3139,10 +3273,13 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
+       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
+       *
        * Note that this option can only be used in single-use transactions.
+       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3188,9 +3325,11 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3213,9 +3352,11 @@ public boolean hasMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3248,9 +3389,11 @@ public com.google.protobuf.Duration getMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3280,9 +3423,11 @@ public Builder setMaxStaleness(com.google.protobuf.Duration value) { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3309,9 +3454,11 @@ public Builder setMaxStaleness(com.google.protobuf.Duration.Builder builderForVa * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3351,9 +3498,11 @@ public Builder mergeMaxStaleness(com.google.protobuf.Duration value) { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3386,9 +3535,11 @@ public Builder clearMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3408,9 +3559,11 @@ public com.google.protobuf.Duration.Builder getMaxStalenessBuilder() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3438,9 +3591,11 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. + * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. + * * Note that this option can only be used in single-use * transactions. * @@ -3485,9 +3640,11 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3509,9 +3666,11 @@ public boolean hasReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3543,9 +3702,11 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3574,9 +3735,11 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp value) { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3602,9 +3765,11 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp.Builder builderFor * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3643,9 +3808,11 @@ public Builder mergeReadTimestamp(com.google.protobuf.Timestamp value) { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3677,9 +3844,11 @@ public Builder clearReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3698,9 +3867,11 @@ public com.google.protobuf.Timestamp.Builder getReadTimestampBuilder() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3727,9 +3898,11 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. + * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. * @@ -3771,11 +3944,13 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -3794,11 +3969,13 @@ public boolean hasExactStaleness() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -3827,11 +4004,13 @@ public com.google.protobuf.Duration getExactStaleness() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -3857,11 +4036,13 @@ public Builder setExactStaleness(com.google.protobuf.Duration value) { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -3884,11 +4065,13 @@ public Builder setExactStaleness(com.google.protobuf.Duration.Builder builderFor *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -3924,11 +4107,13 @@ public Builder mergeExactStaleness(com.google.protobuf.Duration value) { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -3957,11 +4142,13 @@ public Builder clearExactStaleness() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -3977,11 +4164,13 @@ public com.google.protobuf.Duration.Builder getExactStalenessBuilder() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4005,11 +4194,13 @@ public com.google.protobuf.DurationOrBuilder getExactStalenessOrBuilder() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
+       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
+       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4164,6 +4355,8 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly getDefaultInstanceForTy } private int modeCase_ = 0; + + @SuppressWarnings("serial") private java.lang.Object mode_; public enum ModeCase @@ -4219,6 +4412,7 @@ public ModeCase getModeCase() { * *
    * Transaction may write.
+   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -4237,6 +4431,7 @@ public boolean hasReadWrite() {
    *
    * 
    * Transaction may write.
+   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -4258,6 +4453,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite getReadWrite() {
    *
    * 
    * Transaction may write.
+   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -4279,6 +4475,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO
    *
    * 
    * Partitioned DML transaction.
+   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -4297,6 +4494,7 @@ public boolean hasPartitionedDml() {
    *
    * 
    * Partitioned DML transaction.
+   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -4318,6 +4516,7 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml
    *
    * 
    * Partitioned DML transaction.
+   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -4340,6 +4539,7 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml
    *
    * 
    * Transaction will not write.
+   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -4358,6 +4558,7 @@ public boolean hasReadOnly() {
    *
    * 
    * Transaction will not write.
+   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -4379,6 +4580,7 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly getReadOnly() {
    *
    * 
    * Transaction will not write.
+   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -4602,18 +4804,23 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    *
    * 
    * Transactions:
+   *
    * Each session can have at most one active transaction at a time (note that
    * standalone reads and queries use a transaction internally and do count
    * towards the one transaction limit). After the active transaction is
    * completed, the session can immediately be re-used for the next transaction.
    * It is not necessary to create a new session for each transaction.
+   *
    * Transaction modes:
+   *
    * Cloud Spanner supports three transaction modes:
+   *
    *   1. Locking read-write. This type of transaction is the only way
    *      to write data into Cloud Spanner. These transactions rely on
    *      pessimistic locking and, if necessary, two-phase commit.
    *      Locking read-write transactions may abort, requiring the
    *      application to retry.
+   *
    *   2. Snapshot read-only. Snapshot read-only transactions provide guaranteed
    *      consistency across several reads, but do not allow
    *      writes. Snapshot read-only transactions can be configured to read at
@@ -4622,28 +4829,35 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    *      guaranteed to see the effects of all transactions that have committed
    *      before the start of the read). Snapshot read-only transactions do not
    *      need to be committed.
+   *
    *      Queries on change streams must be performed with the snapshot read-only
    *      transaction mode, specifying a strong read. Please see
    *      [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong]
    *      for more details.
+   *
    *   3. Partitioned DML. This type of transaction is used to execute
    *      a single Partitioned DML statement. Partitioned DML partitions
    *      the key space and runs the DML statement over each partition
    *      in parallel using separate, internal transactions that commit
    *      independently. Partitioned DML transactions do not need to be
    *      committed.
+   *
    * For transactions that only read, snapshot read-only transactions
    * provide simpler semantics and are almost always faster. In
    * particular, read-only transactions do not take locks, so they do
    * not conflict with read-write transactions. As a consequence of not
    * taking locks, they also do not abort, so retry loops are not needed.
+   *
    * Transactions may only read-write data in a single database. They
    * may, however, read-write data in different tables within that
    * database.
+   *
    * Locking read-write transactions:
+   *
    * Locking transactions may be used to atomically read-modify-write
    * data anywhere in a database. This type of transaction is externally
    * consistent.
+   *
    * Clients should attempt to minimize the amount of time a transaction
    * is active. Faster transactions commit with higher probability
    * and cause less contention. Cloud Spanner attempts to keep read locks
@@ -4653,87 +4867,113 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    * [Rollback][google.spanner.v1.Spanner.Rollback]. Long periods of
    * inactivity at the client may cause Cloud Spanner to release a
    * transaction's locks and abort it.
+   *
    * Conceptually, a read-write transaction consists of zero or more
    * reads or SQL statements followed by
    * [Commit][google.spanner.v1.Spanner.Commit]. At any time before
    * [Commit][google.spanner.v1.Spanner.Commit], the client can send a
    * [Rollback][google.spanner.v1.Spanner.Rollback] request to abort the
    * transaction.
+   *
    * Semantics:
+   *
    * Cloud Spanner can commit the transaction if all read locks it acquired
    * are still valid at commit time, and it is able to acquire write
    * locks for all writes. Cloud Spanner can abort the transaction for any
    * reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
    * that the transaction has not modified any user data in Cloud Spanner.
+   *
    * Unless the transaction commits, Cloud Spanner makes no guarantees about
    * how long the transaction's locks were held for. It is an error to
    * use Cloud Spanner locks for any sort of mutual exclusion other than
    * between Cloud Spanner transactions themselves.
+   *
    * Retrying aborted transactions:
+   *
    * When a transaction aborts, the application can choose to retry the
    * whole transaction again. To maximize the chances of successfully
    * committing the retry, the client should execute the retry in the
    * same session as the original attempt. The original session's lock
    * priority increases with each consecutive abort, meaning that each
    * attempt has a slightly better chance of success than the previous.
+   *
    * Under some circumstances (for example, many transactions attempting to
    * modify the same row(s)), a transaction can abort many times in a
    * short period before successfully committing. Thus, it is not a good
    * idea to cap the number of retries a transaction can attempt;
    * instead, it is better to limit the total amount of time spent
    * retrying.
+   *
    * Idle transactions:
+   *
    * A transaction is considered idle if it has no outstanding reads or
    * SQL queries and has not started a read or SQL query within the last 10
    * seconds. Idle transactions can be aborted by Cloud Spanner so that they
    * don't hold on to locks indefinitely. If an idle transaction is aborted, the
    * commit will fail with error `ABORTED`.
+   *
    * If this behavior is undesirable, periodically executing a simple
    * SQL query in the transaction (for example, `SELECT 1`) prevents the
    * transaction from becoming idle.
+   *
    * Snapshot read-only transactions:
+   *
    * Snapshot read-only transactions provides a simpler method than
    * locking read-write transactions for doing several consistent
    * reads. However, this type of transaction does not support writes.
+   *
    * Snapshot transactions do not take locks. Instead, they work by
    * choosing a Cloud Spanner timestamp, then executing all reads at that
    * timestamp. Since they do not acquire locks, they do not block
    * concurrent read-write transactions.
+   *
    * Unlike locking read-write transactions, snapshot read-only
    * transactions never abort. They can fail if the chosen read
    * timestamp is garbage collected; however, the default garbage
    * collection policy is generous enough that most applications do not
    * need to worry about this in practice.
+   *
    * Snapshot read-only transactions do not need to call
    * [Commit][google.spanner.v1.Spanner.Commit] or
    * [Rollback][google.spanner.v1.Spanner.Rollback] (and in fact are not
    * permitted to do so).
+   *
    * To execute a snapshot transaction, the client specifies a timestamp
    * bound, which tells Cloud Spanner how to choose a read timestamp.
+   *
    * The types of timestamp bound are:
+   *
    *   - Strong (the default).
    *   - Bounded staleness.
    *   - Exact staleness.
+   *
    * If the Cloud Spanner database to be read is geographically distributed,
    * stale read-only transactions can execute more quickly than strong
    * or read-write transactions, because they are able to execute far
    * from the leader replica.
+   *
    * Each type of timestamp bound is discussed in detail below.
+   *
    * Strong: Strong reads are guaranteed to see the effects of all transactions
    * that have committed before the start of the read. Furthermore, all
    * rows yielded by a single read are consistent with each other -- if
    * any part of the read observes a transaction, all parts of the read
    * see the transaction.
+   *
    * Strong reads are not repeatable: two consecutive strong read-only
    * transactions might return inconsistent results if there are
    * concurrent writes. If consistency across reads is required, the
    * reads should be executed within a transaction or at an exact read
    * timestamp.
+   *
    * Queries on change streams (see below for more details) must also specify
    * the strong read timestamp bound.
+   *
    * See
    * [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong].
+   *
    * Exact staleness:
+   *
    * These timestamp bounds execute reads at a user-specified
    * timestamp. Reads at a timestamp are guaranteed to see a consistent
    * prefix of the global transaction history: they observe
@@ -4742,42 +4982,54 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    * transactions with a larger commit timestamp. They will block until
    * all conflicting transactions that may be assigned commit timestamps
    * <= the read timestamp have finished.
+   *
    * The timestamp can either be expressed as an absolute Cloud Spanner commit
    * timestamp or a staleness relative to the current time.
+   *
    * These modes do not require a "negotiation phase" to pick a
    * timestamp. As a result, they execute slightly faster than the
    * equivalent boundedly stale concurrency modes. On the other hand,
    * boundedly stale reads usually return fresher results.
+   *
    * See
    * [TransactionOptions.ReadOnly.read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp]
    * and
    * [TransactionOptions.ReadOnly.exact_staleness][google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness].
+   *
    * Bounded staleness:
+   *
    * Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
    * subject to a user-provided staleness bound. Cloud Spanner chooses the
    * newest timestamp within the staleness bound that allows execution
    * of the reads at the closest available replica without blocking.
+   *
    * All rows yielded are consistent with each other -- if any part of
    * the read observes a transaction, all parts of the read see the
    * transaction. Boundedly stale reads are not repeatable: two stale
    * reads, even if they use the same staleness bound, can execute at
    * different timestamps and thus return inconsistent results.
+   *
    * Boundedly stale reads execute in two phases: the first phase
    * negotiates a timestamp among all replicas needed to serve the
    * read. In the second phase, reads are executed at the negotiated
    * timestamp.
+   *
    * As a result of the two phase execution, bounded staleness reads are
    * usually a little slower than comparable exact staleness
    * reads. However, they are typically able to return fresher
    * results, and are more likely to execute at the closest replica.
+   *
    * Because the timestamp negotiation requires up-front knowledge of
    * which rows will be read, it can only be used with single-use
    * read-only transactions.
+   *
    * See
    * [TransactionOptions.ReadOnly.max_staleness][google.spanner.v1.TransactionOptions.ReadOnly.max_staleness]
    * and
    * [TransactionOptions.ReadOnly.min_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp].
+   *
    * Old read timestamps and garbage collection:
+   *
    * Cloud Spanner continuously garbage collects deleted and overwritten data
    * in the background to reclaim storage space. This process is known
    * as "version GC". By default, version GC reclaims versions after they
@@ -4786,18 +5038,23 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    * restriction also applies to in-progress reads and/or SQL queries whose
    * timestamp become too old while executing. Reads and SQL queries with
    * too-old read timestamps fail with the error `FAILED_PRECONDITION`.
+   *
    * You can configure and extend the `VERSION_RETENTION_PERIOD` of a
    * database up to a period as long as one week, which allows Cloud Spanner
    * to perform reads up to one week in the past.
+   *
    * Querying change Streams:
+   *
    * A Change Stream is a schema object that can be configured to watch data
    * changes on the entire database, a set of tables, or a set of columns
    * in a database.
+   *
    * When a change stream is created, Spanner automatically defines a
    * corresponding SQL Table-Valued Function (TVF) that can be used to query
    * the change records in the associated change stream using the
    * ExecuteStreamingSql API. The name of the TVF for a change stream is
    * generated from the name of the change stream: READ_<change_stream_name>.
+   *
    * All queries on change stream TVFs must be executed using the
    * ExecuteStreamingSql API with a single-use read-only transaction with a
    * strong read-only timestamp_bound. The change stream TVF allows users to
@@ -4805,34 +5062,44 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    * interest. All change records within the retention period is accessible
    * using the strong read-only timestamp_bound. All other TransactionOptions
    * are invalid for change stream queries.
+   *
    * In addition, if TransactionOptions.read_only.return_read_timestamp is set
    * to true, a special value of 2^63 - 2 will be returned in the
    * [Transaction][google.spanner.v1.Transaction] message that describes the
    * transaction, instead of a valid read timestamp. This special value should be
    * discarded and not used for any subsequent queries.
+   *
    * Please see https://cloud.google.com/spanner/docs/change-streams
    * for more details on how to query the change stream TVFs.
+   *
    * Partitioned DML transactions:
+   *
    * Partitioned DML transactions are used to execute DML statements with a
    * different execution strategy that provides different, and often better,
    * scalability properties for large, table-wide operations than DML in a
    * ReadWrite transaction. Smaller scoped statements, such as an OLTP workload,
    * should prefer using ReadWrite transactions.
+   *
    * Partitioned DML partitions the keyspace and runs the DML statement on each
    * partition in separate, internal transactions. These transactions commit
    * automatically when complete, and run independently from one another.
+   *
    * To reduce lock contention, this execution strategy only acquires read locks
    * on rows that match the WHERE clause of the statement. Additionally, the
    * smaller per-partition transactions hold locks for less time.
+   *
    * That said, Partitioned DML is not a drop-in replacement for standard DML used
    * in ReadWrite transactions.
+   *
    *  - The DML statement must be fully-partitionable. Specifically, the statement
    *    must be expressible as the union of many statements which each access only
    *    a single row of the table.
+   *
    *  - The statement is not applied atomically to all rows of the table. Rather,
    *    the statement is applied atomically to partitions of the table, in
    *    independent transactions. Secondary index rows are updated atomically
    *    with the base table rows.
+   *
    *  - Partitioned DML does not guarantee exactly-once execution semantics
    *    against a partition. The statement will be applied at least once to each
    *    partition. It is strongly recommended that the DML statement should be
@@ -4840,19 +5107,23 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    *    dangerous to run a statement such as
    *    `UPDATE table SET column = column + 1` as it could be run multiple times
    *    against some rows.
+   *
    *  - The partitions are committed automatically - there is no support for
    *    Commit or Rollback. If the call returns an error, or if the client issuing
    *    the ExecuteSql call dies, it is possible that some rows had the statement
    *    executed on them successfully. It is also possible that statement was
    *    never executed against other rows.
+   *
    *  - Partitioned DML transactions may only contain the execution of a single
    *    DML statement via ExecuteSql or ExecuteStreamingSql.
+   *
    *  - If any error is encountered during the execution of the partitioned DML
    *    operation (for instance, a UNIQUE INDEX violation, division by zero, or a
    *    value that cannot be stored due to schema constraints), then the
    *    operation is stopped at that point and an error is returned. It is
    *    possible that at this point, some partitions have been committed (or even
    *    committed multiple times), and other partitions have not been run at all.
+   *
    * Given the above, Partitioned DML is good fit for large, database-wide,
    * operations that are idempotent, such as deleting old rows from a very large
    * table.
@@ -5107,6 +5378,7 @@ public Builder clearMode() {
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5125,6 +5397,7 @@ public boolean hasReadWrite() {
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5153,6 +5426,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite getReadWrite() {
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5178,6 +5452,7 @@ public Builder setReadWrite(com.google.spanner.v1.TransactionOptions.ReadWrite v
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5201,6 +5476,7 @@ public Builder setReadWrite(
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5236,6 +5512,7 @@ public Builder mergeReadWrite(com.google.spanner.v1.TransactionOptions.ReadWrite
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5264,6 +5541,7 @@ public Builder clearReadWrite() {
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5279,6 +5557,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite.Builder getReadWriteBu
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5302,6 +5581,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO
      *
      * 
      * Transaction may write.
+     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5343,6 +5623,7 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5361,6 +5642,7 @@ public boolean hasPartitionedDml() {
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5389,6 +5671,7 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5415,6 +5698,7 @@ public Builder setPartitionedDml(
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5438,6 +5722,7 @@ public Builder setPartitionedDml(
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5475,6 +5760,7 @@ public Builder mergePartitionedDml(
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5503,6 +5789,7 @@ public Builder clearPartitionedDml() {
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5519,6 +5806,7 @@ public Builder clearPartitionedDml() {
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5543,6 +5831,7 @@ public Builder clearPartitionedDml() {
      *
      * 
      * Partitioned DML transaction.
+     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5584,6 +5873,7 @@ public Builder clearPartitionedDml() {
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5602,6 +5892,7 @@ public boolean hasReadOnly() {
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5630,6 +5921,7 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly getReadOnly() {
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5655,6 +5947,7 @@ public Builder setReadOnly(com.google.spanner.v1.TransactionOptions.ReadOnly val
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5678,6 +5971,7 @@ public Builder setReadOnly(
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5713,6 +6007,7 @@ public Builder mergeReadOnly(com.google.spanner.v1.TransactionOptions.ReadOnly v
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5741,6 +6036,7 @@ public Builder clearReadOnly() {
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5756,6 +6052,7 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly.Builder getReadOnlyBuil
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5779,6 +6076,7 @@ public com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrB
      *
      * 
      * Transaction will not write.
+     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java
index c7b46083a13..e2f2613bb69 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java
@@ -28,6 +28,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction may write.
+   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -43,6 +44,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction may write.
+   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -58,6 +60,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction may write.
+   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -72,6 +75,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Partitioned DML transaction.
+   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -87,6 +91,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Partitioned DML transaction.
+   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -102,6 +107,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Partitioned DML transaction.
+   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -116,6 +122,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction will not write.
+   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -131,6 +138,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction will not write.
+   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -146,6 +154,7 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction will not write.
+   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -155,5 +164,5 @@ public interface TransactionOptionsOrBuilder
    */
   com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrBuilder();
 
-  public com.google.spanner.v1.TransactionOptions.ModeCase getModeCase();
+  com.google.spanner.v1.TransactionOptions.ModeCase getModeCase();
 }
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java
index 24a9ee693d9..57893613d67 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java
@@ -32,6 +32,7 @@ public interface TransactionOrBuilder
    * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql],
    * [Commit][google.spanner.v1.Spanner.Commit], or
    * [Rollback][google.spanner.v1.Spanner.Rollback] calls.
+   *
    * Single-use read-only transactions do not have IDs, because
    * single-use transactions do not support multiple requests.
    * 
@@ -49,6 +50,7 @@ public interface TransactionOrBuilder * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -65,6 +67,7 @@ public interface TransactionOrBuilder * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -81,6 +84,7 @@ public interface TransactionOrBuilder * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. + * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java index 3d3062141b9..b96de165770 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java @@ -25,6 +25,7 @@ * This message is used to select the transaction in which a * [Read][google.spanner.v1.Spanner.Read] or * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] call runs. + * * See [TransactionOptions][google.spanner.v1.TransactionOptions] for more * information about transactions. *
@@ -49,11 +50,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new TransactionSelector(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionSelector_descriptor; @@ -70,6 +66,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } private int selectorCase_ = 0; + + @SuppressWarnings("serial") private java.lang.Object selector_; public enum SelectorCase @@ -482,6 +480,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * This message is used to select the transaction in which a * [Read][google.spanner.v1.Spanner.Read] or * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] call runs. + * * See [TransactionOptions][google.spanner.v1.TransactionOptions] for more * information about transactions. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java index ff10cc1510b..478bc44b868 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java @@ -133,5 +133,5 @@ public interface TransactionSelectorOrBuilder */ com.google.spanner.v1.TransactionOptionsOrBuilder getBeginOrBuilder(); - public com.google.spanner.v1.TransactionSelector.SelectorCase getSelectorCase(); + com.google.spanner.v1.TransactionSelector.SelectorCase getSelectorCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java index 6785a32ef32..eba671dad85 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java @@ -49,11 +49,6 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new Type(); } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet getUnknownFields() { - return this.unknownFields; - } - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TypeProto.internal_static_google_spanner_v1_Type_descriptor; } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java index 4b6561e9def..5ce677274bd 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java @@ -24,6 +24,7 @@ *
  * `TypeCode` is used as part of [Type][google.spanner.v1.Type] to
  * indicate the type of a Cloud Spanner value.
+ *
  * Each legal value of a type can be encoded to or decoded from a JSON
  * value, using the encodings described below. All Cloud Spanner values can
  * be `null`, regardless of type; `null`s are always encoded as a JSON
@@ -80,6 +81,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * 
    * Encoded as `string` in RFC 3339 timestamp format. The time zone
    * must be present, and must be `"Z"`.
+   *
    * If the schema has the column option
    * `allow_commit_timestamp=true`, the placeholder string
    * `"spanner.commit_timestamp()"` can be used to instruct the system
@@ -152,6 +154,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * <br>Decimal format:
    * <br>`[+-]Digits[.[Digits]]` or
    * <br>`[+-][Digits].Digits`
+   *
    * Scientific notation:
    * <br>`[+-]Digits[.[Digits]][ExponentIndicator[+-]Digits]` or
    * <br>`[+-][Digits].Digits[ExponentIndicator[+-]Digits]`
@@ -167,6 +170,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * 
    * Encoded as a JSON-formatted `string` as described in RFC 7159. The
    * following rules are applied when parsing JSON input:
+   *
    * - Whitespace characters are not preserved.
    * - If a JSON object has duplicate keys, only the first key is preserved.
    * - Members of a JSON object are not guaranteed to have their order
@@ -227,6 +231,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * 
    * Encoded as `string` in RFC 3339 timestamp format. The time zone
    * must be present, and must be `"Z"`.
+   *
    * If the schema has the column option
    * `allow_commit_timestamp=true`, the placeholder string
    * `"spanner.commit_timestamp()"` can be used to instruct the system
@@ -299,6 +304,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * <br>Decimal format:
    * <br>`[+-]Digits[.[Digits]]` or
    * <br>`[+-][Digits].Digits`
+   *
    * Scientific notation:
    * <br>`[+-]Digits[.[Digits]][ExponentIndicator[+-]Digits]` or
    * <br>`[+-][Digits].Digits[ExponentIndicator[+-]Digits]`
@@ -314,6 +320,7 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * 
    * Encoded as a JSON-formatted `string` as described in RFC 7159. The
    * following rules are applied when parsing JSON input:
+   *
    * - Whitespace characters are not preserved.
    * - If a JSON object has duplicate keys, only the first key is preserved.
    * - Members of a JSON object are not guaranteed to have their order
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
index cc18356b426..1c024ce208a 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
@@ -50,26 +50,26 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
     java.lang.String[] descriptorData = {
       "\n\034google/spanner/v1/type.proto\022\021google.s"
           + "panner.v1\032\037google/api/field_behavior.pro"
-          + "to\"\337\001\n\004Type\022.\n\004code\030\001 \001(\0162\033.google.spann"
-          + "er.v1.TypeCodeB\003\340A\002\0223\n\022array_element_typ"
-          + "e\030\002 \001(\0132\027.google.spanner.v1.Type\0222\n\013stru"
-          + "ct_type\030\003 \001(\0132\035.google.spanner.v1.Struct"
-          + "Type\022>\n\017type_annotation\030\004 \001(\0162%.google.s"
-          + "panner.v1.TypeAnnotationCode\"\177\n\nStructTy"
-          + "pe\0223\n\006fields\030\001 \003(\0132#.google.spanner.v1.S"
-          + "tructType.Field\032<\n\005Field\022\014\n\004name\030\001 \001(\t\022%"
-          + "\n\004type\030\002 \001(\0132\027.google.spanner.v1.Type*\245\001"
-          + "\n\010TypeCode\022\031\n\025TYPE_CODE_UNSPECIFIED\020\000\022\010\n"
-          + "\004BOOL\020\001\022\t\n\005INT64\020\002\022\013\n\007FLOAT64\020\003\022\r\n\tTIMES"
-          + "TAMP\020\004\022\010\n\004DATE\020\005\022\n\n\006STRING\020\006\022\t\n\005BYTES\020\007\022"
-          + "\t\n\005ARRAY\020\010\022\n\n\006STRUCT\020\t\022\013\n\007NUMERIC\020\n\022\010\n\004J"
-          + "SON\020\013*X\n\022TypeAnnotationCode\022$\n TYPE_ANNO"
-          + "TATION_CODE_UNSPECIFIED\020\000\022\016\n\nPG_NUMERIC\020"
-          + "\002\022\014\n\010PG_JSONB\020\003B\254\001\n\025com.google.spanner.v"
-          + "1B\tTypeProtoP\001Z5cloud.google.com/go/span"
-          + "ner/apiv1/spannerpb;spannerpb\252\002\027Google.C"
-          + "loud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V"
-          + "1\352\002\032Google::Cloud::Spanner::V1b\006proto3"
+          + "to\"\340\001\n\004Type\022/\n\004code\030\001 \001(\0162\033.google.spann"
+          + "er.v1.TypeCodeB\004\342A\001\002\0223\n\022array_element_ty"
+          + "pe\030\002 \001(\0132\027.google.spanner.v1.Type\0222\n\013str"
+          + "uct_type\030\003 \001(\0132\035.google.spanner.v1.Struc"
+          + "tType\022>\n\017type_annotation\030\004 \001(\0162%.google."
+          + "spanner.v1.TypeAnnotationCode\"\177\n\nStructT"
+          + "ype\0223\n\006fields\030\001 \003(\0132#.google.spanner.v1."
+          + "StructType.Field\032<\n\005Field\022\014\n\004name\030\001 \001(\t\022"
+          + "%\n\004type\030\002 \001(\0132\027.google.spanner.v1.Type*\245"
+          + "\001\n\010TypeCode\022\031\n\025TYPE_CODE_UNSPECIFIED\020\000\022\010"
+          + "\n\004BOOL\020\001\022\t\n\005INT64\020\002\022\013\n\007FLOAT64\020\003\022\r\n\tTIME"
+          + "STAMP\020\004\022\010\n\004DATE\020\005\022\n\n\006STRING\020\006\022\t\n\005BYTES\020\007"
+          + "\022\t\n\005ARRAY\020\010\022\n\n\006STRUCT\020\t\022\013\n\007NUMERIC\020\n\022\010\n\004"
+          + "JSON\020\013*X\n\022TypeAnnotationCode\022$\n TYPE_ANN"
+          + "OTATION_CODE_UNSPECIFIED\020\000\022\016\n\nPG_NUMERIC"
+          + "\020\002\022\014\n\010PG_JSONB\020\003B\254\001\n\025com.google.spanner."
+          + "v1B\tTypeProtoP\001Z5cloud.google.com/go/spa"
+          + "nner/apiv1/spannerpb;spannerpb\252\002\027Google."
+          + "Cloud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\"
+          + "V1\352\002\032Google::Cloud::Spanner::V1b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto
index 0c71e03d9a6..e3e9293c618 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto
@@ -200,6 +200,20 @@ service Spanner {
     };
   }
 
+  // Batches the supplied mutations in a collection of efficient transactions.
+  // The mutations are applied non-atomically in an unspecified order and
+  // thus, they must be independent of each other. Partial failure is possible,
+  // i.e., some mutations may have been applied successfully, while some may
+  // have failed. The results of individual batches are streamed into the
+  // response as and when the batches are applied.
+  rpc BatchWrite(BatchWriteRequest) returns (stream BatchWriteResponse) {
+    option (google.api.http) = {
+      post: "/v1/{session=projects/*/instances/*/databases/*/sessions/*}:batchWrite"
+      body: "*"
+    };
+    option (google.api.method_signature) = "session,mutations";
+  }
+
   // Begins a new transaction. This step can often be skipped:
   // [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
   // [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
@@ -304,6 +318,37 @@ message CreateSessionRequest {
   Session session = 2 [(google.api.field_behavior) = REQUIRED];
 }
 
+// The request for [BatchWrite][Spanner.BatchWrite].
+message BatchWriteRequest {
+  // The session in which the batch request is to be run.
+  string session = 1 [
+    (google.api.field_behavior) = REQUIRED,
+    (google.api.resource_reference).type = "spanner.googleapis.com/Session"
+  ];
+
+  // The mutations to be applied non-atomically.
+  repeated Mutation mutations = 2 [
+    (google.api.field_behavior) = REQUIRED
+  ];
+
+  // Common options for this request.
+  RequestOptions request_options = 3;
+}
+
+// The result of applying a batch of mutations.
+message BatchWriteResponse {
+  // The mutations applied in this batch. The values index into the `mutations`
+  // field in the corresponding BatchWriteRequest.
+  repeated int32 indexes = 1;
+
+  // An `OK` status indicates success. Any other status indicates a failure.
+  google.rpc.Status status = 2;
+
+  // The commit timestamp of the transaction that applied this batch.
+  // Present if `status` is `OK`, absent otherwise.
+  google.protobuf.Timestamp commit_timestamp = 3;
+}
+
 // The request for [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions].
 message BatchCreateSessionsRequest {
   // Required. The database in which the new sessions are created.

From 43c4f63c3a39727e538ed4c0f76c319ee5af7169 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Mon, 5 Jun 2023 13:14:04 +0000
Subject: [PATCH 02/23] test: add batchwrite() support to
 MockSpannerServiceImpl

---
 .../cloud/spanner/DatabaseClientImplTest.java | 63 +++++++++++++++++++
 .../cloud/spanner/MockSpannerServiceImpl.java | 31 +++++++++
 2 files changed, 94 insertions(+)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index 0b88edc7f69..ddb0b49c99e 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -38,6 +38,7 @@
 import com.google.api.core.ApiFutures;
 import com.google.api.gax.grpc.testing.LocalChannelProvider;
 import com.google.api.gax.retrying.RetrySettings;
+import com.google.api.gax.rpc.ServerStream;
 import com.google.cloud.ByteArray;
 import com.google.cloud.NoCredentials;
 import com.google.cloud.Timestamp;
@@ -61,6 +62,8 @@
 import com.google.protobuf.AbstractMessage;
 import com.google.protobuf.ListValue;
 import com.google.protobuf.NullValue;
+import com.google.spanner.v1.BatchWriteRequest;
+import com.google.spanner.v1.BatchWriteResponse;
 import com.google.spanner.v1.CommitRequest;
 import com.google.spanner.v1.DeleteSessionRequest;
 import com.google.spanner.v1.ExecuteBatchDmlRequest;
@@ -312,6 +315,66 @@ public void writeAtLeastOnceWithTagOptions() {
     assertThat(commit.getRequestOptions().getRequestTag()).isEmpty();
   }
 
+  @Test
+  public void testBatchWriteAtLeastOnce() {
+    DatabaseClient client =
+        spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
+    Iterable mutations =
+        ImmutableList.of(
+            Mutation.newInsertBuilder("FOO1").set("ID").to(1L).set("NAME").to("Bar1").build(),
+            Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build(),
+            Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
+            Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build());
+
+    mockSpanner.putBatchWriteResult(
+        ImmutableList.of(
+            BatchWriteResponse.newBuilder()
+                .addAllIndexes(ImmutableList.of(0, 1))
+                .setStatus(com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE))
+                .build(),
+            BatchWriteResponse.newBuilder()
+                .addAllIndexes(ImmutableList.of(2, 3))
+                .setStatus(com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE))
+                .build()));
+
+    ServerStream responseStream = client.batchWriteAtleastOnce(mutations);
+    assertNotNull(responseStream);
+    List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
+    assertEquals(requests.size(), 1);
+    BatchWriteRequest request = requests.get(0);
+    assertEquals(request.getMutationsCount(), 4);
+    assertEquals(request.getRequestOptions().getPriority(), Priority.PRIORITY_UNSPECIFIED);
+    int idx = 0;
+    for (BatchWriteResponse response : responseStream) {
+      assertEquals(
+          response.getStatus(),
+          com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE).build());
+      assertEquals(response.getIndexesList(), ImmutableList.of(idx, idx + 1));
+      idx += 2;
+    }
+  }
+
+  @Test
+  public void testBatchWriteAtLeastOnceWithOptions() {
+    DatabaseClient client =
+        spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
+    client.batchWriteAtleastOnceWithOptions(
+        Collections.singletonList(
+            Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
+        Options.priority(RpcPriority.LOW));
+
+    List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
+    assertEquals(requests.size(), 1);
+    BatchWriteRequest request = requests.get(0);
+    assertNotNull(request.getRequestOptions());
+    assertEquals(Priority.PRIORITY_LOW, request.getRequestOptions().getPriority());
+  }
+
+  @Test
+  public void batchWriteAtLeastOnceWithTagOptions() {
+    // TODO: based on if tags are allowed in batchWrite, add this test.
+  }
+
   @Test
   public void testExecuteQueryWithTag() {
     DatabaseClient client =
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
index 66695676112..d73f2c828b9 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
@@ -42,6 +42,8 @@
 import com.google.rpc.RetryInfo;
 import com.google.spanner.v1.BatchCreateSessionsRequest;
 import com.google.spanner.v1.BatchCreateSessionsResponse;
+import com.google.spanner.v1.BatchWriteRequest;
+import com.google.spanner.v1.BatchWriteResponse;
 import com.google.spanner.v1.BeginTransactionRequest;
 import com.google.spanner.v1.CommitRequest;
 import com.google.spanner.v1.CommitResponse;
@@ -595,6 +597,7 @@ private static void checkStreamException(
   private ConcurrentMap transactionLastUsed = new ConcurrentHashMap<>();
   private int maxNumSessionsInOneBatch = 100;
   private int maxTotalSessions = Integer.MAX_VALUE;
+  private Iterable batchWriteResult = new ArrayList<>();
   private AtomicInteger numSessionsCreated = new AtomicInteger();
 
   private SimulatedExecutionTime beginTransactionExecutionTime = NO_EXECUTION_TIME;
@@ -676,6 +679,10 @@ public void putPartialStatementResult(StatementResult result) {
     }
   }
 
+  public void putBatchWriteResult(final Iterable responses) {
+    this.batchWriteResult = responses;
+  }
+
   private StatementResult getResult(Statement statement) {
     StatementResult res;
     synchronized (lock) {
@@ -1956,6 +1963,29 @@ public void commit(CommitRequest request, StreamObserver respons
     }
   }
 
+  @Override
+  public void batchWrite(
+      BatchWriteRequest request, StreamObserver responseObserver) {
+    requests.add(request);
+    Preconditions.checkNotNull(request.getSession());
+    Session session = sessions.get(request.getSession());
+    if (session == null) {
+      setSessionNotFound(request.getSession(), responseObserver);
+      return;
+    }
+    sessionLastUsed.put(session.getName(), Instant.now());
+    try {
+      for (BatchWriteResponse response : batchWriteResult) {
+        responseObserver.onNext(response);
+      }
+      responseObserver.onCompleted();
+    } catch (StatusRuntimeException t) {
+      responseObserver.onError(t);
+    } catch (Throwable t) {
+      responseObserver.onError(Status.INTERNAL.asRuntimeException());
+    }
+  }
+
   private void commitTransaction(ByteString transactionId) {
     transactions.remove(transactionId);
     isPartitionedDmlTransaction.remove(transactionId);
@@ -2183,6 +2213,7 @@ public void reset() {
     transactionCounters = new ConcurrentHashMap<>();
     partitionTokens = new ConcurrentHashMap<>();
     transactionLastUsed = new ConcurrentHashMap<>();
+    batchWriteResult = new ArrayList<>();
 
     numSessionsCreated.set(0);
     stickyGlobalExceptions = false;

From abedd1505d6f9083e4a755df585b1f0ee163dae0 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Mon, 5 Jun 2023 13:27:31 +0000
Subject: [PATCH 03/23] test: add commit timestamp to proto

---
 .../cloud/spanner/DatabaseClientImplTest.java    | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index ddb0b49c99e..07a7bacd63a 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -86,6 +86,7 @@
 import io.grpc.inprocess.InProcessServerBuilder;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Base64;
@@ -131,6 +132,8 @@ public class DatabaseClientImplTest {
   private static final Statement INVALID_UPDATE_STATEMENT =
       Statement.of("UPDATE NON_EXISTENT_TABLE SET BAR=1 WHERE BAZ=2");
   private static final long UPDATE_COUNT = 1L;
+  private static final com.google.rpc.Status STATUS_OK =
+      com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE).build();
   private Spanner spanner;
   private Spanner spannerWithEmptySessionPool;
   private static ExecutorService executor;
@@ -326,15 +329,23 @@ public void testBatchWriteAtLeastOnce() {
             Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
             Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build());
 
+    Instant time = Instant.now();
+    com.google.protobuf.Timestamp ts =
+        com.google.protobuf.Timestamp.newBuilder()
+            .setSeconds(time.getEpochSecond())
+            .setNanos(time.getNano())
+            .build();
     mockSpanner.putBatchWriteResult(
         ImmutableList.of(
             BatchWriteResponse.newBuilder()
                 .addAllIndexes(ImmutableList.of(0, 1))
-                .setStatus(com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE))
+                .setStatus(STATUS_OK)
+                .setCommitTimestamp(ts)
                 .build(),
             BatchWriteResponse.newBuilder()
                 .addAllIndexes(ImmutableList.of(2, 3))
-                .setStatus(com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE))
+                .setStatus(STATUS_OK)
+                .setCommitTimestamp(ts)
                 .build()));
 
     ServerStream responseStream = client.batchWriteAtleastOnce(mutations);
@@ -350,6 +361,7 @@ public void testBatchWriteAtLeastOnce() {
           response.getStatus(),
           com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE).build());
       assertEquals(response.getIndexesList(), ImmutableList.of(idx, idx + 1));
+      assertEquals(response.getCommitTimestamp(), ts);
       idx += 2;
     }
   }

From 21d8f670e57ef07329b7a47ec8f357dbbf8136f4 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Mon, 5 Jun 2023 17:14:56 +0000
Subject: [PATCH 04/23] test: add commit timestamp to proto

---
 .../cloud/spanner/DatabaseClientImplTest.java | 19 +++----------------
 .../cloud/spanner/MockSpannerServiceImpl.java |  1 -
 2 files changed, 3 insertions(+), 17 deletions(-)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index 07a7bacd63a..9038f6a1505 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -329,23 +329,15 @@ public void testBatchWriteAtLeastOnce() {
             Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
             Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build());
 
-    Instant time = Instant.now();
-    com.google.protobuf.Timestamp ts =
-        com.google.protobuf.Timestamp.newBuilder()
-            .setSeconds(time.getEpochSecond())
-            .setNanos(time.getNano())
-            .build();
     mockSpanner.putBatchWriteResult(
         ImmutableList.of(
             BatchWriteResponse.newBuilder()
                 .addAllIndexes(ImmutableList.of(0, 1))
                 .setStatus(STATUS_OK)
-                .setCommitTimestamp(ts)
                 .build(),
             BatchWriteResponse.newBuilder()
                 .addAllIndexes(ImmutableList.of(2, 3))
                 .setStatus(STATUS_OK)
-                .setCommitTimestamp(ts)
                 .build()));
 
     ServerStream responseStream = client.batchWriteAtleastOnce(mutations);
@@ -359,9 +351,8 @@ public void testBatchWriteAtLeastOnce() {
     for (BatchWriteResponse response : responseStream) {
       assertEquals(
           response.getStatus(),
-          com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE).build());
+          STATUS_OK);
       assertEquals(response.getIndexesList(), ImmutableList.of(idx, idx + 1));
-      assertEquals(response.getCommitTimestamp(), ts);
       idx += 2;
     }
   }
@@ -370,11 +361,12 @@ public void testBatchWriteAtLeastOnce() {
   public void testBatchWriteAtLeastOnceWithOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
-    client.batchWriteAtleastOnceWithOptions(
+    ServerStream responseStream = client.batchWriteAtleastOnceWithOptions(
         Collections.singletonList(
             Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
         Options.priority(RpcPriority.LOW));
 
+    assertNotNull(responseStream);
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
@@ -382,11 +374,6 @@ public void testBatchWriteAtLeastOnceWithOptions() {
     assertEquals(Priority.PRIORITY_LOW, request.getRequestOptions().getPriority());
   }
 
-  @Test
-  public void batchWriteAtLeastOnceWithTagOptions() {
-    // TODO: based on if tags are allowed in batchWrite, add this test.
-  }
-
   @Test
   public void testExecuteQueryWithTag() {
     DatabaseClient client =
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
index d73f2c828b9..204ee4999f0 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
@@ -2213,7 +2213,6 @@ public void reset() {
     transactionCounters = new ConcurrentHashMap<>();
     partitionTokens = new ConcurrentHashMap<>();
     transactionLastUsed = new ConcurrentHashMap<>();
-    batchWriteResult = new ArrayList<>();
 
     numSessionsCreated.set(0);
     stickyGlobalExceptions = false;

From 4858965bbb4d76142cb45dcc297ef62bf8811902 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Mon, 12 Jun 2023 10:29:36 +0000
Subject: [PATCH 05/23] test: add commit timestamp to proto

---
 .../cloud/spanner/DatabaseClientImplTest.java | 42 +++++++++++++------
 .../cloud/spanner/MockSpannerServiceImpl.java |  2 +-
 2 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index 9038f6a1505..8c219a9c2e6 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -86,7 +86,6 @@
 import io.grpc.inprocess.InProcessServerBuilder;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
-import java.time.Instant;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Base64;
@@ -328,16 +327,15 @@ public void testBatchWriteAtLeastOnce() {
             Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build(),
             Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
             Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build());
-
-    mockSpanner.putBatchWriteResult(
+    mockSpanner.setBatchWriteResult(
         ImmutableList.of(
             BatchWriteResponse.newBuilder()
-                .addAllIndexes(ImmutableList.of(0, 1))
                 .setStatus(STATUS_OK)
+                .addAllIndexes(ImmutableList.of(0, 1))
                 .build(),
             BatchWriteResponse.newBuilder()
-                .addAllIndexes(ImmutableList.of(2, 3))
                 .setStatus(STATUS_OK)
+                .addAllIndexes(ImmutableList.of(2, 3))
                 .build()));
 
     ServerStream responseStream = client.batchWriteAtleastOnce(mutations);
@@ -351,7 +349,7 @@ public void testBatchWriteAtLeastOnce() {
     for (BatchWriteResponse response : responseStream) {
       assertEquals(
           response.getStatus(),
-          STATUS_OK);
+          com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE).build());
       assertEquals(response.getIndexesList(), ImmutableList.of(idx, idx + 1));
       idx += 2;
     }
@@ -361,17 +359,35 @@ public void testBatchWriteAtLeastOnce() {
   public void testBatchWriteAtLeastOnceWithOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
-    ServerStream responseStream = client.batchWriteAtleastOnceWithOptions(
-        Collections.singletonList(
-            Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
-        Options.priority(RpcPriority.LOW));
+    ServerStream responseStream =
+        client.batchWriteAtleastOnceWithOptions(
+            Collections.singletonList(
+                Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
+            Options.priority(RpcPriority.LOW));
 
-    assertNotNull(responseStream);
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
-    assertNotNull(request.getRequestOptions());
-    assertEquals(Priority.PRIORITY_LOW, request.getRequestOptions().getPriority());
+    assertEquals(request.getMutationsCount(), 1);
+    assertEquals(request.getRequestOptions().getPriority(), Priority.PRIORITY_LOW);
+  }
+
+  @Test
+  public void batchWriteAtLeastOnceWithTagOptions() {
+    DatabaseClient client =
+        spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
+    ServerStream responseStream =
+        client.batchWriteAtleastOnceWithOptions(
+            Collections.singletonList(
+                Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
+            Options.tag("app=spanner,env=test"));
+
+    List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
+    assertEquals(requests.size(), 1);
+    BatchWriteRequest request = requests.get(0);
+    assertEquals(request.getMutationsCount(), 1);
+    assertEquals(request.getRequestOptions().getTransactionTag(), "app=spanner,env=test");
+    assertThat(request.getRequestOptions().getRequestTag()).isEmpty();
   }
 
   @Test
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
index 204ee4999f0..75aceae19ae 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
@@ -679,7 +679,7 @@ public void putPartialStatementResult(StatementResult result) {
     }
   }
 
-  public void putBatchWriteResult(final Iterable responses) {
+  public void setBatchWriteResult(final Iterable responses) {
     this.batchWriteResult = responses;
   }
 

From 81743a745515061a68d07468da63a53ea2f65582 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Mon, 12 Jun 2023 14:01:51 +0000
Subject: [PATCH 06/23] consume the stream in tests

---
 .../cloud/spanner/DatabaseClientImplTest.java | 23 +++++++++++--------
 .../cloud/spanner/MockSpannerServiceImpl.java |  4 +++-
 2 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index 8c219a9c2e6..70ae0548459 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -299,7 +299,7 @@ public void testWriteAtLeastOnceWithOptions() {
   }
 
   @Test
-  public void writeAtLeastOnceWithTagOptions() {
+  public void testWriteAtLeastOnceWithTagOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
     client.writeAtLeastOnceWithOptions(
@@ -321,7 +321,7 @@ public void writeAtLeastOnceWithTagOptions() {
   public void testBatchWriteAtLeastOnce() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
-    Iterable mutations =
+    final Iterable mutations =
         ImmutableList.of(
             Mutation.newInsertBuilder("FOO1").set("ID").to(1L).set("NAME").to("Bar1").build(),
             Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build(),
@@ -339,12 +339,6 @@ public void testBatchWriteAtLeastOnce() {
                 .build()));
 
     ServerStream responseStream = client.batchWriteAtleastOnce(mutations);
-    assertNotNull(responseStream);
-    List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
-    assertEquals(requests.size(), 1);
-    BatchWriteRequest request = requests.get(0);
-    assertEquals(request.getMutationsCount(), 4);
-    assertEquals(request.getRequestOptions().getPriority(), Priority.PRIORITY_UNSPECIFIED);
     int idx = 0;
     for (BatchWriteResponse response : responseStream) {
       assertEquals(
@@ -353,6 +347,13 @@ public void testBatchWriteAtLeastOnce() {
       assertEquals(response.getIndexesList(), ImmutableList.of(idx, idx + 1));
       idx += 2;
     }
+
+    assertNotNull(responseStream);
+    List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
+    assertEquals(requests.size(), 1);
+    BatchWriteRequest request = requests.get(0);
+    assertEquals(request.getMutationsCount(), 4);
+    assertEquals(request.getRequestOptions().getPriority(), Priority.PRIORITY_UNSPECIFIED);
   }
 
   @Test
@@ -364,7 +365,9 @@ public void testBatchWriteAtLeastOnceWithOptions() {
             Collections.singletonList(
                 Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
             Options.priority(RpcPriority.LOW));
+    for (BatchWriteResponse response : responseStream) {}
 
+    assertNotNull(responseStream);
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
@@ -373,7 +376,7 @@ public void testBatchWriteAtLeastOnceWithOptions() {
   }
 
   @Test
-  public void batchWriteAtLeastOnceWithTagOptions() {
+  public void testBatchWriteAtLeastOnceWithTagOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
     ServerStream responseStream =
@@ -381,7 +384,9 @@ public void batchWriteAtLeastOnceWithTagOptions() {
             Collections.singletonList(
                 Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
             Options.tag("app=spanner,env=test"));
+    for (BatchWriteResponse response : responseStream) {}
 
+    assertNotNull(responseStream);
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
index 75aceae19ae..6e2da1c38bb 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java
@@ -680,7 +680,9 @@ public void putPartialStatementResult(StatementResult result) {
   }
 
   public void setBatchWriteResult(final Iterable responses) {
-    this.batchWriteResult = responses;
+    synchronized (lock) {
+      this.batchWriteResult = responses;
+    }
   }
 
   private StatementResult getResult(Statement statement) {

From 65abc962c5a8a652663d0c0429728d9de819da40 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Mon, 12 Jun 2023 14:15:12 +0000
Subject: [PATCH 07/23] refactor tests

---
 .../cloud/spanner/DatabaseClientImplTest.java | 49 +++++++++----------
 1 file changed, 22 insertions(+), 27 deletions(-)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index 70ae0548459..63ecfc833d7 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -133,6 +133,22 @@ public class DatabaseClientImplTest {
   private static final long UPDATE_COUNT = 1L;
   private static final com.google.rpc.Status STATUS_OK =
       com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE).build();
+  private static final Iterable MUTATIONS =
+      ImmutableList.of(
+          Mutation.newInsertBuilder("FOO1").set("ID").to(1L).set("NAME").to("Bar1").build(),
+          Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build(),
+          Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
+          Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build());
+  private static final Iterable BATCH_WRITE_RESPONSES =
+      ImmutableList.of(
+          BatchWriteResponse.newBuilder()
+              .setStatus(STATUS_OK)
+              .addAllIndexes(ImmutableList.of(0, 1))
+              .build(),
+          BatchWriteResponse.newBuilder()
+              .setStatus(STATUS_OK)
+              .addAllIndexes(ImmutableList.of(2, 3))
+              .build());
   private Spanner spanner;
   private Spanner spannerWithEmptySessionPool;
   private static ExecutorService executor;
@@ -150,6 +166,7 @@ public static void startStaticServer() throws IOException {
         StatementResult.exception(
             INVALID_UPDATE_STATEMENT,
             Status.INVALID_ARGUMENT.withDescription("invalid statement").asRuntimeException()));
+    mockSpanner.setBatchWriteResult(BATCH_WRITE_RESPONSES);
 
     executor = Executors.newSingleThreadExecutor();
     String uniqueName = InProcessServerBuilder.generateName();
@@ -321,24 +338,8 @@ public void testWriteAtLeastOnceWithTagOptions() {
   public void testBatchWriteAtLeastOnce() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
-    final Iterable mutations =
-        ImmutableList.of(
-            Mutation.newInsertBuilder("FOO1").set("ID").to(1L).set("NAME").to("Bar1").build(),
-            Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build(),
-            Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
-            Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build());
-    mockSpanner.setBatchWriteResult(
-        ImmutableList.of(
-            BatchWriteResponse.newBuilder()
-                .setStatus(STATUS_OK)
-                .addAllIndexes(ImmutableList.of(0, 1))
-                .build(),
-            BatchWriteResponse.newBuilder()
-                .setStatus(STATUS_OK)
-                .addAllIndexes(ImmutableList.of(2, 3))
-                .build()));
 
-    ServerStream responseStream = client.batchWriteAtleastOnce(mutations);
+    ServerStream responseStream = client.batchWriteAtleastOnce(MUTATIONS);
     int idx = 0;
     for (BatchWriteResponse response : responseStream) {
       assertEquals(
@@ -361,17 +362,14 @@ public void testBatchWriteAtLeastOnceWithOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
     ServerStream responseStream =
-        client.batchWriteAtleastOnceWithOptions(
-            Collections.singletonList(
-                Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
-            Options.priority(RpcPriority.LOW));
+        client.batchWriteAtleastOnceWithOptions(MUTATIONS, Options.priority(RpcPriority.LOW));
     for (BatchWriteResponse response : responseStream) {}
 
     assertNotNull(responseStream);
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
-    assertEquals(request.getMutationsCount(), 1);
+    assertEquals(request.getMutationsCount(), 4);
     assertEquals(request.getRequestOptions().getPriority(), Priority.PRIORITY_LOW);
   }
 
@@ -380,17 +378,14 @@ public void testBatchWriteAtLeastOnceWithTagOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
     ServerStream responseStream =
-        client.batchWriteAtleastOnceWithOptions(
-            Collections.singletonList(
-                Mutation.newInsertBuilder("FOO").set("ID").to(1L).set("NAME").to("Bar").build()),
-            Options.tag("app=spanner,env=test"));
+        client.batchWriteAtleastOnceWithOptions(MUTATIONS, Options.tag("app=spanner,env=test"));
     for (BatchWriteResponse response : responseStream) {}
 
     assertNotNull(responseStream);
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
-    assertEquals(request.getMutationsCount(), 1);
+    assertEquals(request.getMutationsCount(), 4);
     assertEquals(request.getRequestOptions().getTransactionTag(), "app=spanner,env=test");
     assertThat(request.getRequestOptions().getRequestTag()).isEmpty();
   }

From 8d76346f58335091606c493b447b49fbff700c9d Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Wed, 14 Jun 2023 07:03:20 +0000
Subject: [PATCH 08/23] refactor tests

---
 .../com/google/cloud/spanner/SessionImpl.java |  8 +++---
 .../google/cloud/spanner/it/ITWriteTest.java  | 26 +++++++++++++++++++
 2 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
index 906bfb11970..8d971c6f399 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
@@ -226,12 +226,10 @@ public ServerStream batchWriteAtleastOnceWithOptions(
     }
     Span span = tracer.spanBuilder(SpannerImpl.BATCH_WRITE).startSpan();
     try (Scope s = tracer.withSpan(span)) {
-      ServerStream response =
-          spanner.getRpc().batchWriteAtleastOnce(requestBuilder.build(), this.options);
-      return response;
-    } catch (RuntimeException e) {
+      return spanner.getRpc().batchWriteAtleastOnce(requestBuilder.build(), this.options);
+    } catch (Throwable e) {
       TraceUtil.setWithFailure(span, e);
-      throw e;
+      throw SpannerExceptionFactory.newSpannerException(e);
     } finally {
       span.end(TraceUtil.END_SPAN_OPTIONS);
     }
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
index 020beb68ef9..e40b6ef3c8d 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
@@ -29,6 +29,7 @@
 import static org.junit.Assume.assumeFalse;
 import static org.junit.Assume.assumeTrue;
 
+import com.google.api.gax.rpc.ServerStream;
 import com.google.cloud.ByteArray;
 import com.google.cloud.Date;
 import com.google.cloud.Timestamp;
@@ -53,6 +54,9 @@
 import com.google.cloud.spanner.testing.EmulatorSpannerHelper;
 import com.google.common.collect.ImmutableList;
 import com.google.protobuf.NullValue;
+import com.google.rpc.Code;
+import com.google.rpc.Status;
+import com.google.spanner.v1.BatchWriteResponse;
 import io.grpc.Context;
 import java.math.BigDecimal;
 import java.util.ArrayList;
@@ -212,6 +216,28 @@ public void writeAtLeastOnce() {
     assertThat(row.getString(0)).isEqualTo("v1");
   }
 
+  @Test
+  public void batchWriteAtLeastOnce() {
+    ServerStream responses =
+        client.batchWriteAtleastOnce(
+            ImmutableList.of(
+                Mutation.newInsertOrUpdateBuilder("T")
+                    .set("K")
+                    .to(lastKey = uniqueString())
+                    .set("StringValue")
+                    .to("v1")
+                    .build()));
+    for (BatchWriteResponse response : responses) {
+      assertEquals(response.getIndexesList(), Collections.singletonList(0));
+      if (response.getStatus().equals(Status.newBuilder().setCode(Code.OK_VALUE).build())) {
+        assertNotNull(response.getCommitTimestamp());
+        Struct row = readLastRow("StringValue");
+        assertFalse(row.isNull(0));
+        assertEquals(row.getString(0), "v1");
+      }
+    }
+  }
+
   @Test
   public void testWriteReturnsCommitStats() {
     assumeFalse("Emulator does not return commit statistics", isUsingEmulator());

From a3569ae5d254d318298aae1519545e0893dfad99 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Tue, 20 Jun 2023 04:59:09 +0000
Subject: [PATCH 09/23] test if mutations are correctly applied

---
 .../google/cloud/spanner/it/ITWriteTest.java  | 60 ++++++++++++++-----
 1 file changed, 46 insertions(+), 14 deletions(-)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
index e40b6ef3c8d..e2518b95fb3 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
@@ -25,6 +25,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 import static org.junit.Assume.assumeFalse;
 import static org.junit.Assume.assumeTrue;
@@ -64,9 +65,11 @@
 import java.util.Base64;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
@@ -196,9 +199,13 @@ private Mutation.WriteBuilder baseInsert() {
   }
 
   private Struct readLastRow(String... columns) {
+    return readRow(lastKey, columns);
+  }
+
+  private Struct readRow(String key, String... columns) {
     return client
         .singleUse(TimestampBound.strong())
-        .readRow("T", Key.of(lastKey), Arrays.asList(columns));
+        .readRow("T", Key.of(key), Arrays.asList(columns));
   }
 
   @Test
@@ -218,24 +225,49 @@ public void writeAtLeastOnce() {
 
   @Test
   public void batchWriteAtLeastOnce() {
-    ServerStream responses =
-        client.batchWriteAtleastOnce(
-            ImmutableList.of(
-                Mutation.newInsertOrUpdateBuilder("T")
-                    .set("K")
-                    .to(lastKey = uniqueString())
-                    .set("StringValue")
-                    .to("v1")
-                    .build()));
+    final String k1 = uniqueString(), k2 = uniqueString();
+    lastKey = k2;
+    final List mutations =
+        ImmutableList.of(
+            Mutation.newInsertOrUpdateBuilder("T")
+                .set("K")
+                .to(k1)
+                .set("StringValue")
+                .to("v1")
+                .set("BoolValue")
+                .to(true)
+                .build(),
+            Mutation.newInsertOrUpdateBuilder("T")
+                .set("K")
+                .to(k2)
+                .set("StringValue")
+                .to("v2")
+                .build());
+    ServerStream responses = client.batchWriteAtleastOnce(mutations);
+    Set responseIndexes = new HashSet<>();
+    Set appliedMutationIndexes = new HashSet<>();
     for (BatchWriteResponse response : responses) {
-      assertEquals(response.getIndexesList(), Collections.singletonList(0));
+      responseIndexes.addAll(response.getIndexesList());
       if (response.getStatus().equals(Status.newBuilder().setCode(Code.OK_VALUE).build())) {
+        appliedMutationIndexes.addAll(response.getIndexesList());
         assertNotNull(response.getCommitTimestamp());
-        Struct row = readLastRow("StringValue");
-        assertFalse(row.isNull(0));
-        assertEquals(row.getString(0), "v1");
       }
     }
+    assertEquals(responseIndexes, new HashSet<>(Arrays.asList(0, 1)));
+
+    Struct row;
+    // assert row with key k1
+    if (appliedMutationIndexes.contains(0)) {
+      row = readRow(k1, "StringValue", "BoolValue");
+      assertEquals(row.getString(0), "v1");
+      assertTrue(row.getBoolean(1));
+    }
+
+    // assert row with key k2
+    if (appliedMutationIndexes.contains(1)) {
+      row = readRow(k2, "StringValue");
+      assertEquals(row.getString(0), "v2");
+    }
   }
 
   @Test

From 4cb0ada5be23b4a008c9d93f78ec314ff0a817c0 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Tue, 20 Jun 2023 05:04:23 +0000
Subject: [PATCH 10/23] null check

---
 .../src/test/java/com/google/cloud/spanner/it/ITWriteTest.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
index e2518b95fb3..508ec521e9f 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
@@ -265,8 +265,9 @@ public void batchWriteAtLeastOnce() {
 
     // assert row with key k2
     if (appliedMutationIndexes.contains(1)) {
-      row = readRow(k2, "StringValue");
+      row = readRow(k2, "StringValue", "BoolValue");
       assertEquals(row.getString(0), "v2");
+      assertTrue(row.isNull(1));
     }
   }
 

From 5401b7d40007c67fc7f99c5a496f6ae23943b3db Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Tue, 20 Jun 2023 05:12:14 +0000
Subject: [PATCH 11/23] skip for emulator

---
 .../src/test/java/com/google/cloud/spanner/it/ITWriteTest.java   | 1 +
 1 file changed, 1 insertion(+)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
index 508ec521e9f..d4ef076c9a8 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
@@ -225,6 +225,7 @@ public void writeAtLeastOnce() {
 
   @Test
   public void batchWriteAtLeastOnce() {
+    assumeFalse("Emulator does not support BatchWriteAtleastOnce", isUsingEmulator());
     final String k1 = uniqueString(), k2 = uniqueString();
     lastKey = k2;
     final List mutations =

From 95c3326f249d6b8621ef05fc63f41c598ed1c000 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Tue, 20 Jun 2023 07:02:52 +0000
Subject: [PATCH 12/23] add method documentation

---
 .../google/cloud/spanner/DatabaseClient.java  | 82 +++++++++++++++++++
 1 file changed, 82 insertions(+)

diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
index 8ef2e669d95..3f8503f50e5 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
@@ -193,9 +193,91 @@ CommitResponse writeWithOptions(Iterable mutations, TransactionOption.
   CommitResponse writeAtLeastOnceWithOptions(
       Iterable mutations, TransactionOption... options) throws SpannerException;
 
+  /**
+   * Batches the supplied mutations in a collection of efficient transactions. The mutations are
+   * applied non-atomically in an unspecified order and thus, they must be independent of each
+   * other. Partial failure is possible, i.e., some mutations may have been applied successfully,
+   * while some may have failed. The results of individual batches are streamed into the response as
+   * and when the batches are applied.
+   *
+   * 

Since this method does not feature replay protection, it may attempt to apply {@code + * mutations} more than once; if the mutations are not idempotent, this may lead to a failure + * being reported when the mutation was applied once. For example, an insert may fail with {@link + * ErrorCode#ALREADY_EXISTS} even though the row did not exist before this method was called. For + * this reason, most users of the library will prefer to use {@link #write(Iterable)} instead. + * However, {@code batchWriteAtLeastOnce()} method may be appropriate for non-atomically + * committing multiple mutations in a single RPC with low latency. + * + *

Example of BatchWriteAtleastOnce + * + *

{@code
+   * long singerId = my_singer_id;
+   * Mutation mutation = Mutation.newInsertBuilder("Singers")
+   *         .set("SingerId")
+   *         .to(singerId)
+   *         .set("FirstName")
+   *         .to("Billy")
+   *         .set("LastName")
+   *         .to("Joel")
+   *         .build();
+   * ServerStream responses =
+   *     dbClient.batchWriteAtLeastOnce(
+   *             Collections.singletonList(mutation),
+   *             Options.priority(RpcPriority.LOW));
+   * for (BatchWriteResponse response : responses) {
+   *   // Do something when a response is received.
+   * }
+   * }
+ * + * @return ServerStream\ + */ ServerStream batchWriteAtleastOnce(Iterable mutations) throws SpannerException; + /** + * Batches the supplied mutations in a collection of efficient transactions. The mutations are + * applied non-atomically in an unspecified order and thus, they must be independent of each + * other. Partial failure is possible, i.e., some mutations may have been applied successfully, + * while some may have failed. The results of individual batches are streamed into the response as + * and when the batches are applied. + * + *

Since this method does not feature replay protection, it may attempt to apply {@code + * mutations} more than once; if the mutations are not idempotent, this may lead to a failure + * being reported when the mutation was applied once. For example, an insert may fail with {@link + * ErrorCode#ALREADY_EXISTS} even though the row did not exist before this method was called. For + * this reason, most users of the library will prefer to use {@link #write(Iterable)} instead. + * However, {@code batchWriteAtLeastOnce()} method may be appropriate for non-atomically + * committing multiple mutations in a single RPC with low latency. + * + *

Example of BatchWriteAtleastOnce + * + *

{@code
+   * long singerId = my_singer_id;
+   * Mutation mutation = Mutation.newInsertBuilder("Singers")
+   *         .set("SingerId")
+   *         .to(singerId)
+   *         .set("FirstName")
+   *         .to("Billy")
+   *         .set("LastName")
+   *         .to("Joel")
+   *         .build();
+   * ServerStream responses =
+   *     dbClient.batchWriteAtLeastOnce(Collections.singletonList(mutation));
+   * for (BatchWriteResponse response : responses) {
+   *   // Do something when a response is received.
+   * }
+   * }
+ * + * Options for a transaction can include: + * + *
    + *
  • {@link Options#priority(com.google.cloud.spanner.Options.RpcPriority)}: The {@link + * RpcPriority} to use for the batch write request. + *
  • {@link Options#tag(String)}: The transaction tag to use for the batch write request. + *
+ * + * @return ServerStream\ + */ ServerStream batchWriteAtleastOnceWithOptions( Iterable mutations, TransactionOption... options) throws SpannerException; From 567820736aa083909294382a0e652b28af948904 Mon Sep 17 00:00:00 2001 From: rajatrb Date: Tue, 20 Jun 2023 07:04:59 +0000 Subject: [PATCH 13/23] add method documentation --- .../java/com/google/cloud/spanner/DatabaseClient.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java index 3f8503f50e5..88c12d37b12 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java @@ -221,9 +221,7 @@ CommitResponse writeAtLeastOnceWithOptions( * .to("Joel") * .build(); * ServerStream responses = - * dbClient.batchWriteAtLeastOnce( - * Collections.singletonList(mutation), - * Options.priority(RpcPriority.LOW)); + * dbClient.batchWriteAtLeastOnce(Collections.singletonList(mutation)); * for (BatchWriteResponse response : responses) { * // Do something when a response is received. * } @@ -262,7 +260,9 @@ ServerStream batchWriteAtleastOnce(Iterable mutati * .to("Joel") * .build(); * ServerStream responses = - * dbClient.batchWriteAtLeastOnce(Collections.singletonList(mutation)); + * dbClient.batchWriteAtLeastOnce( + * Collections.singletonList(mutation), + * Options.priority(RpcPriority.LOW)); * for (BatchWriteResponse response : responses) { * // Do something when a response is received. * } From 347e9c34f2a4cbb2ddb684e8db2bc33eaa4876dc Mon Sep 17 00:00:00 2001 From: rajatrb Date: Tue, 20 Jun 2023 07:05:39 +0000 Subject: [PATCH 14/23] add method documentation --- .../src/main/java/com/google/cloud/spanner/DatabaseClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java index 88c12d37b12..71bcd8d83ac 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java @@ -247,7 +247,7 @@ ServerStream batchWriteAtleastOnce(Iterable mutati * However, {@code batchWriteAtLeastOnce()} method may be appropriate for non-atomically * committing multiple mutations in a single RPC with low latency. * - *

Example of BatchWriteAtleastOnce + *

Example of BatchWriteAtleastOnceWithOptions * *

{@code
    * long singerId = my_singer_id;

From 1deaa29a762ef53add0a3e8979e070ae07050cb3 Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Thu, 6 Jul 2023 13:06:24 +0000
Subject: [PATCH 15/23] remove autogenerated code

---
 .../cloud/spanner/v1/SpannerClient.java       |   37 -
 .../cloud/spanner/v1/SpannerSettings.java     |   13 -
 .../cloud/spanner/v1/gapic_metadata.json      |    3 -
 .../spanner/v1/stub/GrpcSpannerStub.java      |   30 -
 .../spanner/v1/stub/HttpJsonSpannerStub.java  |   54 -
 .../cloud/spanner/v1/stub/SpannerStub.java    |    6 -
 .../spanner/v1/stub/SpannerStubSettings.java  |   28 -
 .../com/google/spanner/v1/SpannerGrpc.java    |  120 +-
 .../spanner/admin/database/v1/Backup.java     |   97 +-
 .../spanner/admin/database/v1/BackupInfo.java |    5 +
 .../admin/database/v1/BackupOrBuilder.java    |    4 -
 .../admin/database/v1/BackupProto.java        |  190 +--
 .../admin/database/v1/CommonProto.java        |   49 +-
 .../v1/CopyBackupEncryptionConfig.java        |    5 +
 .../admin/database/v1/CopyBackupMetadata.java |    5 +
 .../admin/database/v1/CopyBackupRequest.java  |    5 +
 .../v1/CreateBackupEncryptionConfig.java      |    5 +
 .../database/v1/CreateBackupMetadata.java     |    5 +
 .../database/v1/CreateBackupRequest.java      |    5 +
 .../database/v1/CreateDatabaseMetadata.java   |    5 +
 .../database/v1/CreateDatabaseRequest.java    |   47 +-
 .../spanner/admin/database/v1/Database.java   |   60 +-
 .../admin/database/v1/DatabaseOrBuilder.java  |   12 -
 .../admin/database/v1/DatabaseRole.java       |    5 +
 .../database/v1/DdlStatementActionInfo.java   | 1161 -------------
 .../v1/DdlStatementActionInfoOrBuilder.java   |  148 --
 .../database/v1/DeleteBackupRequest.java      |    5 +
 .../database/v1/DropDatabaseRequest.java      |    5 +
 .../admin/database/v1/EncryptionConfig.java   |    5 +
 .../admin/database/v1/EncryptionInfo.java     |    5 +
 .../admin/database/v1/GetBackupRequest.java   |    5 +
 .../database/v1/GetDatabaseDdlRequest.java    |    5 +
 .../database/v1/GetDatabaseDdlResponse.java   |   47 +-
 .../admin/database/v1/GetDatabaseRequest.java |    5 +
 .../v1/ListBackupOperationsRequest.java       |   47 +-
 .../ListBackupOperationsRequestOrBuilder.java |   12 -
 .../v1/ListBackupOperationsResponse.java      |    5 +
 .../admin/database/v1/ListBackupsRequest.java |   47 +-
 .../v1/ListBackupsRequestOrBuilder.java       |   12 -
 .../database/v1/ListBackupsResponse.java      |    5 +
 .../v1/ListDatabaseOperationsRequest.java     |   47 +-
 ...istDatabaseOperationsRequestOrBuilder.java |   12 -
 .../v1/ListDatabaseOperationsResponse.java    |    5 +
 .../database/v1/ListDatabaseRolesRequest.java |    5 +
 .../v1/ListDatabaseRolesResponse.java         |    5 +
 .../database/v1/ListDatabasesRequest.java     |    5 +
 .../database/v1/ListDatabasesResponse.java    |    5 +
 .../admin/database/v1/OperationProgress.java  |    5 +
 .../v1/OptimizeRestoredDatabaseMetadata.java  |    5 +
 .../v1/RestoreDatabaseEncryptionConfig.java   |    5 +
 .../database/v1/RestoreDatabaseMetadata.java  |    7 +-
 .../v1/RestoreDatabaseMetadataOrBuilder.java  |    3 +-
 .../database/v1/RestoreDatabaseRequest.java   |    7 +-
 .../v1/RestoreDatabaseRequestOrBuilder.java   |    2 +-
 .../admin/database/v1/RestoreInfo.java        |    7 +-
 .../database/v1/RestoreInfoOrBuilder.java     |    2 +-
 .../v1/SpannerDatabaseAdminProto.java         |  528 +++---
 .../database/v1/UpdateBackupRequest.java      |    5 +
 .../v1/UpdateDatabaseDdlMetadata.java         |  880 +++-------
 .../UpdateDatabaseDdlMetadataOrBuilder.java   |  125 +-
 .../database/v1/UpdateDatabaseDdlRequest.java |   63 +-
 .../v1/UpdateDatabaseDdlRequestOrBuilder.java |    4 -
 .../database/v1/UpdateDatabaseMetadata.java   |    5 +
 .../database/v1/UpdateDatabaseRequest.java    |    5 +
 .../database/v1/spanner_database_admin.proto  |   40 +-
 .../v1/CreateInstanceConfigMetadata.java      |    5 +
 .../v1/CreateInstanceConfigRequest.java       |    5 +
 .../instance/v1/CreateInstanceMetadata.java   |    5 +
 .../instance/v1/CreateInstanceRequest.java    |    5 +
 .../v1/DeleteInstanceConfigRequest.java       |    5 +
 .../instance/v1/DeleteInstanceRequest.java    |    5 +
 .../instance/v1/GetInstanceConfigRequest.java |    5 +
 .../admin/instance/v1/GetInstanceRequest.java |    5 +
 .../spanner/admin/instance/v1/Instance.java   |   87 +-
 .../admin/instance/v1/InstanceConfig.java     |   75 +-
 .../instance/v1/InstanceConfigOrBuilder.java  |   15 -
 .../admin/instance/v1/InstanceOrBuilder.java  |   17 -
 .../ListInstanceConfigOperationsRequest.java  |   47 +-
 ...tanceConfigOperationsRequestOrBuilder.java |   12 -
 .../ListInstanceConfigOperationsResponse.java |    5 +
 .../v1/ListInstanceConfigsRequest.java        |    5 +
 .../v1/ListInstanceConfigsResponse.java       |    5 +
 .../instance/v1/ListInstancesRequest.java     |   26 +-
 .../v1/ListInstancesRequestOrBuilder.java     |    6 -
 .../instance/v1/ListInstancesResponse.java    |    5 +
 .../admin/instance/v1/OperationProgress.java  |    5 +
 .../admin/instance/v1/ReplicaInfo.java        |   11 +-
 .../v1/SpannerInstanceAdminProto.java         |  379 +++--
 .../v1/UpdateInstanceConfigMetadata.java      |    5 +
 .../v1/UpdateInstanceConfigRequest.java       |    5 +
 .../instance/v1/UpdateInstanceMetadata.java   |    5 +
 .../instance/v1/UpdateInstanceRequest.java    |    5 +
 .../v1/BatchCreateSessionsRequest.java        |    5 +
 .../v1/BatchCreateSessionsResponse.java       |    5 +
 .../google/spanner/v1/BatchWriteRequest.java  | 1435 -----------------
 .../v1/BatchWriteRequestOrBuilder.java        |  150 --
 .../google/spanner/v1/BatchWriteResponse.java | 1221 --------------
 .../v1/BatchWriteResponseOrBuilder.java       |  139 --
 .../spanner/v1/BeginTransactionRequest.java   |    5 +
 .../com/google/spanner/v1/CommitRequest.java  |    7 +-
 .../spanner/v1/CommitRequestOrBuilder.java    |    2 +-
 .../com/google/spanner/v1/CommitResponse.java |   10 +
 .../spanner/v1/CreateSessionRequest.java      |    5 +
 .../spanner/v1/DeleteSessionRequest.java      |    5 +
 .../spanner/v1/ExecuteBatchDmlRequest.java    |  125 +-
 .../v1/ExecuteBatchDmlRequestOrBuilder.java   |    9 -
 .../spanner/v1/ExecuteBatchDmlResponse.java   |   40 +-
 .../v1/ExecuteBatchDmlResponseOrBuilder.java  |    5 -
 .../google/spanner/v1/ExecuteSqlRequest.java  |  225 +--
 .../v1/ExecuteSqlRequestOrBuilder.java        |   29 -
 .../google/spanner/v1/GetSessionRequest.java  |    5 +
 .../java/com/google/spanner/v1/KeyRange.java  |   63 +-
 .../google/spanner/v1/KeyRangeOrBuilder.java  |    4 +-
 .../java/com/google/spanner/v1/KeySet.java    |    7 +-
 .../spanner/v1/ListSessionsRequest.java       |   26 +-
 .../v1/ListSessionsRequestOrBuilder.java      |    6 -
 .../spanner/v1/ListSessionsResponse.java      |    5 +
 .../java/com/google/spanner/v1/Mutation.java  |   95 +-
 .../google/spanner/v1/MutationOrBuilder.java  |    8 +-
 .../com/google/spanner/v1/MutationProto.java  |   24 +-
 .../google/spanner/v1/PartialResultSet.java   |  327 +---
 .../spanner/v1/PartialResultSetOrBuilder.java |   70 -
 .../java/com/google/spanner/v1/Partition.java |    5 +
 .../google/spanner/v1/PartitionOptions.java   |   13 +-
 .../spanner/v1/PartitionOptionsOrBuilder.java |    2 -
 .../spanner/v1/PartitionQueryRequest.java     |   71 +-
 .../v1/PartitionQueryRequestOrBuilder.java    |   19 -
 .../spanner/v1/PartitionReadRequest.java      |   58 +-
 .../v1/PartitionReadRequestOrBuilder.java     |    3 -
 .../google/spanner/v1/PartitionResponse.java  |    5 +
 .../java/com/google/spanner/v1/PlanNode.java  |   27 +-
 .../google/spanner/v1/PlanNodeOrBuilder.java  |    3 -
 .../java/com/google/spanner/v1/QueryPlan.java |    5 +
 .../com/google/spanner/v1/ReadRequest.java    |   74 +-
 .../spanner/v1/ReadRequestOrBuilder.java      |    7 -
 .../com/google/spanner/v1/RequestOptions.java |    7 +-
 .../java/com/google/spanner/v1/ResultSet.java |    5 +
 .../google/spanner/v1/ResultSetMetadata.java  |   29 +-
 .../v1/ResultSetMetadataOrBuilder.java        |    6 -
 .../com/google/spanner/v1/ResultSetStats.java |   19 +-
 .../spanner/v1/ResultSetStatsOrBuilder.java   |    5 +-
 .../google/spanner/v1/RollbackRequest.java    |    5 +
 .../java/com/google/spanner/v1/Session.java   |   27 +-
 .../google/spanner/v1/SessionOrBuilder.java   |   10 -
 .../com/google/spanner/v1/SpannerProto.java   |  476 +++---
 .../com/google/spanner/v1/StructType.java     |   10 +
 .../com/google/spanner/v1/Transaction.java    |   21 +-
 .../google/spanner/v1/TransactionOptions.java |  342 +---
 .../v1/TransactionOptionsOrBuilder.java       |   11 +-
 .../spanner/v1/TransactionOrBuilder.java      |    4 -
 .../spanner/v1/TransactionSelector.java       |    9 +-
 .../v1/TransactionSelectorOrBuilder.java      |    2 +-
 .../main/java/com/google/spanner/v1/Type.java |    5 +
 .../java/com/google/spanner/v1/TypeCode.java  |    7 -
 .../java/com/google/spanner/v1/TypeProto.java |   40 +-
 .../proto/google/spanner/v1/spanner.proto     |   45 -
 156 files changed, 1799 insertions(+), 8496 deletions(-)
 delete mode 100644 proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java
 delete mode 100644 proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java
 delete mode 100644 proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java
 delete mode 100644 proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java
 delete mode 100644 proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java
 delete mode 100644 proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java

diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java
index d5e62ff39d9..a40ad087b66 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerClient.java
@@ -32,8 +32,6 @@
 import com.google.protobuf.Empty;
 import com.google.spanner.v1.BatchCreateSessionsRequest;
 import com.google.spanner.v1.BatchCreateSessionsResponse;
-import com.google.spanner.v1.BatchWriteRequest;
-import com.google.spanner.v1.BatchWriteResponse;
 import com.google.spanner.v1.BeginTransactionRequest;
 import com.google.spanner.v1.CommitRequest;
 import com.google.spanner.v1.CommitResponse;
@@ -1270,41 +1268,6 @@ public final ServerStreamingCallable streamingRea
     return stub.streamingReadCallable();
   }
 
-  // AUTO-GENERATED DOCUMENTATION AND METHOD.
-  /**
-   * Batches the supplied mutations in a collection of efficient transactions. The mutations are
-   * applied non-atomically in an unspecified order and thus, they must be independent of each
-   * other. Partial failure is possible, i.e., some mutations may have been applied successfully,
-   * while some may have failed. The results of individual batches are streamed into the response as
-   * and when the batches are applied.
-   *
-   * 

Sample code: - * - *

{@code
-   * // This snippet has been automatically generated and should be regarded as a code template only.
-   * // It will require modifications to work:
-   * // - It may require correct/in-range values for request initialization.
-   * // - It may require specifying regional endpoints when creating the service client as shown in
-   * // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
-   * try (SpannerClient spannerClient = SpannerClient.create()) {
-   *   BatchWriteRequest request =
-   *       BatchWriteRequest.newBuilder()
-   *           .setSession(
-   *               SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString())
-   *           .addAllMutations(new ArrayList())
-   *           .setRequestOptions(RequestOptions.newBuilder().build())
-   *           .build();
-   *   ServerStream stream = spannerClient.batchWriteCallable().call(request);
-   *   for (BatchWriteResponse response : stream) {
-   *     // Do something when a response is received.
-   *   }
-   * }
-   * }
- */ - public final ServerStreamingCallable batchWriteCallable() { - return stub.batchWriteCallable(); - } - // AUTO-GENERATED DOCUMENTATION AND METHOD. /** * Begins a new transaction. This step can often be skipped: diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java index 53c3cb760c9..6cec68b9a21 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/SpannerSettings.java @@ -35,8 +35,6 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; -import com.google.spanner.v1.BatchWriteRequest; -import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -154,11 +152,6 @@ public ServerStreamingCallSettings streamingReadS return ((SpannerStubSettings) getStubSettings()).streamingReadSettings(); } - /** Returns the object with the settings used for calls to batchWrite. */ - public ServerStreamingCallSettings batchWriteSettings() { - return ((SpannerStubSettings) getStubSettings()).batchWriteSettings(); - } - /** Returns the object with the settings used for calls to beginTransaction. */ public UnaryCallSettings beginTransactionSettings() { return ((SpannerStubSettings) getStubSettings()).beginTransactionSettings(); @@ -354,12 +347,6 @@ public UnaryCallSettings.Builder readSettings() { return getStubSettingsBuilder().streamingReadSettings(); } - /** Returns the builder for the settings used for calls to batchWrite. */ - public ServerStreamingCallSettings.Builder - batchWriteSettings() { - return getStubSettingsBuilder().batchWriteSettings(); - } - /** Returns the builder for the settings used for calls to beginTransaction. */ public UnaryCallSettings.Builder beginTransactionSettings() { diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/gapic_metadata.json b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/gapic_metadata.json index a44723b0730..26711916dbb 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/gapic_metadata.json +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/gapic_metadata.json @@ -13,9 +13,6 @@ "BatchCreateSessions": { "methods": ["batchCreateSessions", "batchCreateSessions", "batchCreateSessions", "batchCreateSessionsCallable"] }, - "BatchWrite": { - "methods": ["batchWriteCallable"] - }, "BeginTransaction": { "methods": ["beginTransaction", "beginTransaction", "beginTransaction", "beginTransactionCallable"] }, diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java index f694672f1b3..0e99079a91f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java @@ -30,8 +30,6 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; -import com.google.spanner.v1.BatchWriteRequest; -import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -158,15 +156,6 @@ public class GrpcSpannerStub extends SpannerStub { .setResponseMarshaller(ProtoUtils.marshaller(PartialResultSet.getDefaultInstance())) .build(); - private static final MethodDescriptor - batchWriteMethodDescriptor = - MethodDescriptor.newBuilder() - .setType(MethodDescriptor.MethodType.SERVER_STREAMING) - .setFullMethodName("google.spanner.v1.Spanner/BatchWrite") - .setRequestMarshaller(ProtoUtils.marshaller(BatchWriteRequest.getDefaultInstance())) - .setResponseMarshaller(ProtoUtils.marshaller(BatchWriteResponse.getDefaultInstance())) - .build(); - private static final MethodDescriptor beginTransactionMethodDescriptor = MethodDescriptor.newBuilder() @@ -228,7 +217,6 @@ public class GrpcSpannerStub extends SpannerStub { executeBatchDmlCallable; private final UnaryCallable readCallable; private final ServerStreamingCallable streamingReadCallable; - private final ServerStreamingCallable batchWriteCallable; private final UnaryCallable beginTransactionCallable; private final UnaryCallable commitCallable; private final UnaryCallable rollbackCallable; @@ -376,16 +364,6 @@ protected GrpcSpannerStub( return params.build(); }) .build(); - GrpcCallSettings batchWriteTransportSettings = - GrpcCallSettings.newBuilder() - .setMethodDescriptor(batchWriteMethodDescriptor) - .setParamsExtractor( - request -> { - ImmutableMap.Builder params = ImmutableMap.builder(); - params.put("session", String.valueOf(request.getSession())); - return params.build(); - }) - .build(); GrpcCallSettings beginTransactionTransportSettings = GrpcCallSettings.newBuilder() .setMethodDescriptor(beginTransactionMethodDescriptor) @@ -474,9 +452,6 @@ protected GrpcSpannerStub( this.streamingReadCallable = callableFactory.createServerStreamingCallable( streamingReadTransportSettings, settings.streamingReadSettings(), clientContext); - this.batchWriteCallable = - callableFactory.createServerStreamingCallable( - batchWriteTransportSettings, settings.batchWriteSettings(), clientContext); this.beginTransactionCallable = callableFactory.createUnaryCallable( beginTransactionTransportSettings, settings.beginTransactionSettings(), clientContext); @@ -558,11 +533,6 @@ public ServerStreamingCallable streamingReadCalla return streamingReadCallable; } - @Override - public ServerStreamingCallable batchWriteCallable() { - return batchWriteCallable; - } - @Override public UnaryCallable beginTransactionCallable() { return beginTransactionCallable; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java index dbe39c9bd49..776f27e49db 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/HttpJsonSpannerStub.java @@ -35,8 +35,6 @@ import com.google.protobuf.TypeRegistry; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; -import com.google.spanner.v1.BatchWriteRequest; -import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -436,43 +434,6 @@ public class HttpJsonSpannerStub extends SpannerStub { .build()) .build(); - private static final ApiMethodDescriptor - batchWriteMethodDescriptor = - ApiMethodDescriptor.newBuilder() - .setFullMethodName("google.spanner.v1.Spanner/BatchWrite") - .setHttpMethod("POST") - .setType(ApiMethodDescriptor.MethodType.SERVER_STREAMING) - .setRequestFormatter( - ProtoMessageRequestFormatter.newBuilder() - .setPath( - "/v1/{session=projects/*/instances/*/databases/*/sessions/*}:batchWrite", - request -> { - Map fields = new HashMap<>(); - ProtoRestSerializer serializer = - ProtoRestSerializer.create(); - serializer.putPathParam(fields, "session", request.getSession()); - return fields; - }) - .setQueryParamsExtractor( - request -> { - Map> fields = new HashMap<>(); - ProtoRestSerializer serializer = - ProtoRestSerializer.create(); - serializer.putQueryParam(fields, "$alt", "json;enum-encoding=int"); - return fields; - }) - .setRequestBodyExtractor( - request -> - ProtoRestSerializer.create() - .toBody("*", request.toBuilder().clearSession().build(), true)) - .build()) - .setResponseParser( - ProtoMessageResponseParser.newBuilder() - .setDefaultInstance(BatchWriteResponse.getDefaultInstance()) - .setDefaultTypeRegistry(typeRegistry) - .build()) - .build(); - private static final ApiMethodDescriptor beginTransactionMethodDescriptor = ApiMethodDescriptor.newBuilder() @@ -671,7 +632,6 @@ public class HttpJsonSpannerStub extends SpannerStub { executeBatchDmlCallable; private final UnaryCallable readCallable; private final ServerStreamingCallable streamingReadCallable; - private final ServerStreamingCallable batchWriteCallable; private final UnaryCallable beginTransactionCallable; private final UnaryCallable commitCallable; private final UnaryCallable rollbackCallable; @@ -770,11 +730,6 @@ protected HttpJsonSpannerStub( .setMethodDescriptor(streamingReadMethodDescriptor) .setTypeRegistry(typeRegistry) .build(); - HttpJsonCallSettings batchWriteTransportSettings = - HttpJsonCallSettings.newBuilder() - .setMethodDescriptor(batchWriteMethodDescriptor) - .setTypeRegistry(typeRegistry) - .build(); HttpJsonCallSettings beginTransactionTransportSettings = HttpJsonCallSettings.newBuilder() .setMethodDescriptor(beginTransactionMethodDescriptor) @@ -838,9 +793,6 @@ protected HttpJsonSpannerStub( this.streamingReadCallable = callableFactory.createServerStreamingCallable( streamingReadTransportSettings, settings.streamingReadSettings(), clientContext); - this.batchWriteCallable = - callableFactory.createServerStreamingCallable( - batchWriteTransportSettings, settings.batchWriteSettings(), clientContext); this.beginTransactionCallable = callableFactory.createUnaryCallable( beginTransactionTransportSettings, settings.beginTransactionSettings(), clientContext); @@ -874,7 +826,6 @@ public static List getMethodDescriptors() { methodDescriptors.add(executeBatchDmlMethodDescriptor); methodDescriptors.add(readMethodDescriptor); methodDescriptors.add(streamingReadMethodDescriptor); - methodDescriptors.add(batchWriteMethodDescriptor); methodDescriptors.add(beginTransactionMethodDescriptor); methodDescriptors.add(commitMethodDescriptor); methodDescriptors.add(rollbackMethodDescriptor); @@ -940,11 +891,6 @@ public ServerStreamingCallable streamingReadCalla return streamingReadCallable; } - @Override - public ServerStreamingCallable batchWriteCallable() { - return batchWriteCallable; - } - @Override public UnaryCallable beginTransactionCallable() { return beginTransactionCallable; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java index 17e78093cd4..7f7a4d95d49 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/SpannerStub.java @@ -24,8 +24,6 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; -import com.google.spanner.v1.BatchWriteRequest; -import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -103,10 +101,6 @@ public ServerStreamingCallable streamingReadCalla throw new UnsupportedOperationException("Not implemented: streamingReadCallable()"); } - public ServerStreamingCallable batchWriteCallable() { - throw new UnsupportedOperationException("Not implemented: batchWriteCallable()"); - } - public UnaryCallable beginTransactionCallable() { throw new UnsupportedOperationException("Not implemented: beginTransactionCallable()"); } 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 78b300aa39e..ff5a6b9bb28 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 @@ -51,8 +51,6 @@ import com.google.protobuf.Empty; import com.google.spanner.v1.BatchCreateSessionsRequest; import com.google.spanner.v1.BatchCreateSessionsResponse; -import com.google.spanner.v1.BatchWriteRequest; -import com.google.spanner.v1.BatchWriteResponse; import com.google.spanner.v1.BeginTransactionRequest; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.CommitResponse; @@ -138,8 +136,6 @@ public class SpannerStubSettings extends StubSettings { executeBatchDmlSettings; private final UnaryCallSettings readSettings; private final ServerStreamingCallSettings streamingReadSettings; - private final ServerStreamingCallSettings - batchWriteSettings; private final UnaryCallSettings beginTransactionSettings; private final UnaryCallSettings commitSettings; private final UnaryCallSettings rollbackSettings; @@ -253,11 +249,6 @@ public ServerStreamingCallSettings streamingReadS return streamingReadSettings; } - /** Returns the object with the settings used for calls to batchWrite. */ - public ServerStreamingCallSettings batchWriteSettings() { - return batchWriteSettings; - } - /** Returns the object with the settings used for calls to beginTransaction. */ public UnaryCallSettings beginTransactionSettings() { return beginTransactionSettings; @@ -397,7 +388,6 @@ protected SpannerStubSettings(Builder settingsBuilder) throws IOException { executeBatchDmlSettings = settingsBuilder.executeBatchDmlSettings().build(); readSettings = settingsBuilder.readSettings().build(); streamingReadSettings = settingsBuilder.streamingReadSettings().build(); - batchWriteSettings = settingsBuilder.batchWriteSettings().build(); beginTransactionSettings = settingsBuilder.beginTransactionSettings().build(); commitSettings = settingsBuilder.commitSettings().build(); rollbackSettings = settingsBuilder.rollbackSettings().build(); @@ -424,8 +414,6 @@ public static class Builder extends StubSettings.Builder readSettings; private final ServerStreamingCallSettings.Builder streamingReadSettings; - private final ServerStreamingCallSettings.Builder - batchWriteSettings; private final UnaryCallSettings.Builder beginTransactionSettings; private final UnaryCallSettings.Builder commitSettings; @@ -451,7 +439,6 @@ public static class Builder extends StubSettings.BuildernewArrayList(StatusCode.Code.UNAVAILABLE))); definitions.put( "no_retry_0_codes", ImmutableSet.copyOf(Lists.newArrayList())); - definitions.put("no_retry_codes", ImmutableSet.copyOf(Lists.newArrayList())); RETRYABLE_CODE_DEFINITIONS = definitions.build(); } @@ -501,8 +488,6 @@ public static class Builder extends StubSettings.Builder readSettings() { return streamingReadSettings; } - /** Returns the builder for the settings used for calls to batchWrite. */ - public ServerStreamingCallSettings.Builder - batchWriteSettings() { - return batchWriteSettings; - } - /** Returns the builder for the settings used for calls to beginTransaction. */ public UnaryCallSettings.Builder beginTransactionSettings() { diff --git a/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java b/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java index 6b5cdcb134f..59ab44cc122 100644 --- a/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java +++ b/grpc-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SpannerGrpc.java @@ -450,47 +450,6 @@ private SpannerGrpc() {} return getStreamingReadMethod; } - private static volatile io.grpc.MethodDescriptor< - com.google.spanner.v1.BatchWriteRequest, com.google.spanner.v1.BatchWriteResponse> - getBatchWriteMethod; - - @io.grpc.stub.annotations.RpcMethod( - fullMethodName = SERVICE_NAME + '/' + "BatchWrite", - requestType = com.google.spanner.v1.BatchWriteRequest.class, - responseType = com.google.spanner.v1.BatchWriteResponse.class, - methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) - public static io.grpc.MethodDescriptor< - com.google.spanner.v1.BatchWriteRequest, com.google.spanner.v1.BatchWriteResponse> - getBatchWriteMethod() { - io.grpc.MethodDescriptor< - com.google.spanner.v1.BatchWriteRequest, com.google.spanner.v1.BatchWriteResponse> - getBatchWriteMethod; - if ((getBatchWriteMethod = SpannerGrpc.getBatchWriteMethod) == null) { - synchronized (SpannerGrpc.class) { - if ((getBatchWriteMethod = SpannerGrpc.getBatchWriteMethod) == null) { - SpannerGrpc.getBatchWriteMethod = - getBatchWriteMethod = - io.grpc.MethodDescriptor - . - newBuilder() - .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) - .setFullMethodName(generateFullMethodName(SERVICE_NAME, "BatchWrite")) - .setSampledToLocalTracing(true) - .setRequestMarshaller( - io.grpc.protobuf.ProtoUtils.marshaller( - com.google.spanner.v1.BatchWriteRequest.getDefaultInstance())) - .setResponseMarshaller( - io.grpc.protobuf.ProtoUtils.marshaller( - com.google.spanner.v1.BatchWriteResponse.getDefaultInstance())) - .setSchemaDescriptor(new SpannerMethodDescriptorSupplier("BatchWrite")) - .build(); - } - } - } - return getBatchWriteMethod; - } - private static volatile io.grpc.MethodDescriptor< com.google.spanner.v1.BeginTransactionRequest, com.google.spanner.v1.Transaction> getBeginTransactionMethod; @@ -938,24 +897,6 @@ default void streamingRead( getStreamingReadMethod(), responseObserver); } - /** - * - * - *
-     * Batches the supplied mutations in a collection of efficient transactions.
-     * The mutations are applied non-atomically in an unspecified order and
-     * thus, they must be independent of each other. Partial failure is possible,
-     * i.e., some mutations may have been applied successfully, while some may
-     * have failed. The results of individual batches are streamed into the
-     * response as and when the batches are applied.
-     * 
- */ - default void batchWrite( - com.google.spanner.v1.BatchWriteRequest request, - io.grpc.stub.StreamObserver responseObserver) { - io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getBatchWriteMethod(), responseObserver); - } - /** * * @@ -1312,25 +1253,6 @@ public void streamingRead( responseObserver); } - /** - * - * - *
-     * Batches the supplied mutations in a collection of efficient transactions.
-     * The mutations are applied non-atomically in an unspecified order and
-     * thus, they must be independent of each other. Partial failure is possible,
-     * i.e., some mutations may have been applied successfully, while some may
-     * have failed. The results of individual batches are streamed into the
-     * response as and when the batches are applied.
-     * 
- */ - public void batchWrite( - com.google.spanner.v1.BatchWriteRequest request, - io.grpc.stub.StreamObserver responseObserver) { - io.grpc.stub.ClientCalls.asyncServerStreamingCall( - getChannel().newCall(getBatchWriteMethod(), getCallOptions()), request, responseObserver); - } - /** * * @@ -1652,24 +1574,6 @@ public java.util.Iterator streamingRead( getChannel(), getStreamingReadMethod(), getCallOptions(), request); } - /** - * - * - *
-     * Batches the supplied mutations in a collection of efficient transactions.
-     * The mutations are applied non-atomically in an unspecified order and
-     * thus, they must be independent of each other. Partial failure is possible,
-     * i.e., some mutations may have been applied successfully, while some may
-     * have failed. The results of individual batches are streamed into the
-     * response as and when the batches are applied.
-     * 
- */ - public java.util.Iterator batchWrite( - com.google.spanner.v1.BatchWriteRequest request) { - return io.grpc.stub.ClientCalls.blockingServerStreamingCall( - getChannel(), getBatchWriteMethod(), getCallOptions(), request); - } - /** * * @@ -2067,12 +1971,11 @@ public com.google.common.util.concurrent.ListenableFuture implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -2146,12 +2049,6 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv (io.grpc.stub.StreamObserver) responseObserver); break; - case METHODID_BATCH_WRITE: - serviceImpl.batchWrite( - (com.google.spanner.v1.BatchWriteRequest) request, - (io.grpc.stub.StreamObserver) - responseObserver); - break; case METHODID_BEGIN_TRANSACTION: serviceImpl.beginTransaction( (com.google.spanner.v1.BeginTransactionRequest) request, @@ -2260,12 +2157,6 @@ public static final io.grpc.ServerServiceDefinition bindService(AsyncService ser new MethodHandlers< com.google.spanner.v1.ReadRequest, com.google.spanner.v1.PartialResultSet>( service, METHODID_STREAMING_READ))) - .addMethod( - getBatchWriteMethod(), - io.grpc.stub.ServerCalls.asyncServerStreamingCall( - new MethodHandlers< - com.google.spanner.v1.BatchWriteRequest, - com.google.spanner.v1.BatchWriteResponse>(service, METHODID_BATCH_WRITE))) .addMethod( getBeginTransactionMethod(), io.grpc.stub.ServerCalls.asyncUnaryCall( @@ -2355,7 +2246,6 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() { .addMethod(getExecuteBatchDmlMethod()) .addMethod(getReadMethod()) .addMethod(getStreamingReadMethod()) - .addMethod(getBatchWriteMethod()) .addMethod(getBeginTransactionMethod()) .addMethod(getCommitMethod()) .addMethod(getRollbackMethod()) diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java index 83815908c09..d5132408edd 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Backup.java @@ -41,9 +41,9 @@ private Backup() { database_ = ""; name_ = ""; state_ = 0; - referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList(); + referencingDatabases_ = com.google.protobuf.LazyStringArrayList.EMPTY; databaseDialect_ = 0; - referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList(); + referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY; } @java.lang.Override @@ -52,6 +52,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new Backup(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_Backup_descriptor; @@ -411,13 +416,11 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() { *
    * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
    * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-   *
    * A globally unique identifier for the backup which cannot be
    * changed. Values are of the form
    * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
    * The final segment of the name must be between 2 and 60 characters
    * in length.
-   *
    * The backup is stored in the location(s) specified in the instance
    * configuration of the instance containing the backup, identified
    * by the prefix of the backup name of the form
@@ -446,13 +449,11 @@ public java.lang.String getName() {
    * 
    * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
    * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-   *
    * A globally unique identifier for the backup which cannot be
    * changed. Values are of the form
    * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
    * The final segment of the name must be between 2 and 60 characters
    * in length.
-   *
    * The backup is stored in the location(s) specified in the instance
    * configuration of the instance containing the backup, identified
    * by the prefix of the backup name of the form
@@ -591,8 +592,7 @@ public com.google.spanner.admin.database.v1.Backup.State getState() {
   public static final int REFERENCING_DATABASES_FIELD_NUMBER = 7;
 
   @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringArrayList referencingDatabases_ =
-      com.google.protobuf.LazyStringArrayList.emptyList();
+  private com.google.protobuf.LazyStringList referencingDatabases_;
   /**
    *
    *
@@ -784,8 +784,7 @@ public com.google.spanner.admin.database.v1.DatabaseDialect getDatabaseDialect()
   public static final int REFERENCING_BACKUPS_FIELD_NUMBER = 11;
 
   @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringArrayList referencingBackups_ =
-      com.google.protobuf.LazyStringArrayList.emptyList();
+  private com.google.protobuf.LazyStringList referencingBackups_;
   /**
    *
    *
@@ -1305,14 +1304,16 @@ public Builder clear() {
       }
       sizeBytes_ = 0L;
       state_ = 0;
-      referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList();
+      referencingDatabases_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000080);
       encryptionInfo_ = null;
       if (encryptionInfoBuilder_ != null) {
         encryptionInfoBuilder_.dispose();
         encryptionInfoBuilder_ = null;
       }
       databaseDialect_ = 0;
-      referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList();
+      referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000400);
       maxExpireTime_ = null;
       if (maxExpireTimeBuilder_ != null) {
         maxExpireTimeBuilder_.dispose();
@@ -1345,6 +1346,7 @@ public com.google.spanner.admin.database.v1.Backup build() {
     public com.google.spanner.admin.database.v1.Backup buildPartial() {
       com.google.spanner.admin.database.v1.Backup result =
           new com.google.spanner.admin.database.v1.Backup(this);
+      buildPartialRepeatedFields(result);
       if (bitField0_ != 0) {
         buildPartial0(result);
       }
@@ -1352,6 +1354,19 @@ public com.google.spanner.admin.database.v1.Backup buildPartial() {
       return result;
     }
 
+    private void buildPartialRepeatedFields(com.google.spanner.admin.database.v1.Backup result) {
+      if (((bitField0_ & 0x00000080) != 0)) {
+        referencingDatabases_ = referencingDatabases_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000080);
+      }
+      result.referencingDatabases_ = referencingDatabases_;
+      if (((bitField0_ & 0x00000400) != 0)) {
+        referencingBackups_ = referencingBackups_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000400);
+      }
+      result.referencingBackups_ = referencingBackups_;
+    }
+
     private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) {
       int from_bitField0_ = bitField0_;
       if (((from_bitField0_ & 0x00000001) != 0)) {
@@ -1376,10 +1391,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) {
       if (((from_bitField0_ & 0x00000040) != 0)) {
         result.state_ = state_;
       }
-      if (((from_bitField0_ & 0x00000080) != 0)) {
-        referencingDatabases_.makeImmutable();
-        result.referencingDatabases_ = referencingDatabases_;
-      }
       if (((from_bitField0_ & 0x00000100) != 0)) {
         result.encryptionInfo_ =
             encryptionInfoBuilder_ == null ? encryptionInfo_ : encryptionInfoBuilder_.build();
@@ -1387,10 +1398,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.Backup result) {
       if (((from_bitField0_ & 0x00000200) != 0)) {
         result.databaseDialect_ = databaseDialect_;
       }
-      if (((from_bitField0_ & 0x00000400) != 0)) {
-        referencingBackups_.makeImmutable();
-        result.referencingBackups_ = referencingBackups_;
-      }
       if (((from_bitField0_ & 0x00000800) != 0)) {
         result.maxExpireTime_ =
             maxExpireTimeBuilder_ == null ? maxExpireTime_ : maxExpireTimeBuilder_.build();
@@ -1470,7 +1477,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Backup other) {
       if (!other.referencingDatabases_.isEmpty()) {
         if (referencingDatabases_.isEmpty()) {
           referencingDatabases_ = other.referencingDatabases_;
-          bitField0_ |= 0x00000080;
+          bitField0_ = (bitField0_ & ~0x00000080);
         } else {
           ensureReferencingDatabasesIsMutable();
           referencingDatabases_.addAll(other.referencingDatabases_);
@@ -1486,7 +1493,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.Backup other) {
       if (!other.referencingBackups_.isEmpty()) {
         if (referencingBackups_.isEmpty()) {
           referencingBackups_ = other.referencingBackups_;
-          bitField0_ |= 0x00000400;
+          bitField0_ = (bitField0_ & ~0x00000400);
         } else {
           ensureReferencingBackupsIsMutable();
           referencingBackups_.addAll(other.referencingBackups_);
@@ -2186,13 +2193,11 @@ public com.google.protobuf.TimestampOrBuilder getExpireTimeOrBuilder() {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
-     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2220,13 +2225,11 @@ public java.lang.String getName() {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
-     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2254,13 +2257,11 @@ public com.google.protobuf.ByteString getNameBytes() {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
-     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2287,13 +2288,11 @@ public Builder setName(java.lang.String value) {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
-     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2316,13 +2315,11 @@ public Builder clearName() {
      * 
      * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
      * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-     *
      * A globally unique identifier for the backup which cannot be
      * changed. Values are of the form
      * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
      * The final segment of the name must be between 2 and 60 characters
      * in length.
-     *
      * The backup is stored in the location(s) specified in the instance
      * configuration of the instance containing the backup, identified
      * by the prefix of the backup name of the form
@@ -2719,14 +2716,14 @@ public Builder clearState() {
       return this;
     }
 
-    private com.google.protobuf.LazyStringArrayList referencingDatabases_ =
-        com.google.protobuf.LazyStringArrayList.emptyList();
+    private com.google.protobuf.LazyStringList referencingDatabases_ =
+        com.google.protobuf.LazyStringArrayList.EMPTY;
 
     private void ensureReferencingDatabasesIsMutable() {
-      if (!referencingDatabases_.isModifiable()) {
+      if (!((bitField0_ & 0x00000080) != 0)) {
         referencingDatabases_ = new com.google.protobuf.LazyStringArrayList(referencingDatabases_);
+        bitField0_ |= 0x00000080;
       }
-      bitField0_ |= 0x00000080;
     }
     /**
      *
@@ -2748,8 +2745,7 @@ private void ensureReferencingDatabasesIsMutable() {
      * @return A list containing the referencingDatabases.
      */
     public com.google.protobuf.ProtocolStringList getReferencingDatabasesList() {
-      referencingDatabases_.makeImmutable();
-      return referencingDatabases_;
+      return referencingDatabases_.getUnmodifiableView();
     }
     /**
      *
@@ -2846,7 +2842,6 @@ public Builder setReferencingDatabases(int index, java.lang.String value) {
       }
       ensureReferencingDatabasesIsMutable();
       referencingDatabases_.set(index, value);
-      bitField0_ |= 0x00000080;
       onChanged();
       return this;
     }
@@ -2876,7 +2871,6 @@ public Builder addReferencingDatabases(java.lang.String value) {
       }
       ensureReferencingDatabasesIsMutable();
       referencingDatabases_.add(value);
-      bitField0_ |= 0x00000080;
       onChanged();
       return this;
     }
@@ -2903,7 +2897,6 @@ public Builder addReferencingDatabases(java.lang.String value) {
     public Builder addAllReferencingDatabases(java.lang.Iterable values) {
       ensureReferencingDatabasesIsMutable();
       com.google.protobuf.AbstractMessageLite.Builder.addAll(values, referencingDatabases_);
-      bitField0_ |= 0x00000080;
       onChanged();
       return this;
     }
@@ -2927,9 +2920,8 @@ public Builder addAllReferencingDatabases(java.lang.Iterable v
      * @return This builder for chaining.
      */
     public Builder clearReferencingDatabases() {
-      referencingDatabases_ = com.google.protobuf.LazyStringArrayList.emptyList();
+      referencingDatabases_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       bitField0_ = (bitField0_ & ~0x00000080);
-      ;
       onChanged();
       return this;
     }
@@ -2960,7 +2952,6 @@ public Builder addReferencingDatabasesBytes(com.google.protobuf.ByteString value
       checkByteStringIsUtf8(value);
       ensureReferencingDatabasesIsMutable();
       referencingDatabases_.add(value);
-      bitField0_ |= 0x00000080;
       onChanged();
       return this;
     }
@@ -3271,14 +3262,14 @@ public Builder clearDatabaseDialect() {
       return this;
     }
 
-    private com.google.protobuf.LazyStringArrayList referencingBackups_ =
-        com.google.protobuf.LazyStringArrayList.emptyList();
+    private com.google.protobuf.LazyStringList referencingBackups_ =
+        com.google.protobuf.LazyStringArrayList.EMPTY;
 
     private void ensureReferencingBackupsIsMutable() {
-      if (!referencingBackups_.isModifiable()) {
+      if (!((bitField0_ & 0x00000400) != 0)) {
         referencingBackups_ = new com.google.protobuf.LazyStringArrayList(referencingBackups_);
+        bitField0_ |= 0x00000400;
       }
-      bitField0_ |= 0x00000400;
     }
     /**
      *
@@ -3300,8 +3291,7 @@ private void ensureReferencingBackupsIsMutable() {
      * @return A list containing the referencingBackups.
      */
     public com.google.protobuf.ProtocolStringList getReferencingBackupsList() {
-      referencingBackups_.makeImmutable();
-      return referencingBackups_;
+      return referencingBackups_.getUnmodifiableView();
     }
     /**
      *
@@ -3398,7 +3388,6 @@ public Builder setReferencingBackups(int index, java.lang.String value) {
       }
       ensureReferencingBackupsIsMutable();
       referencingBackups_.set(index, value);
-      bitField0_ |= 0x00000400;
       onChanged();
       return this;
     }
@@ -3428,7 +3417,6 @@ public Builder addReferencingBackups(java.lang.String value) {
       }
       ensureReferencingBackupsIsMutable();
       referencingBackups_.add(value);
-      bitField0_ |= 0x00000400;
       onChanged();
       return this;
     }
@@ -3455,7 +3443,6 @@ public Builder addReferencingBackups(java.lang.String value) {
     public Builder addAllReferencingBackups(java.lang.Iterable values) {
       ensureReferencingBackupsIsMutable();
       com.google.protobuf.AbstractMessageLite.Builder.addAll(values, referencingBackups_);
-      bitField0_ |= 0x00000400;
       onChanged();
       return this;
     }
@@ -3479,9 +3466,8 @@ public Builder addAllReferencingBackups(java.lang.Iterable val
      * @return This builder for chaining.
      */
     public Builder clearReferencingBackups() {
-      referencingBackups_ = com.google.protobuf.LazyStringArrayList.emptyList();
+      referencingBackups_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       bitField0_ = (bitField0_ & ~0x00000400);
-      ;
       onChanged();
       return this;
     }
@@ -3512,7 +3498,6 @@ public Builder addReferencingBackupsBytes(com.google.protobuf.ByteString value)
       checkByteStringIsUtf8(value);
       ensureReferencingBackupsIsMutable();
       referencingBackups_.add(value);
-      bitField0_ |= 0x00000400;
       onChanged();
       return this;
     }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java
index 0bb89ec6c08..978bcbcccb9 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupInfo.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new BackupInfo();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_BackupInfo_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
index 77a157a819b..e3fe5ccf08c 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupOrBuilder.java
@@ -156,13 +156,11 @@ public interface BackupOrBuilder
    * 
    * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
    * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-   *
    * A globally unique identifier for the backup which cannot be
    * changed. Values are of the form
    * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
    * The final segment of the name must be between 2 and 60 characters
    * in length.
-   *
    * The backup is stored in the location(s) specified in the instance
    * configuration of the instance containing the backup, identified
    * by the prefix of the backup name of the form
@@ -180,13 +178,11 @@ public interface BackupOrBuilder
    * 
    * Output only for the [CreateBackup][google.spanner.admin.database.v1.DatabaseAdmin.CreateBackup] operation.
    * Required for the [UpdateBackup][google.spanner.admin.database.v1.DatabaseAdmin.UpdateBackup] operation.
-   *
    * A globally unique identifier for the backup which cannot be
    * changed. Values are of the form
    * `projects/<project>/instances/<instance>/backups/[a-z][a-z0-9_\-]*[a-z0-9]`
    * The final segment of the name must be between 2 and 60 characters
    * in length.
-   *
    * The backup is stored in the location(s) specified in the instance
    * configuration of the instance containing the backup, identified
    * by the prefix of the backup name of the form
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
index ed23e270715..0d0d3d7b1d3 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/BackupProto.java
@@ -103,105 +103,105 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "g/operations.proto\032 google/protobuf/fiel"
           + "d_mask.proto\032\037google/protobuf/timestamp."
           + "proto\032-google/spanner/admin/database/v1/"
-          + "common.proto\"\313\006\n\006Backup\0226\n\010database\030\002 \001("
+          + "common.proto\"\303\006\n\006Backup\0226\n\010database\030\002 \001("
           + "\tB$\372A!\n\037spanner.googleapis.com/Database\022"
           + "0\n\014version_time\030\t \001(\0132\032.google.protobuf."
           + "Timestamp\022/\n\013expire_time\030\003 \001(\0132\032.google."
-          + "protobuf.Timestamp\022\014\n\004name\030\001 \001(\t\0225\n\013crea"
+          + "protobuf.Timestamp\022\014\n\004name\030\001 \001(\t\0224\n\013crea"
           + "te_time\030\004 \001(\0132\032.google.protobuf.Timestam"
-          + "pB\004\342A\001\003\022\030\n\nsize_bytes\030\005 \001(\003B\004\342A\001\003\022C\n\005sta"
-          + "te\030\006 \001(\0162..google.spanner.admin.database"
-          + ".v1.Backup.StateB\004\342A\001\003\022G\n\025referencing_da"
-          + "tabases\030\007 \003(\tB(\342A\001\003\372A!\n\037spanner.googleap"
-          + "is.com/Database\022O\n\017encryption_info\030\010 \001(\013"
-          + "20.google.spanner.admin.database.v1.Encr"
-          + "yptionInfoB\004\342A\001\003\022Q\n\020database_dialect\030\n \001"
-          + "(\01621.google.spanner.admin.database.v1.Da"
-          + "tabaseDialectB\004\342A\001\003\022C\n\023referencing_backu"
-          + "ps\030\013 \003(\tB&\342A\001\003\372A\037\n\035spanner.googleapis.co"
-          + "m/Backup\0229\n\017max_expire_time\030\014 \001(\0132\032.goog"
-          + "le.protobuf.TimestampB\004\342A\001\003\"7\n\005State\022\025\n\021"
-          + "STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005REA"
-          + "DY\020\002:\\\352AY\n\035spanner.googleapis.com/Backup"
-          + "\0228projects/{project}/instances/{instance"
-          + "}/backups/{backup}\"\211\002\n\023CreateBackupReque"
-          + "st\0228\n\006parent\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.goo"
-          + "gleapis.com/Instance\022\027\n\tbackup_id\030\002 \001(\tB"
-          + "\004\342A\001\002\022>\n\006backup\030\003 \001(\0132(.google.spanner.a"
-          + "dmin.database.v1.BackupB\004\342A\001\002\022_\n\021encrypt"
-          + "ion_config\030\004 \001(\0132>.google.spanner.admin."
-          + "database.v1.CreateBackupEncryptionConfig"
-          + "B\004\342A\001\001\"\370\001\n\024CreateBackupMetadata\0220\n\004name\030"
-          + "\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com/Backu"
-          + "p\0226\n\010database\030\002 \001(\tB$\372A!\n\037spanner.google"
-          + "apis.com/Database\022E\n\010progress\030\003 \001(\01323.go"
-          + "ogle.spanner.admin.database.v1.Operation"
-          + "Progress\022/\n\013cancel_time\030\004 \001(\0132\032.google.p"
-          + "rotobuf.Timestamp\"\273\002\n\021CopyBackupRequest\022"
-          + "8\n\006parent\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.google"
-          + "apis.com/Instance\022\027\n\tbackup_id\030\002 \001(\tB\004\342A"
-          + "\001\002\022=\n\rsource_backup\030\003 \001(\tB&\342A\001\002\372A\037\n\035span"
-          + "ner.googleapis.com/Backup\0225\n\013expire_time"
-          + "\030\004 \001(\0132\032.google.protobuf.TimestampB\004\342A\001\002"
-          + "\022]\n\021encryption_config\030\005 \001(\0132<.google.spa"
-          + "nner.admin.database.v1.CopyBackupEncrypt"
-          + "ionConfigB\004\342A\001\001\"\371\001\n\022CopyBackupMetadata\0220"
-          + "\n\004name\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.co"
-          + "m/Backup\0229\n\rsource_backup\030\002 \001(\tB\"\372A\037\n\035sp"
-          + "anner.googleapis.com/Backup\022E\n\010progress\030"
-          + "\003 \001(\01323.google.spanner.admin.database.v1"
-          + ".OperationProgress\022/\n\013cancel_time\030\004 \001(\0132"
-          + "\032.google.protobuf.Timestamp\"\214\001\n\023UpdateBa"
-          + "ckupRequest\022>\n\006backup\030\001 \001(\0132(.google.spa"
-          + "nner.admin.database.v1.BackupB\004\342A\001\002\0225\n\013u"
-          + "pdate_mask\030\002 \001(\0132\032.google.protobuf.Field"
-          + "MaskB\004\342A\001\002\"H\n\020GetBackupRequest\0224\n\004name\030\001"
-          + " \001(\tB&\342A\001\002\372A\037\n\035spanner.googleapis.com/Ba"
-          + "ckup\"K\n\023DeleteBackupRequest\0224\n\004name\030\001 \001("
-          + "\tB&\342A\001\002\372A\037\n\035spanner.googleapis.com/Backu"
-          + "p\"\205\001\n\022ListBackupsRequest\0228\n\006parent\030\001 \001(\t"
-          + "B(\342A\001\002\372A!\n\037spanner.googleapis.com/Instan"
-          + "ce\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n"
-          + "\npage_token\030\004 \001(\t\"i\n\023ListBackupsResponse"
-          + "\0229\n\007backups\030\001 \003(\0132(.google.spanner.admin"
-          + ".database.v1.Backup\022\027\n\017next_page_token\030\002"
-          + " \001(\t\"\216\001\n\033ListBackupOperationsRequest\0228\n\006"
-          + "parent\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.googleapi"
-          + "s.com/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_s"
-          + "ize\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"j\n\034ListBac"
-          + "kupOperationsResponse\0221\n\noperations\030\001 \003("
-          + "\0132\035.google.longrunning.Operation\022\027\n\017next"
-          + "_page_token\030\002 \001(\t\"\342\001\n\nBackupInfo\0222\n\006back"
-          + "up\030\001 \001(\tB\"\372A\037\n\035spanner.googleapis.com/Ba"
-          + "ckup\0220\n\014version_time\030\004 \001(\0132\032.google.prot"
-          + "obuf.Timestamp\022/\n\013create_time\030\002 \001(\0132\032.go"
-          + "ogle.protobuf.Timestamp\022=\n\017source_databa"
-          + "se\030\003 \001(\tB$\372A!\n\037spanner.googleapis.com/Da"
-          + "tabase\"\337\002\n\034CreateBackupEncryptionConfig\022"
-          + "l\n\017encryption_type\030\001 \001(\0162M.google.spanne"
-          + "r.admin.database.v1.CreateBackupEncrypti"
-          + "onConfig.EncryptionTypeB\004\342A\001\002\022@\n\014kms_key"
-          + "_name\030\002 \001(\tB*\342A\001\001\372A#\n!cloudkms.googleapi"
-          + "s.com/CryptoKey\"\216\001\n\016EncryptionType\022\037\n\033EN"
-          + "CRYPTION_TYPE_UNSPECIFIED\020\000\022\033\n\027USE_DATAB"
-          + "ASE_ENCRYPTION\020\001\022\035\n\031GOOGLE_DEFAULT_ENCRY"
-          + "PTION\020\002\022\037\n\033CUSTOMER_MANAGED_ENCRYPTION\020\003"
-          + "\"\353\002\n\032CopyBackupEncryptionConfig\022j\n\017encry"
-          + "ption_type\030\001 \001(\0162K.google.spanner.admin."
-          + "database.v1.CopyBackupEncryptionConfig.E"
-          + "ncryptionTypeB\004\342A\001\002\022@\n\014kms_key_name\030\002 \001("
-          + "\tB*\342A\001\001\372A#\n!cloudkms.googleapis.com/Cryp"
-          + "toKey\"\236\001\n\016EncryptionType\022\037\n\033ENCRYPTION_T"
-          + "YPE_UNSPECIFIED\020\000\022+\n\'USE_CONFIG_DEFAULT_"
-          + "OR_BACKUP_ENCRYPTION\020\001\022\035\n\031GOOGLE_DEFAULT"
-          + "_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MANAGED_ENCRYP"
-          + "TION\020\003B\375\001\n$com.google.spanner.admin.data"
-          + "base.v1B\013BackupProtoP\001ZFcloud.google.com"
-          + "/go/spanner/admin/database/apiv1/databas"
-          + "epb;databasepb\252\002&Google.Cloud.Spanner.Ad"
-          + "min.Database.V1\312\002&Google\\Cloud\\Spanner\\A"
-          + "dmin\\Database\\V1\352\002+Google::Cloud::Spanne"
-          + "r::Admin::Database::V1b\006proto3"
+          + "pB\003\340A\003\022\027\n\nsize_bytes\030\005 \001(\003B\003\340A\003\022B\n\005state"
+          + "\030\006 \001(\0162..google.spanner.admin.database.v"
+          + "1.Backup.StateB\003\340A\003\022F\n\025referencing_datab"
+          + "ases\030\007 \003(\tB\'\340A\003\372A!\n\037spanner.googleapis.c"
+          + "om/Database\022N\n\017encryption_info\030\010 \001(\01320.g"
+          + "oogle.spanner.admin.database.v1.Encrypti"
+          + "onInfoB\003\340A\003\022P\n\020database_dialect\030\n \001(\01621."
+          + "google.spanner.admin.database.v1.Databas"
+          + "eDialectB\003\340A\003\022B\n\023referencing_backups\030\013 \003"
+          + "(\tB%\340A\003\372A\037\n\035spanner.googleapis.com/Backu"
+          + "p\0228\n\017max_expire_time\030\014 \001(\0132\032.google.prot"
+          + "obuf.TimestampB\003\340A\003\"7\n\005State\022\025\n\021STATE_UN"
+          + "SPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005READY\020\002:\\\352A"
+          + "Y\n\035spanner.googleapis.com/Backup\0228projec"
+          + "ts/{project}/instances/{instance}/backup"
+          + "s/{backup}\"\205\002\n\023CreateBackupRequest\0227\n\006pa"
+          + "rent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.c"
+          + "om/Instance\022\026\n\tbackup_id\030\002 \001(\tB\003\340A\002\022=\n\006b"
+          + "ackup\030\003 \001(\0132(.google.spanner.admin.datab"
+          + "ase.v1.BackupB\003\340A\002\022^\n\021encryption_config\030"
+          + "\004 \001(\0132>.google.spanner.admin.database.v1"
+          + ".CreateBackupEncryptionConfigB\003\340A\001\"\370\001\n\024C"
+          + "reateBackupMetadata\0220\n\004name\030\001 \001(\tB\"\372A\037\n\035"
+          + "spanner.googleapis.com/Backup\0226\n\010databas"
+          + "e\030\002 \001(\tB$\372A!\n\037spanner.googleapis.com/Dat"
+          + "abase\022E\n\010progress\030\003 \001(\01323.google.spanner"
+          + ".admin.database.v1.OperationProgress\022/\n\013"
+          + "cancel_time\030\004 \001(\0132\032.google.protobuf.Time"
+          + "stamp\"\266\002\n\021CopyBackupRequest\0227\n\006parent\030\001 "
+          + "\001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Inst"
+          + "ance\022\026\n\tbackup_id\030\002 \001(\tB\003\340A\002\022<\n\rsource_b"
+          + "ackup\030\003 \001(\tB%\340A\002\372A\037\n\035spanner.googleapis."
+          + "com/Backup\0224\n\013expire_time\030\004 \001(\0132\032.google"
+          + ".protobuf.TimestampB\003\340A\002\022\\\n\021encryption_c"
+          + "onfig\030\005 \001(\0132<.google.spanner.admin.datab"
+          + "ase.v1.CopyBackupEncryptionConfigB\003\340A\001\"\371"
+          + "\001\n\022CopyBackupMetadata\0220\n\004name\030\001 \001(\tB\"\372A\037"
+          + "\n\035spanner.googleapis.com/Backup\0229\n\rsourc"
+          + "e_backup\030\002 \001(\tB\"\372A\037\n\035spanner.googleapis."
+          + "com/Backup\022E\n\010progress\030\003 \001(\01323.google.sp"
+          + "anner.admin.database.v1.OperationProgres"
+          + "s\022/\n\013cancel_time\030\004 \001(\0132\032.google.protobuf"
+          + ".Timestamp\"\212\001\n\023UpdateBackupRequest\022=\n\006ba"
+          + "ckup\030\001 \001(\0132(.google.spanner.admin.databa"
+          + "se.v1.BackupB\003\340A\002\0224\n\013update_mask\030\002 \001(\0132\032"
+          + ".google.protobuf.FieldMaskB\003\340A\002\"G\n\020GetBa"
+          + "ckupRequest\0223\n\004name\030\001 \001(\tB%\340A\002\372A\037\n\035spann"
+          + "er.googleapis.com/Backup\"J\n\023DeleteBackup"
+          + "Request\0223\n\004name\030\001 \001(\tB%\340A\002\372A\037\n\035spanner.g"
+          + "oogleapis.com/Backup\"\204\001\n\022ListBackupsRequ"
+          + "est\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.goo"
+          + "gleapis.com/Instance\022\016\n\006filter\030\002 \001(\t\022\021\n\t"
+          + "page_size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"i\n\023L"
+          + "istBackupsResponse\0229\n\007backups\030\001 \003(\0132(.go"
+          + "ogle.spanner.admin.database.v1.Backup\022\027\n"
+          + "\017next_page_token\030\002 \001(\t\"\215\001\n\033ListBackupOpe"
+          + "rationsRequest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037"
+          + "spanner.googleapis.com/Instance\022\016\n\006filte"
+          + "r\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_token"
+          + "\030\004 \001(\t\"j\n\034ListBackupOperationsResponse\0221"
+          + "\n\noperations\030\001 \003(\0132\035.google.longrunning."
+          + "Operation\022\027\n\017next_page_token\030\002 \001(\t\"\342\001\n\nB"
+          + "ackupInfo\0222\n\006backup\030\001 \001(\tB\"\372A\037\n\035spanner."
+          + "googleapis.com/Backup\0220\n\014version_time\030\004 "
+          + "\001(\0132\032.google.protobuf.Timestamp\022/\n\013creat"
+          + "e_time\030\002 \001(\0132\032.google.protobuf.Timestamp"
+          + "\022=\n\017source_database\030\003 \001(\tB$\372A!\n\037spanner."
+          + "googleapis.com/Database\"\335\002\n\034CreateBackup"
+          + "EncryptionConfig\022k\n\017encryption_type\030\001 \001("
+          + "\0162M.google.spanner.admin.database.v1.Cre"
+          + "ateBackupEncryptionConfig.EncryptionType"
+          + "B\003\340A\002\022?\n\014kms_key_name\030\002 \001(\tB)\340A\001\372A#\n!clo"
+          + "udkms.googleapis.com/CryptoKey\"\216\001\n\016Encry"
+          + "ptionType\022\037\n\033ENCRYPTION_TYPE_UNSPECIFIED"
+          + "\020\000\022\033\n\027USE_DATABASE_ENCRYPTION\020\001\022\035\n\031GOOGL"
+          + "E_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_MANAG"
+          + "ED_ENCRYPTION\020\003\"\351\002\n\032CopyBackupEncryption"
+          + "Config\022i\n\017encryption_type\030\001 \001(\0162K.google"
+          + ".spanner.admin.database.v1.CopyBackupEnc"
+          + "ryptionConfig.EncryptionTypeB\003\340A\002\022?\n\014kms"
+          + "_key_name\030\002 \001(\tB)\340A\001\372A#\n!cloudkms.google"
+          + "apis.com/CryptoKey\"\236\001\n\016EncryptionType\022\037\n"
+          + "\033ENCRYPTION_TYPE_UNSPECIFIED\020\000\022+\n\'USE_CO"
+          + "NFIG_DEFAULT_OR_BACKUP_ENCRYPTION\020\001\022\035\n\031G"
+          + "OOGLE_DEFAULT_ENCRYPTION\020\002\022\037\n\033CUSTOMER_M"
+          + "ANAGED_ENCRYPTION\020\003B\375\001\n$com.google.spann"
+          + "er.admin.database.v1B\013BackupProtoP\001ZFclo"
+          + "ud.google.com/go/spanner/admin/database/"
+          + "apiv1/databasepb;databasepb\252\002&Google.Clo"
+          + "ud.Spanner.Admin.Database.V1\312\002&Google\\Cl"
+          + "oud\\Spanner\\Admin\\Database\\V1\352\002+Google::"
+          + "Cloud::Spanner::Admin::Database::V1b\006pro"
+          + "to3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
index 0f5840f6f15..a381d3c5122 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CommonProto.java
@@ -58,32 +58,31 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "tobuf.Timestamp\022,\n\010end_time\030\003 \001(\0132\032.goog"
           + "le.protobuf.Timestamp\"P\n\020EncryptionConfi"
           + "g\022<\n\014kms_key_name\030\002 \001(\tB&\372A#\n!cloudkms.g"
-          + "oogleapis.com/CryptoKey\"\305\002\n\016EncryptionIn"
-          + "fo\022T\n\017encryption_type\030\003 \001(\01625.google.spa"
+          + "oogleapis.com/CryptoKey\"\302\002\n\016EncryptionIn"
+          + "fo\022S\n\017encryption_type\030\003 \001(\01625.google.spa"
           + "nner.admin.database.v1.EncryptionInfo.Ty"
-          + "peB\004\342A\001\003\0223\n\021encryption_status\030\004 \001(\0132\022.go"
-          + "ogle.rpc.StatusB\004\342A\001\003\022J\n\017kms_key_version"
-          + "\030\002 \001(\tB1\342A\001\003\372A*\n(cloudkms.googleapis.com"
-          + "/CryptoKeyVersion\"\\\n\004Type\022\024\n\020TYPE_UNSPEC"
-          + "IFIED\020\000\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020\001\022\037"
-          + "\n\033CUSTOMER_MANAGED_ENCRYPTION\020\002*\\\n\017Datab"
-          + "aseDialect\022 \n\034DATABASE_DIALECT_UNSPECIFI"
-          + "ED\020\000\022\027\n\023GOOGLE_STANDARD_SQL\020\001\022\016\n\nPOSTGRE"
-          + "SQL\020\002B\242\004\n$com.google.spanner.admin.datab"
-          + "ase.v1B\013CommonProtoP\001ZFcloud.google.com/"
-          + "go/spanner/admin/database/apiv1/database"
-          + "pb;databasepb\252\002&Google.Cloud.Spanner.Adm"
-          + "in.Database.V1\312\002&Google\\Cloud\\Spanner\\Ad"
-          + "min\\Database\\V1\352\002+Google::Cloud::Spanner"
-          + "::Admin::Database::V1\352Ax\n!cloudkms.googl"
-          + "eapis.com/CryptoKey\022Sprojects/{project}/"
-          + "locations/{location}/keyRings/{key_ring}"
-          + "/cryptoKeys/{crypto_key}\352A\246\001\n(cloudkms.g"
-          + "oogleapis.com/CryptoKeyVersion\022zprojects"
-          + "/{project}/locations/{location}/keyRings"
-          + "/{key_ring}/cryptoKeys/{crypto_key}/cryp"
-          + "toKeyVersions/{crypto_key_version}b\006prot"
-          + "o3"
+          + "peB\003\340A\003\0222\n\021encryption_status\030\004 \001(\0132\022.goo"
+          + "gle.rpc.StatusB\003\340A\003\022I\n\017kms_key_version\030\002"
+          + " \001(\tB0\340A\003\372A*\n(cloudkms.googleapis.com/Cr"
+          + "yptoKeyVersion\"\\\n\004Type\022\024\n\020TYPE_UNSPECIFI"
+          + "ED\020\000\022\035\n\031GOOGLE_DEFAULT_ENCRYPTION\020\001\022\037\n\033C"
+          + "USTOMER_MANAGED_ENCRYPTION\020\002*\\\n\017Database"
+          + "Dialect\022 \n\034DATABASE_DIALECT_UNSPECIFIED\020"
+          + "\000\022\027\n\023GOOGLE_STANDARD_SQL\020\001\022\016\n\nPOSTGRESQL"
+          + "\020\002B\242\004\n$com.google.spanner.admin.database"
+          + ".v1B\013CommonProtoP\001ZFcloud.google.com/go/"
+          + "spanner/admin/database/apiv1/databasepb;"
+          + "databasepb\252\002&Google.Cloud.Spanner.Admin."
+          + "Database.V1\312\002&Google\\Cloud\\Spanner\\Admin"
+          + "\\Database\\V1\352\002+Google::Cloud::Spanner::A"
+          + "dmin::Database::V1\352Ax\n!cloudkms.googleap"
+          + "is.com/CryptoKey\022Sprojects/{project}/loc"
+          + "ations/{location}/keyRings/{key_ring}/cr"
+          + "yptoKeys/{crypto_key}\352A\246\001\n(cloudkms.goog"
+          + "leapis.com/CryptoKeyVersion\022zprojects/{p"
+          + "roject}/locations/{location}/keyRings/{k"
+          + "ey_ring}/cryptoKeys/{crypto_key}/cryptoK"
+          + "eyVersions/{crypto_key_version}b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java
index bfa78ae301f..3b571fd926b 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupEncryptionConfig.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CopyBackupEncryptionConfig();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CopyBackupEncryptionConfig_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java
index 63db05c5083..f2bc437a1ad 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupMetadata.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CopyBackupMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CopyBackupMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java
index 62cbd05991d..810c5043ce9 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CopyBackupRequest.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CopyBackupRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CopyBackupRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java
index 72efb786d53..1381514795c 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupEncryptionConfig.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateBackupEncryptionConfig();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CreateBackupEncryptionConfig_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java
index 83c3b45c003..c534895357a 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupMetadata.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateBackupMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CreateBackupMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java
index 3ac0f2c8558..96197d756b5 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateBackupRequest.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateBackupRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_CreateBackupRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java
index ebcc297cbba..b24893c407a 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseMetadata.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateDatabaseMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_CreateDatabaseMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java
index 38317542e4c..e393b538ff4 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/CreateDatabaseRequest.java
@@ -40,7 +40,7 @@ private CreateDatabaseRequest(com.google.protobuf.GeneratedMessageV3.Builder
   private CreateDatabaseRequest() {
     parent_ = "";
     createStatement_ = "";
-    extraStatements_ = com.google.protobuf.LazyStringArrayList.emptyList();
+    extraStatements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
     databaseDialect_ = 0;
   }
 
@@ -50,6 +50,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new CreateDatabaseRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_CreateDatabaseRequest_descriptor;
@@ -184,8 +189,7 @@ public com.google.protobuf.ByteString getCreateStatementBytes() {
   public static final int EXTRA_STATEMENTS_FIELD_NUMBER = 3;
 
   @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringArrayList extraStatements_ =
-      com.google.protobuf.LazyStringArrayList.emptyList();
+  private com.google.protobuf.LazyStringList extraStatements_;
   /**
    *
    *
@@ -614,7 +618,8 @@ public Builder clear() {
       bitField0_ = 0;
       parent_ = "";
       createStatement_ = "";
-      extraStatements_ = com.google.protobuf.LazyStringArrayList.emptyList();
+      extraStatements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000004);
       encryptionConfig_ = null;
       if (encryptionConfigBuilder_ != null) {
         encryptionConfigBuilder_.dispose();
@@ -648,6 +653,7 @@ public com.google.spanner.admin.database.v1.CreateDatabaseRequest build() {
     public com.google.spanner.admin.database.v1.CreateDatabaseRequest buildPartial() {
       com.google.spanner.admin.database.v1.CreateDatabaseRequest result =
           new com.google.spanner.admin.database.v1.CreateDatabaseRequest(this);
+      buildPartialRepeatedFields(result);
       if (bitField0_ != 0) {
         buildPartial0(result);
       }
@@ -655,6 +661,15 @@ public com.google.spanner.admin.database.v1.CreateDatabaseRequest buildPartial()
       return result;
     }
 
+    private void buildPartialRepeatedFields(
+        com.google.spanner.admin.database.v1.CreateDatabaseRequest result) {
+      if (((bitField0_ & 0x00000004) != 0)) {
+        extraStatements_ = extraStatements_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000004);
+      }
+      result.extraStatements_ = extraStatements_;
+    }
+
     private void buildPartial0(com.google.spanner.admin.database.v1.CreateDatabaseRequest result) {
       int from_bitField0_ = bitField0_;
       if (((from_bitField0_ & 0x00000001) != 0)) {
@@ -663,10 +678,6 @@ private void buildPartial0(com.google.spanner.admin.database.v1.CreateDatabaseRe
       if (((from_bitField0_ & 0x00000002) != 0)) {
         result.createStatement_ = createStatement_;
       }
-      if (((from_bitField0_ & 0x00000004) != 0)) {
-        extraStatements_.makeImmutable();
-        result.extraStatements_ = extraStatements_;
-      }
       if (((from_bitField0_ & 0x00000008) != 0)) {
         result.encryptionConfig_ =
             encryptionConfigBuilder_ == null ? encryptionConfig_ : encryptionConfigBuilder_.build();
@@ -735,7 +746,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.CreateDatabaseRequ
       if (!other.extraStatements_.isEmpty()) {
         if (extraStatements_.isEmpty()) {
           extraStatements_ = other.extraStatements_;
-          bitField0_ |= 0x00000004;
+          bitField0_ = (bitField0_ & ~0x00000004);
         } else {
           ensureExtraStatementsIsMutable();
           extraStatements_.addAll(other.extraStatements_);
@@ -1072,14 +1083,14 @@ public Builder setCreateStatementBytes(com.google.protobuf.ByteString value) {
       return this;
     }
 
-    private com.google.protobuf.LazyStringArrayList extraStatements_ =
-        com.google.protobuf.LazyStringArrayList.emptyList();
+    private com.google.protobuf.LazyStringList extraStatements_ =
+        com.google.protobuf.LazyStringArrayList.EMPTY;
 
     private void ensureExtraStatementsIsMutable() {
-      if (!extraStatements_.isModifiable()) {
+      if (!((bitField0_ & 0x00000004) != 0)) {
         extraStatements_ = new com.google.protobuf.LazyStringArrayList(extraStatements_);
+        bitField0_ |= 0x00000004;
       }
-      bitField0_ |= 0x00000004;
     }
     /**
      *
@@ -1096,8 +1107,7 @@ private void ensureExtraStatementsIsMutable() {
      * @return A list containing the extraStatements.
      */
     public com.google.protobuf.ProtocolStringList getExtraStatementsList() {
-      extraStatements_.makeImmutable();
-      return extraStatements_;
+      return extraStatements_.getUnmodifiableView();
     }
     /**
      *
@@ -1174,7 +1184,6 @@ public Builder setExtraStatements(int index, java.lang.String value) {
       }
       ensureExtraStatementsIsMutable();
       extraStatements_.set(index, value);
-      bitField0_ |= 0x00000004;
       onChanged();
       return this;
     }
@@ -1199,7 +1208,6 @@ public Builder addExtraStatements(java.lang.String value) {
       }
       ensureExtraStatementsIsMutable();
       extraStatements_.add(value);
-      bitField0_ |= 0x00000004;
       onChanged();
       return this;
     }
@@ -1221,7 +1229,6 @@ public Builder addExtraStatements(java.lang.String value) {
     public Builder addAllExtraStatements(java.lang.Iterable values) {
       ensureExtraStatementsIsMutable();
       com.google.protobuf.AbstractMessageLite.Builder.addAll(values, extraStatements_);
-      bitField0_ |= 0x00000004;
       onChanged();
       return this;
     }
@@ -1240,9 +1247,8 @@ public Builder addAllExtraStatements(java.lang.Iterable values
      * @return This builder for chaining.
      */
     public Builder clearExtraStatements() {
-      extraStatements_ = com.google.protobuf.LazyStringArrayList.emptyList();
+      extraStatements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       bitField0_ = (bitField0_ & ~0x00000004);
-      ;
       onChanged();
       return this;
     }
@@ -1268,7 +1274,6 @@ public Builder addExtraStatementsBytes(com.google.protobuf.ByteString value) {
       checkByteStringIsUtf8(value);
       ensureExtraStatementsIsMutable();
       extraStatements_.add(value);
-      bitField0_ |= 0x00000004;
       onChanged();
       return this;
     }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java
index c87638bef4d..f982cfe291a 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/Database.java
@@ -52,6 +52,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new Database();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_Database_descriptor;
@@ -114,7 +119,6 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum {
      * 
      * The database is fully created and ready for use, but is still
      * being optimized for performance and cannot handle full load.
-     *
      * In this state, the database still references the backup
      * it was restore from, preventing the backup
      * from being deleted. When optimizations are complete, the full performance
@@ -165,7 +169,6 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum {
      * 
      * The database is fully created and ready for use, but is still
      * being optimized for performance and cannot handle full load.
-     *
      * In this state, the database still references the backup
      * it was restore from, preventing the backup
      * from being deleted. When optimizations are complete, the full performance
@@ -547,10 +550,8 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig
    * Output only. For databases that are using customer managed encryption, this
    * field contains the encryption information for the database, such as
    * encryption state and the Cloud KMS key versions that are in use.
-   *
    * For databases that are using Google default or other types of encryption,
    * this field is empty.
-   *
    * This field is propagated lazily from the backend. There might be a delay
    * from when a key version is being used and when it appears in this field.
    * 
@@ -571,10 +572,8 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -595,10 +594,8 @@ public com.google.spanner.admin.database.v1.EncryptionConfig getEncryptionConfig * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -618,10 +615,8 @@ public int getEncryptionInfoCount() { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -641,10 +636,8 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo(int * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -796,7 +789,6 @@ public com.google.protobuf.TimestampOrBuilder getEarliestVersionTimeOrBuilder() *
    * Output only. The read-write region which contains the database's leader
    * replicas.
-   *
    * This is the same as the value of default_leader
    * database option set using DatabaseAdmin.CreateDatabase or
    * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -824,7 +816,6 @@ public java.lang.String getDefaultLeader() {
    * 
    * Output only. The read-write region which contains the database's leader
    * replicas.
-   *
    * This is the same as the value of default_leader
    * database option set using DatabaseAdmin.CreateDatabase or
    * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -2512,10 +2503,8 @@ private void ensureEncryptionInfoIsMutable() {
      * Output only. For databases that are using customer managed encryption, this
      * field contains the encryption information for the database, such as
      * encryption state and the Cloud KMS key versions that are in use.
-     *
      * For databases that are using Google default or other types of encryption,
      * this field is empty.
-     *
      * This field is propagated lazily from the backend. There might be a delay
      * from when a key version is being used and when it appears in this field.
      * 
@@ -2539,10 +2528,8 @@ private void ensureEncryptionInfoIsMutable() { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2565,10 +2552,8 @@ public int getEncryptionInfoCount() { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2591,10 +2576,8 @@ public com.google.spanner.admin.database.v1.EncryptionInfo getEncryptionInfo(int * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2624,10 +2607,8 @@ public Builder setEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2654,10 +2635,8 @@ public Builder setEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2686,10 +2665,8 @@ public Builder addEncryptionInfo(com.google.spanner.admin.database.v1.Encryption * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2719,10 +2696,8 @@ public Builder addEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2749,10 +2724,8 @@ public Builder addEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2779,10 +2752,8 @@ public Builder addEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2809,10 +2780,8 @@ public Builder addAllEncryptionInfo( * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2838,10 +2807,8 @@ public Builder clearEncryptionInfo() { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2867,10 +2834,8 @@ public Builder removeEncryptionInfo(int index) { * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2890,10 +2855,8 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder getEncryption * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2917,10 +2880,8 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2944,10 +2905,8 @@ public com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptio * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2967,10 +2926,8 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryption * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -2992,10 +2949,8 @@ public com.google.spanner.admin.database.v1.EncryptionInfo.Builder addEncryption * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -3404,7 +3359,6 @@ public com.google.protobuf.TimestampOrBuilder getEarliestVersionTimeOrBuilder() *
      * Output only. The read-write region which contains the database's leader
      * replicas.
-     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -3431,7 +3385,6 @@ public java.lang.String getDefaultLeader() {
      * 
      * Output only. The read-write region which contains the database's leader
      * replicas.
-     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -3458,7 +3411,6 @@ public com.google.protobuf.ByteString getDefaultLeaderBytes() {
      * 
      * Output only. The read-write region which contains the database's leader
      * replicas.
-     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -3484,7 +3436,6 @@ public Builder setDefaultLeader(java.lang.String value) {
      * 
      * Output only. The read-write region which contains the database's leader
      * replicas.
-     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -3506,7 +3457,6 @@ public Builder clearDefaultLeader() {
      * 
      * Output only. The read-write region which contains the database's leader
      * replicas.
-     *
      * This is the same as the value of default_leader
      * database option set using DatabaseAdmin.CreateDatabase or
      * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java
index 2dd394d2c7c..0252781fe91 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseOrBuilder.java
@@ -224,10 +224,8 @@ public interface DatabaseOrBuilder
    * Output only. For databases that are using customer managed encryption, this
    * field contains the encryption information for the database, such as
    * encryption state and the Cloud KMS key versions that are in use.
-   *
    * For databases that are using Google default or other types of encryption,
    * this field is empty.
-   *
    * This field is propagated lazily from the backend. There might be a delay
    * from when a key version is being used and when it appears in this field.
    * 
@@ -244,10 +242,8 @@ public interface DatabaseOrBuilder * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -264,10 +260,8 @@ public interface DatabaseOrBuilder * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -284,10 +278,8 @@ public interface DatabaseOrBuilder * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -305,10 +297,8 @@ public interface DatabaseOrBuilder * Output only. For databases that are using customer managed encryption, this * field contains the encryption information for the database, such as * encryption state and the Cloud KMS key versions that are in use. - * * For databases that are using Google default or other types of encryption, * this field is empty. - * * This field is propagated lazily from the backend. There might be a delay * from when a key version is being used and when it appears in this field. *
@@ -412,7 +402,6 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr *
    * Output only. The read-write region which contains the database's leader
    * replicas.
-   *
    * This is the same as the value of default_leader
    * database option set using DatabaseAdmin.CreateDatabase or
    * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
@@ -429,7 +418,6 @@ com.google.spanner.admin.database.v1.EncryptionInfoOrBuilder getEncryptionInfoOr
    * 
    * Output only. The read-write region which contains the database's leader
    * replicas.
-   *
    * This is the same as the value of default_leader
    * database option set using DatabaseAdmin.CreateDatabase or
    * DatabaseAdmin.UpdateDatabaseDdl. If not explicitly set, this is empty.
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java
index d0f86946079..42caf41f84f 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DatabaseRole.java
@@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new DatabaseRole();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java
deleted file mode 100644
index 8c57d14fb9b..00000000000
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfo.java
+++ /dev/null
@@ -1,1161 +0,0 @@
-/*
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/spanner/admin/database/v1/spanner_database_admin.proto
-
-package com.google.spanner.admin.database.v1;
-
-/**
- *
- *
- * 
- * Action information extracted from a DDL statement. This proto is used to
- * display the brief info of the DDL statement for the operation
- * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl].
- * 
- * - * Protobuf type {@code google.spanner.admin.database.v1.DdlStatementActionInfo} - */ -public final class DdlStatementActionInfo extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:google.spanner.admin.database.v1.DdlStatementActionInfo) - DdlStatementActionInfoOrBuilder { - private static final long serialVersionUID = 0L; - // Use DdlStatementActionInfo.newBuilder() to construct. - private DdlStatementActionInfo(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private DdlStatementActionInfo() { - action_ = ""; - entityType_ = ""; - entityNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new DdlStatementActionInfo(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto - .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto - .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.google.spanner.admin.database.v1.DdlStatementActionInfo.class, - com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder.class); - } - - public static final int ACTION_FIELD_NUMBER = 1; - - @SuppressWarnings("serial") - private volatile java.lang.Object action_ = ""; - /** - * - * - *
-   * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-   * This field is a non-empty string.
-   * 
- * - * string action = 1; - * - * @return The action. - */ - @java.lang.Override - public java.lang.String getAction() { - java.lang.Object ref = action_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - action_ = s; - return s; - } - } - /** - * - * - *
-   * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-   * This field is a non-empty string.
-   * 
- * - * string action = 1; - * - * @return The bytes for action. - */ - @java.lang.Override - public com.google.protobuf.ByteString getActionBytes() { - java.lang.Object ref = action_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - action_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int ENTITY_TYPE_FIELD_NUMBER = 2; - - @SuppressWarnings("serial") - private volatile java.lang.Object entityType_ = ""; - /** - * - * - *
-   * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-   * This field can be empty string for some DDL statement,
-   * e.g. for statement "ANALYZE", `entity_type` = "".
-   * 
- * - * string entity_type = 2; - * - * @return The entityType. - */ - @java.lang.Override - public java.lang.String getEntityType() { - java.lang.Object ref = entityType_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - entityType_ = s; - return s; - } - } - /** - * - * - *
-   * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-   * This field can be empty string for some DDL statement,
-   * e.g. for statement "ANALYZE", `entity_type` = "".
-   * 
- * - * string entity_type = 2; - * - * @return The bytes for entityType. - */ - @java.lang.Override - public com.google.protobuf.ByteString getEntityTypeBytes() { - java.lang.Object ref = entityType_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - entityType_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int ENTITY_NAMES_FIELD_NUMBER = 3; - - @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList entityNames_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - /** - * - * - *
-   * The entity name(s) being operated on the DDL statement.
-   * E.g.
-   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-   * 3. For statement "ANALYZE", `entity_names` = [].
-   * 
- * - * repeated string entity_names = 3; - * - * @return A list containing the entityNames. - */ - public com.google.protobuf.ProtocolStringList getEntityNamesList() { - return entityNames_; - } - /** - * - * - *
-   * The entity name(s) being operated on the DDL statement.
-   * E.g.
-   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-   * 3. For statement "ANALYZE", `entity_names` = [].
-   * 
- * - * repeated string entity_names = 3; - * - * @return The count of entityNames. - */ - public int getEntityNamesCount() { - return entityNames_.size(); - } - /** - * - * - *
-   * The entity name(s) being operated on the DDL statement.
-   * E.g.
-   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-   * 3. For statement "ANALYZE", `entity_names` = [].
-   * 
- * - * repeated string entity_names = 3; - * - * @param index The index of the element to return. - * @return The entityNames at the given index. - */ - public java.lang.String getEntityNames(int index) { - return entityNames_.get(index); - } - /** - * - * - *
-   * The entity name(s) being operated on the DDL statement.
-   * E.g.
-   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-   * 3. For statement "ANALYZE", `entity_names` = [].
-   * 
- * - * repeated string entity_names = 3; - * - * @param index The index of the value to return. - * @return The bytes of the entityNames at the given index. - */ - public com.google.protobuf.ByteString getEntityNamesBytes(int index) { - return entityNames_.getByteString(index); - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(action_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, action_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(entityType_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, entityType_); - } - for (int i = 0; i < entityNames_.size(); i++) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, entityNames_.getRaw(i)); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(action_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, action_); - } - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(entityType_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, entityType_); - } - { - int dataSize = 0; - for (int i = 0; i < entityNames_.size(); i++) { - dataSize += computeStringSizeNoTag(entityNames_.getRaw(i)); - } - size += dataSize; - size += 1 * getEntityNamesList().size(); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.google.spanner.admin.database.v1.DdlStatementActionInfo)) { - return super.equals(obj); - } - com.google.spanner.admin.database.v1.DdlStatementActionInfo other = - (com.google.spanner.admin.database.v1.DdlStatementActionInfo) obj; - - if (!getAction().equals(other.getAction())) return false; - if (!getEntityType().equals(other.getEntityType())) return false; - if (!getEntityNamesList().equals(other.getEntityNamesList())) return false; - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + ACTION_FIELD_NUMBER; - hash = (53 * hash) + getAction().hashCode(); - hash = (37 * hash) + ENTITY_TYPE_FIELD_NUMBER; - hash = (53 * hash) + getEntityType().hashCode(); - if (getEntityNamesCount() > 0) { - hash = (37 * hash) + ENTITY_NAMES_FIELD_NUMBER; - hash = (53 * hash) + getEntityNamesList().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder( - com.google.spanner.admin.database.v1.DdlStatementActionInfo prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * - * - *
-   * Action information extracted from a DDL statement. This proto is used to
-   * display the brief info of the DDL statement for the operation
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl].
-   * 
- * - * Protobuf type {@code google.spanner.admin.database.v1.DdlStatementActionInfo} - */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:google.spanner.admin.database.v1.DdlStatementActionInfo) - com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto - .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto - .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.google.spanner.admin.database.v1.DdlStatementActionInfo.class, - com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder.class); - } - - // Construct using com.google.spanner.admin.database.v1.DdlStatementActionInfo.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - action_ = ""; - entityType_ = ""; - entityNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto - .internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor; - } - - @java.lang.Override - public com.google.spanner.admin.database.v1.DdlStatementActionInfo getDefaultInstanceForType() { - return com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance(); - } - - @java.lang.Override - public com.google.spanner.admin.database.v1.DdlStatementActionInfo build() { - com.google.spanner.admin.database.v1.DdlStatementActionInfo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public com.google.spanner.admin.database.v1.DdlStatementActionInfo buildPartial() { - com.google.spanner.admin.database.v1.DdlStatementActionInfo result = - new com.google.spanner.admin.database.v1.DdlStatementActionInfo(this); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartial0(com.google.spanner.admin.database.v1.DdlStatementActionInfo result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.action_ = action_; - } - if (((from_bitField0_ & 0x00000002) != 0)) { - result.entityType_ = entityType_; - } - if (((from_bitField0_ & 0x00000004) != 0)) { - entityNames_.makeImmutable(); - result.entityNames_ = entityNames_; - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.google.spanner.admin.database.v1.DdlStatementActionInfo) { - return mergeFrom((com.google.spanner.admin.database.v1.DdlStatementActionInfo) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.google.spanner.admin.database.v1.DdlStatementActionInfo other) { - if (other == com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance()) - return this; - if (!other.getAction().isEmpty()) { - action_ = other.action_; - bitField0_ |= 0x00000001; - onChanged(); - } - if (!other.getEntityType().isEmpty()) { - entityType_ = other.entityType_; - bitField0_ |= 0x00000002; - onChanged(); - } - if (!other.entityNames_.isEmpty()) { - if (entityNames_.isEmpty()) { - entityNames_ = other.entityNames_; - bitField0_ |= 0x00000004; - } else { - ensureEntityNamesIsMutable(); - entityNames_.addAll(other.entityNames_); - } - onChanged(); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: - { - action_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000001; - break; - } // case 10 - case 18: - { - entityType_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000002; - break; - } // case 18 - case 26: - { - java.lang.String s = input.readStringRequireUtf8(); - ensureEntityNamesIsMutable(); - entityNames_.add(s); - break; - } // case 26 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private java.lang.Object action_ = ""; - /** - * - * - *
-     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-     * This field is a non-empty string.
-     * 
- * - * string action = 1; - * - * @return The action. - */ - public java.lang.String getAction() { - java.lang.Object ref = action_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - action_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * - * - *
-     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-     * This field is a non-empty string.
-     * 
- * - * string action = 1; - * - * @return The bytes for action. - */ - public com.google.protobuf.ByteString getActionBytes() { - java.lang.Object ref = action_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - action_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * - * - *
-     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-     * This field is a non-empty string.
-     * 
- * - * string action = 1; - * - * @param value The action to set. - * @return This builder for chaining. - */ - public Builder setAction(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - action_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * - * - *
-     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-     * This field is a non-empty string.
-     * 
- * - * string action = 1; - * - * @return This builder for chaining. - */ - public Builder clearAction() { - action_ = getDefaultInstance().getAction(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - /** - * - * - *
-     * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-     * This field is a non-empty string.
-     * 
- * - * string action = 1; - * - * @param value The bytes for action to set. - * @return This builder for chaining. - */ - public Builder setActionBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - action_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - private java.lang.Object entityType_ = ""; - /** - * - * - *
-     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-     * This field can be empty string for some DDL statement,
-     * e.g. for statement "ANALYZE", `entity_type` = "".
-     * 
- * - * string entity_type = 2; - * - * @return The entityType. - */ - public java.lang.String getEntityType() { - java.lang.Object ref = entityType_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - entityType_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * - * - *
-     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-     * This field can be empty string for some DDL statement,
-     * e.g. for statement "ANALYZE", `entity_type` = "".
-     * 
- * - * string entity_type = 2; - * - * @return The bytes for entityType. - */ - public com.google.protobuf.ByteString getEntityTypeBytes() { - java.lang.Object ref = entityType_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - entityType_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * - * - *
-     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-     * This field can be empty string for some DDL statement,
-     * e.g. for statement "ANALYZE", `entity_type` = "".
-     * 
- * - * string entity_type = 2; - * - * @param value The entityType to set. - * @return This builder for chaining. - */ - public Builder setEntityType(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - entityType_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * - * - *
-     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-     * This field can be empty string for some DDL statement,
-     * e.g. for statement "ANALYZE", `entity_type` = "".
-     * 
- * - * string entity_type = 2; - * - * @return This builder for chaining. - */ - public Builder clearEntityType() { - entityType_ = getDefaultInstance().getEntityType(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - return this; - } - /** - * - * - *
-     * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-     * This field can be empty string for some DDL statement,
-     * e.g. for statement "ANALYZE", `entity_type` = "".
-     * 
- * - * string entity_type = 2; - * - * @param value The bytes for entityType to set. - * @return This builder for chaining. - */ - public Builder setEntityTypeBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - entityType_ = value; - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - - private com.google.protobuf.LazyStringArrayList entityNames_ = - com.google.protobuf.LazyStringArrayList.emptyList(); - - private void ensureEntityNamesIsMutable() { - if (!entityNames_.isModifiable()) { - entityNames_ = new com.google.protobuf.LazyStringArrayList(entityNames_); - } - bitField0_ |= 0x00000004; - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @return A list containing the entityNames. - */ - public com.google.protobuf.ProtocolStringList getEntityNamesList() { - entityNames_.makeImmutable(); - return entityNames_; - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @return The count of entityNames. - */ - public int getEntityNamesCount() { - return entityNames_.size(); - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @param index The index of the element to return. - * @return The entityNames at the given index. - */ - public java.lang.String getEntityNames(int index) { - return entityNames_.get(index); - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @param index The index of the value to return. - * @return The bytes of the entityNames at the given index. - */ - public com.google.protobuf.ByteString getEntityNamesBytes(int index) { - return entityNames_.getByteString(index); - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @param index The index to set the value at. - * @param value The entityNames to set. - * @return This builder for chaining. - */ - public Builder setEntityNames(int index, java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureEntityNamesIsMutable(); - entityNames_.set(index, value); - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @param value The entityNames to add. - * @return This builder for chaining. - */ - public Builder addEntityNames(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - ensureEntityNamesIsMutable(); - entityNames_.add(value); - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @param values The entityNames to add. - * @return This builder for chaining. - */ - public Builder addAllEntityNames(java.lang.Iterable values) { - ensureEntityNamesIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll(values, entityNames_); - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @return This builder for chaining. - */ - public Builder clearEntityNames() { - entityNames_ = com.google.protobuf.LazyStringArrayList.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - ; - onChanged(); - return this; - } - /** - * - * - *
-     * The entity name(s) being operated on the DDL statement.
-     * E.g.
-     * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-     * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-     * 3. For statement "ANALYZE", `entity_names` = [].
-     * 
- * - * repeated string entity_names = 3; - * - * @param value The bytes of the entityNames to add. - * @return This builder for chaining. - */ - public Builder addEntityNamesBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - ensureEntityNamesIsMutable(); - entityNames_.add(value); - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:google.spanner.admin.database.v1.DdlStatementActionInfo) - } - - // @@protoc_insertion_point(class_scope:google.spanner.admin.database.v1.DdlStatementActionInfo) - private static final com.google.spanner.admin.database.v1.DdlStatementActionInfo DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new com.google.spanner.admin.database.v1.DdlStatementActionInfo(); - } - - public static com.google.spanner.admin.database.v1.DdlStatementActionInfo getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public DdlStatementActionInfo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public com.google.spanner.admin.database.v1.DdlStatementActionInfo getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } -} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java deleted file mode 100644 index 77632b556eb..00000000000 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DdlStatementActionInfoOrBuilder.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/spanner/admin/database/v1/spanner_database_admin.proto - -package com.google.spanner.admin.database.v1; - -public interface DdlStatementActionInfoOrBuilder - extends - // @@protoc_insertion_point(interface_extends:google.spanner.admin.database.v1.DdlStatementActionInfo) - com.google.protobuf.MessageOrBuilder { - - /** - * - * - *
-   * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-   * This field is a non-empty string.
-   * 
- * - * string action = 1; - * - * @return The action. - */ - java.lang.String getAction(); - /** - * - * - *
-   * The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc.
-   * This field is a non-empty string.
-   * 
- * - * string action = 1; - * - * @return The bytes for action. - */ - com.google.protobuf.ByteString getActionBytes(); - - /** - * - * - *
-   * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-   * This field can be empty string for some DDL statement,
-   * e.g. for statement "ANALYZE", `entity_type` = "".
-   * 
- * - * string entity_type = 2; - * - * @return The entityType. - */ - java.lang.String getEntityType(); - /** - * - * - *
-   * The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc.
-   * This field can be empty string for some DDL statement,
-   * e.g. for statement "ANALYZE", `entity_type` = "".
-   * 
- * - * string entity_type = 2; - * - * @return The bytes for entityType. - */ - com.google.protobuf.ByteString getEntityTypeBytes(); - - /** - * - * - *
-   * The entity name(s) being operated on the DDL statement.
-   * E.g.
-   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-   * 3. For statement "ANALYZE", `entity_names` = [].
-   * 
- * - * repeated string entity_names = 3; - * - * @return A list containing the entityNames. - */ - java.util.List getEntityNamesList(); - /** - * - * - *
-   * The entity name(s) being operated on the DDL statement.
-   * E.g.
-   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-   * 3. For statement "ANALYZE", `entity_names` = [].
-   * 
- * - * repeated string entity_names = 3; - * - * @return The count of entityNames. - */ - int getEntityNamesCount(); - /** - * - * - *
-   * The entity name(s) being operated on the DDL statement.
-   * E.g.
-   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-   * 3. For statement "ANALYZE", `entity_names` = [].
-   * 
- * - * repeated string entity_names = 3; - * - * @param index The index of the element to return. - * @return The entityNames at the given index. - */ - java.lang.String getEntityNames(int index); - /** - * - * - *
-   * The entity name(s) being operated on the DDL statement.
-   * E.g.
-   * 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"].
-   * 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"].
-   * 3. For statement "ANALYZE", `entity_names` = [].
-   * 
- * - * repeated string entity_names = 3; - * - * @param index The index of the value to return. - * @return The bytes of the entityNames at the given index. - */ - com.google.protobuf.ByteString getEntityNamesBytes(int index); -} diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java index b7ec86f086c..e095273e163 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DeleteBackupRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DeleteBackupRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_DeleteBackupRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java index 401e68627a3..2aea18dad1a 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/DropDatabaseRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DropDatabaseRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java index 77046a46e50..1ef8ecc89c4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionConfig.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new EncryptionConfig(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionConfig_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java index b5a473e4b8b..87cecf2d4a4 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/EncryptionInfo.java @@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new EncryptionInfo(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.CommonProto .internal_static_google_spanner_admin_database_v1_EncryptionInfo_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java index cd3c0180bc6..7f3cad81b14 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetBackupRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetBackupRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_GetBackupRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java index 311555b751c..528e3bb5d78 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetDatabaseDdlRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java index fd710da5da0..c4ad5e76da3 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseDdlResponse.java @@ -38,7 +38,7 @@ private GetDatabaseDdlResponse(com.google.protobuf.GeneratedMessageV3.Builder } private GetDatabaseDdlResponse() { - statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; } @java.lang.Override @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetDatabaseDdlResponse(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor; @@ -65,8 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int STATEMENTS_FIELD_NUMBER = 1; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList statements_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList statements_; /** * * @@ -336,7 +340,8 @@ private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { public Builder clear() { super.clear(); bitField0_ = 0; - statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000001); return this; } @@ -364,6 +369,7 @@ public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse build() { public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse buildPartial() { com.google.spanner.admin.database.v1.GetDatabaseDdlResponse result = new com.google.spanner.admin.database.v1.GetDatabaseDdlResponse(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -371,12 +377,17 @@ public com.google.spanner.admin.database.v1.GetDatabaseDdlResponse buildPartial( return result; } + private void buildPartialRepeatedFields( + com.google.spanner.admin.database.v1.GetDatabaseDdlResponse result) { + if (((bitField0_ & 0x00000001) != 0)) { + statements_ = statements_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.statements_ = statements_; + } + private void buildPartial0(com.google.spanner.admin.database.v1.GetDatabaseDdlResponse result) { int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - statements_.makeImmutable(); - result.statements_ = statements_; - } } @java.lang.Override @@ -428,7 +439,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.GetDatabaseDdlResp if (!other.statements_.isEmpty()) { if (statements_.isEmpty()) { statements_ = other.statements_; - bitField0_ |= 0x00000001; + bitField0_ = (bitField0_ & ~0x00000001); } else { ensureStatementsIsMutable(); statements_.addAll(other.statements_); @@ -487,14 +498,14 @@ public Builder mergeFrom( private int bitField0_; - private com.google.protobuf.LazyStringArrayList statements_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList statements_ = + com.google.protobuf.LazyStringArrayList.EMPTY; private void ensureStatementsIsMutable() { - if (!statements_.isModifiable()) { + if (!((bitField0_ & 0x00000001) != 0)) { statements_ = new com.google.protobuf.LazyStringArrayList(statements_); + bitField0_ |= 0x00000001; } - bitField0_ |= 0x00000001; } /** * @@ -509,8 +520,7 @@ private void ensureStatementsIsMutable() { * @return A list containing the statements. */ public com.google.protobuf.ProtocolStringList getStatementsList() { - statements_.makeImmutable(); - return statements_; + return statements_.getUnmodifiableView(); } /** * @@ -579,7 +589,6 @@ public Builder setStatements(int index, java.lang.String value) { } ensureStatementsIsMutable(); statements_.set(index, value); - bitField0_ |= 0x00000001; onChanged(); return this; } @@ -602,7 +611,6 @@ public Builder addStatements(java.lang.String value) { } ensureStatementsIsMutable(); statements_.add(value); - bitField0_ |= 0x00000001; onChanged(); return this; } @@ -622,7 +630,6 @@ public Builder addStatements(java.lang.String value) { public Builder addAllStatements(java.lang.Iterable values) { ensureStatementsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, statements_); - bitField0_ |= 0x00000001; onChanged(); return this; } @@ -639,9 +646,8 @@ public Builder addAllStatements(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearStatements() { - statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00000001); - ; onChanged(); return this; } @@ -665,7 +671,6 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureStatementsIsMutable(); statements_.add(value); - bitField0_ |= 0x00000001; onChanged(); return this; } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java index d6b52bfbbfa..2a501d6d7cf 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/GetDatabaseRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetDatabaseRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_GetDatabaseRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java index a871c005dc6..5426f3dd857 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequest.java @@ -50,6 +50,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ListBackupOperationsRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.BackupProto .internal_static_google_spanner_admin_database_v1_ListBackupOperationsRequest_descriptor; @@ -131,16 +136,13 @@ public com.google.protobuf.ByteString getParentBytes() { * *
    * An expression that filters the list of returned backup operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -152,13 +154,10 @@ public com.google.protobuf.ByteString getParentBytes() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
    *      `metadata.database:prod` - Returns operations where:
@@ -219,16 +218,13 @@ public java.lang.String getFilter() {
    *
    * 
    * An expression that filters the list of returned backup operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -240,13 +236,10 @@ public java.lang.String getFilter() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
    *      `metadata.database:prod` - Returns operations where:
@@ -924,16 +917,13 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *
      * 
      * An expression that filters the list of returned backup operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -945,13 +935,10 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
@@ -1011,16 +998,13 @@ public java.lang.String getFilter() {
      *
      * 
      * An expression that filters the list of returned backup operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1032,13 +1016,10 @@ public java.lang.String getFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
@@ -1098,16 +1079,13 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *
      * 
      * An expression that filters the list of returned backup operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1119,13 +1097,10 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
@@ -1184,16 +1159,13 @@ public Builder setFilter(java.lang.String value) {
      *
      * 
      * An expression that filters the list of returned backup operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1205,13 +1177,10 @@ public Builder setFilter(java.lang.String value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
@@ -1266,16 +1235,13 @@ public Builder clearFilter() {
      *
      * 
      * An expression that filters the list of returned backup operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1287,13 +1253,10 @@ public Builder clearFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
      *      `metadata.database:prod` - Returns operations where:
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
index 4268655ed60..4d862ccc097 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsRequestOrBuilder.java
@@ -59,16 +59,13 @@ public interface ListBackupOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned backup operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -80,13 +77,10 @@ public interface ListBackupOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
    *      `metadata.database:prod` - Returns operations where:
@@ -136,16 +130,13 @@ public interface ListBackupOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned backup operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -157,13 +148,10 @@ public interface ListBackupOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.CreateBackupMetadata) AND` \
    *      `metadata.database:prod` - Returns operations where:
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
index 4afe5a1cc6a..a1a12ed3bf8 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupOperationsResponse.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListBackupOperationsResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_ListBackupOperationsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java
index 69c1786eec9..0140292e32b 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequest.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListBackupsRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_ListBackupsRequest_descriptor;
@@ -130,15 +135,12 @@ public com.google.protobuf.ByteString getParentBytes() {
    *
    * 
    * An expression that filters the list of returned backups.
-   *
    * A filter expression consists of a field name, a comparison operator, and a
    * value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-   *
    *   * `name`
    *   * `database`
    *   * `state`
@@ -146,13 +148,10 @@ public com.google.protobuf.ByteString getParentBytes() {
    *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `size_bytes`
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `name:Howl` - The backup's name contains the string "howl".
    *   * `database:prod`
    *          - The database's name contains the string "prod".
@@ -187,15 +186,12 @@ public java.lang.String getFilter() {
    *
    * 
    * An expression that filters the list of returned backups.
-   *
    * A filter expression consists of a field name, a comparison operator, and a
    * value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-   *
    *   * `name`
    *   * `database`
    *   * `state`
@@ -203,13 +199,10 @@ public java.lang.String getFilter() {
    *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `size_bytes`
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `name:Howl` - The backup's name contains the string "howl".
    *   * `database:prod`
    *          - The database's name contains the string "prod".
@@ -856,15 +849,12 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *
      * 
      * An expression that filters the list of returned backups.
-     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -872,13 +862,10 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
@@ -912,15 +899,12 @@ public java.lang.String getFilter() {
      *
      * 
      * An expression that filters the list of returned backups.
-     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -928,13 +912,10 @@ public java.lang.String getFilter() {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
@@ -968,15 +949,12 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *
      * 
      * An expression that filters the list of returned backups.
-     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -984,13 +962,10 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
@@ -1023,15 +998,12 @@ public Builder setFilter(java.lang.String value) {
      *
      * 
      * An expression that filters the list of returned backups.
-     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -1039,13 +1011,10 @@ public Builder setFilter(java.lang.String value) {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
@@ -1074,15 +1043,12 @@ public Builder clearFilter() {
      *
      * 
      * An expression that filters the list of returned backups.
-     *
      * A filter expression consists of a field name, a comparison operator, and a
      * value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-     *
      *   * `name`
      *   * `database`
      *   * `state`
@@ -1090,13 +1056,10 @@ public Builder clearFilter() {
      *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
      *   * `size_bytes`
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic, but
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `name:Howl` - The backup's name contains the string "howl".
      *   * `database:prod`
      *          - The database's name contains the string "prod".
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java
index 3c253ef05bf..4ea911b53ce 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsRequestOrBuilder.java
@@ -59,15 +59,12 @@ public interface ListBackupsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned backups.
-   *
    * A filter expression consists of a field name, a comparison operator, and a
    * value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-   *
    *   * `name`
    *   * `database`
    *   * `state`
@@ -75,13 +72,10 @@ public interface ListBackupsRequestOrBuilder
    *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `size_bytes`
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `name:Howl` - The backup's name contains the string "howl".
    *   * `database:prod`
    *          - The database's name contains the string "prod".
@@ -105,15 +99,12 @@ public interface ListBackupsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned backups.
-   *
    * A filter expression consists of a field name, a comparison operator, and a
    * value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Backup][google.spanner.admin.database.v1.Backup] are eligible for filtering:
-   *
    *   * `name`
    *   * `database`
    *   * `state`
@@ -121,13 +112,10 @@ public interface ListBackupsRequestOrBuilder
    *   * `expire_time`  (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `version_time` (and values are of the format YYYY-MM-DDTHH:MM:SSZ)
    *   * `size_bytes`
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic, but
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `name:Howl` - The backup's name contains the string "howl".
    *   * `database:prod`
    *          - The database's name contains the string "prod".
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java
index 8c06fc77b79..e320ee4aba2 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListBackupsResponse.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListBackupsResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_ListBackupsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
index 4b0abaf18d2..9bf375def87 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequest.java
@@ -50,6 +50,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabaseOperationsRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor;
@@ -131,16 +136,13 @@ public com.google.protobuf.ByteString getParentBytes() {
    *
    * 
    * An expression that filters the list of returned operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -152,13 +154,10 @@ public com.google.protobuf.ByteString getParentBytes() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
    *     `(metadata.source_type:BACKUP) AND` \
@@ -195,16 +194,13 @@ public java.lang.String getFilter() {
    *
    * 
    * An expression that filters the list of returned operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -216,13 +212,10 @@ public java.lang.String getFilter() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
    *     `(metadata.source_type:BACKUP) AND` \
@@ -880,16 +873,13 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -901,13 +891,10 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
@@ -943,16 +930,13 @@ public java.lang.String getFilter() {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -964,13 +948,10 @@ public java.lang.String getFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
@@ -1006,16 +987,13 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1027,13 +1005,10 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
@@ -1068,16 +1043,13 @@ public Builder setFilter(java.lang.String value) {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1089,13 +1061,10 @@ public Builder setFilter(java.lang.String value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
@@ -1126,16 +1095,13 @@ public Builder clearFilter() {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1147,13 +1113,10 @@ public Builder clearFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
      *     `(metadata.source_type:BACKUP) AND` \
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
index 4d1f7f23c82..e020307e57f 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsRequestOrBuilder.java
@@ -59,16 +59,13 @@ public interface ListDatabaseOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -80,13 +77,10 @@ public interface ListDatabaseOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
    *     `(metadata.source_type:BACKUP) AND` \
@@ -112,16 +106,13 @@ public interface ListDatabaseOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -133,13 +124,10 @@ public interface ListDatabaseOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=type.googleapis.com/google.spanner.admin.database.v1.RestoreDatabaseMetadata) AND` \
    *     `(metadata.source_type:BACKUP) AND` \
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java
index 110f68ff83d..763faff8830 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseOperationsResponse.java
@@ -50,6 +50,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabaseOperationsResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java
index e26e0089963..4b7453090ce 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesRequest.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabaseRolesRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java
index 442ed797d6f..ac539aa5acf 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabaseRolesResponse.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabaseRolesResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java
index c6c3c695459..eac171f8df9 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesRequest.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabasesRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabasesRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java
index 6063e3bb8a3..dd3ce964137 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/ListDatabasesResponse.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListDatabasesResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_ListDatabasesResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java
index 7a4a49e58e6..dceff032df0 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OperationProgress.java
@@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new OperationProgress();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.CommonProto
         .internal_static_google_spanner_admin_database_v1_OperationProgress_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java
index 372757476db..ce652f5318f 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/OptimizeRestoredDatabaseMetadata.java
@@ -51,6 +51,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new OptimizeRestoredDatabaseMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java
index 19523910055..54aa3135f07 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseEncryptionConfig.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RestoreDatabaseEncryptionConfig();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java
index 49ca8fde967..0225666e1ff 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadata.java
@@ -50,6 +50,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RestoreDatabaseMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor;
@@ -66,8 +71,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
   }
 
   private int sourceInfoCase_ = 0;
-
-  @SuppressWarnings("serial")
   private java.lang.Object sourceInfo_;
 
   public enum SourceInfoCase
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java
index a6b1bc97877..35ad6d76e9d 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseMetadataOrBuilder.java
@@ -259,5 +259,6 @@ public interface RestoreDatabaseMetadataOrBuilder
    */
   com.google.protobuf.ByteString getOptimizeDatabaseOperationNameBytes();
 
-  com.google.spanner.admin.database.v1.RestoreDatabaseMetadata.SourceInfoCase getSourceInfoCase();
+  public com.google.spanner.admin.database.v1.RestoreDatabaseMetadata.SourceInfoCase
+      getSourceInfoCase();
 }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java
index 96d866db827..c89cf015544 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequest.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RestoreDatabaseRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor;
@@ -65,8 +70,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
   }
 
   private int sourceCase_ = 0;
-
-  @SuppressWarnings("serial")
   private java.lang.Object source_;
 
   public enum SourceCase
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java
index e2047038bd5..f7c1c6e1f82 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreDatabaseRequestOrBuilder.java
@@ -188,5 +188,5 @@ public interface RestoreDatabaseRequestOrBuilder
   com.google.spanner.admin.database.v1.RestoreDatabaseEncryptionConfigOrBuilder
       getEncryptionConfigOrBuilder();
 
-  com.google.spanner.admin.database.v1.RestoreDatabaseRequest.SourceCase getSourceCase();
+  public com.google.spanner.admin.database.v1.RestoreDatabaseRequest.SourceCase getSourceCase();
 }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java
index 02c67d53686..e76b3bcef86 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfo.java
@@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RestoreInfo();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_RestoreInfo_descriptor;
@@ -63,8 +68,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
   }
 
   private int sourceInfoCase_ = 0;
-
-  @SuppressWarnings("serial")
   private java.lang.Object sourceInfo_;
 
   public enum SourceInfoCase
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java
index d02746a0ed6..f1b55bcc5f5 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/RestoreInfoOrBuilder.java
@@ -86,5 +86,5 @@ public interface RestoreInfoOrBuilder
    */
   com.google.spanner.admin.database.v1.BackupInfoOrBuilder getBackupInfoOrBuilder();
 
-  com.google.spanner.admin.database.v1.RestoreInfo.SourceInfoCase getSourceInfoCase();
+  public com.google.spanner.admin.database.v1.RestoreInfo.SourceInfoCase getSourceInfoCase();
 }
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
index 4ac1d45264c..0045ee30f35 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/SpannerDatabaseAdminProto.java
@@ -67,10 +67,6 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r
       internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_fieldAccessorTable;
-  static final com.google.protobuf.Descriptors.Descriptor
-      internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor;
-  static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
       internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor;
   static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
@@ -148,253 +144,249 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "ource_type\030\001 \001(\01623.google.spanner.admin."
           + "database.v1.RestoreSourceType\022C\n\013backup_"
           + "info\030\002 \001(\0132,.google.spanner.admin.databa"
-          + "se.v1.BackupInfoH\000B\r\n\013source_info\"\325\006\n\010Da"
-          + "tabase\022\022\n\004name\030\001 \001(\tB\004\342A\001\002\022E\n\005state\030\002 \001("
-          + "\01620.google.spanner.admin.database.v1.Dat"
-          + "abase.StateB\004\342A\001\003\0225\n\013create_time\030\003 \001(\0132\032"
-          + ".google.protobuf.TimestampB\004\342A\001\003\022I\n\014rest"
-          + "ore_info\030\004 \001(\0132-.google.spanner.admin.da"
-          + "tabase.v1.RestoreInfoB\004\342A\001\003\022S\n\021encryptio"
-          + "n_config\030\005 \001(\01322.google.spanner.admin.da"
-          + "tabase.v1.EncryptionConfigB\004\342A\001\003\022O\n\017encr"
-          + "yption_info\030\010 \003(\01320.google.spanner.admin"
-          + ".database.v1.EncryptionInfoB\004\342A\001\003\022&\n\030ver"
-          + "sion_retention_period\030\006 \001(\tB\004\342A\001\003\022?\n\025ear"
-          + "liest_version_time\030\007 \001(\0132\032.google.protob"
-          + "uf.TimestampB\004\342A\001\003\022\034\n\016default_leader\030\t \001"
-          + "(\tB\004\342A\001\003\022Q\n\020database_dialect\030\n \001(\01621.goo"
-          + "gle.spanner.admin.database.v1.DatabaseDi"
-          + "alectB\004\342A\001\003\022\036\n\026enable_drop_protection\030\013 "
-          + "\001(\010\022\031\n\013reconciling\030\014 \001(\010B\004\342A\001\003\"M\n\005State\022"
-          + "\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005"
-          + "READY\020\002\022\024\n\020READY_OPTIMIZING\020\003:b\352A_\n\037span"
-          + "ner.googleapis.com/Database\022\n\025earliest_v"
+          + "ersion_time\030\007 \001(\0132\032.google.protobuf.Time"
+          + "stampB\003\340A\003\022\033\n\016default_leader\030\t \001(\tB\003\340A\003\022"
+          + "P\n\020database_dialect\030\n \001(\01621.google.spann"
+          + "er.admin.database.v1.DatabaseDialectB\003\340A"
+          + "\003\022\036\n\026enable_drop_protection\030\013 \001(\010\022\030\n\013rec"
+          + "onciling\030\014 \001(\010B\003\340A\003\"M\n\005State\022\025\n\021STATE_UN"
+          + "SPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n\005READY\020\002\022\024\n\020"
+          + "READY_OPTIMIZING\020\003:b\352A_\n\037spanner.googlea"
+          + "pis.com/Database\022\332A\006parent\202\323\344\223\002/"
-          + "\022-/v1/{parent=projects/*/instances/*}/da"
-          + "tabases\022\244\002\n\016CreateDatabase\0227.google.span"
-          + "ner.admin.database.v1.CreateDatabaseRequ"
-          + "est\032\035.google.longrunning.Operation\"\271\001\312Ad"
-          + "\n)google.spanner.admin.database.v1.Datab"
-          + "ase\0227google.spanner.admin.database.v1.Cr"
-          + "eateDatabaseMetadata\332A\027parent,create_sta"
-          + "tement\202\323\344\223\0022\"-/v1/{parent=projects/*/ins"
-          + "tances/*}/databases:\001*\022\255\001\n\013GetDatabase\0224"
-          + ".google.spanner.admin.database.v1.GetDat"
-          + "abaseRequest\032*.google.spanner.admin.data"
-          + "base.v1.Database\"<\332A\004name\202\323\344\223\002/\022-/v1/{na"
-          + "me=projects/*/instances/*/databases/*}\022\357"
-          + "\001\n\016UpdateDatabase\0227.google.spanner.admin"
-          + ".database.v1.UpdateDatabaseRequest\032\035.goo"
-          + "gle.longrunning.Operation\"\204\001\312A\"\n\010Databas"
-          + "e\022\026UpdateDatabaseMetadata\332A\024database,upd"
-          + "ate_mask\202\323\344\223\002B26/v1/{database.name=proje"
-          + "cts/*/instances/*/databases/*}:\010database"
-          + "\022\235\002\n\021UpdateDatabaseDdl\022:.google.spanner."
-          + "admin.database.v1.UpdateDatabaseDdlReque"
-          + "st\032\035.google.longrunning.Operation\"\254\001\312AS\n"
-          + "\025google.protobuf.Empty\022:google.spanner.a"
-          + "dmin.database.v1.UpdateDatabaseDdlMetada"
-          + "ta\332A\023database,statements\202\323\344\223\002:25/v1/{dat"
-          + "abase=projects/*/instances/*/databases/*"
-          + "}/ddl:\001*\022\243\001\n\014DropDatabase\0225.google.spann"
-          + "er.admin.database.v1.DropDatabaseRequest"
-          + "\032\026.google.protobuf.Empty\"D\332A\010database\202\323\344"
-          + "\223\0023*1/v1/{database=projects/*/instances/"
-          + "*/databases/*}\022\315\001\n\016GetDatabaseDdl\0227.goog"
-          + "le.spanner.admin.database.v1.GetDatabase"
-          + "DdlRequest\0328.google.spanner.admin.databa"
-          + "se.v1.GetDatabaseDdlResponse\"H\332A\010databas"
-          + "e\202\323\344\223\0027\0225/v1/{database=projects/*/instan"
-          + "ces/*/databases/*}/ddl\022\353\001\n\014SetIamPolicy\022"
-          + "\".google.iam.v1.SetIamPolicyRequest\032\025.go"
-          + "ogle.iam.v1.Policy\"\237\001\332A\017resource,policy\202"
-          + "\323\344\223\002\206\001\">/v1/{resource=projects/*/instanc"
-          + "es/*/databases/*}:setIamPolicy:\001*ZA\"/"
-          + "v1/{resource=projects/*/instances/*/data"
-          + "bases/*}:getIamPolicy:\001*ZA\".google.spanner.admin.database.v1.L"
-          + "istBackupOperationsResponse\"E\332A\006parent\202\323"
-          + "\344\223\0026\0224/v1/{parent=projects/*/instances/*"
-          + "}/backupOperations\022\334\001\n\021ListDatabaseRoles"
-          + "\022:.google.spanner.admin.database.v1.List"
-          + "DatabaseRolesRequest\032;.google.spanner.ad"
-          + "min.database.v1.ListDatabaseRolesRespons"
-          + "e\"N\332A\006parent\202\323\344\223\002?\022=/v1/{parent=projects"
-          + "/*/instances/*/databases/*}/databaseRole"
-          + "s\032x\312A\026spanner.googleapis.com\322A\\https://w"
-          + "ww.googleapis.com/auth/cloud-platform,ht"
-          + "tps://www.googleapis.com/auth/spanner.ad"
-          + "minB\330\002\n$com.google.spanner.admin.databas"
-          + "e.v1B\031SpannerDatabaseAdminProtoP\001ZFcloud"
-          + ".google.com/go/spanner/admin/database/ap"
-          + "iv1/databasepb;databasepb\252\002&Google.Cloud"
-          + ".Spanner.Admin.Database.V1\312\002&Google\\Clou"
-          + "d\\Spanner\\Admin\\Database\\V1\352\002+Google::Cl"
-          + "oud::Spanner::Admin::Database::V1\352AJ\n\037sp"
-          + "anner.googleapis.com/Instance\022\'projects/"
-          + "{project}/instances/{instance}b\006proto3"
+          + "is.com/Database\022H\n\013source_type\030\002 \001(\01623.g"
+          + "oogle.spanner.admin.database.v1.RestoreS"
+          + "ourceType\022C\n\013backup_info\030\003 \001(\0132,.google."
+          + "spanner.admin.database.v1.BackupInfoH\000\022E"
+          + "\n\010progress\030\004 \001(\01323.google.spanner.admin."
+          + "database.v1.OperationProgress\022/\n\013cancel_"
+          + "time\030\005 \001(\0132\032.google.protobuf.Timestamp\022("
+          + "\n optimize_database_operation_name\030\006 \001(\t"
+          + "B\r\n\013source_info\"\235\001\n OptimizeRestoredData"
+          + "baseMetadata\0222\n\004name\030\001 \001(\tB$\372A!\n\037spanner"
+          + ".googleapis.com/Database\022E\n\010progress\030\002 \001"
+          + "(\01323.google.spanner.admin.database.v1.Op"
+          + "erationProgress\"\236\001\n\014DatabaseRole\022\021\n\004name"
+          + "\030\001 \001(\tB\003\340A\002:{\352Ax\n#spanner.googleapis.com"
+          + "/DatabaseRole\022Qprojects/{project}/instan"
+          + "ces/{instance}/databases/{database}/data"
+          + "baseRoles/{role}\"z\n\030ListDatabaseRolesReq"
+          + "uest\0227\n\006parent\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.go"
+          + "ogleapis.com/Database\022\021\n\tpage_size\030\002 \001(\005"
+          + "\022\022\n\npage_token\030\003 \001(\t\"|\n\031ListDatabaseRole"
+          + "sResponse\022F\n\016database_roles\030\001 \003(\0132..goog"
+          + "le.spanner.admin.database.v1.DatabaseRol"
+          + "e\022\027\n\017next_page_token\030\002 \001(\t*5\n\021RestoreSou"
+          + "rceType\022\024\n\020TYPE_UNSPECIFIED\020\000\022\n\n\006BACKUP\020"
+          + "\0012\356%\n\rDatabaseAdmin\022\300\001\n\rListDatabases\0226."
+          + "google.spanner.admin.database.v1.ListDat"
+          + "abasesRequest\0327.google.spanner.admin.dat"
+          + "abase.v1.ListDatabasesResponse\">\202\323\344\223\002/\022-"
+          + "/v1/{parent=projects/*/instances/*}/data"
+          + "bases\332A\006parent\022\244\002\n\016CreateDatabase\0227.goog"
+          + "le.spanner.admin.database.v1.CreateDatab"
+          + "aseRequest\032\035.google.longrunning.Operatio"
+          + "n\"\271\001\202\323\344\223\0022\"-/v1/{parent=projects/*/insta"
+          + "nces/*}/databases:\001*\332A\027parent,create_sta"
+          + "tement\312Ad\n)google.spanner.admin.database"
+          + ".v1.Database\0227google.spanner.admin.datab"
+          + "ase.v1.CreateDatabaseMetadata\022\255\001\n\013GetDat"
+          + "abase\0224.google.spanner.admin.database.v1"
+          + ".GetDatabaseRequest\032*.google.spanner.adm"
+          + "in.database.v1.Database\"<\202\323\344\223\002/\022-/v1/{na"
+          + "me=projects/*/instances/*/databases/*}\332A"
+          + "\004name\022\357\001\n\016UpdateDatabase\0227.google.spanne"
+          + "r.admin.database.v1.UpdateDatabaseReques"
+          + "t\032\035.google.longrunning.Operation\"\204\001\202\323\344\223\002"
+          + "B26/v1/{database.name=projects/*/instanc"
+          + "es/*/databases/*}:\010database\332A\024database,u"
+          + "pdate_mask\312A\"\n\010Database\022\026UpdateDatabaseM"
+          + "etadata\022\235\002\n\021UpdateDatabaseDdl\022:.google.s"
+          + "panner.admin.database.v1.UpdateDatabaseD"
+          + "dlRequest\032\035.google.longrunning.Operation"
+          + "\"\254\001\202\323\344\223\002:25/v1/{database=projects/*/inst"
+          + "ances/*/databases/*}/ddl:\001*\332A\023database,s"
+          + "tatements\312AS\n\025google.protobuf.Empty\022:goo"
+          + "gle.spanner.admin.database.v1.UpdateData"
+          + "baseDdlMetadata\022\243\001\n\014DropDatabase\0225.googl"
+          + "e.spanner.admin.database.v1.DropDatabase"
+          + "Request\032\026.google.protobuf.Empty\"D\202\323\344\223\0023*"
+          + "1/v1/{database=projects/*/instances/*/da"
+          + "tabases/*}\332A\010database\022\315\001\n\016GetDatabaseDdl"
+          + "\0227.google.spanner.admin.database.v1.GetD"
+          + "atabaseDdlRequest\0328.google.spanner.admin"
+          + ".database.v1.GetDatabaseDdlResponse\"H\202\323\344"
+          + "\223\0027\0225/v1/{database=projects/*/instances/"
+          + "*/databases/*}/ddl\332A\010database\022\353\001\n\014SetIam"
+          + "Policy\022\".google.iam.v1.SetIamPolicyReque"
+          + "st\032\025.google.iam.v1.Policy\"\237\001\202\323\344\223\002\206\001\">/v1"
+          + "/{resource=projects/*/instances/*/databa"
+          + "ses/*}:setIamPolicy:\001*ZA\"/v1/{"
+          + "resource=projects/*/instances/*/database"
+          + "s/*}:getIamPolicy:\001*ZA\".google.spanner.admin.databa"
+          + "se.v1.ListBackupOperationsResponse\"E\202\323\344\223"
+          + "\0026\0224/v1/{parent=projects/*/instances/*}/"
+          + "backupOperations\332A\006parent\022\334\001\n\021ListDataba"
+          + "seRoles\022:.google.spanner.admin.database."
+          + "v1.ListDatabaseRolesRequest\032;.google.spa"
+          + "nner.admin.database.v1.ListDatabaseRoles"
+          + "Response\"N\202\323\344\223\002?\022=/v1/{parent=projects/*"
+          + "/instances/*/databases/*}/databaseRoles\332"
+          + "A\006parent\032x\312A\026spanner.googleapis.com\322A\\ht"
+          + "tps://www.googleapis.com/auth/cloud-plat"
+          + "form,https://www.googleapis.com/auth/spa"
+          + "nner.adminB\330\002\n$com.google.spanner.admin."
+          + "database.v1B\031SpannerDatabaseAdminProtoP\001"
+          + "ZFcloud.google.com/go/spanner/admin/data"
+          + "base/apiv1/databasepb;databasepb\252\002&Googl"
+          + "e.Cloud.Spanner.Admin.Database.V1\312\002&Goog"
+          + "le\\Cloud\\Spanner\\Admin\\Database\\V1\352\002+Goo"
+          + "gle::Cloud::Spanner::Admin::Database::V1"
+          + "\352AJ\n\037spanner.googleapis.com/Instance\022\'pr"
+          + "ojects/{project}/instances/{instance}b\006p"
+          + "roto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -504,24 +496,16 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
             new java.lang.String[] {
               "Database", "Statements", "OperationId",
             });
-    internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor =
-        getDescriptor().getMessageTypes().get(10);
-    internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_fieldAccessorTable =
-        new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-            internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor,
-            new java.lang.String[] {
-              "Action", "EntityType", "EntityNames",
-            });
     internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor =
-        getDescriptor().getMessageTypes().get(11);
+        getDescriptor().getMessageTypes().get(10);
     internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor,
             new java.lang.String[] {
-              "Database", "Statements", "CommitTimestamps", "Throttled", "Progress", "Actions",
+              "Database", "Statements", "CommitTimestamps", "Throttled", "Progress",
             });
     internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor =
-        getDescriptor().getMessageTypes().get(12);
+        getDescriptor().getMessageTypes().get(11);
     internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_DropDatabaseRequest_descriptor,
@@ -529,7 +513,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Database",
             });
     internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor =
-        getDescriptor().getMessageTypes().get(13);
+        getDescriptor().getMessageTypes().get(12);
     internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_GetDatabaseDdlRequest_descriptor,
@@ -537,7 +521,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Database",
             });
     internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor =
-        getDescriptor().getMessageTypes().get(14);
+        getDescriptor().getMessageTypes().get(13);
     internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_GetDatabaseDdlResponse_descriptor,
@@ -545,7 +529,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Statements",
             });
     internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor =
-        getDescriptor().getMessageTypes().get(15);
+        getDescriptor().getMessageTypes().get(14);
     internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsRequest_descriptor,
@@ -553,7 +537,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Parent", "Filter", "PageSize", "PageToken",
             });
     internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor =
-        getDescriptor().getMessageTypes().get(16);
+        getDescriptor().getMessageTypes().get(15);
     internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_ListDatabaseOperationsResponse_descriptor,
@@ -561,7 +545,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Operations", "NextPageToken",
             });
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor =
-        getDescriptor().getMessageTypes().get(17);
+        getDescriptor().getMessageTypes().get(16);
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_RestoreDatabaseRequest_descriptor,
@@ -569,7 +553,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Parent", "DatabaseId", "Backup", "EncryptionConfig", "Source",
             });
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor =
-        getDescriptor().getMessageTypes().get(18);
+        getDescriptor().getMessageTypes().get(17);
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_RestoreDatabaseEncryptionConfig_descriptor,
@@ -577,7 +561,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "EncryptionType", "KmsKeyName",
             });
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor =
-        getDescriptor().getMessageTypes().get(19);
+        getDescriptor().getMessageTypes().get(18);
     internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_RestoreDatabaseMetadata_descriptor,
@@ -591,7 +575,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "SourceInfo",
             });
     internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor =
-        getDescriptor().getMessageTypes().get(20);
+        getDescriptor().getMessageTypes().get(19);
     internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_OptimizeRestoredDatabaseMetadata_descriptor,
@@ -599,7 +583,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Name", "Progress",
             });
     internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor =
-        getDescriptor().getMessageTypes().get(21);
+        getDescriptor().getMessageTypes().get(20);
     internal_static_google_spanner_admin_database_v1_DatabaseRole_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_DatabaseRole_descriptor,
@@ -607,7 +591,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Name",
             });
     internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor =
-        getDescriptor().getMessageTypes().get(22);
+        getDescriptor().getMessageTypes().get(21);
     internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_ListDatabaseRolesRequest_descriptor,
@@ -615,7 +599,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
               "Parent", "PageSize", "PageToken",
             });
     internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor =
-        getDescriptor().getMessageTypes().get(23);
+        getDescriptor().getMessageTypes().get(22);
     internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_fieldAccessorTable =
         new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
             internal_static_google_spanner_admin_database_v1_ListDatabaseRolesResponse_descriptor,
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java
index 9da77849b35..ccd25df5763 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateBackupRequest.java
@@ -45,6 +45,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateBackupRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.BackupProto
         .internal_static_google_spanner_admin_database_v1_UpdateBackupRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java
index 0e9f3b0a5d3..d4625807d12 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadata.java
@@ -40,10 +40,9 @@ private UpdateDatabaseDdlMetadata(com.google.protobuf.GeneratedMessageV3.Builder
 
   private UpdateDatabaseDdlMetadata() {
     database_ = "";
-    statements_ = com.google.protobuf.LazyStringArrayList.emptyList();
+    statements_ = com.google.protobuf.LazyStringArrayList.EMPTY;
     commitTimestamps_ = java.util.Collections.emptyList();
     progress_ = java.util.Collections.emptyList();
-    actions_ = java.util.Collections.emptyList();
   }
 
   @java.lang.Override
@@ -52,6 +51,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateDatabaseDdlMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto
         .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlMetadata_descriptor;
@@ -121,8 +125,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() {
   public static final int STATEMENTS_FIELD_NUMBER = 2;
 
   @SuppressWarnings("serial")
-  private com.google.protobuf.LazyStringArrayList statements_ =
-      com.google.protobuf.LazyStringArrayList.emptyList();
+  private com.google.protobuf.LazyStringList statements_;
   /**
    *
    *
@@ -273,7 +276,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimestampsOrBuilder(int i
    *
    *
    * 
-   * Output only. When true, indicates that the operation is throttled e.g.
+   * Output only. When true, indicates that the operation is throttled e.g
    * due to resource constraints. When resources become available the operation
    * will resume and this field will be false again.
    * 
@@ -296,12 +299,13 @@ public boolean getThrottled() { * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -315,12 +319,13 @@ public java.util.List ge * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -335,12 +340,13 @@ public java.util.List ge * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -354,12 +360,13 @@ public int getProgressCount() { * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -373,12 +380,13 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress(int in * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -389,85 +397,6 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre return progress_.get(index); } - public static final int ACTIONS_FIELD_NUMBER = 6; - - @SuppressWarnings("serial") - private java.util.List actions_; - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - @java.lang.Override - public java.util.List - getActionsList() { - return actions_; - } - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - @java.lang.Override - public java.util.List< - ? extends com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> - getActionsOrBuilderList() { - return actions_; - } - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - @java.lang.Override - public int getActionsCount() { - return actions_.size(); - } - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - @java.lang.Override - public com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(int index) { - return actions_.get(index); - } - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - @java.lang.Override - public com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getActionsOrBuilder( - int index) { - return actions_.get(index); - } - private byte memoizedIsInitialized = -1; @java.lang.Override @@ -497,9 +426,6 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < progress_.size(); i++) { output.writeMessage(5, progress_.get(i)); } - for (int i = 0; i < actions_.size(); i++) { - output.writeMessage(6, actions_.get(i)); - } getUnknownFields().writeTo(output); } @@ -529,9 +455,6 @@ public int getSerializedSize() { for (int i = 0; i < progress_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, progress_.get(i)); } - for (int i = 0; i < actions_.size(); i++) { - size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, actions_.get(i)); - } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -553,7 +476,6 @@ public boolean equals(final java.lang.Object obj) { if (!getCommitTimestampsList().equals(other.getCommitTimestampsList())) return false; if (getThrottled() != other.getThrottled()) return false; if (!getProgressList().equals(other.getProgressList())) return false; - if (!getActionsList().equals(other.getActionsList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -581,10 +503,6 @@ public int hashCode() { hash = (37 * hash) + PROGRESS_FIELD_NUMBER; hash = (53 * hash) + getProgressList().hashCode(); } - if (getActionsCount() > 0) { - hash = (37 * hash) + ACTIONS_FIELD_NUMBER; - hash = (53 * hash) + getActionsList().hashCode(); - } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -727,7 +645,8 @@ public Builder clear() { super.clear(); bitField0_ = 0; database_ = ""; - statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000002); if (commitTimestampsBuilder_ == null) { commitTimestamps_ = java.util.Collections.emptyList(); } else { @@ -743,13 +662,6 @@ public Builder clear() { progressBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000010); - if (actionsBuilder_ == null) { - actions_ = java.util.Collections.emptyList(); - } else { - actions_ = null; - actionsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000020); return this; } @@ -788,6 +700,11 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata buildParti private void buildPartialRepeatedFields( com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata result) { + if (((bitField0_ & 0x00000002) != 0)) { + statements_ = statements_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.statements_ = statements_; if (commitTimestampsBuilder_ == null) { if (((bitField0_ & 0x00000004) != 0)) { commitTimestamps_ = java.util.Collections.unmodifiableList(commitTimestamps_); @@ -806,15 +723,6 @@ private void buildPartialRepeatedFields( } else { result.progress_ = progressBuilder_.build(); } - if (actionsBuilder_ == null) { - if (((bitField0_ & 0x00000020) != 0)) { - actions_ = java.util.Collections.unmodifiableList(actions_); - bitField0_ = (bitField0_ & ~0x00000020); - } - result.actions_ = actions_; - } else { - result.actions_ = actionsBuilder_.build(); - } } private void buildPartial0( @@ -823,10 +731,6 @@ private void buildPartial0( if (((from_bitField0_ & 0x00000001) != 0)) { result.database_ = database_; } - if (((from_bitField0_ & 0x00000002) != 0)) { - statements_.makeImmutable(); - result.statements_ = statements_; - } if (((from_bitField0_ & 0x00000008) != 0)) { result.throttled_ = throttled_; } @@ -887,7 +791,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlM if (!other.statements_.isEmpty()) { if (statements_.isEmpty()) { statements_ = other.statements_; - bitField0_ |= 0x00000002; + bitField0_ = (bitField0_ & ~0x00000002); } else { ensureStatementsIsMutable(); statements_.addAll(other.statements_); @@ -951,33 +855,6 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlM } } } - if (actionsBuilder_ == null) { - if (!other.actions_.isEmpty()) { - if (actions_.isEmpty()) { - actions_ = other.actions_; - bitField0_ = (bitField0_ & ~0x00000020); - } else { - ensureActionsIsMutable(); - actions_.addAll(other.actions_); - } - onChanged(); - } - } else { - if (!other.actions_.isEmpty()) { - if (actionsBuilder_.isEmpty()) { - actionsBuilder_.dispose(); - actionsBuilder_ = null; - actions_ = other.actions_; - bitField0_ = (bitField0_ & ~0x00000020); - actionsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getActionsFieldBuilder() - : null; - } else { - actionsBuilder_.addAllMessages(other.actions_); - } - } - } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1049,20 +926,6 @@ public Builder mergeFrom( } break; } // case 42 - case 50: - { - com.google.spanner.admin.database.v1.DdlStatementActionInfo m = - input.readMessage( - com.google.spanner.admin.database.v1.DdlStatementActionInfo.parser(), - extensionRegistry); - if (actionsBuilder_ == null) { - ensureActionsIsMutable(); - actions_.add(m); - } else { - actionsBuilder_.addMessage(m); - } - break; - } // case 50 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1188,14 +1051,14 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringArrayList statements_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList statements_ = + com.google.protobuf.LazyStringArrayList.EMPTY; private void ensureStatementsIsMutable() { - if (!statements_.isModifiable()) { + if (!((bitField0_ & 0x00000002) != 0)) { statements_ = new com.google.protobuf.LazyStringArrayList(statements_); + bitField0_ |= 0x00000002; } - bitField0_ |= 0x00000002; } /** * @@ -1210,8 +1073,7 @@ private void ensureStatementsIsMutable() { * @return A list containing the statements. */ public com.google.protobuf.ProtocolStringList getStatementsList() { - statements_.makeImmutable(); - return statements_; + return statements_.getUnmodifiableView(); } /** * @@ -1280,7 +1142,6 @@ public Builder setStatements(int index, java.lang.String value) { } ensureStatementsIsMutable(); statements_.set(index, value); - bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1303,7 +1164,6 @@ public Builder addStatements(java.lang.String value) { } ensureStatementsIsMutable(); statements_.add(value); - bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1323,7 +1183,6 @@ public Builder addStatements(java.lang.String value) { public Builder addAllStatements(java.lang.Iterable values) { ensureStatementsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, statements_); - bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1340,9 +1199,8 @@ public Builder addAllStatements(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearStatements() { - statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00000002); - ; onChanged(); return this; } @@ -1366,7 +1224,6 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureStatementsIsMutable(); statements_.add(value); - bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1764,7 +1621,7 @@ public java.util.List getCommitTimestamps * * *
-     * Output only. When true, indicates that the operation is throttled e.g.
+     * Output only. When true, indicates that the operation is throttled e.g
      * due to resource constraints. When resources become available the operation
      * will resume and this field will be false again.
      * 
@@ -1781,7 +1638,7 @@ public boolean getThrottled() { * * *
-     * Output only. When true, indicates that the operation is throttled e.g.
+     * Output only. When true, indicates that the operation is throttled e.g
      * due to resource constraints. When resources become available the operation
      * will resume and this field will be false again.
      * 
@@ -1802,7 +1659,7 @@ public Builder setThrottled(boolean value) { * * *
-     * Output only. When true, indicates that the operation is throttled e.g.
+     * Output only. When true, indicates that the operation is throttled e.g
      * due to resource constraints. When resources become available the operation
      * will resume and this field will be false again.
      * 
@@ -1841,12 +1698,13 @@ private void ensureProgressIsMutable() { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1864,12 +1722,13 @@ private void ensureProgressIsMutable() { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1886,12 +1745,13 @@ public int getProgressCount() { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1908,12 +1768,13 @@ public com.google.spanner.admin.database.v1.OperationProgress getProgress(int in * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1937,12 +1798,13 @@ public Builder setProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1963,12 +1825,13 @@ public Builder setProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -1991,12 +1854,13 @@ public Builder addProgress(com.google.spanner.admin.database.v1.OperationProgres * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2020,12 +1884,13 @@ public Builder addProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2046,12 +1911,13 @@ public Builder addProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2072,12 +1938,13 @@ public Builder addProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2099,12 +1966,13 @@ public Builder addAllProgress( * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2124,12 +1992,13 @@ public Builder clearProgress() { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2149,12 +2018,13 @@ public Builder removeProgress(int index) { * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2168,12 +2038,13 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder getProgres * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2191,12 +2062,13 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2214,12 +2086,13 @@ public com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgre * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2233,12 +2106,13 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgres * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2254,12 +2128,13 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgres * *
      * The progress of the
-     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-     * operations. All DDL statements will have continuously updating progress,
-     * and `progress[i]` is the operation progress for `statements[i]`. Also,
-     * `progress[i]` will have start time and end time populated with commit
-     * timestamp of operation, as well as a progress of 100% once the operation
-     * has completed.
+     * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+     * Currently, only index creation statements will have a continuously
+     * updating progress.
+     * For non-index creation statements, `progress[i]` will have start time
+     * and end time populated with commit timestamp of operation,
+     * as well as a progress of 100% once the operation has completed.
+     * `progress[i]` is the operation progress for `statements[i]`.
      * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -2286,389 +2161,6 @@ public com.google.spanner.admin.database.v1.OperationProgress.Builder addProgres return progressBuilder_; } - private java.util.List actions_ = - java.util.Collections.emptyList(); - - private void ensureActionsIsMutable() { - if (!((bitField0_ & 0x00000020) != 0)) { - actions_ = - new java.util.ArrayList( - actions_); - bitField0_ |= 0x00000020; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.google.spanner.admin.database.v1.DdlStatementActionInfo, - com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, - com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> - actionsBuilder_; - - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public java.util.List - getActionsList() { - if (actionsBuilder_ == null) { - return java.util.Collections.unmodifiableList(actions_); - } else { - return actionsBuilder_.getMessageList(); - } - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public int getActionsCount() { - if (actionsBuilder_ == null) { - return actions_.size(); - } else { - return actionsBuilder_.getCount(); - } - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(int index) { - if (actionsBuilder_ == null) { - return actions_.get(index); - } else { - return actionsBuilder_.getMessage(index); - } - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder setActions( - int index, com.google.spanner.admin.database.v1.DdlStatementActionInfo value) { - if (actionsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureActionsIsMutable(); - actions_.set(index, value); - onChanged(); - } else { - actionsBuilder_.setMessage(index, value); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder setActions( - int index, - com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder builderForValue) { - if (actionsBuilder_ == null) { - ensureActionsIsMutable(); - actions_.set(index, builderForValue.build()); - onChanged(); - } else { - actionsBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder addActions(com.google.spanner.admin.database.v1.DdlStatementActionInfo value) { - if (actionsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureActionsIsMutable(); - actions_.add(value); - onChanged(); - } else { - actionsBuilder_.addMessage(value); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder addActions( - int index, com.google.spanner.admin.database.v1.DdlStatementActionInfo value) { - if (actionsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureActionsIsMutable(); - actions_.add(index, value); - onChanged(); - } else { - actionsBuilder_.addMessage(index, value); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder addActions( - com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder builderForValue) { - if (actionsBuilder_ == null) { - ensureActionsIsMutable(); - actions_.add(builderForValue.build()); - onChanged(); - } else { - actionsBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder addActions( - int index, - com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder builderForValue) { - if (actionsBuilder_ == null) { - ensureActionsIsMutable(); - actions_.add(index, builderForValue.build()); - onChanged(); - } else { - actionsBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder addAllActions( - java.lang.Iterable - values) { - if (actionsBuilder_ == null) { - ensureActionsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll(values, actions_); - onChanged(); - } else { - actionsBuilder_.addAllMessages(values); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder clearActions() { - if (actionsBuilder_ == null) { - actions_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000020); - onChanged(); - } else { - actionsBuilder_.clear(); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public Builder removeActions(int index) { - if (actionsBuilder_ == null) { - ensureActionsIsMutable(); - actions_.remove(index); - onChanged(); - } else { - actionsBuilder_.remove(index); - } - return this; - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder getActionsBuilder( - int index) { - return getActionsFieldBuilder().getBuilder(index); - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getActionsOrBuilder( - int index) { - if (actionsBuilder_ == null) { - return actions_.get(index); - } else { - return actionsBuilder_.getMessageOrBuilder(index); - } - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public java.util.List< - ? extends com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> - getActionsOrBuilderList() { - if (actionsBuilder_ != null) { - return actionsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(actions_); - } - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addActionsBuilder() { - return getActionsFieldBuilder() - .addBuilder( - com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance()); - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder addActionsBuilder( - int index) { - return getActionsFieldBuilder() - .addBuilder( - index, - com.google.spanner.admin.database.v1.DdlStatementActionInfo.getDefaultInstance()); - } - /** - * - * - *
-     * The brief action info for the DDL statements.
-     * `actions[i]` is the brief info for `statements[i]`.
-     * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - public java.util.List - getActionsBuilderList() { - return getActionsFieldBuilder().getBuilderList(); - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.google.spanner.admin.database.v1.DdlStatementActionInfo, - com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, - com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder> - getActionsFieldBuilder() { - if (actionsBuilder_ == null) { - actionsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< - com.google.spanner.admin.database.v1.DdlStatementActionInfo, - com.google.spanner.admin.database.v1.DdlStatementActionInfo.Builder, - com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder>( - actions_, ((bitField0_ & 0x00000020) != 0), getParentForChildren(), isClean()); - actions_ = null; - } - return actionsBuilder_; - } - @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java index 5b435a6844c..0557d7314d1 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlMetadataOrBuilder.java @@ -169,7 +169,7 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * * *
-   * Output only. When true, indicates that the operation is throttled e.g.
+   * Output only. When true, indicates that the operation is throttled e.g
    * due to resource constraints. When resources become available the operation
    * will resume and this field will be false again.
    * 
@@ -185,12 +185,13 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -201,12 +202,13 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -217,12 +219,13 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -233,12 +236,13 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; @@ -250,73 +254,16 @@ public interface UpdateDatabaseDdlMetadataOrBuilder * *
    * The progress of the
-   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]
-   * operations. All DDL statements will have continuously updating progress,
-   * and `progress[i]` is the operation progress for `statements[i]`. Also,
-   * `progress[i]` will have start time and end time populated with commit
-   * timestamp of operation, as well as a progress of 100% once the operation
-   * has completed.
+   * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations.
+   * Currently, only index creation statements will have a continuously
+   * updating progress.
+   * For non-index creation statements, `progress[i]` will have start time
+   * and end time populated with commit timestamp of operation,
+   * as well as a progress of 100% once the operation has completed.
+   * `progress[i]` is the operation progress for `statements[i]`.
    * 
* * repeated .google.spanner.admin.database.v1.OperationProgress progress = 5; */ com.google.spanner.admin.database.v1.OperationProgressOrBuilder getProgressOrBuilder(int index); - - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - java.util.List getActionsList(); - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - com.google.spanner.admin.database.v1.DdlStatementActionInfo getActions(int index); - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - int getActionsCount(); - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - java.util.List - getActionsOrBuilderList(); - /** - * - * - *
-   * The brief action info for the DDL statements.
-   * `actions[i]` is the brief info for `statements[i]`.
-   * 
- * - * repeated .google.spanner.admin.database.v1.DdlStatementActionInfo actions = 6; - */ - com.google.spanner.admin.database.v1.DdlStatementActionInfoOrBuilder getActionsOrBuilder( - int index); } diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java index aa78a8f7a15..a2c59a7b9b6 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java @@ -32,7 +32,6 @@ * there is some data-related problem like a `NULL` value in a column to * which `NOT NULL` would be added). If a statement fails, all * subsequent statements in the batch are automatically cancelled. - * * Each batch of statements is assigned a name which can be used with * the [Operations][google.longrunning.Operations] API to monitor * progress. See the @@ -54,7 +53,7 @@ private UpdateDatabaseDdlRequest(com.google.protobuf.GeneratedMessageV3.Builder< private UpdateDatabaseDdlRequest() { database_ = ""; - statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; operationId_ = ""; } @@ -64,6 +63,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new UpdateDatabaseDdlRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor; @@ -137,8 +141,7 @@ public com.google.protobuf.ByteString getDatabaseBytes() { public static final int STATEMENTS_FIELD_NUMBER = 2; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList statements_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList statements_; /** * * @@ -210,7 +213,6 @@ public com.google.protobuf.ByteString getStatementsBytes(int index) { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -218,7 +220,6 @@ public com.google.protobuf.ByteString getStatementsBytes(int index) { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -251,7 +252,6 @@ public java.lang.String getOperationId() { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -259,7 +259,6 @@ public java.lang.String getOperationId() { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -484,7 +483,6 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * there is some data-related problem like a `NULL` value in a column to * which `NOT NULL` would be added). If a statement fails, all * subsequent statements in the batch are automatically cancelled. - * * Each batch of statements is assigned a name which can be used with * the [Operations][google.longrunning.Operations] API to monitor * progress. See the @@ -525,7 +523,8 @@ public Builder clear() { super.clear(); bitField0_ = 0; database_ = ""; - statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000002); operationId_ = ""; return this; } @@ -555,6 +554,7 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest build() { public com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest buildPartial() { com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest result = new com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -562,16 +562,21 @@ public com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest buildPartia return result; } + private void buildPartialRepeatedFields( + com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest result) { + if (((bitField0_ & 0x00000002) != 0)) { + statements_ = statements_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000002); + } + result.statements_ = statements_; + } + private void buildPartial0( com.google.spanner.admin.database.v1.UpdateDatabaseDdlRequest result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { result.database_ = database_; } - if (((from_bitField0_ & 0x00000002) != 0)) { - statements_.makeImmutable(); - result.statements_ = statements_; - } if (((from_bitField0_ & 0x00000004) != 0)) { result.operationId_ = operationId_; } @@ -632,7 +637,7 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlR if (!other.statements_.isEmpty()) { if (statements_.isEmpty()) { statements_ = other.statements_; - bitField0_ |= 0x00000002; + bitField0_ = (bitField0_ & ~0x00000002); } else { ensureStatementsIsMutable(); statements_.addAll(other.statements_); @@ -824,14 +829,14 @@ public Builder setDatabaseBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringArrayList statements_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList statements_ = + com.google.protobuf.LazyStringArrayList.EMPTY; private void ensureStatementsIsMutable() { - if (!statements_.isModifiable()) { + if (!((bitField0_ & 0x00000002) != 0)) { statements_ = new com.google.protobuf.LazyStringArrayList(statements_); + bitField0_ |= 0x00000002; } - bitField0_ |= 0x00000002; } /** * @@ -845,8 +850,7 @@ private void ensureStatementsIsMutable() { * @return A list containing the statements. */ public com.google.protobuf.ProtocolStringList getStatementsList() { - statements_.makeImmutable(); - return statements_; + return statements_.getUnmodifiableView(); } /** * @@ -911,7 +915,6 @@ public Builder setStatements(int index, java.lang.String value) { } ensureStatementsIsMutable(); statements_.set(index, value); - bitField0_ |= 0x00000002; onChanged(); return this; } @@ -933,7 +936,6 @@ public Builder addStatements(java.lang.String value) { } ensureStatementsIsMutable(); statements_.add(value); - bitField0_ |= 0x00000002; onChanged(); return this; } @@ -952,7 +954,6 @@ public Builder addStatements(java.lang.String value) { public Builder addAllStatements(java.lang.Iterable values) { ensureStatementsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, statements_); - bitField0_ |= 0x00000002; onChanged(); return this; } @@ -968,9 +969,8 @@ public Builder addAllStatements(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearStatements() { - statements_ = com.google.protobuf.LazyStringArrayList.emptyList(); + statements_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00000002); - ; onChanged(); return this; } @@ -993,7 +993,6 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureStatementsIsMutable(); statements_.add(value); - bitField0_ |= 0x00000002; onChanged(); return this; } @@ -1007,7 +1006,6 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1015,7 +1013,6 @@ public Builder addStatementsBytes(com.google.protobuf.ByteString value) { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -1047,7 +1044,6 @@ public java.lang.String getOperationId() { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1055,7 +1051,6 @@ public java.lang.String getOperationId() { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -1087,7 +1082,6 @@ public com.google.protobuf.ByteString getOperationIdBytes() { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1095,7 +1089,6 @@ public com.google.protobuf.ByteString getOperationIdBytes() { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -1126,7 +1119,6 @@ public Builder setOperationId(java.lang.String value) { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1134,7 +1126,6 @@ public Builder setOperationId(java.lang.String value) { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -1161,7 +1152,6 @@ public Builder clearOperationId() { * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -1169,7 +1159,6 @@ public Builder clearOperationId() { * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java index 0933a94e09e..cad7c3a28a2 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java @@ -111,7 +111,6 @@ public interface UpdateDatabaseDdlRequestOrBuilder * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -119,7 +118,6 @@ public interface UpdateDatabaseDdlRequestOrBuilder * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an @@ -141,7 +139,6 @@ public interface UpdateDatabaseDdlRequestOrBuilder * automatically-generated operation ID. Otherwise, `operation_id` * is used to construct the name of the resulting * [Operation][google.longrunning.Operation]. - * * Specifying an explicit operation ID simplifies determining * whether the statements were executed in the event that the * [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] call is replayed, @@ -149,7 +146,6 @@ public interface UpdateDatabaseDdlRequestOrBuilder * `operation_id` fields can be combined to form the * [name][google.longrunning.Operation.name] of the resulting * [longrunning.Operation][google.longrunning.Operation]: `<database>/operations/<operation_id>`. - * * `operation_id` should be unique within the database, and must be * a valid identifier: `[a-z][a-z0-9_]*`. Note that * automatically-generated operation IDs always begin with an diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java index e42f634cdf0..f37b1ad1ef6 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseMetadata.java @@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new UpdateDatabaseMetadata(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseMetadata_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java index bb83a712eec..c496653a2fd 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseRequest.java @@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new UpdateDatabaseRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.database.v1.SpannerDatabaseAdminProto .internal_static_google_spanner_admin_database_v1_UpdateDatabaseRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto index 6cf0e5a4b94..f45bb932fda 100644 --- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto +++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto @@ -676,27 +676,6 @@ message UpdateDatabaseDdlRequest { string operation_id = 3; } -// Action information extracted from a DDL statement. This proto is used to -// display the brief info of the DDL statement for the operation -// [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]. -message DdlStatementActionInfo { - // The action for the DDL statement, e.g. CREATE, ALTER, DROP, GRANT, etc. - // This field is a non-empty string. - string action = 1; - - // The entity type for the DDL statement, e.g. TABLE, INDEX, VIEW, etc. - // This field can be empty string for some DDL statement, - // e.g. for statement "ANALYZE", `entity_type` = "". - string entity_type = 2; - - // The entity name(s) being operated on the DDL statement. - // E.g. - // 1. For statement "CREATE TABLE t1(...)", `entity_names` = ["t1"]. - // 2. For statement "GRANT ROLE r1, r2 ...", `entity_names` = ["r1", "r2"]. - // 3. For statement "ANALYZE", `entity_names` = []. - repeated string entity_names = 3; -} - // Metadata type for the operation returned by // [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl]. message UpdateDatabaseDdlMetadata { @@ -714,23 +693,20 @@ message UpdateDatabaseDdlMetadata { // timestamp for the statement `statements[i]`. repeated google.protobuf.Timestamp commit_timestamps = 3; - // Output only. When true, indicates that the operation is throttled e.g. + // Output only. When true, indicates that the operation is throttled e.g // due to resource constraints. When resources become available the operation // will resume and this field will be false again. bool throttled = 4 [(google.api.field_behavior) = OUTPUT_ONLY]; // The progress of the - // [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] - // operations. All DDL statements will have continuously updating progress, - // and `progress[i]` is the operation progress for `statements[i]`. Also, - // `progress[i]` will have start time and end time populated with commit - // timestamp of operation, as well as a progress of 100% once the operation - // has completed. + // [UpdateDatabaseDdl][google.spanner.admin.database.v1.DatabaseAdmin.UpdateDatabaseDdl] operations. + // Currently, only index creation statements will have a continuously + // updating progress. + // For non-index creation statements, `progress[i]` will have start time + // and end time populated with commit timestamp of operation, + // as well as a progress of 100% once the operation has completed. + // `progress[i]` is the operation progress for `statements[i]`. repeated OperationProgress progress = 5; - - // The brief action info for the DDL statements. - // `actions[i]` is the brief info for `statements[i]`. - repeated DdlStatementActionInfo actions = 6; } // The request for [DropDatabase][google.spanner.admin.database.v1.DatabaseAdmin.DropDatabase]. diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java index 7957451eb76..ddb0edf39fc 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigMetadata.java @@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateInstanceConfigMetadata(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigMetadata_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java index f283c425854..0d9bd2336fb 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceConfigRequest.java @@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateInstanceConfigRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceConfigRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java index 72dad2442f8..5dbce1d85d0 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceMetadata.java @@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateInstanceMetadata(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceMetadata_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java index 1e3de9da213..5bc14b342f4 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/CreateInstanceRequest.java @@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateInstanceRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_CreateInstanceRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java index cd5397978a0..97f3875a680 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceConfigRequest.java @@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DeleteInstanceConfigRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceConfigRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java index 362cafcb798..cbfa1e94aef 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/DeleteInstanceRequest.java @@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DeleteInstanceRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_DeleteInstanceRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java index 11b2d456206..80d5c4007ad 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceConfigRequest.java @@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetInstanceConfigRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceConfigRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java index fb836dd7a2f..5e5f96640b0 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/GetInstanceRequest.java @@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetInstanceRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_GetInstanceRequest_descriptor; diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java index 3f81d952f62..b2adc5f5222 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/Instance.java @@ -42,7 +42,7 @@ private Instance() { config_ = ""; displayName_ = ""; state_ = 0; - endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); + endpointUris_ = com.google.protobuf.LazyStringArrayList.EMPTY; } @java.lang.Override @@ -51,6 +51,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new Instance(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_Instance_descriptor; @@ -421,7 +426,6 @@ public com.google.protobuf.ByteString getDisplayNameBytes() { * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -445,7 +449,6 @@ public int getNodeCount() { * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -545,15 +548,12 @@ public int getLabelsCount() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -587,15 +587,12 @@ public java.util.Map getLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -620,15 +617,12 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -660,15 +654,12 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -694,8 +685,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public static final int ENDPOINT_URIS_FIELD_NUMBER = 8; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList endpointUris_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList endpointUris_; /** * * @@ -1186,7 +1176,8 @@ public Builder clear() { processingUnits_ = 0; state_ = 0; internalGetMutableLabels().clear(); - endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); + endpointUris_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000080); createTime_ = null; if (createTimeBuilder_ != null) { createTimeBuilder_.dispose(); @@ -1224,6 +1215,7 @@ public com.google.spanner.admin.instance.v1.Instance build() { public com.google.spanner.admin.instance.v1.Instance buildPartial() { com.google.spanner.admin.instance.v1.Instance result = new com.google.spanner.admin.instance.v1.Instance(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -1231,6 +1223,14 @@ public com.google.spanner.admin.instance.v1.Instance buildPartial() { return result; } + private void buildPartialRepeatedFields(com.google.spanner.admin.instance.v1.Instance result) { + if (((bitField0_ & 0x00000080) != 0)) { + endpointUris_ = endpointUris_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000080); + } + result.endpointUris_ = endpointUris_; + } + private void buildPartial0(com.google.spanner.admin.instance.v1.Instance result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -1255,10 +1255,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.Instance result) result.labels_ = internalGetLabels(); result.labels_.makeImmutable(); } - if (((from_bitField0_ & 0x00000080) != 0)) { - endpointUris_.makeImmutable(); - result.endpointUris_ = endpointUris_; - } if (((from_bitField0_ & 0x00000100) != 0)) { result.createTime_ = createTimeBuilder_ == null ? createTime_ : createTimeBuilder_.build(); } @@ -1341,7 +1337,7 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.Instance other) { if (!other.endpointUris_.isEmpty()) { if (endpointUris_.isEmpty()) { endpointUris_ = other.endpointUris_; - bitField0_ |= 0x00000080; + bitField0_ = (bitField0_ & ~0x00000080); } else { ensureEndpointUrisIsMutable(); endpointUris_.addAll(other.endpointUris_); @@ -1838,7 +1834,6 @@ public Builder setDisplayNameBytes(com.google.protobuf.ByteString value) { * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1860,7 +1855,6 @@ public int getNodeCount() { * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1886,7 +1880,6 @@ public Builder setNodeCount(int value) { * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1911,7 +1904,6 @@ public Builder clearNodeCount() { * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1932,7 +1924,6 @@ public int getProcessingUnits() { * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -1957,7 +1948,6 @@ public Builder setProcessingUnits(int value) { * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -2131,15 +2121,12 @@ public int getLabelsCount() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2173,15 +2160,12 @@ public java.util.Map getLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2206,15 +2190,12 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2246,15 +2227,12 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2292,15 +2270,12 @@ public Builder clearLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2334,15 +2309,12 @@ public java.util.Map getMutableLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2374,15 +2346,12 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -2399,14 +2368,14 @@ public Builder putAllLabels(java.util.Map va return this; } - private com.google.protobuf.LazyStringArrayList endpointUris_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList endpointUris_ = + com.google.protobuf.LazyStringArrayList.EMPTY; private void ensureEndpointUrisIsMutable() { - if (!endpointUris_.isModifiable()) { + if (!((bitField0_ & 0x00000080) != 0)) { endpointUris_ = new com.google.protobuf.LazyStringArrayList(endpointUris_); + bitField0_ |= 0x00000080; } - bitField0_ |= 0x00000080; } /** * @@ -2420,8 +2389,7 @@ private void ensureEndpointUrisIsMutable() { * @return A list containing the endpointUris. */ public com.google.protobuf.ProtocolStringList getEndpointUrisList() { - endpointUris_.makeImmutable(); - return endpointUris_; + return endpointUris_.getUnmodifiableView(); } /** * @@ -2486,7 +2454,6 @@ public Builder setEndpointUris(int index, java.lang.String value) { } ensureEndpointUrisIsMutable(); endpointUris_.set(index, value); - bitField0_ |= 0x00000080; onChanged(); return this; } @@ -2508,7 +2475,6 @@ public Builder addEndpointUris(java.lang.String value) { } ensureEndpointUrisIsMutable(); endpointUris_.add(value); - bitField0_ |= 0x00000080; onChanged(); return this; } @@ -2527,7 +2493,6 @@ public Builder addEndpointUris(java.lang.String value) { public Builder addAllEndpointUris(java.lang.Iterable values) { ensureEndpointUrisIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, endpointUris_); - bitField0_ |= 0x00000080; onChanged(); return this; } @@ -2543,9 +2508,8 @@ public Builder addAllEndpointUris(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearEndpointUris() { - endpointUris_ = com.google.protobuf.LazyStringArrayList.emptyList(); + endpointUris_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00000080); - ; onChanged(); return this; } @@ -2568,7 +2532,6 @@ public Builder addEndpointUrisBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureEndpointUrisIsMutable(); endpointUris_.add(value); - bitField0_ |= 0x00000080; onChanged(); return this; } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java index 0351972ca66..e8b1cd418e3 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfig.java @@ -46,7 +46,7 @@ private InstanceConfig() { optionalReplicas_ = java.util.Collections.emptyList(); baseConfig_ = ""; etag_ = ""; - leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + leaderOptions_ = com.google.protobuf.LazyStringArrayList.EMPTY; state_ = 0; } @@ -56,6 +56,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new InstanceConfig(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_InstanceConfig_descriptor; @@ -808,15 +813,12 @@ public int getLabelsCount() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -850,15 +852,12 @@ public java.util.Map getLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -883,15 +882,12 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -923,15 +919,12 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -1026,8 +1019,7 @@ public com.google.protobuf.ByteString getEtagBytes() { public static final int LEADER_OPTIONS_FIELD_NUMBER = 4; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList leaderOptions_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList leaderOptions_; /** * * @@ -1505,7 +1497,8 @@ public Builder clear() { baseConfig_ = ""; internalGetMutableLabels().clear(); etag_ = ""; - leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + leaderOptions_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000100); reconciling_ = false; state_ = 0; return this; @@ -1563,6 +1556,11 @@ private void buildPartialRepeatedFields( } else { result.optionalReplicas_ = optionalReplicasBuilder_.build(); } + if (((bitField0_ & 0x00000100) != 0)) { + leaderOptions_ = leaderOptions_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000100); + } + result.leaderOptions_ = leaderOptions_; } private void buildPartial0(com.google.spanner.admin.instance.v1.InstanceConfig result) { @@ -1586,10 +1584,6 @@ private void buildPartial0(com.google.spanner.admin.instance.v1.InstanceConfig r if (((from_bitField0_ & 0x00000080) != 0)) { result.etag_ = etag_; } - if (((from_bitField0_ & 0x00000100) != 0)) { - leaderOptions_.makeImmutable(); - result.leaderOptions_ = leaderOptions_; - } if (((from_bitField0_ & 0x00000200) != 0)) { result.reconciling_ = reconciling_; } @@ -1726,7 +1720,7 @@ public Builder mergeFrom(com.google.spanner.admin.instance.v1.InstanceConfig oth if (!other.leaderOptions_.isEmpty()) { if (leaderOptions_.isEmpty()) { leaderOptions_ = other.leaderOptions_; - bitField0_ |= 0x00000100; + bitField0_ = (bitField0_ & ~0x00000100); } else { ensureLeaderOptionsIsMutable(); leaderOptions_.addAll(other.leaderOptions_); @@ -3143,15 +3137,12 @@ public int getLabelsCount() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3185,15 +3176,12 @@ public java.util.Map getLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3218,15 +3206,12 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3258,15 +3243,12 @@ public java.util.Map getLabelsMap() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3304,15 +3286,12 @@ public Builder clearLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3346,15 +3325,12 @@ public java.util.Map getMutableLabels() { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3386,15 +3362,12 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -3562,14 +3535,14 @@ public Builder setEtagBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringArrayList leaderOptions_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList leaderOptions_ = + com.google.protobuf.LazyStringArrayList.EMPTY; private void ensureLeaderOptionsIsMutable() { - if (!leaderOptions_.isModifiable()) { + if (!((bitField0_ & 0x00000100) != 0)) { leaderOptions_ = new com.google.protobuf.LazyStringArrayList(leaderOptions_); + bitField0_ |= 0x00000100; } - bitField0_ |= 0x00000100; } /** * @@ -3584,8 +3557,7 @@ private void ensureLeaderOptionsIsMutable() { * @return A list containing the leaderOptions. */ public com.google.protobuf.ProtocolStringList getLeaderOptionsList() { - leaderOptions_.makeImmutable(); - return leaderOptions_; + return leaderOptions_.getUnmodifiableView(); } /** * @@ -3654,7 +3626,6 @@ public Builder setLeaderOptions(int index, java.lang.String value) { } ensureLeaderOptionsIsMutable(); leaderOptions_.set(index, value); - bitField0_ |= 0x00000100; onChanged(); return this; } @@ -3677,7 +3648,6 @@ public Builder addLeaderOptions(java.lang.String value) { } ensureLeaderOptionsIsMutable(); leaderOptions_.add(value); - bitField0_ |= 0x00000100; onChanged(); return this; } @@ -3697,7 +3667,6 @@ public Builder addLeaderOptions(java.lang.String value) { public Builder addAllLeaderOptions(java.lang.Iterable values) { ensureLeaderOptionsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, leaderOptions_); - bitField0_ |= 0x00000100; onChanged(); return this; } @@ -3714,9 +3683,8 @@ public Builder addAllLeaderOptions(java.lang.Iterable values) * @return This builder for chaining. */ public Builder clearLeaderOptions() { - leaderOptions_ = com.google.protobuf.LazyStringArrayList.emptyList(); + leaderOptions_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00000100); - ; onChanged(); return this; } @@ -3740,7 +3708,6 @@ public Builder addLeaderOptionsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureLeaderOptionsIsMutable(); leaderOptions_.add(value); - bitField0_ |= 0x00000100; onChanged(); return this; } diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java index acf1f898390..cd54bc42865 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceConfigOrBuilder.java @@ -273,15 +273,12 @@ public interface InstanceConfigOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -303,15 +300,12 @@ public interface InstanceConfigOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -336,15 +330,12 @@ public interface InstanceConfigOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -366,15 +357,12 @@ public interface InstanceConfigOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon @@ -400,15 +388,12 @@ java.lang.String getLabelsOrDefault( * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. Therefore, you are advised to use * an internal label representation, such as JSON, which doesn't rely upon diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java index accad92c855..202d5c0bfe2 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/InstanceOrBuilder.java @@ -124,7 +124,6 @@ public interface InstanceOrBuilder * node_count or processing_units should be present in the message. This * may be zero in API responses for instances that are not yet in state * `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -143,7 +142,6 @@ public interface InstanceOrBuilder * The number of processing units allocated to this instance. At most one of * processing_units or node_count should be present in the message. This may * be zero in API responses for instances that are not yet in state `READY`. - * * See [the * documentation](https://cloud.google.com/spanner/docs/compute-capacity) * for more information about nodes and processing units. @@ -202,15 +200,12 @@ public interface InstanceOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -232,15 +227,12 @@ public interface InstanceOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -265,15 +257,12 @@ public interface InstanceOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -295,15 +284,12 @@ public interface InstanceOrBuilder * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon @@ -329,15 +315,12 @@ java.lang.String getLabelsOrDefault( * resources. They can be used to control how resource metrics are aggregated. * And they can be used as arguments to policy management rules (e.g. route, * firewall, load balancing, etc.). - * * * Label keys must be between 1 and 63 characters long and must conform to * the following regular expression: `[a-z][a-z0-9_-]{0,62}`. * * Label values must be between 0 and 63 characters long and must conform * to the regular expression `[a-z0-9_-]{0,63}`. * * No more than 64 labels can be associated with a given resource. - * * See https://goo.gl/xmQnxf for more information on and examples of labels. - * * If you plan to use labels in your own code, please note that additional * characters may be allowed in the future. And so you are advised to use an * internal label representation, such as JSON, which doesn't rely upon diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java index 542bafb332b..f2383b48b41 100644 --- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java +++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequest.java @@ -52,6 +52,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ListInstanceConfigOperationsRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsRequest_descriptor; @@ -133,16 +138,13 @@ public com.google.protobuf.ByteString getParentBytes() { * *
    * An expression that filters the list of returned operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -156,13 +158,10 @@ public com.google.protobuf.ByteString getParentBytes() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=` \
    *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -198,16 +197,13 @@ public java.lang.String getFilter() {
    *
    * 
    * An expression that filters the list of returned operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -221,13 +217,10 @@ public java.lang.String getFilter() {
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=` \
    *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -890,16 +883,13 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -913,13 +903,10 @@ public Builder setParentBytes(com.google.protobuf.ByteString value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -954,16 +941,13 @@ public java.lang.String getFilter() {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -977,13 +961,10 @@ public java.lang.String getFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -1018,16 +999,13 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1041,13 +1019,10 @@ public com.google.protobuf.ByteString getFilterBytes() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -1081,16 +1056,13 @@ public Builder setFilter(java.lang.String value) {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1104,13 +1076,10 @@ public Builder setFilter(java.lang.String value) {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -1140,16 +1109,13 @@ public Builder clearFilter() {
      *
      * 
      * An expression that filters the list of returned operations.
-     *
      * A filter expression consists of a field name, a
      * comparison operator, and a value for filtering.
      * The value must be a string, a number, or a boolean. The comparison operator
      * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
      * Colon `:` is the contains operator. Filter rules are not case sensitive.
-     *
      * The following fields in the [Operation][google.longrunning.Operation]
      * are eligible for filtering:
-     *
      *   * `name` - The name of the long-running operation
      *   * `done` - False if the operation is in progress, else true.
      *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -1163,13 +1129,10 @@ public Builder clearFilter() {
      *   * `error` - Error associated with the long-running operation.
      *   * `response.@type` - the type of response.
      *   * `response.<field_name>` - any field in response.value.
-     *
      * You can combine multiple expressions by enclosing each expression in
      * parentheses. By default, expressions are combined with AND logic. However,
      * you can specify AND, OR, and NOT logic explicitly.
-     *
      * Here are a few examples:
-     *
      *   * `done:true` - The operation is complete.
      *   * `(metadata.@type=` \
      *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java
index b9116f3d765..3e79ae5fff3 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsRequestOrBuilder.java
@@ -59,16 +59,13 @@ public interface ListInstanceConfigOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -82,13 +79,10 @@ public interface ListInstanceConfigOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=` \
    *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
@@ -113,16 +107,13 @@ public interface ListInstanceConfigOperationsRequestOrBuilder
    *
    * 
    * An expression that filters the list of returned operations.
-   *
    * A filter expression consists of a field name, a
    * comparison operator, and a value for filtering.
    * The value must be a string, a number, or a boolean. The comparison operator
    * must be one of: `<`, `>`, `<=`, `>=`, `!=`, `=`, or `:`.
    * Colon `:` is the contains operator. Filter rules are not case sensitive.
-   *
    * The following fields in the [Operation][google.longrunning.Operation]
    * are eligible for filtering:
-   *
    *   * `name` - The name of the long-running operation
    *   * `done` - False if the operation is in progress, else true.
    *   * `metadata.@type` - the type of metadata. For example, the type string
@@ -136,13 +127,10 @@ public interface ListInstanceConfigOperationsRequestOrBuilder
    *   * `error` - Error associated with the long-running operation.
    *   * `response.@type` - the type of response.
    *   * `response.<field_name>` - any field in response.value.
-   *
    * You can combine multiple expressions by enclosing each expression in
    * parentheses. By default, expressions are combined with AND logic. However,
    * you can specify AND, OR, and NOT logic explicitly.
-   *
    * Here are a few examples:
-   *
    *   * `done:true` - The operation is complete.
    *   * `(metadata.@type=` \
    *     `type.googleapis.com/google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java
index 5ea6dd69395..f120ee9ea3b 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigOperationsResponse.java
@@ -51,6 +51,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstanceConfigOperationsResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigOperationsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java
index 9101130a4c0..ccfd7f89e98 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsRequest.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstanceConfigsRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java
index 0d8cac1c67f..d5611dd1e8d 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstanceConfigsResponse.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstanceConfigsResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstanceConfigsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java
index 1236936495a..2ba8ebb3487 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequest.java
@@ -50,6 +50,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstancesRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstancesRequest_descriptor;
@@ -208,13 +213,10 @@ public com.google.protobuf.ByteString getPageTokenBytes() {
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
-   *
    *   * `name`
    *   * `display_name`
    *   * `labels.key` where key is the name of a label
-   *
    * Some examples of using filters are:
-   *
    *   * `name:*` --> The instance has a name.
    *   * `name:Howl` --> The instance's name contains the string "howl".
    *   * `name:HOWL` --> Equivalent to above.
@@ -249,13 +251,10 @@ public java.lang.String getFilter() {
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
-   *
    *   * `name`
    *   * `display_name`
    *   * `labels.key` where key is the name of a label
-   *
    * Some examples of using filters are:
-   *
    *   * `name:*` --> The instance has a name.
    *   * `name:Howl` --> The instance's name contains the string "howl".
    *   * `name:HOWL` --> Equivalent to above.
@@ -1004,13 +1003,10 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
@@ -1044,13 +1040,10 @@ public java.lang.String getFilter() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
@@ -1084,13 +1077,10 @@ public com.google.protobuf.ByteString getFilterBytes() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
@@ -1123,13 +1113,10 @@ public Builder setFilter(java.lang.String value) {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
@@ -1158,13 +1145,10 @@ public Builder clearFilter() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `name`
      *   * `display_name`
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `name:*` --> The instance has a name.
      *   * `name:Howl` --> The instance's name contains the string "howl".
      *   * `name:HOWL` --> Equivalent to above.
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java
index 4d2e9869ded..fe48b843731 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesRequestOrBuilder.java
@@ -105,13 +105,10 @@ public interface ListInstancesRequestOrBuilder
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
-   *
    *   * `name`
    *   * `display_name`
    *   * `labels.key` where key is the name of a label
-   *
    * Some examples of using filters are:
-   *
    *   * `name:*` --> The instance has a name.
    *   * `name:Howl` --> The instance's name contains the string "howl".
    *   * `name:HOWL` --> Equivalent to above.
@@ -135,13 +132,10 @@ public interface ListInstancesRequestOrBuilder
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
-   *
    *   * `name`
    *   * `display_name`
    *   * `labels.key` where key is the name of a label
-   *
    * Some examples of using filters are:
-   *
    *   * `name:*` --> The instance has a name.
    *   * `name:Howl` --> The instance's name contains the string "howl".
    *   * `name:HOWL` --> Equivalent to above.
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java
index 65ae986053e..89519d1b539 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ListInstancesResponse.java
@@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListInstancesResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ListInstancesResponse_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java
index 37971de7ed9..8a822c2c7d2 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/OperationProgress.java
@@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new OperationProgress();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.CommonProto
         .internal_static_google_spanner_admin_instance_v1_OperationProgress_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java
index e180b6bbb6d..2553f2fff57 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/ReplicaInfo.java
@@ -40,6 +40,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ReplicaInfo();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_ReplicaInfo_descriptor;
@@ -82,7 +87,6 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      *
      * 
      * Read-write replicas support both reads and writes. These replicas:
-     *
      * * Maintain a full copy of your data.
      * * Serve reads.
      * * Can vote whether to commit a write.
@@ -98,7 +102,6 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      *
      * 
      * Read-only replicas only support reads (not writes). Read-only replicas:
-     *
      * * Maintain a full copy of your data.
      * * Serve reads.
      * * Do not participate in voting to commit writes.
@@ -114,7 +117,6 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      * 
      * Witness replicas don't support reads but do participate in voting to
      * commit writes. Witness replicas:
-     *
      * * Do not maintain a full copy of data.
      * * Do not serve reads.
      * * Vote whether to commit writes.
@@ -142,7 +144,6 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      *
      * 
      * Read-write replicas support both reads and writes. These replicas:
-     *
      * * Maintain a full copy of your data.
      * * Serve reads.
      * * Can vote whether to commit a write.
@@ -158,7 +159,6 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      *
      * 
      * Read-only replicas only support reads (not writes). Read-only replicas:
-     *
      * * Maintain a full copy of your data.
      * * Serve reads.
      * * Do not participate in voting to commit writes.
@@ -174,7 +174,6 @@ public enum ReplicaType implements com.google.protobuf.ProtocolMessageEnum {
      * 
      * Witness replicas don't support reads but do participate in voting to
      * commit writes. Witness replicas:
-     *
      * * Do not maintain a full copy of data.
      * * Do not serve reads.
      * * Vote whether to commit writes.
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java
index 8fc561a4fa7..3d5256cbd62 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/SpannerInstanceAdminProto.java
@@ -144,204 +144,203 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
           + "min.instance.v1.ReplicaInfo.ReplicaType\022"
           + "\037\n\027default_leader_location\030\003 \001(\010\"O\n\013Repl"
           + "icaType\022\024\n\020TYPE_UNSPECIFIED\020\000\022\016\n\nREAD_WR"
-          + "ITE\020\001\022\r\n\tREAD_ONLY\020\002\022\013\n\007WITNESS\020\003\"\302\006\n\016In"
+          + "ITE\020\001\022\r\n\tREAD_ONLY\020\002\022\013\n\007WITNESS\020\003\"\276\006\n\016In"
           + "stanceConfig\022\014\n\004name\030\001 \001(\t\022\024\n\014display_na"
-          + "me\030\002 \001(\t\022P\n\013config_type\030\005 \001(\01625.google.s"
+          + "me\030\002 \001(\t\022O\n\013config_type\030\005 \001(\01625.google.s"
           + "panner.admin.instance.v1.InstanceConfig."
-          + "TypeB\004\342A\001\003\022?\n\010replicas\030\003 \003(\0132-.google.sp"
-          + "anner.admin.instance.v1.ReplicaInfo\022N\n\021o"
-          + "ptional_replicas\030\006 \003(\0132-.google.spanner."
-          + "admin.instance.v1.ReplicaInfoB\004\342A\001\003\022?\n\013b"
-          + "ase_config\030\007 \001(\tB*\372A\'\n%spanner.googleapi"
-          + "s.com/InstanceConfig\022L\n\006labels\030\010 \003(\0132<.g"
-          + "oogle.spanner.admin.instance.v1.Instance"
-          + "Config.LabelsEntry\022\014\n\004etag\030\t \001(\t\022\026\n\016lead"
-          + "er_options\030\004 \003(\t\022\031\n\013reconciling\030\n \001(\010B\004\342"
-          + "A\001\003\022K\n\005state\030\013 \001(\01626.google.spanner.admi"
-          + "n.instance.v1.InstanceConfig.StateB\004\342A\001\003"
-          + "\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 "
-          + "\001(\t:\0028\001\"B\n\004Type\022\024\n\020TYPE_UNSPECIFIED\020\000\022\022\n"
-          + "\016GOOGLE_MANAGED\020\001\022\020\n\014USER_MANAGED\020\002\"7\n\005S"
-          + "tate\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020"
-          + "\001\022\t\n\005READY\020\002:`\352A]\n%spanner.googleapis.co"
-          + "m/InstanceConfig\0224projects/{project}/ins"
-          + "tanceConfigs/{instance_config}\"\363\004\n\010Insta"
-          + "nce\022\022\n\004name\030\001 \001(\tB\004\342A\001\002\022>\n\006config\030\002 \001(\tB"
-          + ".\342A\001\002\372A\'\n%spanner.googleapis.com/Instanc"
-          + "eConfig\022\032\n\014display_name\030\003 \001(\tB\004\342A\001\002\022\022\n\nn"
-          + "ode_count\030\005 \001(\005\022\030\n\020processing_units\030\t \001("
-          + "\005\022E\n\005state\030\006 \001(\01620.google.spanner.admin."
-          + "instance.v1.Instance.StateB\004\342A\001\003\022F\n\006labe"
-          + "ls\030\007 \003(\01326.google.spanner.admin.instance"
-          + ".v1.Instance.LabelsEntry\022\025\n\rendpoint_uri"
-          + "s\030\010 \003(\t\0225\n\013create_time\030\013 \001(\0132\032.google.pr"
-          + "otobuf.TimestampB\004\342A\001\003\0225\n\013update_time\030\014 "
-          + "\001(\0132\032.google.protobuf.TimestampB\004\342A\001\003\032-\n"
-          + "\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t"
-          + ":\0028\001\"7\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010"
-          + "CREATING\020\001\022\t\n\005READY\020\002:M\352AJ\n\037spanner.goog"
-          + "leapis.com/Instance\022\'projects/{project}/"
-          + "instances/{instance}\"\211\001\n\032ListInstanceCon"
-          + "figsRequest\022D\n\006parent\030\001 \001(\tB4\342A\001\002\372A-\n+cl"
-          + "oudresourcemanager.googleapis.com/Projec"
-          + "t\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t"
-          + "\"\202\001\n\033ListInstanceConfigsResponse\022J\n\020inst"
-          + "ance_configs\030\001 \003(\01320.google.spanner.admi"
-          + "n.instance.v1.InstanceConfig\022\027\n\017next_pag"
-          + "e_token\030\002 \001(\t\"X\n\030GetInstanceConfigReques"
-          + "t\022<\n\004name\030\001 \001(\tB.\342A\001\002\372A\'\n%spanner.google"
-          + "apis.com/InstanceConfig\"\355\001\n\033CreateInstan"
-          + "ceConfigRequest\022D\n\006parent\030\001 \001(\tB4\342A\001\002\372A-"
-          + "\n+cloudresourcemanager.googleapis.com/Pr"
-          + "oject\022 \n\022instance_config_id\030\002 \001(\tB\004\342A\001\002\022"
-          + "O\n\017instance_config\030\003 \001(\01320.google.spanne"
-          + "r.admin.instance.v1.InstanceConfigB\004\342A\001\002"
-          + "\022\025\n\rvalidate_only\030\004 \001(\010\"\274\001\n\033UpdateInstan"
-          + "ceConfigRequest\022O\n\017instance_config\030\001 \001(\013"
-          + "20.google.spanner.admin.instance.v1.Inst"
-          + "anceConfigB\004\342A\001\002\0225\n\013update_mask\030\002 \001(\0132\032."
-          + "google.protobuf.FieldMaskB\004\342A\001\002\022\025\n\rvalid"
-          + "ate_only\030\003 \001(\010\"\200\001\n\033DeleteInstanceConfigR"
-          + "equest\022<\n\004name\030\001 \001(\tB.\342A\001\002\372A\'\n%spanner.g"
-          + "oogleapis.com/InstanceConfig\022\014\n\004etag\030\002 \001"
-          + "(\t\022\025\n\rvalidate_only\030\003 \001(\010\"\242\001\n#ListInstan"
-          + "ceConfigOperationsRequest\022D\n\006parent\030\001 \001("
-          + "\tB4\342A\001\002\372A-\n+cloudresourcemanager.googlea"
-          + "pis.com/Project\022\016\n\006filter\030\002 \001(\t\022\021\n\tpage_"
-          + "size\030\003 \001(\005\022\022\n\npage_token\030\004 \001(\t\"r\n$ListIn"
-          + "stanceConfigOperationsResponse\0221\n\noperat"
-          + "ions\030\001 \003(\0132\035.google.longrunning.Operatio"
-          + "n\022\027\n\017next_page_token\030\002 \001(\t\"|\n\022GetInstanc"
-          + "eRequest\0226\n\004name\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner"
-          + ".googleapis.com/Instance\022.\n\nfield_mask\030\002"
-          + " \001(\0132\032.google.protobuf.FieldMask\"\274\001\n\025Cre"
-          + "ateInstanceRequest\022D\n\006parent\030\001 \001(\tB4\342A\001\002"
-          + "\372A-\n+cloudresourcemanager.googleapis.com"
-          + "/Project\022\031\n\013instance_id\030\002 \001(\tB\004\342A\001\002\022B\n\010i"
-          + "nstance\030\003 \001(\0132*.google.spanner.admin.ins"
-          + "tance.v1.InstanceB\004\342A\001\002\"\223\001\n\024ListInstance"
-          + "sRequest\022D\n\006parent\030\001 \001(\tB4\342A\001\002\372A-\n+cloud"
-          + "resourcemanager.googleapis.com/Project\022\021"
-          + "\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\016\n"
-          + "\006filter\030\004 \001(\t\"o\n\025ListInstancesResponse\022="
-          + "\n\tinstances\030\001 \003(\0132*.google.spanner.admin"
-          + ".instance.v1.Instance\022\027\n\017next_page_token"
-          + "\030\002 \001(\t\"\221\001\n\025UpdateInstanceRequest\022B\n\010inst"
-          + "ance\030\001 \001(\0132*.google.spanner.admin.instan"
-          + "ce.v1.InstanceB\004\342A\001\002\0224\n\nfield_mask\030\002 \001(\013"
-          + "2\032.google.protobuf.FieldMaskB\004\342A\001\002\"O\n\025De"
-          + "leteInstanceRequest\0226\n\004name\030\001 \001(\tB(\342A\001\002\372"
-          + "A!\n\037spanner.googleapis.com/Instance\"\345\001\n\026"
-          + "CreateInstanceMetadata\022<\n\010instance\030\001 \001(\013"
-          + "2*.google.spanner.admin.instance.v1.Inst"
-          + "ance\022.\n\nstart_time\030\002 \001(\0132\032.google.protob"
-          + "uf.Timestamp\022/\n\013cancel_time\030\003 \001(\0132\032.goog"
-          + "le.protobuf.Timestamp\022,\n\010end_time\030\004 \001(\0132"
-          + "\032.google.protobuf.Timestamp\"\345\001\n\026UpdateIn"
-          + "stanceMetadata\022<\n\010instance\030\001 \001(\0132*.googl"
-          + "e.spanner.admin.instance.v1.Instance\022.\n\n"
-          + "start_time\030\002 \001(\0132\032.google.protobuf.Times"
-          + "tamp\022/\n\013cancel_time\030\003 \001(\0132\032.google.proto"
-          + "buf.Timestamp\022,\n\010end_time\030\004 \001(\0132\032.google"
-          + ".protobuf.Timestamp\"\341\001\n\034CreateInstanceCo"
+          + "TypeB\003\340A\003\022?\n\010replicas\030\003 \003(\0132-.google.spa"
+          + "nner.admin.instance.v1.ReplicaInfo\022M\n\021op"
+          + "tional_replicas\030\006 \003(\0132-.google.spanner.a"
+          + "dmin.instance.v1.ReplicaInfoB\003\340A\003\022?\n\013bas"
+          + "e_config\030\007 \001(\tB*\372A\'\n%spanner.googleapis."
+          + "com/InstanceConfig\022L\n\006labels\030\010 \003(\0132<.goo"
+          + "gle.spanner.admin.instance.v1.InstanceCo"
+          + "nfig.LabelsEntry\022\014\n\004etag\030\t \001(\t\022\026\n\016leader"
+          + "_options\030\004 \003(\t\022\030\n\013reconciling\030\n \001(\010B\003\340A\003"
+          + "\022J\n\005state\030\013 \001(\01626.google.spanner.admin.i"
+          + "nstance.v1.InstanceConfig.StateB\003\340A\003\032-\n\013"
+          + "LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:"
+          + "\0028\001\"B\n\004Type\022\024\n\020TYPE_UNSPECIFIED\020\000\022\022\n\016GOO"
+          + "GLE_MANAGED\020\001\022\020\n\014USER_MANAGED\020\002\"7\n\005State"
+          + "\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001\022\t\n"
+          + "\005READY\020\002:`\352A]\n%spanner.googleapis.com/In"
+          + "stanceConfig\0224projects/{project}/instanc"
+          + "eConfigs/{instance_config}\"\355\004\n\010Instance\022"
+          + "\021\n\004name\030\001 \001(\tB\003\340A\002\022=\n\006config\030\002 \001(\tB-\340A\002\372"
+          + "A\'\n%spanner.googleapis.com/InstanceConfi"
+          + "g\022\031\n\014display_name\030\003 \001(\tB\003\340A\002\022\022\n\nnode_cou"
+          + "nt\030\005 \001(\005\022\030\n\020processing_units\030\t \001(\005\022D\n\005st"
+          + "ate\030\006 \001(\01620.google.spanner.admin.instanc"
+          + "e.v1.Instance.StateB\003\340A\003\022F\n\006labels\030\007 \003(\013"
+          + "26.google.spanner.admin.instance.v1.Inst"
+          + "ance.LabelsEntry\022\025\n\rendpoint_uris\030\010 \003(\t\022"
+          + "4\n\013create_time\030\013 \001(\0132\032.google.protobuf.T"
+          + "imestampB\003\340A\003\0224\n\013update_time\030\014 \001(\0132\032.goo"
+          + "gle.protobuf.TimestampB\003\340A\003\032-\n\013LabelsEnt"
+          + "ry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"7\n\005St"
+          + "ate\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001"
+          + "\022\t\n\005READY\020\002:M\352AJ\n\037spanner.googleapis.com"
+          + "/Instance\022\'projects/{project}/instances/"
+          + "{instance}\"\210\001\n\032ListInstanceConfigsReques"
+          + "t\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresource"
+          + "manager.googleapis.com/Project\022\021\n\tpage_s"
+          + "ize\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\"\202\001\n\033ListIn"
+          + "stanceConfigsResponse\022J\n\020instance_config"
+          + "s\030\001 \003(\01320.google.spanner.admin.instance."
+          + "v1.InstanceConfig\022\027\n\017next_page_token\030\002 \001"
+          + "(\t\"W\n\030GetInstanceConfigRequest\022;\n\004name\030\001"
+          + " \001(\tB-\340A\002\372A\'\n%spanner.googleapis.com/Ins"
+          + "tanceConfig\"\352\001\n\033CreateInstanceConfigRequ"
+          + "est\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresour"
+          + "cemanager.googleapis.com/Project\022\037\n\022inst"
+          + "ance_config_id\030\002 \001(\tB\003\340A\002\022N\n\017instance_co"
+          + "nfig\030\003 \001(\01320.google.spanner.admin.instan"
+          + "ce.v1.InstanceConfigB\003\340A\002\022\025\n\rvalidate_on"
+          + "ly\030\004 \001(\010\"\272\001\n\033UpdateInstanceConfigRequest"
+          + "\022N\n\017instance_config\030\001 \001(\01320.google.spann"
+          + "er.admin.instance.v1.InstanceConfigB\003\340A\002"
+          + "\0224\n\013update_mask\030\002 \001(\0132\032.google.protobuf."
+          + "FieldMaskB\003\340A\002\022\025\n\rvalidate_only\030\003 \001(\010\"\177\n"
+          + "\033DeleteInstanceConfigRequest\022;\n\004name\030\001 \001"
+          + "(\tB-\340A\002\372A\'\n%spanner.googleapis.com/Insta"
+          + "nceConfig\022\014\n\004etag\030\002 \001(\t\022\025\n\rvalidate_only"
+          + "\030\003 \001(\010\"\241\001\n#ListInstanceConfigOperationsR"
+          + "equest\022C\n\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudres"
+          + "ourcemanager.googleapis.com/Project\022\016\n\006f"
+          + "ilter\030\002 \001(\t\022\021\n\tpage_size\030\003 \001(\005\022\022\n\npage_t"
+          + "oken\030\004 \001(\t\"r\n$ListInstanceConfigOperatio"
+          + "nsResponse\0221\n\noperations\030\001 \003(\0132\035.google."
+          + "longrunning.Operation\022\027\n\017next_page_token"
+          + "\030\002 \001(\t\"{\n\022GetInstanceRequest\0225\n\004name\030\001 \001"
+          + "(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/Insta"
+          + "nce\022.\n\nfield_mask\030\002 \001(\0132\032.google.protobu"
+          + "f.FieldMask\"\271\001\n\025CreateInstanceRequest\022C\n"
+          + "\006parent\030\001 \001(\tB3\340A\002\372A-\n+cloudresourcemana"
+          + "ger.googleapis.com/Project\022\030\n\013instance_i"
+          + "d\030\002 \001(\tB\003\340A\002\022A\n\010instance\030\003 \001(\0132*.google."
+          + "spanner.admin.instance.v1.InstanceB\003\340A\002\""
+          + "\222\001\n\024ListInstancesRequest\022C\n\006parent\030\001 \001(\t"
+          + "B3\340A\002\372A-\n+cloudresourcemanager.googleapi"
+          + "s.com/Project\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage"
+          + "_token\030\003 \001(\t\022\016\n\006filter\030\004 \001(\t\"o\n\025ListInst"
+          + "ancesResponse\022=\n\tinstances\030\001 \003(\0132*.googl"
+          + "e.spanner.admin.instance.v1.Instance\022\027\n\017"
+          + "next_page_token\030\002 \001(\t\"\217\001\n\025UpdateInstance"
+          + "Request\022A\n\010instance\030\001 \001(\0132*.google.spann"
+          + "er.admin.instance.v1.InstanceB\003\340A\002\0223\n\nfi"
+          + "eld_mask\030\002 \001(\0132\032.google.protobuf.FieldMa"
+          + "skB\003\340A\002\"N\n\025DeleteInstanceRequest\0225\n\004name"
+          + "\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googleapis.com/I"
+          + "nstance\"\345\001\n\026CreateInstanceMetadata\022<\n\010in"
+          + "stance\030\001 \001(\0132*.google.spanner.admin.inst"
+          + "ance.v1.Instance\022.\n\nstart_time\030\002 \001(\0132\032.g"
+          + "oogle.protobuf.Timestamp\022/\n\013cancel_time\030"
+          + "\003 \001(\0132\032.google.protobuf.Timestamp\022,\n\010end"
+          + "_time\030\004 \001(\0132\032.google.protobuf.Timestamp\""
+          + "\345\001\n\026UpdateInstanceMetadata\022<\n\010instance\030\001"
+          + " \001(\0132*.google.spanner.admin.instance.v1."
+          + "Instance\022.\n\nstart_time\030\002 \001(\0132\032.google.pr"
+          + "otobuf.Timestamp\022/\n\013cancel_time\030\003 \001(\0132\032."
+          + "google.protobuf.Timestamp\022,\n\010end_time\030\004 "
+          + "\001(\0132\032.google.protobuf.Timestamp\"\341\001\n\034Crea"
+          + "teInstanceConfigMetadata\022I\n\017instance_con"
+          + "fig\030\001 \001(\01320.google.spanner.admin.instanc"
+          + "e.v1.InstanceConfig\022E\n\010progress\030\002 \001(\01323."
+          + "google.spanner.admin.instance.v1.Operati"
+          + "onProgress\022/\n\013cancel_time\030\003 \001(\0132\032.google"
+          + ".protobuf.Timestamp\"\341\001\n\034UpdateInstanceCo"
           + "nfigMetadata\022I\n\017instance_config\030\001 \001(\01320."
           + "google.spanner.admin.instance.v1.Instanc"
           + "eConfig\022E\n\010progress\030\002 \001(\01323.google.spann"
           + "er.admin.instance.v1.OperationProgress\022/"
           + "\n\013cancel_time\030\003 \001(\0132\032.google.protobuf.Ti"
-          + "mestamp\"\341\001\n\034UpdateInstanceConfigMetadata"
-          + "\022I\n\017instance_config\030\001 \001(\01320.google.spann"
-          + "er.admin.instance.v1.InstanceConfig\022E\n\010p"
-          + "rogress\030\002 \001(\01323.google.spanner.admin.ins"
-          + "tance.v1.OperationProgress\022/\n\013cancel_tim"
-          + "e\030\003 \001(\0132\032.google.protobuf.Timestamp2\362\030\n\r"
-          + "InstanceAdmin\022\314\001\n\023ListInstanceConfigs\022<."
-          + "google.spanner.admin.instance.v1.ListIns"
-          + "tanceConfigsRequest\032=.google.spanner.adm"
-          + "in.instance.v1.ListInstanceConfigsRespon"
-          + "se\"8\332A\006parent\202\323\344\223\002)\022\'/v1/{parent=project"
-          + "s/*}/instanceConfigs\022\271\001\n\021GetInstanceConf"
-          + "ig\022:.google.spanner.admin.instance.v1.Ge"
-          + "tInstanceConfigRequest\0320.google.spanner."
-          + "admin.instance.v1.InstanceConfig\"6\332A\004nam"
-          + "e\202\323\344\223\002)\022\'/v1/{name=projects/*/instanceCo"
-          + "nfigs/*}\022\310\002\n\024CreateInstanceConfig\022=.goog"
-          + "le.spanner.admin.instance.v1.CreateInsta"
-          + "nceConfigRequest\032\035.google.longrunning.Op"
-          + "eration\"\321\001\312Ap\n/google.spanner.admin.inst"
-          + "ance.v1.InstanceConfig\022=google.spanner.a"
-          + "dmin.instance.v1.CreateInstanceConfigMet"
-          + "adata\332A)parent,instance_config,instance_"
-          + "config_id\202\323\344\223\002,\"\'/v1/{parent=projects/*}"
-          + "/instanceConfigs:\001*\022\312\002\n\024UpdateInstanceCo"
-          + "nfig\022=.google.spanner.admin.instance.v1."
-          + "UpdateInstanceConfigRequest\032\035.google.lon"
-          + "grunning.Operation\"\323\001\312Ap\n/google.spanner"
-          + ".admin.instance.v1.InstanceConfig\022=googl"
-          + "e.spanner.admin.instance.v1.UpdateInstan"
-          + "ceConfigMetadata\332A\033instance_config,updat"
-          + "e_mask\202\323\344\223\002<27/v1/{instance_config.name="
-          + "projects/*/instanceConfigs/*}:\001*\022\245\001\n\024Del"
-          + "eteInstanceConfig\022=.google.spanner.admin"
-          + ".instance.v1.DeleteInstanceConfigRequest"
-          + "\032\026.google.protobuf.Empty\"6\332A\004name\202\323\344\223\002)*"
-          + "\'/v1/{name=projects/*/instanceConfigs/*}"
-          + "\022\360\001\n\034ListInstanceConfigOperations\022E.goog"
+          + "mestamp2\362\030\n\rInstanceAdmin\022\314\001\n\023ListInstan"
+          + "ceConfigs\022<.google.spanner.admin.instanc"
+          + "e.v1.ListInstanceConfigsRequest\032=.google"
+          + ".spanner.admin.instance.v1.ListInstanceC"
+          + "onfigsResponse\"8\202\323\344\223\002)\022\'/v1/{parent=proj"
+          + "ects/*}/instanceConfigs\332A\006parent\022\271\001\n\021Get"
+          + "InstanceConfig\022:.google.spanner.admin.in"
+          + "stance.v1.GetInstanceConfigRequest\0320.goo"
+          + "gle.spanner.admin.instance.v1.InstanceCo"
+          + "nfig\"6\202\323\344\223\002)\022\'/v1/{name=projects/*/insta"
+          + "nceConfigs/*}\332A\004name\022\310\002\n\024CreateInstanceC"
+          + "onfig\022=.google.spanner.admin.instance.v1"
+          + ".CreateInstanceConfigRequest\032\035.google.lo"
+          + "ngrunning.Operation\"\321\001\202\323\344\223\002,\"\'/v1/{paren"
+          + "t=projects/*}/instanceConfigs:\001*\332A)paren"
+          + "t,instance_config,instance_config_id\312Ap\n"
+          + "/google.spanner.admin.instance.v1.Instan"
+          + "ceConfig\022=google.spanner.admin.instance."
+          + "v1.CreateInstanceConfigMetadata\022\312\002\n\024Upda"
+          + "teInstanceConfig\022=.google.spanner.admin."
+          + "instance.v1.UpdateInstanceConfigRequest\032"
+          + "\035.google.longrunning.Operation\"\323\001\202\323\344\223\002<2"
+          + "7/v1/{instance_config.name=projects/*/in"
+          + "stanceConfigs/*}:\001*\332A\033instance_config,up"
+          + "date_mask\312Ap\n/google.spanner.admin.insta"
+          + "nce.v1.InstanceConfig\022=google.spanner.ad"
+          + "min.instance.v1.UpdateInstanceConfigMeta"
+          + "data\022\245\001\n\024DeleteInstanceConfig\022=.google.s"
+          + "panner.admin.instance.v1.DeleteInstanceC"
+          + "onfigRequest\032\026.google.protobuf.Empty\"6\202\323"
+          + "\344\223\002)*\'/v1/{name=projects/*/instanceConfi"
+          + "gs/*}\332A\004name\022\360\001\n\034ListInstanceConfigOpera"
+          + "tions\022E.google.spanner.admin.instance.v1"
+          + ".ListInstanceConfigOperationsRequest\032F.g"
+          + "oogle.spanner.admin.instance.v1.ListInst"
+          + "anceConfigOperationsResponse\"A\202\323\344\223\0022\0220/v"
+          + "1/{parent=projects/*}/instanceConfigOper"
+          + "ations\332A\006parent\022\264\001\n\rListInstances\0226.goog"
           + "le.spanner.admin.instance.v1.ListInstanc"
-          + "eConfigOperationsRequest\032F.google.spanne"
-          + "r.admin.instance.v1.ListInstanceConfigOp"
-          + "erationsResponse\"A\332A\006parent\202\323\344\223\0022\0220/v1/{"
-          + "parent=projects/*}/instanceConfigOperati"
-          + "ons\022\264\001\n\rListInstances\0226.google.spanner.a"
-          + "dmin.instance.v1.ListInstancesRequest\0327."
-          + "google.spanner.admin.instance.v1.ListIns"
-          + "tancesResponse\"2\332A\006parent\202\323\344\223\002#\022!/v1/{pa"
-          + "rent=projects/*}/instances\022\241\001\n\013GetInstan"
-          + "ce\0224.google.spanner.admin.instance.v1.Ge"
-          + "tInstanceRequest\032*.google.spanner.admin."
-          + "instance.v1.Instance\"0\332A\004name\202\323\344\223\002#\022!/v1"
-          + "/{name=projects/*/instances/*}\022\234\002\n\016Creat"
-          + "eInstance\0227.google.spanner.admin.instanc"
-          + "e.v1.CreateInstanceRequest\032\035.google.long"
-          + "running.Operation\"\261\001\312Ad\n)google.spanner."
-          + "admin.instance.v1.Instance\0227google.spann"
-          + "er.admin.instance.v1.CreateInstanceMetad"
-          + "ata\332A\033parent,instance_id,instance\202\323\344\223\002&\""
-          + "!/v1/{parent=projects/*}/instances:\001*\022\235\002"
-          + "\n\016UpdateInstance\0227.google.spanner.admin."
-          + "instance.v1.UpdateInstanceRequest\032\035.goog"
-          + "le.longrunning.Operation\"\262\001\312Ad\n)google.s"
-          + "panner.admin.instance.v1.Instance\0227googl"
-          + "e.spanner.admin.instance.v1.UpdateInstan"
-          + "ceMetadata\332A\023instance,field_mask\202\323\344\223\002/2*"
-          + "/v1/{instance.name=projects/*/instances/"
-          + "*}:\001*\022\223\001\n\016DeleteInstance\0227.google.spanne"
-          + "r.admin.instance.v1.DeleteInstanceReques"
-          + "t\032\026.google.protobuf.Empty\"0\332A\004name\202\323\344\223\002#"
-          + "*!/v1/{name=projects/*/instances/*}\022\232\001\n\014"
-          + "SetIamPolicy\022\".google.iam.v1.SetIamPolic"
-          + "yRequest\032\025.google.iam.v1.Policy\"O\332A\017reso"
-          + "urce,policy\202\323\344\223\0027\"2/v1/{resource=project"
-          + "s/*/instances/*}:setIamPolicy:\001*\022\223\001\n\014Get"
-          + "IamPolicy\022\".google.iam.v1.GetIamPolicyRe"
-          + "quest\032\025.google.iam.v1.Policy\"H\332A\010resourc"
-          + "e\202\323\344\223\0027\"2/v1/{resource=projects/*/instan"
-          + "ces/*}:getIamPolicy:\001*\022\305\001\n\022TestIamPermis"
-          + "sions\022(.google.iam.v1.TestIamPermissions"
-          + "Request\032).google.iam.v1.TestIamPermissio"
-          + "nsResponse\"Z\332A\024resource,permissions\202\323\344\223\002"
-          + "=\"8/v1/{resource=projects/*/instances/*}"
-          + ":testIamPermissions:\001*\032x\312A\026spanner.googl"
-          + "eapis.com\322A\\https://www.googleapis.com/a"
-          + "uth/cloud-platform,https://www.googleapi"
-          + "s.com/auth/spanner.adminB\213\002\n$com.google."
-          + "spanner.admin.instance.v1B\031SpannerInstan"
-          + "ceAdminProtoP\001ZFcloud.google.com/go/span"
-          + "ner/admin/instance/apiv1/instancepb;inst"
-          + "ancepb\252\002&Google.Cloud.Spanner.Admin.Inst"
-          + "ance.V1\312\002&Google\\Cloud\\Spanner\\Admin\\Ins"
-          + "tance\\V1\352\002+Google::Cloud::Spanner::Admin"
-          + "::Instance::V1b\006proto3"
+          + "esRequest\0327.google.spanner.admin.instanc"
+          + "e.v1.ListInstancesResponse\"2\202\323\344\223\002#\022!/v1/"
+          + "{parent=projects/*}/instances\332A\006parent\022\241"
+          + "\001\n\013GetInstance\0224.google.spanner.admin.in"
+          + "stance.v1.GetInstanceRequest\032*.google.sp"
+          + "anner.admin.instance.v1.Instance\"0\202\323\344\223\002#"
+          + "\022!/v1/{name=projects/*/instances/*}\332A\004na"
+          + "me\022\234\002\n\016CreateInstance\0227.google.spanner.a"
+          + "dmin.instance.v1.CreateInstanceRequest\032\035"
+          + ".google.longrunning.Operation\"\261\001\202\323\344\223\002&\"!"
+          + "/v1/{parent=projects/*}/instances:\001*\332A\033p"
+          + "arent,instance_id,instance\312Ad\n)google.sp"
+          + "anner.admin.instance.v1.Instance\0227google"
+          + ".spanner.admin.instance.v1.CreateInstanc"
+          + "eMetadata\022\235\002\n\016UpdateInstance\0227.google.sp"
+          + "anner.admin.instance.v1.UpdateInstanceRe"
+          + "quest\032\035.google.longrunning.Operation\"\262\001\202"
+          + "\323\344\223\002/2*/v1/{instance.name=projects/*/ins"
+          + "tances/*}:\001*\332A\023instance,field_mask\312Ad\n)g"
+          + "oogle.spanner.admin.instance.v1.Instance"
+          + "\0227google.spanner.admin.instance.v1.Updat"
+          + "eInstanceMetadata\022\223\001\n\016DeleteInstance\0227.g"
+          + "oogle.spanner.admin.instance.v1.DeleteIn"
+          + "stanceRequest\032\026.google.protobuf.Empty\"0\202"
+          + "\323\344\223\002#*!/v1/{name=projects/*/instances/*}"
+          + "\332A\004name\022\232\001\n\014SetIamPolicy\022\".google.iam.v1"
+          + ".SetIamPolicyRequest\032\025.google.iam.v1.Pol"
+          + "icy\"O\202\323\344\223\0027\"2/v1/{resource=projects/*/in"
+          + "stances/*}:setIamPolicy:\001*\332A\017resource,po"
+          + "licy\022\223\001\n\014GetIamPolicy\022\".google.iam.v1.Ge"
+          + "tIamPolicyRequest\032\025.google.iam.v1.Policy"
+          + "\"H\202\323\344\223\0027\"2/v1/{resource=projects/*/insta"
+          + "nces/*}:getIamPolicy:\001*\332A\010resource\022\305\001\n\022T"
+          + "estIamPermissions\022(.google.iam.v1.TestIa"
+          + "mPermissionsRequest\032).google.iam.v1.Test"
+          + "IamPermissionsResponse\"Z\202\323\344\223\002=\"8/v1/{res"
+          + "ource=projects/*/instances/*}:testIamPer"
+          + "missions:\001*\332A\024resource,permissions\032x\312A\026s"
+          + "panner.googleapis.com\322A\\https://www.goog"
+          + "leapis.com/auth/cloud-platform,https://w"
+          + "ww.googleapis.com/auth/spanner.adminB\213\002\n"
+          + "$com.google.spanner.admin.instance.v1B\031S"
+          + "pannerInstanceAdminProtoP\001ZFcloud.google"
+          + ".com/go/spanner/admin/instance/apiv1/ins"
+          + "tancepb;instancepb\252\002&Google.Cloud.Spanne"
+          + "r.Admin.Instance.V1\312\002&Google\\Cloud\\Spann"
+          + "er\\Admin\\Instance\\V1\352\002+Google::Cloud::Sp"
+          + "anner::Admin::Instance::V1b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java
index 48f2e9e1683..5a22311f981 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigMetadata.java
@@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateInstanceConfigMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java
index d2916ab0a74..9c93dda8798 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceConfigRequest.java
@@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateInstanceConfigRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_UpdateInstanceConfigRequest_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java
index 291ad67bc82..a421f384777 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceMetadata.java
@@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateInstanceMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_UpdateInstanceMetadata_descriptor;
diff --git a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java
index 3c734c86d6e..b8eaa2160d8 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java
+++ b/proto-google-cloud-spanner-admin-instance-v1/src/main/java/com/google/spanner/admin/instance/v1/UpdateInstanceRequest.java
@@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new UpdateInstanceRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.admin.instance.v1.SpannerInstanceAdminProto
         .internal_static_google_spanner_admin_instance_v1_UpdateInstanceRequest_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java
index 1bdb2f44a29..9b92cd1cb03 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsRequest.java
@@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new BatchCreateSessionsRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_BatchCreateSessionsRequest_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java
index 9a8d1c91120..a53a5644317 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchCreateSessionsResponse.java
@@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new BatchCreateSessionsResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_BatchCreateSessionsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java
deleted file mode 100644
index ce7b0ed7634..00000000000
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequest.java
+++ /dev/null
@@ -1,1435 +0,0 @@
-/*
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     https://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: google/spanner/v1/spanner.proto
-
-package com.google.spanner.v1;
-
-/**
- *
- *
- * 
- * The request for [BatchWrite][Spanner.BatchWrite].
- * 
- * - * Protobuf type {@code google.spanner.v1.BatchWriteRequest} - */ -public final class BatchWriteRequest extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchWriteRequest) - BatchWriteRequestOrBuilder { - private static final long serialVersionUID = 0L; - // Use BatchWriteRequest.newBuilder() to construct. - private BatchWriteRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private BatchWriteRequest() { - session_ = ""; - mutations_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BatchWriteRequest(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.google.spanner.v1.BatchWriteRequest.class, - com.google.spanner.v1.BatchWriteRequest.Builder.class); - } - - public static final int SESSION_FIELD_NUMBER = 1; - - @SuppressWarnings("serial") - private volatile java.lang.Object session_ = ""; - /** - * - * - *
-   * The session in which the batch request is to be run.
-   * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @return The session. - */ - @java.lang.Override - public java.lang.String getSession() { - java.lang.Object ref = session_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - session_ = s; - return s; - } - } - /** - * - * - *
-   * The session in which the batch request is to be run.
-   * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @return The bytes for session. - */ - @java.lang.Override - public com.google.protobuf.ByteString getSessionBytes() { - java.lang.Object ref = session_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - session_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int MUTATIONS_FIELD_NUMBER = 2; - - @SuppressWarnings("serial") - private java.util.List mutations_; - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - @java.lang.Override - public java.util.List getMutationsList() { - return mutations_; - } - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - @java.lang.Override - public java.util.List - getMutationsOrBuilderList() { - return mutations_; - } - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - @java.lang.Override - public int getMutationsCount() { - return mutations_.size(); - } - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - @java.lang.Override - public com.google.spanner.v1.Mutation getMutations(int index) { - return mutations_.get(index); - } - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - @java.lang.Override - public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) { - return mutations_.get(index); - } - - public static final int REQUEST_OPTIONS_FIELD_NUMBER = 3; - private com.google.spanner.v1.RequestOptions requestOptions_; - /** - * - * - *
-   * Common options for this request.
-   * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - * - * @return Whether the requestOptions field is set. - */ - @java.lang.Override - public boolean hasRequestOptions() { - return requestOptions_ != null; - } - /** - * - * - *
-   * Common options for this request.
-   * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - * - * @return The requestOptions. - */ - @java.lang.Override - public com.google.spanner.v1.RequestOptions getRequestOptions() { - return requestOptions_ == null - ? com.google.spanner.v1.RequestOptions.getDefaultInstance() - : requestOptions_; - } - /** - * - * - *
-   * Common options for this request.
-   * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - @java.lang.Override - public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder() { - return requestOptions_ == null - ? com.google.spanner.v1.RequestOptions.getDefaultInstance() - : requestOptions_; - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, session_); - } - for (int i = 0; i < mutations_.size(); i++) { - output.writeMessage(2, mutations_.get(i)); - } - if (requestOptions_ != null) { - output.writeMessage(3, getRequestOptions()); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(session_)) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, session_); - } - for (int i = 0; i < mutations_.size(); i++) { - size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, mutations_.get(i)); - } - if (requestOptions_ != null) { - size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getRequestOptions()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.google.spanner.v1.BatchWriteRequest)) { - return super.equals(obj); - } - com.google.spanner.v1.BatchWriteRequest other = (com.google.spanner.v1.BatchWriteRequest) obj; - - if (!getSession().equals(other.getSession())) return false; - if (!getMutationsList().equals(other.getMutationsList())) return false; - if (hasRequestOptions() != other.hasRequestOptions()) return false; - if (hasRequestOptions()) { - if (!getRequestOptions().equals(other.getRequestOptions())) return false; - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + SESSION_FIELD_NUMBER; - hash = (53 * hash) + getSession().hashCode(); - if (getMutationsCount() > 0) { - hash = (37 * hash) + MUTATIONS_FIELD_NUMBER; - hash = (53 * hash) + getMutationsList().hashCode(); - } - if (hasRequestOptions()) { - hash = (37 * hash) + REQUEST_OPTIONS_FIELD_NUMBER; - hash = (53 * hash) + getRequestOptions().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom(java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteRequest parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static com.google.spanner.v1.BatchWriteRequest parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static com.google.spanner.v1.BatchWriteRequest parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(com.google.spanner.v1.BatchWriteRequest prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * - * - *
-   * The request for [BatchWrite][Spanner.BatchWrite].
-   * 
- * - * Protobuf type {@code google.spanner.v1.BatchWriteRequest} - */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchWriteRequest) - com.google.spanner.v1.BatchWriteRequestOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteRequest_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.google.spanner.v1.BatchWriteRequest.class, - com.google.spanner.v1.BatchWriteRequest.Builder.class); - } - - // Construct using com.google.spanner.v1.BatchWriteRequest.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - session_ = ""; - if (mutationsBuilder_ == null) { - mutations_ = java.util.Collections.emptyList(); - } else { - mutations_ = null; - mutationsBuilder_.clear(); - } - bitField0_ = (bitField0_ & ~0x00000002); - requestOptions_ = null; - if (requestOptionsBuilder_ != null) { - requestOptionsBuilder_.dispose(); - requestOptionsBuilder_ = null; - } - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteRequest_descriptor; - } - - @java.lang.Override - public com.google.spanner.v1.BatchWriteRequest getDefaultInstanceForType() { - return com.google.spanner.v1.BatchWriteRequest.getDefaultInstance(); - } - - @java.lang.Override - public com.google.spanner.v1.BatchWriteRequest build() { - com.google.spanner.v1.BatchWriteRequest result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public com.google.spanner.v1.BatchWriteRequest buildPartial() { - com.google.spanner.v1.BatchWriteRequest result = - new com.google.spanner.v1.BatchWriteRequest(this); - buildPartialRepeatedFields(result); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartialRepeatedFields(com.google.spanner.v1.BatchWriteRequest result) { - if (mutationsBuilder_ == null) { - if (((bitField0_ & 0x00000002) != 0)) { - mutations_ = java.util.Collections.unmodifiableList(mutations_); - bitField0_ = (bitField0_ & ~0x00000002); - } - result.mutations_ = mutations_; - } else { - result.mutations_ = mutationsBuilder_.build(); - } - } - - private void buildPartial0(com.google.spanner.v1.BatchWriteRequest result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000001) != 0)) { - result.session_ = session_; - } - if (((from_bitField0_ & 0x00000004) != 0)) { - result.requestOptions_ = - requestOptionsBuilder_ == null ? requestOptions_ : requestOptionsBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.google.spanner.v1.BatchWriteRequest) { - return mergeFrom((com.google.spanner.v1.BatchWriteRequest) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.google.spanner.v1.BatchWriteRequest other) { - if (other == com.google.spanner.v1.BatchWriteRequest.getDefaultInstance()) return this; - if (!other.getSession().isEmpty()) { - session_ = other.session_; - bitField0_ |= 0x00000001; - onChanged(); - } - if (mutationsBuilder_ == null) { - if (!other.mutations_.isEmpty()) { - if (mutations_.isEmpty()) { - mutations_ = other.mutations_; - bitField0_ = (bitField0_ & ~0x00000002); - } else { - ensureMutationsIsMutable(); - mutations_.addAll(other.mutations_); - } - onChanged(); - } - } else { - if (!other.mutations_.isEmpty()) { - if (mutationsBuilder_.isEmpty()) { - mutationsBuilder_.dispose(); - mutationsBuilder_ = null; - mutations_ = other.mutations_; - bitField0_ = (bitField0_ & ~0x00000002); - mutationsBuilder_ = - com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders - ? getMutationsFieldBuilder() - : null; - } else { - mutationsBuilder_.addAllMessages(other.mutations_); - } - } - } - if (other.hasRequestOptions()) { - mergeRequestOptions(other.getRequestOptions()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: - { - session_ = input.readStringRequireUtf8(); - bitField0_ |= 0x00000001; - break; - } // case 10 - case 18: - { - com.google.spanner.v1.Mutation m = - input.readMessage(com.google.spanner.v1.Mutation.parser(), extensionRegistry); - if (mutationsBuilder_ == null) { - ensureMutationsIsMutable(); - mutations_.add(m); - } else { - mutationsBuilder_.addMessage(m); - } - break; - } // case 18 - case 26: - { - input.readMessage(getRequestOptionsFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000004; - break; - } // case 26 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private java.lang.Object session_ = ""; - /** - * - * - *
-     * The session in which the batch request is to be run.
-     * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @return The session. - */ - public java.lang.String getSession() { - java.lang.Object ref = session_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - session_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * - * - *
-     * The session in which the batch request is to be run.
-     * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @return The bytes for session. - */ - public com.google.protobuf.ByteString getSessionBytes() { - java.lang.Object ref = session_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); - session_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * - * - *
-     * The session in which the batch request is to be run.
-     * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @param value The session to set. - * @return This builder for chaining. - */ - public Builder setSession(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - session_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - /** - * - * - *
-     * The session in which the batch request is to be run.
-     * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @return This builder for chaining. - */ - public Builder clearSession() { - session_ = getDefaultInstance().getSession(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - /** - * - * - *
-     * The session in which the batch request is to be run.
-     * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @param value The bytes for session to set. - * @return This builder for chaining. - */ - public Builder setSessionBytes(com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - session_ = value; - bitField0_ |= 0x00000001; - onChanged(); - return this; - } - - private java.util.List mutations_ = - java.util.Collections.emptyList(); - - private void ensureMutationsIsMutable() { - if (!((bitField0_ & 0x00000002) != 0)) { - mutations_ = new java.util.ArrayList(mutations_); - bitField0_ |= 0x00000002; - } - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.google.spanner.v1.Mutation, - com.google.spanner.v1.Mutation.Builder, - com.google.spanner.v1.MutationOrBuilder> - mutationsBuilder_; - - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public java.util.List getMutationsList() { - if (mutationsBuilder_ == null) { - return java.util.Collections.unmodifiableList(mutations_); - } else { - return mutationsBuilder_.getMessageList(); - } - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public int getMutationsCount() { - if (mutationsBuilder_ == null) { - return mutations_.size(); - } else { - return mutationsBuilder_.getCount(); - } - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public com.google.spanner.v1.Mutation getMutations(int index) { - if (mutationsBuilder_ == null) { - return mutations_.get(index); - } else { - return mutationsBuilder_.getMessage(index); - } - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder setMutations(int index, com.google.spanner.v1.Mutation value) { - if (mutationsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureMutationsIsMutable(); - mutations_.set(index, value); - onChanged(); - } else { - mutationsBuilder_.setMessage(index, value); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder setMutations(int index, com.google.spanner.v1.Mutation.Builder builderForValue) { - if (mutationsBuilder_ == null) { - ensureMutationsIsMutable(); - mutations_.set(index, builderForValue.build()); - onChanged(); - } else { - mutationsBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder addMutations(com.google.spanner.v1.Mutation value) { - if (mutationsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureMutationsIsMutable(); - mutations_.add(value); - onChanged(); - } else { - mutationsBuilder_.addMessage(value); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder addMutations(int index, com.google.spanner.v1.Mutation value) { - if (mutationsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureMutationsIsMutable(); - mutations_.add(index, value); - onChanged(); - } else { - mutationsBuilder_.addMessage(index, value); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder addMutations(com.google.spanner.v1.Mutation.Builder builderForValue) { - if (mutationsBuilder_ == null) { - ensureMutationsIsMutable(); - mutations_.add(builderForValue.build()); - onChanged(); - } else { - mutationsBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder addMutations(int index, com.google.spanner.v1.Mutation.Builder builderForValue) { - if (mutationsBuilder_ == null) { - ensureMutationsIsMutable(); - mutations_.add(index, builderForValue.build()); - onChanged(); - } else { - mutationsBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder addAllMutations( - java.lang.Iterable values) { - if (mutationsBuilder_ == null) { - ensureMutationsIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll(values, mutations_); - onChanged(); - } else { - mutationsBuilder_.addAllMessages(values); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder clearMutations() { - if (mutationsBuilder_ == null) { - mutations_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000002); - onChanged(); - } else { - mutationsBuilder_.clear(); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public Builder removeMutations(int index) { - if (mutationsBuilder_ == null) { - ensureMutationsIsMutable(); - mutations_.remove(index); - onChanged(); - } else { - mutationsBuilder_.remove(index); - } - return this; - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public com.google.spanner.v1.Mutation.Builder getMutationsBuilder(int index) { - return getMutationsFieldBuilder().getBuilder(index); - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index) { - if (mutationsBuilder_ == null) { - return mutations_.get(index); - } else { - return mutationsBuilder_.getMessageOrBuilder(index); - } - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public java.util.List - getMutationsOrBuilderList() { - if (mutationsBuilder_ != null) { - return mutationsBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(mutations_); - } - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public com.google.spanner.v1.Mutation.Builder addMutationsBuilder() { - return getMutationsFieldBuilder() - .addBuilder(com.google.spanner.v1.Mutation.getDefaultInstance()); - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public com.google.spanner.v1.Mutation.Builder addMutationsBuilder(int index) { - return getMutationsFieldBuilder() - .addBuilder(index, com.google.spanner.v1.Mutation.getDefaultInstance()); - } - /** - * - * - *
-     * The mutations to be applied non-atomically.
-     * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - public java.util.List getMutationsBuilderList() { - return getMutationsFieldBuilder().getBuilderList(); - } - - private com.google.protobuf.RepeatedFieldBuilderV3< - com.google.spanner.v1.Mutation, - com.google.spanner.v1.Mutation.Builder, - com.google.spanner.v1.MutationOrBuilder> - getMutationsFieldBuilder() { - if (mutationsBuilder_ == null) { - mutationsBuilder_ = - new com.google.protobuf.RepeatedFieldBuilderV3< - com.google.spanner.v1.Mutation, - com.google.spanner.v1.Mutation.Builder, - com.google.spanner.v1.MutationOrBuilder>( - mutations_, ((bitField0_ & 0x00000002) != 0), getParentForChildren(), isClean()); - mutations_ = null; - } - return mutationsBuilder_; - } - - private com.google.spanner.v1.RequestOptions requestOptions_; - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.RequestOptions, - com.google.spanner.v1.RequestOptions.Builder, - com.google.spanner.v1.RequestOptionsOrBuilder> - requestOptionsBuilder_; - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - * - * @return Whether the requestOptions field is set. - */ - public boolean hasRequestOptions() { - return ((bitField0_ & 0x00000004) != 0); - } - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - * - * @return The requestOptions. - */ - public com.google.spanner.v1.RequestOptions getRequestOptions() { - if (requestOptionsBuilder_ == null) { - return requestOptions_ == null - ? com.google.spanner.v1.RequestOptions.getDefaultInstance() - : requestOptions_; - } else { - return requestOptionsBuilder_.getMessage(); - } - } - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - public Builder setRequestOptions(com.google.spanner.v1.RequestOptions value) { - if (requestOptionsBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - requestOptions_ = value; - } else { - requestOptionsBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - public Builder setRequestOptions(com.google.spanner.v1.RequestOptions.Builder builderForValue) { - if (requestOptionsBuilder_ == null) { - requestOptions_ = builderForValue.build(); - } else { - requestOptionsBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - public Builder mergeRequestOptions(com.google.spanner.v1.RequestOptions value) { - if (requestOptionsBuilder_ == null) { - if (((bitField0_ & 0x00000004) != 0) - && requestOptions_ != null - && requestOptions_ != com.google.spanner.v1.RequestOptions.getDefaultInstance()) { - getRequestOptionsBuilder().mergeFrom(value); - } else { - requestOptions_ = value; - } - } else { - requestOptionsBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - public Builder clearRequestOptions() { - bitField0_ = (bitField0_ & ~0x00000004); - requestOptions_ = null; - if (requestOptionsBuilder_ != null) { - requestOptionsBuilder_.dispose(); - requestOptionsBuilder_ = null; - } - onChanged(); - return this; - } - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - public com.google.spanner.v1.RequestOptions.Builder getRequestOptionsBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getRequestOptionsFieldBuilder().getBuilder(); - } - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder() { - if (requestOptionsBuilder_ != null) { - return requestOptionsBuilder_.getMessageOrBuilder(); - } else { - return requestOptions_ == null - ? com.google.spanner.v1.RequestOptions.getDefaultInstance() - : requestOptions_; - } - } - /** - * - * - *
-     * Common options for this request.
-     * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - private com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.RequestOptions, - com.google.spanner.v1.RequestOptions.Builder, - com.google.spanner.v1.RequestOptionsOrBuilder> - getRequestOptionsFieldBuilder() { - if (requestOptionsBuilder_ == null) { - requestOptionsBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - com.google.spanner.v1.RequestOptions, - com.google.spanner.v1.RequestOptions.Builder, - com.google.spanner.v1.RequestOptionsOrBuilder>( - getRequestOptions(), getParentForChildren(), isClean()); - requestOptions_ = null; - } - return requestOptionsBuilder_; - } - - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchWriteRequest) - } - - // @@protoc_insertion_point(class_scope:google.spanner.v1.BatchWriteRequest) - private static final com.google.spanner.v1.BatchWriteRequest DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new com.google.spanner.v1.BatchWriteRequest(); - } - - public static com.google.spanner.v1.BatchWriteRequest getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public BatchWriteRequest parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public com.google.spanner.v1.BatchWriteRequest getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } -} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java deleted file mode 100644 index 155fcb2c811..00000000000 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteRequestOrBuilder.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/spanner/v1/spanner.proto - -package com.google.spanner.v1; - -public interface BatchWriteRequestOrBuilder - extends - // @@protoc_insertion_point(interface_extends:google.spanner.v1.BatchWriteRequest) - com.google.protobuf.MessageOrBuilder { - - /** - * - * - *
-   * The session in which the batch request is to be run.
-   * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @return The session. - */ - java.lang.String getSession(); - /** - * - * - *
-   * The session in which the batch request is to be run.
-   * 
- * - * - * string session = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } - * - * - * @return The bytes for session. - */ - com.google.protobuf.ByteString getSessionBytes(); - - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - java.util.List getMutationsList(); - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - com.google.spanner.v1.Mutation getMutations(int index); - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - int getMutationsCount(); - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - java.util.List getMutationsOrBuilderList(); - /** - * - * - *
-   * The mutations to be applied non-atomically.
-   * 
- * - * - * repeated .google.spanner.v1.Mutation mutations = 2 [(.google.api.field_behavior) = REQUIRED]; - * - */ - com.google.spanner.v1.MutationOrBuilder getMutationsOrBuilder(int index); - - /** - * - * - *
-   * Common options for this request.
-   * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - * - * @return Whether the requestOptions field is set. - */ - boolean hasRequestOptions(); - /** - * - * - *
-   * Common options for this request.
-   * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - * - * @return The requestOptions. - */ - com.google.spanner.v1.RequestOptions getRequestOptions(); - /** - * - * - *
-   * Common options for this request.
-   * 
- * - * .google.spanner.v1.RequestOptions request_options = 3; - */ - com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder(); -} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java deleted file mode 100644 index 07a048ffc99..00000000000 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponse.java +++ /dev/null @@ -1,1221 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/spanner/v1/spanner.proto - -package com.google.spanner.v1; - -/** - * - * - *
- * The result of applying a batch of mutations.
- * 
- * - * Protobuf type {@code google.spanner.v1.BatchWriteResponse} - */ -public final class BatchWriteResponse extends com.google.protobuf.GeneratedMessageV3 - implements - // @@protoc_insertion_point(message_implements:google.spanner.v1.BatchWriteResponse) - BatchWriteResponseOrBuilder { - private static final long serialVersionUID = 0L; - // Use BatchWriteResponse.newBuilder() to construct. - private BatchWriteResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - - private BatchWriteResponse() { - indexes_ = emptyIntList(); - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance(UnusedPrivateParameter unused) { - return new BatchWriteResponse(); - } - - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteResponse_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.google.spanner.v1.BatchWriteResponse.class, - com.google.spanner.v1.BatchWriteResponse.Builder.class); - } - - public static final int INDEXES_FIELD_NUMBER = 1; - - @SuppressWarnings("serial") - private com.google.protobuf.Internal.IntList indexes_; - /** - * - * - *
-   * The mutations applied in this batch. The values index into the `mutations`
-   * field in the corresponding BatchWriteRequest.
-   * 
- * - * repeated int32 indexes = 1; - * - * @return A list containing the indexes. - */ - @java.lang.Override - public java.util.List getIndexesList() { - return indexes_; - } - /** - * - * - *
-   * The mutations applied in this batch. The values index into the `mutations`
-   * field in the corresponding BatchWriteRequest.
-   * 
- * - * repeated int32 indexes = 1; - * - * @return The count of indexes. - */ - public int getIndexesCount() { - return indexes_.size(); - } - /** - * - * - *
-   * The mutations applied in this batch. The values index into the `mutations`
-   * field in the corresponding BatchWriteRequest.
-   * 
- * - * repeated int32 indexes = 1; - * - * @param index The index of the element to return. - * @return The indexes at the given index. - */ - public int getIndexes(int index) { - return indexes_.getInt(index); - } - - private int indexesMemoizedSerializedSize = -1; - - public static final int STATUS_FIELD_NUMBER = 2; - private com.google.rpc.Status status_; - /** - * - * - *
-   * An `OK` status indicates success. Any other status indicates a failure.
-   * 
- * - * .google.rpc.Status status = 2; - * - * @return Whether the status field is set. - */ - @java.lang.Override - public boolean hasStatus() { - return status_ != null; - } - /** - * - * - *
-   * An `OK` status indicates success. Any other status indicates a failure.
-   * 
- * - * .google.rpc.Status status = 2; - * - * @return The status. - */ - @java.lang.Override - public com.google.rpc.Status getStatus() { - return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; - } - /** - * - * - *
-   * An `OK` status indicates success. Any other status indicates a failure.
-   * 
- * - * .google.rpc.Status status = 2; - */ - @java.lang.Override - public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { - return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; - } - - public static final int COMMIT_TIMESTAMP_FIELD_NUMBER = 3; - private com.google.protobuf.Timestamp commitTimestamp_; - /** - * - * - *
-   * The commit timestamp of the transaction that applied this batch.
-   * Present if `status` is `OK`, absent otherwise.
-   * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - * - * @return Whether the commitTimestamp field is set. - */ - @java.lang.Override - public boolean hasCommitTimestamp() { - return commitTimestamp_ != null; - } - /** - * - * - *
-   * The commit timestamp of the transaction that applied this batch.
-   * Present if `status` is `OK`, absent otherwise.
-   * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - * - * @return The commitTimestamp. - */ - @java.lang.Override - public com.google.protobuf.Timestamp getCommitTimestamp() { - return commitTimestamp_ == null - ? com.google.protobuf.Timestamp.getDefaultInstance() - : commitTimestamp_; - } - /** - * - * - *
-   * The commit timestamp of the transaction that applied this batch.
-   * Present if `status` is `OK`, absent otherwise.
-   * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - @java.lang.Override - public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { - return commitTimestamp_ == null - ? com.google.protobuf.Timestamp.getDefaultInstance() - : commitTimestamp_; - } - - private byte memoizedIsInitialized = -1; - - @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - getSerializedSize(); - if (getIndexesList().size() > 0) { - output.writeUInt32NoTag(10); - output.writeUInt32NoTag(indexesMemoizedSerializedSize); - } - for (int i = 0; i < indexes_.size(); i++) { - output.writeInt32NoTag(indexes_.getInt(i)); - } - if (status_ != null) { - output.writeMessage(2, getStatus()); - } - if (commitTimestamp_ != null) { - output.writeMessage(3, getCommitTimestamp()); - } - getUnknownFields().writeTo(output); - } - - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - { - int dataSize = 0; - for (int i = 0; i < indexes_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(indexes_.getInt(i)); - } - size += dataSize; - if (!getIndexesList().isEmpty()) { - size += 1; - size += com.google.protobuf.CodedOutputStream.computeInt32SizeNoTag(dataSize); - } - indexesMemoizedSerializedSize = dataSize; - } - if (status_ != null) { - size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getStatus()); - } - if (commitTimestamp_ != null) { - size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, getCommitTimestamp()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSize = size; - return size; - } - - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof com.google.spanner.v1.BatchWriteResponse)) { - return super.equals(obj); - } - com.google.spanner.v1.BatchWriteResponse other = (com.google.spanner.v1.BatchWriteResponse) obj; - - if (!getIndexesList().equals(other.getIndexesList())) return false; - if (hasStatus() != other.hasStatus()) return false; - if (hasStatus()) { - if (!getStatus().equals(other.getStatus())) return false; - } - if (hasCommitTimestamp() != other.hasCommitTimestamp()) return false; - if (hasCommitTimestamp()) { - if (!getCommitTimestamp().equals(other.getCommitTimestamp())) return false; - } - if (!getUnknownFields().equals(other.getUnknownFields())) return false; - return true; - } - - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - if (getIndexesCount() > 0) { - hash = (37 * hash) + INDEXES_FIELD_NUMBER; - hash = (53 * hash) + getIndexesList().hashCode(); - } - if (hasStatus()) { - hash = (37 * hash) + STATUS_FIELD_NUMBER; - hash = (53 * hash) + getStatus().hashCode(); - } - if (hasCommitTimestamp()) { - hash = (37 * hash) + COMMIT_TIMESTAMP_FIELD_NUMBER; - hash = (53 * hash) + getCommitTimestamp().hashCode(); - } - hash = (29 * hash) + getUnknownFields().hashCode(); - memoizedHashCode = hash; - return hash; - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom(java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom( - java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom( - byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteResponse parseDelimitedFrom( - java.io.InputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); - } - - public static com.google.spanner.v1.BatchWriteResponse parseDelimitedFrom( - java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException( - PARSER, input, extensionRegistry); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom( - com.google.protobuf.CodedInputStream input) throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); - } - - public static com.google.spanner.v1.BatchWriteResponse parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3.parseWithIOException( - PARSER, input, extensionRegistry); - } - - @java.lang.Override - public Builder newBuilderForType() { - return newBuilder(); - } - - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - - public static Builder newBuilder(com.google.spanner.v1.BatchWriteResponse prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - - @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * - * - *
-   * The result of applying a batch of mutations.
-   * 
- * - * Protobuf type {@code google.spanner.v1.BatchWriteResponse} - */ - public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder - implements - // @@protoc_insertion_point(builder_implements:google.spanner.v1.BatchWriteResponse) - com.google.spanner.v1.BatchWriteResponseOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteResponse_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.google.spanner.v1.BatchWriteResponse.class, - com.google.spanner.v1.BatchWriteResponse.Builder.class); - } - - // Construct using com.google.spanner.v1.BatchWriteResponse.newBuilder() - private Builder() {} - - private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - } - - @java.lang.Override - public Builder clear() { - super.clear(); - bitField0_ = 0; - indexes_ = emptyIntList(); - status_ = null; - if (statusBuilder_ != null) { - statusBuilder_.dispose(); - statusBuilder_ = null; - } - commitTimestamp_ = null; - if (commitTimestampBuilder_ != null) { - commitTimestampBuilder_.dispose(); - commitTimestampBuilder_ = null; - } - return this; - } - - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return com.google.spanner.v1.SpannerProto - .internal_static_google_spanner_v1_BatchWriteResponse_descriptor; - } - - @java.lang.Override - public com.google.spanner.v1.BatchWriteResponse getDefaultInstanceForType() { - return com.google.spanner.v1.BatchWriteResponse.getDefaultInstance(); - } - - @java.lang.Override - public com.google.spanner.v1.BatchWriteResponse build() { - com.google.spanner.v1.BatchWriteResponse result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } - - @java.lang.Override - public com.google.spanner.v1.BatchWriteResponse buildPartial() { - com.google.spanner.v1.BatchWriteResponse result = - new com.google.spanner.v1.BatchWriteResponse(this); - buildPartialRepeatedFields(result); - if (bitField0_ != 0) { - buildPartial0(result); - } - onBuilt(); - return result; - } - - private void buildPartialRepeatedFields(com.google.spanner.v1.BatchWriteResponse result) { - if (((bitField0_ & 0x00000001) != 0)) { - indexes_.makeImmutable(); - bitField0_ = (bitField0_ & ~0x00000001); - } - result.indexes_ = indexes_; - } - - private void buildPartial0(com.google.spanner.v1.BatchWriteResponse result) { - int from_bitField0_ = bitField0_; - if (((from_bitField0_ & 0x00000002) != 0)) { - result.status_ = statusBuilder_ == null ? status_ : statusBuilder_.build(); - } - if (((from_bitField0_ & 0x00000004) != 0)) { - result.commitTimestamp_ = - commitTimestampBuilder_ == null ? commitTimestamp_ : commitTimestampBuilder_.build(); - } - } - - @java.lang.Override - public Builder clone() { - return super.clone(); - } - - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.setField(field, value); - } - - @java.lang.Override - public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - - @java.lang.Override - public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { - return super.addRepeatedField(field, value); - } - - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.google.spanner.v1.BatchWriteResponse) { - return mergeFrom((com.google.spanner.v1.BatchWriteResponse) other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(com.google.spanner.v1.BatchWriteResponse other) { - if (other == com.google.spanner.v1.BatchWriteResponse.getDefaultInstance()) return this; - if (!other.indexes_.isEmpty()) { - if (indexes_.isEmpty()) { - indexes_ = other.indexes_; - bitField0_ = (bitField0_ & ~0x00000001); - } else { - ensureIndexesIsMutable(); - indexes_.addAll(other.indexes_); - } - onChanged(); - } - if (other.hasStatus()) { - mergeStatus(other.getStatus()); - } - if (other.hasCommitTimestamp()) { - mergeCommitTimestamp(other.getCommitTimestamp()); - } - this.mergeUnknownFields(other.getUnknownFields()); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: - { - int v = input.readInt32(); - ensureIndexesIsMutable(); - indexes_.addInt(v); - break; - } // case 8 - case 10: - { - int length = input.readRawVarint32(); - int limit = input.pushLimit(length); - ensureIndexesIsMutable(); - while (input.getBytesUntilLimit() > 0) { - indexes_.addInt(input.readInt32()); - } - input.popLimit(limit); - break; - } // case 10 - case 18: - { - input.readMessage(getStatusFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000002; - break; - } // case 18 - case 26: - { - input.readMessage(getCommitTimestampFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000004; - break; - } // case 26 - default: - { - if (!super.parseUnknownField(input, extensionRegistry, tag)) { - done = true; // was an endgroup tag - } - break; - } // default: - } // switch (tag) - } // while (!done) - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.unwrapIOException(); - } finally { - onChanged(); - } // finally - return this; - } - - private int bitField0_; - - private com.google.protobuf.Internal.IntList indexes_ = emptyIntList(); - - private void ensureIndexesIsMutable() { - if (!((bitField0_ & 0x00000001) != 0)) { - indexes_ = mutableCopy(indexes_); - bitField0_ |= 0x00000001; - } - } - /** - * - * - *
-     * The mutations applied in this batch. The values index into the `mutations`
-     * field in the corresponding BatchWriteRequest.
-     * 
- * - * repeated int32 indexes = 1; - * - * @return A list containing the indexes. - */ - public java.util.List getIndexesList() { - return ((bitField0_ & 0x00000001) != 0) - ? java.util.Collections.unmodifiableList(indexes_) - : indexes_; - } - /** - * - * - *
-     * The mutations applied in this batch. The values index into the `mutations`
-     * field in the corresponding BatchWriteRequest.
-     * 
- * - * repeated int32 indexes = 1; - * - * @return The count of indexes. - */ - public int getIndexesCount() { - return indexes_.size(); - } - /** - * - * - *
-     * The mutations applied in this batch. The values index into the `mutations`
-     * field in the corresponding BatchWriteRequest.
-     * 
- * - * repeated int32 indexes = 1; - * - * @param index The index of the element to return. - * @return The indexes at the given index. - */ - public int getIndexes(int index) { - return indexes_.getInt(index); - } - /** - * - * - *
-     * The mutations applied in this batch. The values index into the `mutations`
-     * field in the corresponding BatchWriteRequest.
-     * 
- * - * repeated int32 indexes = 1; - * - * @param index The index to set the value at. - * @param value The indexes to set. - * @return This builder for chaining. - */ - public Builder setIndexes(int index, int value) { - - ensureIndexesIsMutable(); - indexes_.setInt(index, value); - onChanged(); - return this; - } - /** - * - * - *
-     * The mutations applied in this batch. The values index into the `mutations`
-     * field in the corresponding BatchWriteRequest.
-     * 
- * - * repeated int32 indexes = 1; - * - * @param value The indexes to add. - * @return This builder for chaining. - */ - public Builder addIndexes(int value) { - - ensureIndexesIsMutable(); - indexes_.addInt(value); - onChanged(); - return this; - } - /** - * - * - *
-     * The mutations applied in this batch. The values index into the `mutations`
-     * field in the corresponding BatchWriteRequest.
-     * 
- * - * repeated int32 indexes = 1; - * - * @param values The indexes to add. - * @return This builder for chaining. - */ - public Builder addAllIndexes(java.lang.Iterable values) { - ensureIndexesIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll(values, indexes_); - onChanged(); - return this; - } - /** - * - * - *
-     * The mutations applied in this batch. The values index into the `mutations`
-     * field in the corresponding BatchWriteRequest.
-     * 
- * - * repeated int32 indexes = 1; - * - * @return This builder for chaining. - */ - public Builder clearIndexes() { - indexes_ = emptyIntList(); - bitField0_ = (bitField0_ & ~0x00000001); - onChanged(); - return this; - } - - private com.google.rpc.Status status_; - private com.google.protobuf.SingleFieldBuilderV3< - com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> - statusBuilder_; - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - * - * @return Whether the status field is set. - */ - public boolean hasStatus() { - return ((bitField0_ & 0x00000002) != 0); - } - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - * - * @return The status. - */ - public com.google.rpc.Status getStatus() { - if (statusBuilder_ == null) { - return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; - } else { - return statusBuilder_.getMessage(); - } - } - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - */ - public Builder setStatus(com.google.rpc.Status value) { - if (statusBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - status_ = value; - } else { - statusBuilder_.setMessage(value); - } - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - */ - public Builder setStatus(com.google.rpc.Status.Builder builderForValue) { - if (statusBuilder_ == null) { - status_ = builderForValue.build(); - } else { - statusBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - */ - public Builder mergeStatus(com.google.rpc.Status value) { - if (statusBuilder_ == null) { - if (((bitField0_ & 0x00000002) != 0) - && status_ != null - && status_ != com.google.rpc.Status.getDefaultInstance()) { - getStatusBuilder().mergeFrom(value); - } else { - status_ = value; - } - } else { - statusBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000002; - onChanged(); - return this; - } - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - */ - public Builder clearStatus() { - bitField0_ = (bitField0_ & ~0x00000002); - status_ = null; - if (statusBuilder_ != null) { - statusBuilder_.dispose(); - statusBuilder_ = null; - } - onChanged(); - return this; - } - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - */ - public com.google.rpc.Status.Builder getStatusBuilder() { - bitField0_ |= 0x00000002; - onChanged(); - return getStatusFieldBuilder().getBuilder(); - } - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - */ - public com.google.rpc.StatusOrBuilder getStatusOrBuilder() { - if (statusBuilder_ != null) { - return statusBuilder_.getMessageOrBuilder(); - } else { - return status_ == null ? com.google.rpc.Status.getDefaultInstance() : status_; - } - } - /** - * - * - *
-     * An `OK` status indicates success. Any other status indicates a failure.
-     * 
- * - * .google.rpc.Status status = 2; - */ - private com.google.protobuf.SingleFieldBuilderV3< - com.google.rpc.Status, com.google.rpc.Status.Builder, com.google.rpc.StatusOrBuilder> - getStatusFieldBuilder() { - if (statusBuilder_ == null) { - statusBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - com.google.rpc.Status, - com.google.rpc.Status.Builder, - com.google.rpc.StatusOrBuilder>(getStatus(), getParentForChildren(), isClean()); - status_ = null; - } - return statusBuilder_; - } - - private com.google.protobuf.Timestamp commitTimestamp_; - private com.google.protobuf.SingleFieldBuilderV3< - com.google.protobuf.Timestamp, - com.google.protobuf.Timestamp.Builder, - com.google.protobuf.TimestampOrBuilder> - commitTimestampBuilder_; - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - * - * @return Whether the commitTimestamp field is set. - */ - public boolean hasCommitTimestamp() { - return ((bitField0_ & 0x00000004) != 0); - } - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - * - * @return The commitTimestamp. - */ - public com.google.protobuf.Timestamp getCommitTimestamp() { - if (commitTimestampBuilder_ == null) { - return commitTimestamp_ == null - ? com.google.protobuf.Timestamp.getDefaultInstance() - : commitTimestamp_; - } else { - return commitTimestampBuilder_.getMessage(); - } - } - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - public Builder setCommitTimestamp(com.google.protobuf.Timestamp value) { - if (commitTimestampBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - commitTimestamp_ = value; - } else { - commitTimestampBuilder_.setMessage(value); - } - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - public Builder setCommitTimestamp(com.google.protobuf.Timestamp.Builder builderForValue) { - if (commitTimestampBuilder_ == null) { - commitTimestamp_ = builderForValue.build(); - } else { - commitTimestampBuilder_.setMessage(builderForValue.build()); - } - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - public Builder mergeCommitTimestamp(com.google.protobuf.Timestamp value) { - if (commitTimestampBuilder_ == null) { - if (((bitField0_ & 0x00000004) != 0) - && commitTimestamp_ != null - && commitTimestamp_ != com.google.protobuf.Timestamp.getDefaultInstance()) { - getCommitTimestampBuilder().mergeFrom(value); - } else { - commitTimestamp_ = value; - } - } else { - commitTimestampBuilder_.mergeFrom(value); - } - bitField0_ |= 0x00000004; - onChanged(); - return this; - } - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - public Builder clearCommitTimestamp() { - bitField0_ = (bitField0_ & ~0x00000004); - commitTimestamp_ = null; - if (commitTimestampBuilder_ != null) { - commitTimestampBuilder_.dispose(); - commitTimestampBuilder_ = null; - } - onChanged(); - return this; - } - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - public com.google.protobuf.Timestamp.Builder getCommitTimestampBuilder() { - bitField0_ |= 0x00000004; - onChanged(); - return getCommitTimestampFieldBuilder().getBuilder(); - } - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - public com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder() { - if (commitTimestampBuilder_ != null) { - return commitTimestampBuilder_.getMessageOrBuilder(); - } else { - return commitTimestamp_ == null - ? com.google.protobuf.Timestamp.getDefaultInstance() - : commitTimestamp_; - } - } - /** - * - * - *
-     * The commit timestamp of the transaction that applied this batch.
-     * Present if `status` is `OK`, absent otherwise.
-     * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - private com.google.protobuf.SingleFieldBuilderV3< - com.google.protobuf.Timestamp, - com.google.protobuf.Timestamp.Builder, - com.google.protobuf.TimestampOrBuilder> - getCommitTimestampFieldBuilder() { - if (commitTimestampBuilder_ == null) { - commitTimestampBuilder_ = - new com.google.protobuf.SingleFieldBuilderV3< - com.google.protobuf.Timestamp, - com.google.protobuf.Timestamp.Builder, - com.google.protobuf.TimestampOrBuilder>( - getCommitTimestamp(), getParentForChildren(), isClean()); - commitTimestamp_ = null; - } - return commitTimestampBuilder_; - } - - @java.lang.Override - public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); - } - - // @@protoc_insertion_point(builder_scope:google.spanner.v1.BatchWriteResponse) - } - - // @@protoc_insertion_point(class_scope:google.spanner.v1.BatchWriteResponse) - private static final com.google.spanner.v1.BatchWriteResponse DEFAULT_INSTANCE; - - static { - DEFAULT_INSTANCE = new com.google.spanner.v1.BatchWriteResponse(); - } - - public static com.google.spanner.v1.BatchWriteResponse getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - @java.lang.Override - public BatchWriteResponse parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - Builder builder = newBuilder(); - try { - builder.mergeFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(builder.buildPartial()); - } catch (com.google.protobuf.UninitializedMessageException e) { - throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException(e) - .setUnfinishedMessage(builder.buildPartial()); - } - return builder.buildPartial(); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - @java.lang.Override - public com.google.spanner.v1.BatchWriteResponse getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } -} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java deleted file mode 100644 index 19b07b7205e..00000000000 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BatchWriteResponseOrBuilder.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: google/spanner/v1/spanner.proto - -package com.google.spanner.v1; - -public interface BatchWriteResponseOrBuilder - extends - // @@protoc_insertion_point(interface_extends:google.spanner.v1.BatchWriteResponse) - com.google.protobuf.MessageOrBuilder { - - /** - * - * - *
-   * The mutations applied in this batch. The values index into the `mutations`
-   * field in the corresponding BatchWriteRequest.
-   * 
- * - * repeated int32 indexes = 1; - * - * @return A list containing the indexes. - */ - java.util.List getIndexesList(); - /** - * - * - *
-   * The mutations applied in this batch. The values index into the `mutations`
-   * field in the corresponding BatchWriteRequest.
-   * 
- * - * repeated int32 indexes = 1; - * - * @return The count of indexes. - */ - int getIndexesCount(); - /** - * - * - *
-   * The mutations applied in this batch. The values index into the `mutations`
-   * field in the corresponding BatchWriteRequest.
-   * 
- * - * repeated int32 indexes = 1; - * - * @param index The index of the element to return. - * @return The indexes at the given index. - */ - int getIndexes(int index); - - /** - * - * - *
-   * An `OK` status indicates success. Any other status indicates a failure.
-   * 
- * - * .google.rpc.Status status = 2; - * - * @return Whether the status field is set. - */ - boolean hasStatus(); - /** - * - * - *
-   * An `OK` status indicates success. Any other status indicates a failure.
-   * 
- * - * .google.rpc.Status status = 2; - * - * @return The status. - */ - com.google.rpc.Status getStatus(); - /** - * - * - *
-   * An `OK` status indicates success. Any other status indicates a failure.
-   * 
- * - * .google.rpc.Status status = 2; - */ - com.google.rpc.StatusOrBuilder getStatusOrBuilder(); - - /** - * - * - *
-   * The commit timestamp of the transaction that applied this batch.
-   * Present if `status` is `OK`, absent otherwise.
-   * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - * - * @return Whether the commitTimestamp field is set. - */ - boolean hasCommitTimestamp(); - /** - * - * - *
-   * The commit timestamp of the transaction that applied this batch.
-   * Present if `status` is `OK`, absent otherwise.
-   * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - * - * @return The commitTimestamp. - */ - com.google.protobuf.Timestamp getCommitTimestamp(); - /** - * - * - *
-   * The commit timestamp of the transaction that applied this batch.
-   * Present if `status` is `OK`, absent otherwise.
-   * 
- * - * .google.protobuf.Timestamp commit_timestamp = 3; - */ - com.google.protobuf.TimestampOrBuilder getCommitTimestampOrBuilder(); -} diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java index fae0074b1ca..d676fd87ea6 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/BeginTransactionRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new BeginTransactionRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_BeginTransactionRequest_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java index a052d9059b4..9d5d7d5891b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequest.java @@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CommitRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CommitRequest_descriptor; @@ -64,8 +69,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } private int transactionCase_ = 0; - - @SuppressWarnings("serial") private java.lang.Object transaction_; public enum TransactionCase diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java index c55778357bb..67704563b20 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitRequestOrBuilder.java @@ -247,5 +247,5 @@ public interface CommitRequestOrBuilder */ com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder(); - com.google.spanner.v1.CommitRequest.TransactionCase getTransactionCase(); + public com.google.spanner.v1.CommitRequest.TransactionCase getTransactionCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java index f3331b717f4..89661b86be0 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CommitResponse.java @@ -45,6 +45,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CommitResponse(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_descriptor; @@ -111,6 +116,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CommitStats(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.CommitResponseProto .internal_static_google_spanner_v1_CommitResponse_CommitStats_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java index 68c912c6598..fe3fc6e7e6b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/CreateSessionRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new CreateSessionRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_CreateSessionRequest_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java index 26f385c994c..f285dd8124e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/DeleteSessionRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new DeleteSessionRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_DeleteSessionRequest_descriptor; 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 3c9f88a1e4e..c4392561ad7 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 @@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ExecuteBatchDmlRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_descriptor; @@ -98,16 +103,12 @@ public interface StatementOrBuilder * *
      * Parameter names and values that bind to placeholders in the DML string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -121,16 +122,12 @@ public interface StatementOrBuilder * *
      * Parameter names and values that bind to placeholders in the DML string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -144,16 +141,12 @@ public interface StatementOrBuilder * *
      * Parameter names and values that bind to placeholders in the DML string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -168,7 +161,6 @@ public interface StatementOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -185,7 +177,6 @@ public interface StatementOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -205,7 +196,6 @@ public interface StatementOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -222,7 +212,6 @@ public interface StatementOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -243,7 +232,6 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -283,6 +271,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new Statement(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlRequest_Statement_descriptor; @@ -367,16 +360,12 @@ public com.google.protobuf.ByteString getSqlBytes() { * *
      * Parameter names and values that bind to placeholders in the DML string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -393,16 +382,12 @@ public boolean hasParams() { * *
      * Parameter names and values that bind to placeholders in the DML string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -419,16 +404,12 @@ public com.google.protobuf.Struct getParams() { * *
      * Parameter names and values that bind to placeholders in the DML string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The
      * same parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -476,7 +457,6 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -505,7 +485,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -525,7 +504,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -553,7 +531,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1127,16 +1104,12 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1152,16 +1125,12 @@ public boolean hasParams() { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1181,16 +1150,12 @@ public com.google.protobuf.Struct getParams() { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1214,16 +1179,12 @@ public Builder setParams(com.google.protobuf.Struct value) { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1244,16 +1205,12 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1280,16 +1237,12 @@ public Builder mergeParams(com.google.protobuf.Struct value) { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1310,16 +1263,12 @@ public Builder clearParams() { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1335,16 +1284,12 @@ public com.google.protobuf.Struct.Builder getParamsBuilder() { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1362,16 +1307,12 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { * *
        * Parameter names and values that bind to placeholders in the DML string.
-       *
        * A parameter placeholder consists of the `@` character followed by the
        * parameter name (for example, `@firstName`). Parameter names can contain
        * letters, numbers, and underscores.
-       *
        * Parameters can appear anywhere that a literal value is expected.  The
        * same parameter name can be used more than once, for example:
-       *
        * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-       *
        * It is an error to execute a SQL statement with unbound parameters.
        * 
* @@ -1430,7 +1371,6 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1459,7 +1399,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1479,7 +1418,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1507,7 +1445,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1541,7 +1478,6 @@ public Builder clearParamTypes() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1570,7 +1506,6 @@ public java.util.Map getMutablePar * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1597,7 +1532,6 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteBatchDmlRequest.Statement.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1739,7 +1673,6 @@ public com.google.protobuf.ByteString getSessionBytes() { * *
    * Required. The transaction to use. Must be a read-write transaction.
-   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -1760,7 +1693,6 @@ public boolean hasTransaction() {
    *
    * 
    * Required. The transaction to use. Must be a read-write transaction.
-   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -1783,7 +1715,6 @@ public com.google.spanner.v1.TransactionSelector getTransaction() {
    *
    * 
    * Required. The transaction to use. Must be a read-write transaction.
-   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -1812,7 +1743,6 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
    * serially, such that the effects of statement `i` are visible to statement
    * `i+1`. Each statement must be a DML statement. Execution stops at the
    * first failed statement; the remaining statements are not executed.
-   *
    * Callers must provide at least one statement.
    * 
* @@ -1833,7 +1763,6 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -1854,7 +1783,6 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -1874,7 +1802,6 @@ public int getStatementsCount() { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -1894,7 +1821,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement getStatements(int * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -1917,7 +1843,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously @@ -2609,7 +2534,6 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { * *
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2629,7 +2553,6 @@ public boolean hasTransaction() {
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2655,7 +2578,6 @@ public com.google.spanner.v1.TransactionSelector getTransaction() {
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2683,7 +2605,6 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) {
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2709,7 +2630,6 @@ public Builder setTransaction(
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2740,7 +2660,6 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value)
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2765,7 +2684,6 @@ public Builder clearTransaction() {
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2785,7 +2703,6 @@ public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder()
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2809,7 +2726,6 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
      *
      * 
      * Required. The transaction to use. Must be a read-write transaction.
-     *
      * To protect against replays, single-use transactions are not supported. The
      * caller must either supply an existing transaction ID or begin a new
      * transaction.
@@ -2862,7 +2778,6 @@ private void ensureStatementsIsMutable() {
      * serially, such that the effects of statement `i` are visible to statement
      * `i+1`. Each statement must be a DML statement. Execution stops at the
      * first failed statement; the remaining statements are not executed.
-     *
      * Callers must provide at least one statement.
      * 
* @@ -2886,7 +2801,6 @@ private void ensureStatementsIsMutable() { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -2909,7 +2823,6 @@ public int getStatementsCount() { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -2932,7 +2845,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement getStatements(int * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -2962,7 +2874,6 @@ public Builder setStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -2989,7 +2900,6 @@ public Builder setStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3018,7 +2928,6 @@ public Builder addStatements(com.google.spanner.v1.ExecuteBatchDmlRequest.Statem * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3048,7 +2957,6 @@ public Builder addStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3075,7 +2983,6 @@ public Builder addStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3102,7 +3009,6 @@ public Builder addStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3130,7 +3036,6 @@ public Builder addAllStatements( * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3156,7 +3061,6 @@ public Builder clearStatements() { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3182,7 +3086,6 @@ public Builder removeStatements(int index) { * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3202,7 +3105,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder getStateme * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3226,7 +3128,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3250,7 +3151,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.StatementOrBuilder getStatem * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3270,7 +3170,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3292,7 +3191,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -3330,7 +3228,6 @@ public com.google.spanner.v1.ExecuteBatchDmlRequest.Statement.Builder addStateme * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously @@ -3352,7 +3249,6 @@ public long getSeqno() { * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously @@ -3378,7 +3274,6 @@ public Builder setSeqno(long value) { * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously 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 b0ecb6ff7ca..87364106697 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 @@ -57,7 +57,6 @@ public interface ExecuteBatchDmlRequestOrBuilder * *
    * Required. The transaction to use. Must be a read-write transaction.
-   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -75,7 +74,6 @@ public interface ExecuteBatchDmlRequestOrBuilder
    *
    * 
    * Required. The transaction to use. Must be a read-write transaction.
-   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -93,7 +91,6 @@ public interface ExecuteBatchDmlRequestOrBuilder
    *
    * 
    * Required. The transaction to use. Must be a read-write transaction.
-   *
    * To protect against replays, single-use transactions are not supported. The
    * caller must either supply an existing transaction ID or begin a new
    * transaction.
@@ -113,7 +110,6 @@ public interface ExecuteBatchDmlRequestOrBuilder
    * serially, such that the effects of statement `i` are visible to statement
    * `i+1`. Each statement must be a DML statement. Execution stops at the
    * first failed statement; the remaining statements are not executed.
-   *
    * Callers must provide at least one statement.
    * 
* @@ -130,7 +126,6 @@ public interface ExecuteBatchDmlRequestOrBuilder * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -147,7 +142,6 @@ public interface ExecuteBatchDmlRequestOrBuilder * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -164,7 +158,6 @@ public interface ExecuteBatchDmlRequestOrBuilder * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -182,7 +175,6 @@ public interface ExecuteBatchDmlRequestOrBuilder * serially, such that the effects of statement `i` are visible to statement * `i+1`. Each statement must be a DML statement. Execution stops at the * first failed statement; the remaining statements are not executed. - * * Callers must provide at least one statement. *
* @@ -199,7 +191,6 @@ public interface ExecuteBatchDmlRequestOrBuilder * Required. A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java index b467bf5feb0..3e7163fe1be 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponse.java @@ -26,22 +26,16 @@ * of [ResultSet][google.spanner.v1.ResultSet] messages, one for each DML statement that has successfully * executed, in the same order as the statements in the request. If a statement * fails, the status in the response body identifies the cause of the failure. - * * To check for DML statements that failed, use the following approach: - * * 1. Check the status in the response message. The [google.rpc.Code][google.rpc.Code] enum * value `OK` indicates that all statements were executed successfully. * 2. If the status was not `OK`, check the number of result sets in the * response. If the response contains `N` [ResultSet][google.spanner.v1.ResultSet] messages, then * statement `N+1` in the request failed. - * * Example 1: - * * * Request: 5 DML statements, all executed successfully. * * Response: 5 [ResultSet][google.spanner.v1.ResultSet] messages, with the status `OK`. - * * Example 2: - * * * Request: 5 DML statements. The third statement has a syntax error. * * Response: 2 [ResultSet][google.spanner.v1.ResultSet] messages, and a syntax error (`INVALID_ARGUMENT`) * status. The number of [ResultSet][google.spanner.v1.ResultSet] messages indicates that the third @@ -70,6 +64,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ExecuteBatchDmlResponse(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteBatchDmlResponse_descriptor; @@ -97,7 +96,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -116,7 +114,6 @@ public java.util.List getResultSetsList() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -136,7 +133,6 @@ public java.util.List getResultSetsList() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -155,7 +151,6 @@ public int getResultSetsCount() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -174,7 +169,6 @@ public com.google.spanner.v1.ResultSet getResultSets(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -418,22 +412,16 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * of [ResultSet][google.spanner.v1.ResultSet] messages, one for each DML statement that has successfully * executed, in the same order as the statements in the request. If a statement * fails, the status in the response body identifies the cause of the failure. - * * To check for DML statements that failed, use the following approach: - * * 1. Check the status in the response message. The [google.rpc.Code][google.rpc.Code] enum * value `OK` indicates that all statements were executed successfully. * 2. If the status was not `OK`, check the number of result sets in the * response. If the response contains `N` [ResultSet][google.spanner.v1.ResultSet] messages, then * statement `N+1` in the request failed. - * * Example 1: - * * * Request: 5 DML statements, all executed successfully. * * Response: 5 [ResultSet][google.spanner.v1.ResultSet] messages, with the status `OK`. - * * Example 2: - * * * Request: 5 DML statements. The third statement has a syntax error. * * Response: 2 [ResultSet][google.spanner.v1.ResultSet] messages, and a syntax error (`INVALID_ARGUMENT`) * status. The number of [ResultSet][google.spanner.v1.ResultSet] messages indicates that the third @@ -700,7 +688,6 @@ private void ensureResultSetsIsMutable() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -722,7 +709,6 @@ public java.util.List getResultSetsList() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -744,7 +730,6 @@ public int getResultSetsCount() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -766,7 +751,6 @@ public com.google.spanner.v1.ResultSet getResultSets(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -794,7 +778,6 @@ public Builder setResultSets(int index, com.google.spanner.v1.ResultSet value) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -820,7 +803,6 @@ public Builder setResultSets( * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -848,7 +830,6 @@ public Builder addResultSets(com.google.spanner.v1.ResultSet value) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -876,7 +857,6 @@ public Builder addResultSets(int index, com.google.spanner.v1.ResultSet value) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -901,7 +881,6 @@ public Builder addResultSets(com.google.spanner.v1.ResultSet.Builder builderForV * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -927,7 +906,6 @@ public Builder addResultSets( * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -953,7 +931,6 @@ public Builder addAllResultSets( * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -978,7 +955,6 @@ public Builder clearResultSets() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1003,7 +979,6 @@ public Builder removeResultSets(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1021,7 +996,6 @@ public com.google.spanner.v1.ResultSet.Builder getResultSetsBuilder(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1043,7 +1017,6 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1066,7 +1039,6 @@ public com.google.spanner.v1.ResultSetOrBuilder getResultSetsOrBuilder(int index * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1085,7 +1057,6 @@ public com.google.spanner.v1.ResultSet.Builder addResultSetsBuilder() { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -1104,7 +1075,6 @@ public com.google.spanner.v1.ResultSet.Builder addResultSetsBuilder(int index) { * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java index ac45d58c2fc..b2891c067a8 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ExecuteBatchDmlResponseOrBuilder.java @@ -31,7 +31,6 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -47,7 +46,6 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -63,7 +61,6 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -79,7 +76,6 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
@@ -95,7 +91,6 @@ public interface ExecuteBatchDmlResponseOrBuilder * in the same order as the statements in the request. Each [ResultSet][google.spanner.v1.ResultSet] does * not contain any rows. The [ResultSetStats][google.spanner.v1.ResultSetStats] in each [ResultSet][google.spanner.v1.ResultSet] contain * the number of rows modified by the statement. - * * Only the first [ResultSet][google.spanner.v1.ResultSet] in the response contains valid * [ResultSetMetadata][google.spanner.v1.ResultSetMetadata]. *
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 8418e41cc38..70f4c8219c2 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 @@ -52,6 +52,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ExecuteSqlRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ExecuteSqlRequest_descriptor; @@ -249,26 +254,20 @@ public interface QueryOptionsOrBuilder * *
      * An option to control the selection of optimizer version.
-     *
      * This parameter allows individual queries to pick different query
      * optimizer versions.
-     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the
      * latest supported query optimizer version. If not specified, Cloud Spanner
      * uses the optimizer version set at the database level options. Any other
      * positive integer (from the list of supported optimizer versions)
      * overrides the default optimizer version for query execution.
-     *
      * The list of supported optimizer versions can be queried from
      * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-     *
      * Executing a SQL statement with an invalid optimizer version fails with
      * an `INVALID_ARGUMENT` error.
-     *
      * See
      * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
      * for more information on managing the query optimizer.
-     *
      * The `optimizer_version` statement hint has precedence over this setting.
      * 
* @@ -282,26 +281,20 @@ public interface QueryOptionsOrBuilder * *
      * An option to control the selection of optimizer version.
-     *
      * This parameter allows individual queries to pick different query
      * optimizer versions.
-     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the
      * latest supported query optimizer version. If not specified, Cloud Spanner
      * uses the optimizer version set at the database level options. Any other
      * positive integer (from the list of supported optimizer versions)
      * overrides the default optimizer version for query execution.
-     *
      * The list of supported optimizer versions can be queried from
      * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-     *
      * Executing a SQL statement with an invalid optimizer version fails with
      * an `INVALID_ARGUMENT` error.
-     *
      * See
      * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
      * for more information on managing the query optimizer.
-     *
      * The `optimizer_version` statement hint has precedence over this setting.
      * 
* @@ -316,26 +309,20 @@ public interface QueryOptionsOrBuilder * *
      * An option to control the selection of optimizer statistics package.
-     *
      * This parameter allows individual queries to use a different query
      * optimizer statistics package.
-     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the latest
      * generated statistics package. If not specified, Cloud Spanner uses
      * the statistics package set at the database level options, or the latest
      * package if the database option is not set.
-     *
      * The statistics package requested by the query has to be exempt from
      * garbage collection. This can be achieved with the following DDL
      * statement:
-     *
      * ```
      * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
      * ```
-     *
      * The list of available statistics packages can be queried from
      * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-     *
      * Executing a SQL statement with an invalid optimizer statistics package
      * or with a statistics package that allows garbage collection fails with
      * an `INVALID_ARGUMENT` error.
@@ -351,26 +338,20 @@ public interface QueryOptionsOrBuilder
      *
      * 
      * An option to control the selection of optimizer statistics package.
-     *
      * This parameter allows individual queries to use a different query
      * optimizer statistics package.
-     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the latest
      * generated statistics package. If not specified, Cloud Spanner uses
      * the statistics package set at the database level options, or the latest
      * package if the database option is not set.
-     *
      * The statistics package requested by the query has to be exempt from
      * garbage collection. This can be achieved with the following DDL
      * statement:
-     *
      * ```
      * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
      * ```
-     *
      * The list of available statistics packages can be queried from
      * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-     *
      * Executing a SQL statement with an invalid optimizer statistics package
      * or with a statistics package that allows garbage collection fails with
      * an `INVALID_ARGUMENT` error.
@@ -412,6 +393,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new QueryOptions();
     }
 
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+      return this.unknownFields;
+    }
+
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.SpannerProto
           .internal_static_google_spanner_v1_ExecuteSqlRequest_QueryOptions_descriptor;
@@ -436,26 +422,20 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
      *
      * 
      * An option to control the selection of optimizer version.
-     *
      * This parameter allows individual queries to pick different query
      * optimizer versions.
-     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the
      * latest supported query optimizer version. If not specified, Cloud Spanner
      * uses the optimizer version set at the database level options. Any other
      * positive integer (from the list of supported optimizer versions)
      * overrides the default optimizer version for query execution.
-     *
      * The list of supported optimizer versions can be queried from
      * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-     *
      * Executing a SQL statement with an invalid optimizer version fails with
      * an `INVALID_ARGUMENT` error.
-     *
      * See
      * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
      * for more information on managing the query optimizer.
-     *
      * The `optimizer_version` statement hint has precedence over this setting.
      * 
* @@ -480,26 +460,20 @@ public java.lang.String getOptimizerVersion() { * *
      * An option to control the selection of optimizer version.
-     *
      * This parameter allows individual queries to pick different query
      * optimizer versions.
-     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the
      * latest supported query optimizer version. If not specified, Cloud Spanner
      * uses the optimizer version set at the database level options. Any other
      * positive integer (from the list of supported optimizer versions)
      * overrides the default optimizer version for query execution.
-     *
      * The list of supported optimizer versions can be queried from
      * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-     *
      * Executing a SQL statement with an invalid optimizer version fails with
      * an `INVALID_ARGUMENT` error.
-     *
      * See
      * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
      * for more information on managing the query optimizer.
-     *
      * The `optimizer_version` statement hint has precedence over this setting.
      * 
* @@ -529,26 +503,20 @@ public com.google.protobuf.ByteString getOptimizerVersionBytes() { * *
      * An option to control the selection of optimizer statistics package.
-     *
      * This parameter allows individual queries to use a different query
      * optimizer statistics package.
-     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the latest
      * generated statistics package. If not specified, Cloud Spanner uses
      * the statistics package set at the database level options, or the latest
      * package if the database option is not set.
-     *
      * The statistics package requested by the query has to be exempt from
      * garbage collection. This can be achieved with the following DDL
      * statement:
-     *
      * ```
      * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
      * ```
-     *
      * The list of available statistics packages can be queried from
      * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-     *
      * Executing a SQL statement with an invalid optimizer statistics package
      * or with a statistics package that allows garbage collection fails with
      * an `INVALID_ARGUMENT` error.
@@ -575,26 +543,20 @@ public java.lang.String getOptimizerStatisticsPackage() {
      *
      * 
      * An option to control the selection of optimizer statistics package.
-     *
      * This parameter allows individual queries to use a different query
      * optimizer statistics package.
-     *
      * Specifying `latest` as a value instructs Cloud Spanner to use the latest
      * generated statistics package. If not specified, Cloud Spanner uses
      * the statistics package set at the database level options, or the latest
      * package if the database option is not set.
-     *
      * The statistics package requested by the query has to be exempt from
      * garbage collection. This can be achieved with the following DDL
      * statement:
-     *
      * ```
      * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
      * ```
-     *
      * The list of available statistics packages can be queried from
      * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-     *
      * Executing a SQL statement with an invalid optimizer statistics package
      * or with a statistics package that allows garbage collection fails with
      * an `INVALID_ARGUMENT` error.
@@ -997,26 +959,20 @@ public Builder mergeFrom(
        *
        * 
        * An option to control the selection of optimizer version.
-       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
-       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
-       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
-       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1040,26 +996,20 @@ public java.lang.String getOptimizerVersion() { * *
        * An option to control the selection of optimizer version.
-       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
-       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
-       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
-       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1083,26 +1033,20 @@ public com.google.protobuf.ByteString getOptimizerVersionBytes() { * *
        * An option to control the selection of optimizer version.
-       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
-       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
-       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
-       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1125,26 +1069,20 @@ public Builder setOptimizerVersion(java.lang.String value) { * *
        * An option to control the selection of optimizer version.
-       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
-       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
-       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
-       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1163,26 +1101,20 @@ public Builder clearOptimizerVersion() { * *
        * An option to control the selection of optimizer version.
-       *
        * This parameter allows individual queries to pick different query
        * optimizer versions.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the
        * latest supported query optimizer version. If not specified, Cloud Spanner
        * uses the optimizer version set at the database level options. Any other
        * positive integer (from the list of supported optimizer versions)
        * overrides the default optimizer version for query execution.
-       *
        * The list of supported optimizer versions can be queried from
        * SPANNER_SYS.SUPPORTED_OPTIMIZER_VERSIONS.
-       *
        * Executing a SQL statement with an invalid optimizer version fails with
        * an `INVALID_ARGUMENT` error.
-       *
        * See
        * https://cloud.google.com/spanner/docs/query-optimizer/manage-query-optimizer
        * for more information on managing the query optimizer.
-       *
        * The `optimizer_version` statement hint has precedence over this setting.
        * 
* @@ -1208,26 +1140,20 @@ public Builder setOptimizerVersionBytes(com.google.protobuf.ByteString value) { * *
        * An option to control the selection of optimizer statistics package.
-       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
-       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
-       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
-       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1253,26 +1179,20 @@ public java.lang.String getOptimizerStatisticsPackage() {
        *
        * 
        * An option to control the selection of optimizer statistics package.
-       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
-       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
-       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
-       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1298,26 +1218,20 @@ public com.google.protobuf.ByteString getOptimizerStatisticsPackageBytes() {
        *
        * 
        * An option to control the selection of optimizer statistics package.
-       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
-       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
-       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
-       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1342,26 +1256,20 @@ public Builder setOptimizerStatisticsPackage(java.lang.String value) {
        *
        * 
        * An option to control the selection of optimizer statistics package.
-       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
-       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
-       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
-       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1382,26 +1290,20 @@ public Builder clearOptimizerStatisticsPackage() {
        *
        * 
        * An option to control the selection of optimizer statistics package.
-       *
        * This parameter allows individual queries to use a different query
        * optimizer statistics package.
-       *
        * Specifying `latest` as a value instructs Cloud Spanner to use the latest
        * generated statistics package. If not specified, Cloud Spanner uses
        * the statistics package set at the database level options, or the latest
        * package if the database option is not set.
-       *
        * The statistics package requested by the query has to be exempt from
        * garbage collection. This can be achieved with the following DDL
        * statement:
-       *
        * ```
        * ALTER STATISTICS <package_name> SET OPTIONS (allow_gc=false)
        * ```
-       *
        * The list of available statistics packages can be queried from
        * `INFORMATION_SCHEMA.SPANNER_STATISTICS`.
-       *
        * Executing a SQL statement with an invalid optimizer statistics package
        * or with a statistics package that allows garbage collection fails with
        * an `INVALID_ARGUMENT` error.
@@ -1549,14 +1451,11 @@ public com.google.protobuf.ByteString getSessionBytes() {
    *
    * 
    * The transaction to use.
-   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
-   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
-   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -1573,14 +1472,11 @@ public boolean hasTransaction() { * *
    * The transaction to use.
-   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
-   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
-   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -1599,14 +1495,11 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { * *
    * The transaction to use.
-   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
-   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
-   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -1677,17 +1570,13 @@ public com.google.protobuf.ByteString getSqlBytes() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -1704,17 +1593,13 @@ public boolean hasParams() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -1731,17 +1616,13 @@ public com.google.protobuf.Struct getParams() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -1788,7 +1669,6 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1817,7 +1697,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1837,7 +1716,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1865,7 +1743,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1979,12 +1856,10 @@ public com.google.protobuf.ByteString getPartitionToken() { * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. - * * Required for DML statements. Ignored for queries. *
* @@ -2105,7 +1980,6 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( *
    * If this is for a partitioned query and this field is set to `true`, the
    * request will be executed via Spanner independent compute resources.
-   *
    * If the field is set to `true` but the request does not set
    * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
    * 
@@ -2905,14 +2779,11 @@ public Builder setSessionBytes(com.google.protobuf.ByteString value) { * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2928,14 +2799,11 @@ public boolean hasTransaction() { * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2957,14 +2825,11 @@ public com.google.spanner.v1.TransactionSelector getTransaction() { * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -2988,14 +2853,11 @@ public Builder setTransaction(com.google.spanner.v1.TransactionSelector value) { * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -3017,14 +2879,11 @@ public Builder setTransaction( * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -3051,14 +2910,11 @@ public Builder mergeTransaction(com.google.spanner.v1.TransactionSelector value) * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -3079,14 +2935,11 @@ public Builder clearTransaction() { * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -3102,14 +2955,11 @@ public com.google.spanner.v1.TransactionSelector.Builder getTransactionBuilder() * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -3129,14 +2979,11 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * *
      * The transaction to use.
-     *
      * For queries, if none is provided, the default is a temporary read-only
      * transaction with strong concurrency.
-     *
      * Standard DML statements require a read-write transaction. To protect
      * against replays, single-use transactions are not supported.  The caller
      * must either supply an existing transaction ID or begin a new transaction.
-     *
      * Partitioned DML requires an existing Partitioned DML transaction ID.
      * 
* @@ -3276,17 +3123,13 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3302,17 +3145,13 @@ public boolean hasParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3332,17 +3171,13 @@ public com.google.protobuf.Struct getParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3366,17 +3201,13 @@ public Builder setParams(com.google.protobuf.Struct value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3397,17 +3228,13 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3434,17 +3261,13 @@ public Builder mergeParams(com.google.protobuf.Struct value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3465,17 +3288,13 @@ public Builder clearParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3491,17 +3310,13 @@ public com.google.protobuf.Struct.Builder getParamsBuilder() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3519,17 +3334,13 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names must conform
      * to the naming requirements of identifiers as specified at
      * https://cloud.google.com/spanner/docs/lexical#identifiers.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -3587,7 +3398,6 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3616,7 +3426,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3636,7 +3445,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3664,7 +3472,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3698,7 +3505,6 @@ public Builder clearParamTypes() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3727,7 +3533,6 @@ public java.util.Map getMutablePar * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -3754,7 +3559,6 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -4014,12 +3818,10 @@ public Builder clearPartitionToken() { * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. - * * Required for DML statements. Ignored for queries. *
* @@ -4038,12 +3840,10 @@ public long getSeqno() { * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. - * * Required for DML statements. Ignored for queries. *
* @@ -4066,12 +3866,10 @@ public Builder setSeqno(long value) { * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. - * * Required for DML statements. Ignored for queries. *
* @@ -4462,7 +4260,6 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( *
      * If this is for a partitioned query and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
-     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
@@ -4481,7 +4278,6 @@ public boolean getDataBoostEnabled() { *
      * If this is for a partitioned query and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
-     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
@@ -4504,7 +4300,6 @@ public Builder setDataBoostEnabled(boolean value) { *
      * If this is for a partitioned query and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
-     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
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 1bfb3f43749..832c2f3c503 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 @@ -57,14 +57,11 @@ public interface ExecuteSqlRequestOrBuilder * *
    * The transaction to use.
-   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
-   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
-   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -78,14 +75,11 @@ public interface ExecuteSqlRequestOrBuilder * *
    * The transaction to use.
-   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
-   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
-   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -99,14 +93,11 @@ public interface ExecuteSqlRequestOrBuilder * *
    * The transaction to use.
-   *
    * For queries, if none is provided, the default is a temporary read-only
    * transaction with strong concurrency.
-   *
    * Standard DML statements require a read-write transaction. To protect
    * against replays, single-use transactions are not supported.  The caller
    * must either supply an existing transaction ID or begin a new transaction.
-   *
    * Partitioned DML requires an existing Partitioned DML transaction ID.
    * 
* @@ -144,17 +135,13 @@ public interface ExecuteSqlRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -168,17 +155,13 @@ public interface ExecuteSqlRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -192,17 +175,13 @@ public interface ExecuteSqlRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names must conform
    * to the naming requirements of identifiers as specified at
    * https://cloud.google.com/spanner/docs/lexical#identifiers.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -217,7 +196,6 @@ public interface ExecuteSqlRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -234,7 +212,6 @@ public interface ExecuteSqlRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -254,7 +231,6 @@ public interface ExecuteSqlRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -271,7 +247,6 @@ public interface ExecuteSqlRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -292,7 +267,6 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.ExecuteSqlRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL statement parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -373,12 +347,10 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * A per-transaction sequence number used to identify this request. This field * makes each request idempotent such that if the request is received multiple * times, at most one will succeed. - * * The sequence number must be monotonically increasing within the * transaction. If a request arrives for the first time with an out-of-order * sequence number, the transaction may be aborted. Replays of previously * handled requests will yield the same response as the first execution. - * * Required for DML statements. Ignored for queries. *
* @@ -464,7 +436,6 @@ com.google.spanner.v1.Type getParamTypesOrDefault( *
    * If this is for a partitioned query and this field is set to `true`, the
    * request will be executed via Spanner independent compute resources.
-   *
    * If the field is set to `true` but the request does not set
    * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
    * 
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java index 0a78d665a60..cef307ed07e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/GetSessionRequest.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new GetSessionRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_GetSessionRequest_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java index 6eb2bd0e2ac..2848ab4bdd3 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRange.java @@ -23,91 +23,64 @@ * *
  * KeyRange represents a range of rows in a table or index.
- *
  * A range has a start key and an end key. These keys can be open or
  * closed, indicating if the range includes rows with that key.
- *
  * Keys are represented by lists, where the ith value in the list
  * corresponds to the ith component of the table or index primary key.
  * Individual values are encoded as described
  * [here][google.spanner.v1.TypeCode].
- *
  * For example, consider the following table definition:
- *
  *     CREATE TABLE UserEvents (
  *       UserName STRING(MAX),
  *       EventDate STRING(10)
  *     ) PRIMARY KEY(UserName, EventDate);
- *
  * The following keys name rows in this table:
- *
  *     ["Bob", "2014-09-23"]
  *     ["Alfred", "2015-06-12"]
- *
  * Since the `UserEvents` table's `PRIMARY KEY` clause names two
  * columns, each `UserEvents` key has two elements; the first is the
  * `UserName`, and the second is the `EventDate`.
- *
  * Key ranges with multiple components are interpreted
  * lexicographically by component using the table or index key's declared
  * sort order. For example, the following range returns all events for
  * user `"Bob"` that occurred in the year 2015:
- *
  *     "start_closed": ["Bob", "2015-01-01"]
  *     "end_closed": ["Bob", "2015-12-31"]
- *
  * Start and end keys can omit trailing key components. This affects the
  * inclusion and exclusion of rows that exactly match the provided key
  * components: if the key is closed, then rows that exactly match the
  * provided components are included; if the key is open, then rows
  * that exactly match are not included.
- *
  * For example, the following range includes all events for `"Bob"` that
  * occurred during and after the year 2000:
- *
  *     "start_closed": ["Bob", "2000-01-01"]
  *     "end_closed": ["Bob"]
- *
  * The next example retrieves all events for `"Bob"`:
- *
  *     "start_closed": ["Bob"]
  *     "end_closed": ["Bob"]
- *
  * To retrieve events before the year 2000:
- *
  *     "start_closed": ["Bob"]
  *     "end_open": ["Bob", "2000-01-01"]
- *
  * The following range includes all rows in the table:
- *
  *     "start_closed": []
  *     "end_closed": []
- *
  * This range returns all users whose `UserName` begins with any
  * character from A to C:
- *
  *     "start_closed": ["A"]
  *     "end_open": ["D"]
- *
  * This range returns all users whose `UserName` begins with B:
- *
  *     "start_closed": ["B"]
  *     "end_open": ["C"]
- *
  * Key ranges honor column sort order. For example, suppose a table is
  * defined as follows:
- *
  *     CREATE TABLE DescendingSortedTable {
  *       Key INT64,
  *       ...
  *     ) PRIMARY KEY(Key DESC);
- *
  * The following range retrieves all rows with key values between 1
  * and 100 inclusive:
- *
  *     "start_closed": ["100"]
  *     "end_closed": ["1"]
- *
  * Note that 100 is passed as the start, and 1 is passed as the end,
  * because `Key` is a descending column in the schema.
  * 
@@ -132,6 +105,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new KeyRange(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.KeysProto.internal_static_google_spanner_v1_KeyRange_descriptor; } @@ -146,8 +124,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } private int startKeyTypeCase_ = 0; - - @SuppressWarnings("serial") private java.lang.Object startKeyType_; public enum StartKeyTypeCase @@ -195,8 +171,6 @@ public StartKeyTypeCase getStartKeyTypeCase() { } private int endKeyTypeCase_ = 0; - - @SuppressWarnings("serial") private java.lang.Object endKeyType_; public enum EndKeyTypeCase @@ -690,91 +664,64 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * *
    * KeyRange represents a range of rows in a table or index.
-   *
    * A range has a start key and an end key. These keys can be open or
    * closed, indicating if the range includes rows with that key.
-   *
    * Keys are represented by lists, where the ith value in the list
    * corresponds to the ith component of the table or index primary key.
    * Individual values are encoded as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * For example, consider the following table definition:
-   *
    *     CREATE TABLE UserEvents (
    *       UserName STRING(MAX),
    *       EventDate STRING(10)
    *     ) PRIMARY KEY(UserName, EventDate);
-   *
    * The following keys name rows in this table:
-   *
    *     ["Bob", "2014-09-23"]
    *     ["Alfred", "2015-06-12"]
-   *
    * Since the `UserEvents` table's `PRIMARY KEY` clause names two
    * columns, each `UserEvents` key has two elements; the first is the
    * `UserName`, and the second is the `EventDate`.
-   *
    * Key ranges with multiple components are interpreted
    * lexicographically by component using the table or index key's declared
    * sort order. For example, the following range returns all events for
    * user `"Bob"` that occurred in the year 2015:
-   *
    *     "start_closed": ["Bob", "2015-01-01"]
    *     "end_closed": ["Bob", "2015-12-31"]
-   *
    * Start and end keys can omit trailing key components. This affects the
    * inclusion and exclusion of rows that exactly match the provided key
    * components: if the key is closed, then rows that exactly match the
    * provided components are included; if the key is open, then rows
    * that exactly match are not included.
-   *
    * For example, the following range includes all events for `"Bob"` that
    * occurred during and after the year 2000:
-   *
    *     "start_closed": ["Bob", "2000-01-01"]
    *     "end_closed": ["Bob"]
-   *
    * The next example retrieves all events for `"Bob"`:
-   *
    *     "start_closed": ["Bob"]
    *     "end_closed": ["Bob"]
-   *
    * To retrieve events before the year 2000:
-   *
    *     "start_closed": ["Bob"]
    *     "end_open": ["Bob", "2000-01-01"]
-   *
    * The following range includes all rows in the table:
-   *
    *     "start_closed": []
    *     "end_closed": []
-   *
    * This range returns all users whose `UserName` begins with any
    * character from A to C:
-   *
    *     "start_closed": ["A"]
    *     "end_open": ["D"]
-   *
    * This range returns all users whose `UserName` begins with B:
-   *
    *     "start_closed": ["B"]
    *     "end_open": ["C"]
-   *
    * Key ranges honor column sort order. For example, suppose a table is
    * defined as follows:
-   *
    *     CREATE TABLE DescendingSortedTable {
    *       Key INT64,
    *       ...
    *     ) PRIMARY KEY(Key DESC);
-   *
    * The following range retrieves all rows with key values between 1
    * and 100 inclusive:
-   *
    *     "start_closed": ["100"]
    *     "end_closed": ["1"]
-   *
    * Note that 100 is passed as the start, and 1 is passed as the end,
    * because `Key` is a descending column in the schema.
    * 
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java index 77a2acdc324..c6a5e89496f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeyRangeOrBuilder.java @@ -175,7 +175,7 @@ public interface KeyRangeOrBuilder */ com.google.protobuf.ListValueOrBuilder getEndOpenOrBuilder(); - com.google.spanner.v1.KeyRange.StartKeyTypeCase getStartKeyTypeCase(); + public com.google.spanner.v1.KeyRange.StartKeyTypeCase getStartKeyTypeCase(); - com.google.spanner.v1.KeyRange.EndKeyTypeCase getEndKeyTypeCase(); + public com.google.spanner.v1.KeyRange.EndKeyTypeCase getEndKeyTypeCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java index d89ccd74fcb..fca1f9f6fbb 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/KeySet.java @@ -25,7 +25,6 @@ * `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All * the keys are expected to be in the same table or index. The keys need * not be sorted in any particular way. - * * If the same key is specified multiple times in the set (for example * if two ranges, two keys, or a key and a range overlap), Cloud Spanner * behaves as if the key were only specified once. @@ -54,6 +53,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new KeySet(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.KeysProto.internal_static_google_spanner_v1_KeySet_descriptor; } @@ -434,7 +438,6 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * `KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All * the keys are expected to be in the same table or index. The keys need * not be sorted in any particular way. - * * If the same key is specified multiple times in the set (for example * if two ranges, two keys, or a key and a range overlap), Cloud Spanner * behaves as if the key were only specified once. diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java index 067526b246f..fb6f3e29725 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequest.java @@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ListSessionsRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ListSessionsRequest_descriptor; @@ -203,11 +208,8 @@ public com.google.protobuf.ByteString getPageTokenBytes() { *
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
-   *
    *   * `labels.key` where key is the name of a label
-   *
    * Some examples of using filters are:
-   *
    *   * `labels.env:*` --> The session has the label "env".
    *   * `labels.env:dev` --> The session has the label "env" and the value of
    *                        the label contains the string "dev".
@@ -235,11 +237,8 @@ public java.lang.String getFilter() {
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
-   *
    *   * `labels.key` where key is the name of a label
-   *
    * Some examples of using filters are:
-   *
    *   * `labels.env:*` --> The session has the label "env".
    *   * `labels.env:dev` --> The session has the label "env" and the value of
    *                        the label contains the string "dev".
@@ -968,11 +967,8 @@ public Builder setPageTokenBytes(com.google.protobuf.ByteString value) {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
@@ -999,11 +995,8 @@ public java.lang.String getFilter() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
@@ -1030,11 +1023,8 @@ public com.google.protobuf.ByteString getFilterBytes() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
@@ -1060,11 +1050,8 @@ public Builder setFilter(java.lang.String value) {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
@@ -1086,11 +1073,8 @@ public Builder clearFilter() {
      * 
      * An expression for filtering the results of the request. Filter rules are
      * case insensitive. The fields eligible for filtering are:
-     *
      *   * `labels.key` where key is the name of a label
-     *
      * Some examples of using filters are:
-     *
      *   * `labels.env:*` --> The session has the label "env".
      *   * `labels.env:dev` --> The session has the label "env" and the value of
      *                        the label contains the string "dev".
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java
index 9588536d71d..98c63809bbc 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsRequestOrBuilder.java
@@ -101,11 +101,8 @@ public interface ListSessionsRequestOrBuilder
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
-   *
    *   * `labels.key` where key is the name of a label
-   *
    * Some examples of using filters are:
-   *
    *   * `labels.env:*` --> The session has the label "env".
    *   * `labels.env:dev` --> The session has the label "env" and the value of
    *                        the label contains the string "dev".
@@ -122,11 +119,8 @@ public interface ListSessionsRequestOrBuilder
    * 
    * An expression for filtering the results of the request. Filter rules are
    * case insensitive. The fields eligible for filtering are:
-   *
    *   * `labels.key` where key is the name of a label
-   *
    * Some examples of using filters are:
-   *
    *   * `labels.env:*` --> The session has the label "env".
    *   * `labels.env:dev` --> The session has the label "env" and the value of
    *                        the label contains the string "dev".
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java
index 820f48dcd7f..204cd5a790f 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ListSessionsResponse.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ListSessionsResponse();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_ListSessionsResponse_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java
index 96d2dcea3ea..9c06e66de8f 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Mutation.java
@@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new Mutation();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.MutationProto
         .internal_static_google_spanner_v1_Mutation_descriptor;
@@ -96,7 +101,6 @@ public interface WriteOrBuilder
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -112,7 +116,6 @@ public interface WriteOrBuilder
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -128,7 +131,6 @@ public interface WriteOrBuilder
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -145,7 +147,6 @@ public interface WriteOrBuilder
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -266,7 +267,7 @@ private Write(com.google.protobuf.GeneratedMessageV3.Builder builder) {
 
     private Write() {
       table_ = "";
-      columns_ = com.google.protobuf.LazyStringArrayList.emptyList();
+      columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
       values_ = java.util.Collections.emptyList();
     }
 
@@ -276,6 +277,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new Write();
     }
 
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+      return this.unknownFields;
+    }
+
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.MutationProto
           .internal_static_google_spanner_v1_Mutation_Write_descriptor;
@@ -345,14 +351,12 @@ public com.google.protobuf.ByteString getTableBytes() {
     public static final int COLUMNS_FIELD_NUMBER = 2;
 
     @SuppressWarnings("serial")
-    private com.google.protobuf.LazyStringArrayList columns_ =
-        com.google.protobuf.LazyStringArrayList.emptyList();
+    private com.google.protobuf.LazyStringList columns_;
     /**
      *
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -370,7 +374,6 @@ public com.google.protobuf.ProtocolStringList getColumnsList() {
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -388,7 +391,6 @@ public int getColumnsCount() {
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -407,7 +409,6 @@ public java.lang.String getColumns(int index) {
      *
      * 
      * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-     *
      * The list of columns must contain enough columns to allow
      * Cloud Spanner to derive values for all primary key columns in the
      * row(s) to be modified.
@@ -756,7 +757,8 @@ public Builder clear() {
         super.clear();
         bitField0_ = 0;
         table_ = "";
-        columns_ = com.google.protobuf.LazyStringArrayList.emptyList();
+        columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+        bitField0_ = (bitField0_ & ~0x00000002);
         if (valuesBuilder_ == null) {
           values_ = java.util.Collections.emptyList();
         } else {
@@ -800,6 +802,11 @@ public com.google.spanner.v1.Mutation.Write buildPartial() {
       }
 
       private void buildPartialRepeatedFields(com.google.spanner.v1.Mutation.Write result) {
+        if (((bitField0_ & 0x00000002) != 0)) {
+          columns_ = columns_.getUnmodifiableView();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        }
+        result.columns_ = columns_;
         if (valuesBuilder_ == null) {
           if (((bitField0_ & 0x00000004) != 0)) {
             values_ = java.util.Collections.unmodifiableList(values_);
@@ -816,10 +823,6 @@ private void buildPartial0(com.google.spanner.v1.Mutation.Write result) {
         if (((from_bitField0_ & 0x00000001) != 0)) {
           result.table_ = table_;
         }
-        if (((from_bitField0_ & 0x00000002) != 0)) {
-          columns_.makeImmutable();
-          result.columns_ = columns_;
-        }
       }
 
       @java.lang.Override
@@ -877,7 +880,7 @@ public Builder mergeFrom(com.google.spanner.v1.Mutation.Write other) {
         if (!other.columns_.isEmpty()) {
           if (columns_.isEmpty()) {
             columns_ = other.columns_;
-            bitField0_ |= 0x00000002;
+            bitField0_ = (bitField0_ & ~0x00000002);
           } else {
             ensureColumnsIsMutable();
             columns_.addAll(other.columns_);
@@ -1087,21 +1090,20 @@ public Builder setTableBytes(com.google.protobuf.ByteString value) {
         return this;
       }
 
-      private com.google.protobuf.LazyStringArrayList columns_ =
-          com.google.protobuf.LazyStringArrayList.emptyList();
+      private com.google.protobuf.LazyStringList columns_ =
+          com.google.protobuf.LazyStringArrayList.EMPTY;
 
       private void ensureColumnsIsMutable() {
-        if (!columns_.isModifiable()) {
+        if (!((bitField0_ & 0x00000002) != 0)) {
           columns_ = new com.google.protobuf.LazyStringArrayList(columns_);
+          bitField0_ |= 0x00000002;
         }
-        bitField0_ |= 0x00000002;
       }
       /**
        *
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1112,15 +1114,13 @@ private void ensureColumnsIsMutable() {
        * @return A list containing the columns.
        */
       public com.google.protobuf.ProtocolStringList getColumnsList() {
-        columns_.makeImmutable();
-        return columns_;
+        return columns_.getUnmodifiableView();
       }
       /**
        *
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1138,7 +1138,6 @@ public int getColumnsCount() {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1157,7 +1156,6 @@ public java.lang.String getColumns(int index) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1176,7 +1174,6 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1194,7 +1191,6 @@ public Builder setColumns(int index, java.lang.String value) {
         }
         ensureColumnsIsMutable();
         columns_.set(index, value);
-        bitField0_ |= 0x00000002;
         onChanged();
         return this;
       }
@@ -1203,7 +1199,6 @@ public Builder setColumns(int index, java.lang.String value) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1220,7 +1215,6 @@ public Builder addColumns(java.lang.String value) {
         }
         ensureColumnsIsMutable();
         columns_.add(value);
-        bitField0_ |= 0x00000002;
         onChanged();
         return this;
       }
@@ -1229,7 +1223,6 @@ public Builder addColumns(java.lang.String value) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1243,7 +1236,6 @@ public Builder addColumns(java.lang.String value) {
       public Builder addAllColumns(java.lang.Iterable values) {
         ensureColumnsIsMutable();
         com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columns_);
-        bitField0_ |= 0x00000002;
         onChanged();
         return this;
       }
@@ -1252,7 +1244,6 @@ public Builder addAllColumns(java.lang.Iterable values) {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1263,9 +1254,8 @@ public Builder addAllColumns(java.lang.Iterable values) {
        * @return This builder for chaining.
        */
       public Builder clearColumns() {
-        columns_ = com.google.protobuf.LazyStringArrayList.emptyList();
+        columns_ = com.google.protobuf.LazyStringArrayList.EMPTY;
         bitField0_ = (bitField0_ & ~0x00000002);
-        ;
         onChanged();
         return this;
       }
@@ -1274,7 +1264,6 @@ public Builder clearColumns() {
        *
        * 
        * The names of the columns in [table][google.spanner.v1.Mutation.Write.table] to be written.
-       *
        * The list of columns must contain enough columns to allow
        * Cloud Spanner to derive values for all primary key columns in the
        * row(s) to be modified.
@@ -1292,7 +1281,6 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) {
         checkByteStringIsUtf8(value);
         ensureColumnsIsMutable();
         columns_.add(value);
-        bitField0_ |= 0x00000002;
         onChanged();
         return this;
       }
@@ -1942,6 +1930,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new Delete();
     }
 
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+      return this.unknownFields;
+    }
+
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.MutationProto
           .internal_static_google_spanner_v1_Mutation_Delete_descriptor;
@@ -2848,8 +2841,6 @@ public com.google.spanner.v1.Mutation.Delete getDefaultInstanceForType() {
   }
 
   private int operationCase_ = 0;
-
-  @SuppressWarnings("serial")
   private java.lang.Object operation_;
 
   public enum OperationCase
@@ -3021,7 +3012,6 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() {
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
-   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -3042,7 +3032,6 @@ public boolean hasInsertOrUpdate() {
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
-   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -3066,7 +3055,6 @@ public com.google.spanner.v1.Mutation.Write getInsertOrUpdate() {
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
-   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -3091,7 +3079,6 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder(
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
-   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -3114,7 +3101,6 @@ public boolean hasReplace() {
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
-   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -3140,7 +3126,6 @@ public com.google.spanner.v1.Mutation.Write getReplace() {
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
-   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -4169,7 +4154,6 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getUpdateOrBuilder() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4190,7 +4174,6 @@ public boolean hasInsertOrUpdate() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4221,7 +4204,6 @@ public com.google.spanner.v1.Mutation.Write getInsertOrUpdate() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4249,7 +4231,6 @@ public Builder setInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4274,7 +4255,6 @@ public Builder setInsertOrUpdate(com.google.spanner.v1.Mutation.Write.Builder bu
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4312,7 +4292,6 @@ public Builder mergeInsertOrUpdate(com.google.spanner.v1.Mutation.Write value) {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4343,7 +4322,6 @@ public Builder clearInsertOrUpdate() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4361,7 +4339,6 @@ public com.google.spanner.v1.Mutation.Write.Builder getInsertOrUpdateBuilder() {
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4387,7 +4364,6 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder(
      * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
      * its column values are overwritten with the ones provided. Any
      * column values not explicitly written are preserved.
-     *
      * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
      * NULL` columns in the table must be given a value. This holds true
      * even when the row already exists and will therefore actually be updated.
@@ -4432,7 +4408,6 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getInsertOrUpdateOrBuilder(
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4455,7 +4430,6 @@ public boolean hasReplace() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4488,7 +4462,6 @@ public com.google.spanner.v1.Mutation.Write getReplace() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4518,7 +4491,6 @@ public Builder setReplace(com.google.spanner.v1.Mutation.Write value) {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4545,7 +4517,6 @@ public Builder setReplace(com.google.spanner.v1.Mutation.Write.Builder builderFo
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4585,7 +4556,6 @@ public Builder mergeReplace(com.google.spanner.v1.Mutation.Write value) {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4618,7 +4588,6 @@ public Builder clearReplace() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4638,7 +4607,6 @@ public com.google.spanner.v1.Mutation.Write.Builder getReplaceBuilder() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
@@ -4666,7 +4634,6 @@ public com.google.spanner.v1.Mutation.WriteOrBuilder getReplaceOrBuilder() {
      * deleted, and the column values provided are inserted
      * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
      * explicitly written become `NULL`.
-     *
      * In an interleaved table, if you create the child table with the
      * `ON DELETE CASCADE` annotation, then replacing a parent row
      * also deletes the child rows. Otherwise, you must delete the
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java
index f448af6710f..c91b2bbb83f 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationOrBuilder.java
@@ -106,7 +106,6 @@ public interface MutationOrBuilder
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
-   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -124,7 +123,6 @@ public interface MutationOrBuilder
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
-   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -142,7 +140,6 @@ public interface MutationOrBuilder
    * Like [insert][google.spanner.v1.Mutation.insert], except that if the row already exists, then
    * its column values are overwritten with the ones provided. Any
    * column values not explicitly written are preserved.
-   *
    * When using [insert_or_update][google.spanner.v1.Mutation.insert_or_update], just as when using [insert][google.spanner.v1.Mutation.insert], all `NOT
    * NULL` columns in the table must be given a value. This holds true
    * even when the row already exists and will therefore actually be updated.
@@ -160,7 +157,6 @@ public interface MutationOrBuilder
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
-   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -180,7 +176,6 @@ public interface MutationOrBuilder
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
-   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -200,7 +195,6 @@ public interface MutationOrBuilder
    * deleted, and the column values provided are inserted
    * instead. Unlike [insert_or_update][google.spanner.v1.Mutation.insert_or_update], this means any values not
    * explicitly written become `NULL`.
-   *
    * In an interleaved table, if you create the child table with the
    * `ON DELETE CASCADE` annotation, then replacing a parent row
    * also deletes the child rows. Otherwise, you must delete the
@@ -249,5 +243,5 @@ public interface MutationOrBuilder
    */
   com.google.spanner.v1.Mutation.DeleteOrBuilder getDeleteOrBuilder();
 
-  com.google.spanner.v1.Mutation.OperationCase getOperationCase();
+  public com.google.spanner.v1.Mutation.OperationCase getOperationCase();
 }
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
index ca64bf3a9b8..a1706fc4cd1 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/MutationProto.java
@@ -51,24 +51,24 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
       "\n google/spanner/v1/mutation.proto\022\021goog"
           + "le.spanner.v1\032\037google/api/field_behavior"
           + ".proto\032\034google/protobuf/struct.proto\032\034go"
-          + "ogle/spanner/v1/keys.proto\"\330\003\n\010Mutation\022"
+          + "ogle/spanner/v1/keys.proto\"\325\003\n\010Mutation\022"
           + "3\n\006insert\030\001 \001(\0132!.google.spanner.v1.Muta"
           + "tion.WriteH\000\0223\n\006update\030\002 \001(\0132!.google.sp"
           + "anner.v1.Mutation.WriteH\000\022=\n\020insert_or_u"
           + "pdate\030\003 \001(\0132!.google.spanner.v1.Mutation"
           + ".WriteH\000\0224\n\007replace\030\004 \001(\0132!.google.spann"
           + "er.v1.Mutation.WriteH\000\0224\n\006delete\030\005 \001(\0132\""
-          + ".google.spanner.v1.Mutation.DeleteH\000\032Y\n\005"
-          + "Write\022\023\n\005table\030\001 \001(\tB\004\342A\001\002\022\017\n\007columns\030\002 "
-          + "\003(\t\022*\n\006values\030\003 \003(\0132\032.google.protobuf.Li"
-          + "stValue\032O\n\006Delete\022\023\n\005table\030\001 \001(\tB\004\342A\001\002\0220"
-          + "\n\007key_set\030\002 \001(\0132\031.google.spanner.v1.KeyS"
-          + "etB\004\342A\001\002B\013\n\toperationB\260\001\n\025com.google.spa"
-          + "nner.v1B\rMutationProtoP\001Z5cloud.google.c"
-          + "om/go/spanner/apiv1/spannerpb;spannerpb\252"
-          + "\002\027Google.Cloud.Spanner.V1\312\002\027Google\\Cloud"
-          + "\\Spanner\\V1\352\002\032Google::Cloud::Spanner::V1"
-          + "b\006proto3"
+          + ".google.spanner.v1.Mutation.DeleteH\000\032X\n\005"
+          + "Write\022\022\n\005table\030\001 \001(\tB\003\340A\002\022\017\n\007columns\030\002 \003"
+          + "(\t\022*\n\006values\030\003 \003(\0132\032.google.protobuf.Lis"
+          + "tValue\032M\n\006Delete\022\022\n\005table\030\001 \001(\tB\003\340A\002\022/\n\007"
+          + "key_set\030\002 \001(\0132\031.google.spanner.v1.KeySet"
+          + "B\003\340A\002B\013\n\toperationB\260\001\n\025com.google.spanne"
+          + "r.v1B\rMutationProtoP\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::V1b\006p"
+          + "roto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java
index 04457063afb..4453ef0c119 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSet.java
@@ -50,6 +50,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new PartialResultSet();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.ResultSetProto
         .internal_static_google_spanner_v1_PartialResultSet_descriptor;
@@ -131,16 +136,13 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() {
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -149,37 +151,27 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() {
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -195,7 +187,6 @@ public com.google.spanner.v1.ResultSetMetadataOrBuilder getMetadataOrBuilder() {
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -216,16 +207,13 @@ public java.util.List getValuesList() {
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -234,37 +222,27 @@ public java.util.List getValuesList() {
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -280,7 +258,6 @@ public java.util.List getValuesList() {
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -301,16 +278,13 @@ public java.util.List getValuesOrB
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -319,37 +293,27 @@ public java.util.List getValuesOrB
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -365,7 +329,6 @@ public java.util.List getValuesOrB
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -386,16 +349,13 @@ public int getValuesCount() {
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -404,37 +364,27 @@ public int getValuesCount() {
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -450,7 +400,6 @@ public int getValuesCount() {
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -471,16 +420,13 @@ public com.google.protobuf.Value getValues(int index) {
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -489,37 +435,27 @@ public com.google.protobuf.Value getValues(int index) {
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -535,7 +471,6 @@ public com.google.protobuf.Value getValues(int index) {
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -1361,16 +1296,13 @@ private void ensureValuesIsMutable() {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1379,37 +1311,27 @@ private void ensureValuesIsMutable() {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1425,7 +1347,6 @@ private void ensureValuesIsMutable() {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1449,16 +1370,13 @@ public java.util.List getValuesList() {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1467,37 +1385,27 @@ public java.util.List getValuesList() {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1513,7 +1421,6 @@ public java.util.List getValuesList() {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1537,16 +1444,13 @@ public int getValuesCount() {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1555,37 +1459,27 @@ public int getValuesCount() {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1601,7 +1495,6 @@ public int getValuesCount() {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1625,16 +1518,13 @@ public com.google.protobuf.Value getValues(int index) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1643,37 +1533,27 @@ public com.google.protobuf.Value getValues(int index) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1689,7 +1569,6 @@ public com.google.protobuf.Value getValues(int index) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1719,16 +1598,13 @@ public Builder setValues(int index, com.google.protobuf.Value value) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1737,37 +1613,27 @@ public Builder setValues(int index, com.google.protobuf.Value value) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1783,7 +1649,6 @@ public Builder setValues(int index, com.google.protobuf.Value value) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1810,16 +1675,13 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1828,37 +1690,27 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1874,7 +1726,6 @@ public Builder setValues(int index, com.google.protobuf.Value.Builder builderFor
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1904,16 +1755,13 @@ public Builder addValues(com.google.protobuf.Value value) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -1922,37 +1770,27 @@ public Builder addValues(com.google.protobuf.Value value) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -1968,7 +1806,6 @@ public Builder addValues(com.google.protobuf.Value value) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -1998,16 +1835,13 @@ public Builder addValues(int index, com.google.protobuf.Value value) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2016,37 +1850,27 @@ public Builder addValues(int index, com.google.protobuf.Value value) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2062,7 +1886,6 @@ public Builder addValues(int index, com.google.protobuf.Value value) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -2089,16 +1912,13 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2107,37 +1927,27 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2153,7 +1963,6 @@ public Builder addValues(com.google.protobuf.Value.Builder builderForValue) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -2180,16 +1989,13 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2198,37 +2004,27 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2244,7 +2040,6 @@ public Builder addValues(int index, com.google.protobuf.Value.Builder builderFor
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -2271,16 +2066,13 @@ public Builder addAllValues(java.lang.Iterable getValuesOrB
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2731,37 +2453,27 @@ public java.util.List getValuesOrB
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2777,7 +2489,6 @@ public java.util.List getValuesOrB
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -2797,16 +2508,13 @@ public com.google.protobuf.Value.Builder addValuesBuilder() {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2815,37 +2523,27 @@ public com.google.protobuf.Value.Builder addValuesBuilder() {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2861,7 +2559,6 @@ public com.google.protobuf.Value.Builder addValuesBuilder() {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
@@ -2882,16 +2579,13 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) {
      * large rows and/or large values. Every N complete values defines a
      * row, where N is equal to the number of entries in
      * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-     *
      * Most values are encoded based on type as described
      * [here][google.spanner.v1.TypeCode].
-     *
      * It is possible that the last value in values is "chunked",
      * meaning that the rest of the value is sent in subsequent
      * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
      * field. Two or more chunked values can be merged to form a
      * complete value as follows:
-     *
      *   * `bool/number/null`: cannot be chunked
      *   * `string`: concatenate the strings
      *   * `list`: concatenate the lists. If the last element in a list is a
@@ -2900,37 +2594,27 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) {
      *   * `object`: concatenate the (field name, field value) pairs. If a
      *     field name is duplicated, then apply these rules recursively
      *     to merge the field values.
-     *
      * Some examples of merging:
-     *
      *     # Strings are concatenated.
      *     "foo", "bar" => "foobar"
-     *
      *     # Lists of non-strings are concatenated.
      *     [2, 3], [4] => [2, 3, 4]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are strings.
      *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-     *
      *     # Lists are concatenated, but the last and first elements are merged
      *     # because they are lists. Recursively, the last and first elements
      *     # of the inner lists are merged because they are strings.
      *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-     *
      *     # Non-overlapping object fields are combined.
      *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-     *
      *     # Overlapping object fields are merged.
      *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-     *
      *     # Examples of merging objects containing lists of strings.
      *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-     *
      * For a more complete example, suppose a streaming SQL query is
      * yielding a result set whose rows contain a single string
      * field. The following `PartialResultSet`s might be yielded:
-     *
      *     {
      *       "metadata": { ... }
      *       "values": ["Hello", "W"]
@@ -2946,7 +2630,6 @@ public com.google.protobuf.Value.Builder addValuesBuilder(int index) {
      *       "values": ["d"]
      *       "resume_token": "Zx1B..."
      *     }
-     *
      * This sequence of `PartialResultSet`s encodes two rows, one
      * containing the field value `"Hello"`, and a second containing the
      * field value `"World" = "W" + "orl" + "d"`.
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java
index d0fb0a05c77..60b851170fa 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartialResultSetOrBuilder.java
@@ -70,16 +70,13 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -88,37 +85,27 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -134,7 +121,6 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -152,16 +138,13 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -170,37 +153,27 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -216,7 +189,6 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -234,16 +206,13 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -252,37 +221,27 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -298,7 +257,6 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -316,16 +274,13 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -334,37 +289,27 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -380,7 +325,6 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
@@ -398,16 +342,13 @@ public interface PartialResultSetOrBuilder
    * large rows and/or large values. Every N complete values defines a
    * row, where N is equal to the number of entries in
    * [metadata.row_type.fields][google.spanner.v1.StructType.fields].
-   *
    * Most values are encoded based on type as described
    * [here][google.spanner.v1.TypeCode].
-   *
    * It is possible that the last value in values is "chunked",
    * meaning that the rest of the value is sent in subsequent
    * `PartialResultSet`(s). This is denoted by the [chunked_value][google.spanner.v1.PartialResultSet.chunked_value]
    * field. Two or more chunked values can be merged to form a
    * complete value as follows:
-   *
    *   * `bool/number/null`: cannot be chunked
    *   * `string`: concatenate the strings
    *   * `list`: concatenate the lists. If the last element in a list is a
@@ -416,37 +357,27 @@ public interface PartialResultSetOrBuilder
    *   * `object`: concatenate the (field name, field value) pairs. If a
    *     field name is duplicated, then apply these rules recursively
    *     to merge the field values.
-   *
    * Some examples of merging:
-   *
    *     # Strings are concatenated.
    *     "foo", "bar" => "foobar"
-   *
    *     # Lists of non-strings are concatenated.
    *     [2, 3], [4] => [2, 3, 4]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are strings.
    *     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
-   *
    *     # Lists are concatenated, but the last and first elements are merged
    *     # because they are lists. Recursively, the last and first elements
    *     # of the inner lists are merged because they are strings.
    *     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
-   *
    *     # Non-overlapping object fields are combined.
    *     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
-   *
    *     # Overlapping object fields are merged.
    *     {"a": "1"}, {"a": "2"} => {"a": "12"}
-   *
    *     # Examples of merging objects containing lists of strings.
    *     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
-   *
    * For a more complete example, suppose a streaming SQL query is
    * yielding a result set whose rows contain a single string
    * field. The following `PartialResultSet`s might be yielded:
-   *
    *     {
    *       "metadata": { ... }
    *       "values": ["Hello", "W"]
@@ -462,7 +393,6 @@ public interface PartialResultSetOrBuilder
    *       "values": ["d"]
    *       "resume_token": "Zx1B..."
    *     }
-   *
    * This sequence of `PartialResultSet`s encodes two rows, one
    * containing the field value `"Hello"`, and a second containing the
    * field value `"World" = "W" + "orl" + "d"`.
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java
index c25d69935af..c052325fad6 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Partition.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new Partition();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_Partition_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java
index 52c32ec4de8..fb704ea89af 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptions.java
@@ -46,6 +46,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new PartitionOptions();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_PartitionOptions_descriptor;
@@ -69,7 +74,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
    * 
    * **Note:** This hint is currently ignored by PartitionQuery and
    * PartitionRead requests.
-   *
    * The desired data size for each partition generated.  The default for this
    * option is currently 1 GiB.  This is only a hint. The actual size of each
    * partition may be smaller or larger than this size request.
@@ -92,7 +96,6 @@ public long getPartitionSizeBytes() {
    * 
    * **Note:** This hint is currently ignored by PartitionQuery and
    * PartitionRead requests.
-   *
    * The desired maximum number of partitions to return.  For example, this may
    * be set to the number of workers available.  The default for this option
    * is currently 10,000. The maximum value is currently 200,000.  This is only
@@ -477,7 +480,6 @@ public Builder mergeFrom(
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
-     *
      * The desired data size for each partition generated.  The default for this
      * option is currently 1 GiB.  This is only a hint. The actual size of each
      * partition may be smaller or larger than this size request.
@@ -497,7 +499,6 @@ public long getPartitionSizeBytes() {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
-     *
      * The desired data size for each partition generated.  The default for this
      * option is currently 1 GiB.  This is only a hint. The actual size of each
      * partition may be smaller or larger than this size request.
@@ -521,7 +522,6 @@ public Builder setPartitionSizeBytes(long value) {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
-     *
      * The desired data size for each partition generated.  The default for this
      * option is currently 1 GiB.  This is only a hint. The actual size of each
      * partition may be smaller or larger than this size request.
@@ -545,7 +545,6 @@ public Builder clearPartitionSizeBytes() {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
-     *
      * The desired maximum number of partitions to return.  For example, this may
      * be set to the number of workers available.  The default for this option
      * is currently 10,000. The maximum value is currently 200,000.  This is only
@@ -567,7 +566,6 @@ public long getMaxPartitions() {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
-     *
      * The desired maximum number of partitions to return.  For example, this may
      * be set to the number of workers available.  The default for this option
      * is currently 10,000. The maximum value is currently 200,000.  This is only
@@ -593,7 +591,6 @@ public Builder setMaxPartitions(long value) {
      * 
      * **Note:** This hint is currently ignored by PartitionQuery and
      * PartitionRead requests.
-     *
      * The desired maximum number of partitions to return.  For example, this may
      * be set to the number of workers available.  The default for this option
      * is currently 10,000. The maximum value is currently 200,000.  This is only
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java
index 07d763cbf90..e1461014cb9 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionOptionsOrBuilder.java
@@ -29,7 +29,6 @@ public interface PartitionOptionsOrBuilder
    * 
    * **Note:** This hint is currently ignored by PartitionQuery and
    * PartitionRead requests.
-   *
    * The desired data size for each partition generated.  The default for this
    * option is currently 1 GiB.  This is only a hint. The actual size of each
    * partition may be smaller or larger than this size request.
@@ -47,7 +46,6 @@ public interface PartitionOptionsOrBuilder
    * 
    * **Note:** This hint is currently ignored by PartitionQuery and
    * PartitionRead requests.
-   *
    * The desired maximum number of partitions to return.  For example, this may
    * be set to the number of workers available.  The default for this option
    * is currently 10,000. The maximum value is currently 200,000.  This is only
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java
index 47b4bcfc6a2..bb5809c2692 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequest.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new PartitionQueryRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_PartitionQueryRequest_descriptor;
@@ -196,7 +201,6 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde
    * union operator conceptually divides one or more tables into multiple
    * splits, remotely evaluates a subquery independently on each split, and
    * then unions all results.
-   *
    * This must not contain DML commands, such as INSERT, UPDATE, or
    * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
    * PartitionedDml transaction for large, partition-friendly DML operations.
@@ -228,7 +232,6 @@ public java.lang.String getSql() {
    * union operator conceptually divides one or more tables into multiple
    * splits, remotely evaluates a subquery independently on each split, and
    * then unions all results.
-   *
    * This must not contain DML commands, such as INSERT, UPDATE, or
    * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a
    * PartitionedDml transaction for large, partition-friendly DML operations.
@@ -258,16 +261,12 @@ public com.google.protobuf.ByteString getSqlBytes() {
    *
    * 
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -284,16 +283,12 @@ public boolean hasParams() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -310,16 +305,12 @@ public com.google.protobuf.Struct getParams() { * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -366,7 +357,6 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -395,7 +385,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -415,7 +404,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -443,7 +431,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1353,7 +1340,6 @@ public com.google.spanner.v1.TransactionSelectorOrBuilder getTransactionOrBuilde * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. - * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1384,7 +1370,6 @@ public java.lang.String getSql() { * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. - * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1415,7 +1400,6 @@ public com.google.protobuf.ByteString getSqlBytes() { * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. - * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1445,7 +1429,6 @@ public Builder setSql(java.lang.String value) { * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. - * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1471,7 +1454,6 @@ public Builder clearSql() { * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. - * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -1504,16 +1486,12 @@ public Builder setSqlBytes(com.google.protobuf.ByteString value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1529,16 +1507,12 @@ public boolean hasParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1558,16 +1532,12 @@ public com.google.protobuf.Struct getParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1591,16 +1561,12 @@ public Builder setParams(com.google.protobuf.Struct value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1621,16 +1587,12 @@ public Builder setParams(com.google.protobuf.Struct.Builder builderForValue) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1657,16 +1619,12 @@ public Builder mergeParams(com.google.protobuf.Struct value) { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1687,16 +1645,12 @@ public Builder clearParams() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1712,16 +1666,12 @@ public com.google.protobuf.Struct.Builder getParamsBuilder() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1739,16 +1689,12 @@ public com.google.protobuf.StructOrBuilder getParamsOrBuilder() { * *
      * Parameter names and values that bind to placeholders in the SQL string.
-     *
      * A parameter placeholder consists of the `@` character followed by the
      * parameter name (for example, `@firstName`). Parameter names can contain
      * letters, numbers, and underscores.
-     *
      * Parameters can appear anywhere that a literal value is expected.  The same
      * parameter name can be used more than once, for example:
-     *
      * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-     *
      * It is an error to execute a SQL statement with unbound parameters.
      * 
* @@ -1806,7 +1752,6 @@ public int getParamTypesCount() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1835,7 +1780,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1855,7 +1799,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1883,7 +1826,6 @@ public java.util.Map getParamTypes * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1917,7 +1859,6 @@ public Builder clearParamTypes() { * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1946,7 +1887,6 @@ public java.util.Map getMutablePar * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -1973,7 +1913,6 @@ public Builder putParamTypes(java.lang.String key, com.google.spanner.v1.Type va * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java index 03858c082d1..7c71cf32d5e 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionQueryRequestOrBuilder.java @@ -100,7 +100,6 @@ public interface PartitionQueryRequestOrBuilder * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. - * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -121,7 +120,6 @@ public interface PartitionQueryRequestOrBuilder * union operator conceptually divides one or more tables into multiple * splits, remotely evaluates a subquery independently on each split, and * then unions all results. - * * This must not contain DML commands, such as INSERT, UPDATE, or * DELETE. Use [ExecuteStreamingSql][google.spanner.v1.Spanner.ExecuteStreamingSql] with a * PartitionedDml transaction for large, partition-friendly DML operations. @@ -138,16 +136,12 @@ public interface PartitionQueryRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -161,16 +155,12 @@ public interface PartitionQueryRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -184,16 +174,12 @@ public interface PartitionQueryRequestOrBuilder * *
    * Parameter names and values that bind to placeholders in the SQL string.
-   *
    * A parameter placeholder consists of the `@` character followed by the
    * parameter name (for example, `@firstName`). Parameter names can contain
    * letters, numbers, and underscores.
-   *
    * Parameters can appear anywhere that a literal value is expected.  The same
    * parameter name can be used more than once, for example:
-   *
    * `"WHERE id > @msg_id AND id < @msg_id + 100"`
-   *
    * It is an error to execute a SQL statement with unbound parameters.
    * 
* @@ -208,7 +194,6 @@ public interface PartitionQueryRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -225,7 +210,6 @@ public interface PartitionQueryRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -245,7 +229,6 @@ public interface PartitionQueryRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -262,7 +245,6 @@ public interface PartitionQueryRequestOrBuilder * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information @@ -283,7 +265,6 @@ com.google.spanner.v1.Type getParamTypesOrDefault( * It is not always possible for Cloud Spanner to infer the right SQL type * from a JSON value. For example, values of type `BYTES` and values * of type `STRING` both appear in [params][google.spanner.v1.PartitionQueryRequest.params] as JSON strings. - * * In these cases, `param_types` can be used to specify the exact * SQL type for some or all of the SQL query parameters. See the * definition of [Type][google.spanner.v1.Type] for more information diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java index 8b8d2a6b4f6..46155e66a27 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequest.java @@ -41,7 +41,7 @@ private PartitionReadRequest() { session_ = ""; table_ = ""; index_ = ""; - columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; } @java.lang.Override @@ -50,6 +50,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new PartitionReadRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionReadRequest_descriptor; @@ -282,8 +287,7 @@ public com.google.protobuf.ByteString getIndexBytes() { public static final int COLUMNS_FIELD_NUMBER = 5; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList columns_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList columns_; /** * * @@ -357,7 +361,6 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -378,7 +381,6 @@ public boolean hasKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -399,7 +401,6 @@ public com.google.spanner.v1.KeySet getKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -743,7 +744,8 @@ public Builder clear() { } table_ = ""; index_ = ""; - columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000010); keySet_ = null; if (keySetBuilder_ != null) { keySetBuilder_.dispose(); @@ -781,6 +783,7 @@ public com.google.spanner.v1.PartitionReadRequest build() { public com.google.spanner.v1.PartitionReadRequest buildPartial() { com.google.spanner.v1.PartitionReadRequest result = new com.google.spanner.v1.PartitionReadRequest(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -788,6 +791,14 @@ public com.google.spanner.v1.PartitionReadRequest buildPartial() { return result; } + private void buildPartialRepeatedFields(com.google.spanner.v1.PartitionReadRequest result) { + if (((bitField0_ & 0x00000010) != 0)) { + columns_ = columns_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.columns_ = columns_; + } + private void buildPartial0(com.google.spanner.v1.PartitionReadRequest result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -803,10 +814,6 @@ private void buildPartial0(com.google.spanner.v1.PartitionReadRequest result) { if (((from_bitField0_ & 0x00000008) != 0)) { result.index_ = index_; } - if (((from_bitField0_ & 0x00000010) != 0)) { - columns_.makeImmutable(); - result.columns_ = columns_; - } if (((from_bitField0_ & 0x00000020) != 0)) { result.keySet_ = keySetBuilder_ == null ? keySet_ : keySetBuilder_.build(); } @@ -882,7 +889,7 @@ public Builder mergeFrom(com.google.spanner.v1.PartitionReadRequest other) { if (!other.columns_.isEmpty()) { if (columns_.isEmpty()) { columns_ = other.columns_; - bitField0_ |= 0x00000010; + bitField0_ = (bitField0_ & ~0x00000010); } else { ensureColumnsIsMutable(); columns_.addAll(other.columns_); @@ -1515,14 +1522,14 @@ public Builder setIndexBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringArrayList columns_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList columns_ = + com.google.protobuf.LazyStringArrayList.EMPTY; private void ensureColumnsIsMutable() { - if (!columns_.isModifiable()) { + if (!((bitField0_ & 0x00000010) != 0)) { columns_ = new com.google.protobuf.LazyStringArrayList(columns_); + bitField0_ |= 0x00000010; } - bitField0_ |= 0x00000010; } /** * @@ -1537,8 +1544,7 @@ private void ensureColumnsIsMutable() { * @return A list containing the columns. */ public com.google.protobuf.ProtocolStringList getColumnsList() { - columns_.makeImmutable(); - return columns_; + return columns_.getUnmodifiableView(); } /** * @@ -1607,7 +1613,6 @@ public Builder setColumns(int index, java.lang.String value) { } ensureColumnsIsMutable(); columns_.set(index, value); - bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1630,7 +1635,6 @@ public Builder addColumns(java.lang.String value) { } ensureColumnsIsMutable(); columns_.add(value); - bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1650,7 +1654,6 @@ public Builder addColumns(java.lang.String value) { public Builder addAllColumns(java.lang.Iterable values) { ensureColumnsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columns_); - bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1667,9 +1670,8 @@ public Builder addAllColumns(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearColumns() { - columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00000010); - ; onChanged(); return this; } @@ -1693,7 +1695,6 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureColumnsIsMutable(); columns_.add(value); - bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1712,7 +1713,6 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1732,7 +1732,6 @@ public boolean hasKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1756,7 +1755,6 @@ public com.google.spanner.v1.KeySet getKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1784,7 +1782,6 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1809,7 +1806,6 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1840,7 +1836,6 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1865,7 +1860,6 @@ public Builder clearKeySet() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1885,7 +1879,6 @@ public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1907,7 +1900,6 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java index 2f6a285bc43..3b178f71836 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionReadRequestOrBuilder.java @@ -207,7 +207,6 @@ public interface PartitionReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -225,7 +224,6 @@ public interface PartitionReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -243,7 +241,6 @@ public interface PartitionReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.PartitionReadRequest.table] to be yielded, unless [index][google.spanner.v1.PartitionReadRequest.index] * is present. If [index][google.spanner.v1.PartitionReadRequest.index] is present, then [key_set][google.spanner.v1.PartitionReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.PartitionReadRequest.index]. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java index 66ba370b276..5216448c858 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PartitionResponse.java @@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new PartitionResponse(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_PartitionResponse_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java index 6507cb2656f..21fc82e6924 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNode.java @@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new PlanNode(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_descriptor; @@ -350,6 +355,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ChildLink(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ChildLink_descriptor; @@ -1410,6 +1420,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ShortRepresentation(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_PlanNode_ShortRepresentation_descriptor; @@ -2609,7 +2624,6 @@ public com.google.spanner.v1.PlanNode.ShortRepresentation getShortRepresentation * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -2631,7 +2645,6 @@ public boolean hasMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -2653,7 +2666,6 @@ public com.google.protobuf.Struct getMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4097,7 +4109,6 @@ public Builder clearShortRepresentation() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4118,7 +4129,6 @@ public boolean hasMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4143,7 +4153,6 @@ public com.google.protobuf.Struct getMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4172,7 +4181,6 @@ public Builder setMetadata(com.google.protobuf.Struct value) { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4198,7 +4206,6 @@ public Builder setMetadata(com.google.protobuf.Struct.Builder builderForValue) { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4230,7 +4237,6 @@ public Builder mergeMetadata(com.google.protobuf.Struct value) { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4256,7 +4262,6 @@ public Builder clearMetadata() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4277,7 +4282,6 @@ public com.google.protobuf.Struct.Builder getMetadataBuilder() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -4300,7 +4304,6 @@ public com.google.protobuf.StructOrBuilder getMetadataOrBuilder() { * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java index 0ba896c5717..fa57b333d5f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/PlanNodeOrBuilder.java @@ -188,7 +188,6 @@ public interface PlanNodeOrBuilder * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -207,7 +206,6 @@ public interface PlanNodeOrBuilder * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" @@ -226,7 +224,6 @@ public interface PlanNodeOrBuilder * Attributes relevant to the node contained in a group of key-value pairs. * For example, a Parameter Reference node could have the following * information in its metadata: - * * { * "parameter_reference": "param1", * "parameter_type": "array" diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java index 54d2be319de..609fb5cd3ae 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/QueryPlan.java @@ -47,6 +47,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new QueryPlan(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.QueryPlanProto .internal_static_google_spanner_v1_QueryPlan_descriptor; diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java index 54129945d8c..5b75750eabf 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequest.java @@ -42,7 +42,7 @@ private ReadRequest() { session_ = ""; table_ = ""; index_ = ""; - columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; resumeToken_ = com.google.protobuf.ByteString.EMPTY; partitionToken_ = com.google.protobuf.ByteString.EMPTY; } @@ -53,6 +53,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ReadRequest(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_ReadRequest_descriptor; @@ -285,8 +290,7 @@ public com.google.protobuf.ByteString getIndexBytes() { public static final int COLUMNS_FIELD_NUMBER = 5; @SuppressWarnings("serial") - private com.google.protobuf.LazyStringArrayList columns_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList columns_; /** * * @@ -360,12 +364,10 @@ public com.google.protobuf.ByteString getColumnsBytes(int index) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -386,12 +388,10 @@ public boolean hasKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -412,12 +412,10 @@ public com.google.spanner.v1.KeySet getKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -551,7 +549,6 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( *
    * If this is for a partitioned read and this field is set to `true`, the
    * request will be executed via Spanner independent compute resources.
-   *
    * If the field is set to `true` but the request does not set
    * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
    * 
@@ -882,7 +879,8 @@ public Builder clear() { } table_ = ""; index_ = ""; - columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; + bitField0_ = (bitField0_ & ~0x00000010); keySet_ = null; if (keySetBuilder_ != null) { keySetBuilder_.dispose(); @@ -923,6 +921,7 @@ public com.google.spanner.v1.ReadRequest build() { @java.lang.Override public com.google.spanner.v1.ReadRequest buildPartial() { com.google.spanner.v1.ReadRequest result = new com.google.spanner.v1.ReadRequest(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -930,6 +929,14 @@ public com.google.spanner.v1.ReadRequest buildPartial() { return result; } + private void buildPartialRepeatedFields(com.google.spanner.v1.ReadRequest result) { + if (((bitField0_ & 0x00000010) != 0)) { + columns_ = columns_.getUnmodifiableView(); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.columns_ = columns_; + } + private void buildPartial0(com.google.spanner.v1.ReadRequest result) { int from_bitField0_ = bitField0_; if (((from_bitField0_ & 0x00000001) != 0)) { @@ -945,10 +952,6 @@ private void buildPartial0(com.google.spanner.v1.ReadRequest result) { if (((from_bitField0_ & 0x00000008) != 0)) { result.index_ = index_; } - if (((from_bitField0_ & 0x00000010) != 0)) { - columns_.makeImmutable(); - result.columns_ = columns_; - } if (((from_bitField0_ & 0x00000020) != 0)) { result.keySet_ = keySetBuilder_ == null ? keySet_ : keySetBuilder_.build(); } @@ -1036,7 +1039,7 @@ public Builder mergeFrom(com.google.spanner.v1.ReadRequest other) { if (!other.columns_.isEmpty()) { if (columns_.isEmpty()) { columns_ = other.columns_; - bitField0_ |= 0x00000010; + bitField0_ = (bitField0_ & ~0x00000010); } else { ensureColumnsIsMutable(); columns_.addAll(other.columns_); @@ -1704,14 +1707,14 @@ public Builder setIndexBytes(com.google.protobuf.ByteString value) { return this; } - private com.google.protobuf.LazyStringArrayList columns_ = - com.google.protobuf.LazyStringArrayList.emptyList(); + private com.google.protobuf.LazyStringList columns_ = + com.google.protobuf.LazyStringArrayList.EMPTY; private void ensureColumnsIsMutable() { - if (!columns_.isModifiable()) { + if (!((bitField0_ & 0x00000010) != 0)) { columns_ = new com.google.protobuf.LazyStringArrayList(columns_); + bitField0_ |= 0x00000010; } - bitField0_ |= 0x00000010; } /** * @@ -1726,8 +1729,7 @@ private void ensureColumnsIsMutable() { * @return A list containing the columns. */ public com.google.protobuf.ProtocolStringList getColumnsList() { - columns_.makeImmutable(); - return columns_; + return columns_.getUnmodifiableView(); } /** * @@ -1796,7 +1798,6 @@ public Builder setColumns(int index, java.lang.String value) { } ensureColumnsIsMutable(); columns_.set(index, value); - bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1819,7 +1820,6 @@ public Builder addColumns(java.lang.String value) { } ensureColumnsIsMutable(); columns_.add(value); - bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1839,7 +1839,6 @@ public Builder addColumns(java.lang.String value) { public Builder addAllColumns(java.lang.Iterable values) { ensureColumnsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll(values, columns_); - bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1856,9 +1855,8 @@ public Builder addAllColumns(java.lang.Iterable values) { * @return This builder for chaining. */ public Builder clearColumns() { - columns_ = com.google.protobuf.LazyStringArrayList.emptyList(); + columns_ = com.google.protobuf.LazyStringArrayList.EMPTY; bitField0_ = (bitField0_ & ~0x00000010); - ; onChanged(); return this; } @@ -1882,7 +1880,6 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { checkByteStringIsUtf8(value); ensureColumnsIsMutable(); columns_.add(value); - bitField0_ |= 0x00000010; onChanged(); return this; } @@ -1901,12 +1898,10 @@ public Builder addColumnsBytes(com.google.protobuf.ByteString value) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1926,12 +1921,10 @@ public boolean hasKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1955,12 +1948,10 @@ public com.google.spanner.v1.KeySet getKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -1988,12 +1979,10 @@ public Builder setKeySet(com.google.spanner.v1.KeySet value) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2018,12 +2007,10 @@ public Builder setKeySet(com.google.spanner.v1.KeySet.Builder builderForValue) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2054,12 +2041,10 @@ public Builder mergeKeySet(com.google.spanner.v1.KeySet value) { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2084,12 +2069,10 @@ public Builder clearKeySet() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2109,12 +2092,10 @@ public com.google.spanner.v1.KeySet.Builder getKeySetBuilder() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2136,12 +2117,10 @@ public com.google.spanner.v1.KeySetOrBuilder getKeySetOrBuilder() { * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -2548,7 +2527,6 @@ public com.google.spanner.v1.RequestOptionsOrBuilder getRequestOptionsOrBuilder( *
      * If this is for a partitioned read and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
-     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
@@ -2567,7 +2545,6 @@ public boolean getDataBoostEnabled() { *
      * If this is for a partitioned read and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
-     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
@@ -2590,7 +2567,6 @@ public Builder setDataBoostEnabled(boolean value) { *
      * If this is for a partitioned read and this field is set to `true`, the
      * request will be executed via Spanner independent compute resources.
-     *
      * If the field is set to `true` but the request does not set
      * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
      * 
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java index 3bdf94f7ebd..fc986d632d4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ReadRequestOrBuilder.java @@ -207,12 +207,10 @@ public interface ReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -230,12 +228,10 @@ public interface ReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -253,12 +249,10 @@ public interface ReadRequestOrBuilder * primary keys of the rows in [table][google.spanner.v1.ReadRequest.table] to be yielded, unless [index][google.spanner.v1.ReadRequest.index] * is present. If [index][google.spanner.v1.ReadRequest.index] is present, then [key_set][google.spanner.v1.ReadRequest.key_set] instead names * index keys in [index][google.spanner.v1.ReadRequest.index]. - * * If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is empty, rows are yielded * in table primary key order (if [index][google.spanner.v1.ReadRequest.index] is empty) or index key order * (if [index][google.spanner.v1.ReadRequest.index] is non-empty). If the [partition_token][google.spanner.v1.ReadRequest.partition_token] field is not * empty, rows will be yielded in an unspecified order. - * * It is not an error for the `key_set` to name rows that do not * exist in the database. Read yields nothing for nonexistent rows. *
@@ -357,7 +351,6 @@ public interface ReadRequestOrBuilder *
    * If this is for a partitioned read and this field is set to `true`, the
    * request will be executed via Spanner independent compute resources.
-   *
    * If the field is set to `true` but the request does not set
    * `partition_token`, the API will return an `INVALID_ARGUMENT` error.
    * 
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java index 3b43c192884..bdce7978e3a 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RequestOptions.java @@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new RequestOptions(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.SpannerProto .internal_static_google_spanner_v1_RequestOptions_descriptor; @@ -70,10 +75,8 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { *
    * The relative priority for requests. Note that priority is not applicable
    * for [BeginTransaction][google.spanner.v1.Spanner.BeginTransaction].
-   *
    * The priority acts as a hint to the Cloud Spanner scheduler and does not
    * guarantee priority or order of execution. For example:
-   *
    * * Some parts of a write operation always execute at `PRIORITY_HIGH`,
    *   regardless of the specified priority. This may cause you to see an
    *   increase in high priority workload even when executing a low priority
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java
index c2982901a17..574ee4b5d29 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSet.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ResultSet();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.ResultSetProto
         .internal_static_google_spanner_v1_ResultSet_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java
index a195b930323..6c2261da657 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadata.java
@@ -45,6 +45,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ResultSetMetadata();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.ResultSetProto
         .internal_static_google_spanner_v1_ResultSetMetadata_descriptor;
@@ -69,7 +74,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -91,7 +95,6 @@ public boolean hasRowType() {
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -113,7 +116,6 @@ public com.google.spanner.v1.StructType getRowType() {
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -191,7 +193,6 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() {
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -215,7 +216,6 @@ public boolean hasUndeclaredParameters() {
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -241,7 +241,6 @@ public com.google.spanner.v1.StructType getUndeclaredParameters() {
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -685,7 +684,6 @@ public Builder mergeFrom(
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -706,7 +704,6 @@ public boolean hasRowType() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -731,7 +728,6 @@ public com.google.spanner.v1.StructType getRowType() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -760,7 +756,6 @@ public Builder setRowType(com.google.spanner.v1.StructType value) {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -786,7 +781,6 @@ public Builder setRowType(com.google.spanner.v1.StructType.Builder builderForVal
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -818,7 +812,6 @@ public Builder mergeRowType(com.google.spanner.v1.StructType value) {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -844,7 +837,6 @@ public Builder clearRowType() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -865,7 +857,6 @@ public com.google.spanner.v1.StructType.Builder getRowTypeBuilder() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -888,7 +879,6 @@ public com.google.spanner.v1.StructTypeOrBuilder getRowTypeOrBuilder() {
      * Indicates the field names and types for the rows in the result
      * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
      * Users"` could return a `row_type` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1121,7 +1111,6 @@ public com.google.spanner.v1.TransactionOrBuilder getTransactionOrBuilder() {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1144,7 +1133,6 @@ public boolean hasUndeclaredParameters() {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1173,7 +1161,6 @@ public com.google.spanner.v1.StructType getUndeclaredParameters() {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1204,7 +1191,6 @@ public Builder setUndeclaredParameters(com.google.spanner.v1.StructType value) {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1233,7 +1219,6 @@ public Builder setUndeclaredParameters(
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1267,7 +1252,6 @@ public Builder mergeUndeclaredParameters(com.google.spanner.v1.StructType value)
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1295,7 +1279,6 @@ public Builder clearUndeclaredParameters() {
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1318,7 +1301,6 @@ public com.google.spanner.v1.StructType.Builder getUndeclaredParametersBuilder()
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -1345,7 +1327,6 @@ public com.google.spanner.v1.StructTypeOrBuilder getUndeclaredParametersOrBuilde
      * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
      * Users where UserId = @userId and UserName = @userName "` could return a
      * `undeclared_parameters` value like:
-     *
      *     "fields": [
      *       { "name": "UserId", "type": { "code": "INT64" } },
      *       { "name": "UserName", "type": { "code": "STRING" } },
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
index ec11a259891..38216902ce7 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetMetadataOrBuilder.java
@@ -30,7 +30,6 @@ public interface ResultSetMetadataOrBuilder
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -49,7 +48,6 @@ public interface ResultSetMetadataOrBuilder
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -68,7 +66,6 @@ public interface ResultSetMetadataOrBuilder
    * Indicates the field names and types for the rows in the result
    * set.  For example, a SQL query like `"SELECT UserId, UserName FROM
    * Users"` could return a `row_type` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -126,7 +123,6 @@ public interface ResultSetMetadataOrBuilder
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -147,7 +143,6 @@ public interface ResultSetMetadataOrBuilder
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
@@ -168,7 +163,6 @@ public interface ResultSetMetadataOrBuilder
    * parameters in the SQL query. For example, a SQL query like `"SELECT * FROM
    * Users where UserId = @userId and UserName = @userName "` could return a
    * `undeclared_parameters` value like:
-   *
    *     "fields": [
    *       { "name": "UserId", "type": { "code": "INT64" } },
    *       { "name": "UserName", "type": { "code": "STRING" } },
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java
index b4472630c26..3c940cb8d13 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStats.java
@@ -45,6 +45,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new ResultSetStats();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.ResultSetProto
         .internal_static_google_spanner_v1_ResultSetStats_descriptor;
@@ -61,8 +66,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
   }
 
   private int rowCountCase_ = 0;
-
-  @SuppressWarnings("serial")
   private java.lang.Object rowCount_;
 
   public enum RowCountCase
@@ -164,7 +167,6 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() {
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
-   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -187,7 +189,6 @@ public boolean hasQueryStats() {
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
-   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -210,7 +211,6 @@ public com.google.protobuf.Struct getQueryStats() {
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
-   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -958,7 +958,6 @@ public com.google.spanner.v1.QueryPlanOrBuilder getQueryPlanOrBuilder() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -980,7 +979,6 @@ public boolean hasQueryStats() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1006,7 +1004,6 @@ public com.google.protobuf.Struct getQueryStats() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1036,7 +1033,6 @@ public Builder setQueryStats(com.google.protobuf.Struct value) {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1063,7 +1059,6 @@ public Builder setQueryStats(com.google.protobuf.Struct.Builder builderForValue)
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1096,7 +1091,6 @@ public Builder mergeQueryStats(com.google.protobuf.Struct value) {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1123,7 +1117,6 @@ public Builder clearQueryStats() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1145,7 +1138,6 @@ public com.google.protobuf.Struct.Builder getQueryStatsBuilder() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
@@ -1169,7 +1161,6 @@ public com.google.protobuf.StructOrBuilder getQueryStatsOrBuilder() {
      * Aggregated statistics from the execution of the query. Only present when
      * the query is profiled. For example, a query could return the statistics as
      * follows:
-     *
      *     {
      *       "rows_returned": "3",
      *       "elapsed_time": "1.22 secs",
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java
index 049091eeb0c..9a01e754b41 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/ResultSetStatsOrBuilder.java
@@ -65,7 +65,6 @@ public interface ResultSetStatsOrBuilder
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
-   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -85,7 +84,6 @@ public interface ResultSetStatsOrBuilder
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
-   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -105,7 +103,6 @@ public interface ResultSetStatsOrBuilder
    * Aggregated statistics from the execution of the query. Only present when
    * the query is profiled. For example, a query could return the statistics as
    * follows:
-   *
    *     {
    *       "rows_returned": "3",
    *       "elapsed_time": "1.22 secs",
@@ -169,5 +166,5 @@ public interface ResultSetStatsOrBuilder
    */
   long getRowCountLowerBound();
 
-  com.google.spanner.v1.ResultSetStats.RowCountCase getRowCountCase();
+  public com.google.spanner.v1.ResultSetStats.RowCountCase getRowCountCase();
 }
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java
index d079779e349..ceb4ac4591a 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/RollbackRequest.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new RollbackRequest();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto
         .internal_static_google_spanner_v1_RollbackRequest_descriptor;
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java
index 30a10b81938..60f04ef5517 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Session.java
@@ -48,6 +48,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new Session();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.SpannerProto.internal_static_google_spanner_v1_Session_descriptor;
   }
@@ -154,13 +159,11 @@ public int getLabelsCount() {
    *
    * 
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -184,13 +187,11 @@ public java.util.Map getLabels() { * *
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -205,13 +206,11 @@ public java.util.Map getLabelsMap() { * *
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -233,13 +232,11 @@ public java.util.Map getLabelsMap() { * *
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -1036,13 +1033,11 @@ public int getLabelsCount() { * *
      * The labels for the session.
-     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
-     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1066,13 +1061,11 @@ public java.util.Map getLabels() { * *
      * The labels for the session.
-     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
-     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1087,13 +1080,11 @@ public java.util.Map getLabelsMap() { * *
      * The labels for the session.
-     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
-     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1115,13 +1106,11 @@ public java.util.Map getLabelsMap() { * *
      * The labels for the session.
-     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
-     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1149,13 +1138,11 @@ public Builder clearLabels() { * *
      * The labels for the session.
-     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
-     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1179,13 +1166,11 @@ public java.util.Map getMutableLabels() { * *
      * The labels for the session.
-     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
-     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* @@ -1207,13 +1192,11 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { * *
      * The labels for the session.
-     *
      *  * Label keys must be between 1 and 63 characters long and must conform to
      *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
      *  * Label values must be between 0 and 63 characters long and must conform
      *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
      *  * No more than 64 labels can be associated with a given session.
-     *
      * See https://goo.gl/xmQnxf for more information on and examples of labels.
      * 
* diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java index 15a932664ab..71da8b1240f 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/SessionOrBuilder.java @@ -53,13 +53,11 @@ public interface SessionOrBuilder * *
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -71,13 +69,11 @@ public interface SessionOrBuilder * *
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -92,13 +88,11 @@ public interface SessionOrBuilder * *
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -110,13 +104,11 @@ public interface SessionOrBuilder * *
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* @@ -132,13 +124,11 @@ java.lang.String getLabelsOrDefault( * *
    * The labels for the session.
-   *
    *  * Label keys must be between 1 and 63 characters long and must conform to
    *    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
    *  * Label values must be between 0 and 63 characters long and must conform
    *    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
    *  * No more than 64 labels can be associated with a given session.
-   *
    * See https://goo.gl/xmQnxf for more information on and examples of labels.
    * 
* 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 137106bafd9..4cf68b20170 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 @@ -31,14 +31,6 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r internal_static_google_spanner_v1_CreateSessionRequest_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_google_spanner_v1_CreateSessionRequest_fieldAccessorTable; - static final com.google.protobuf.Descriptors.Descriptor - internal_static_google_spanner_v1_BatchWriteRequest_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_google_spanner_v1_BatchWriteRequest_fieldAccessorTable; - static final com.google.protobuf.Descriptors.Descriptor - internal_static_google_spanner_v1_BatchWriteResponse_descriptor; - static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_google_spanner_v1_BatchWriteResponse_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_spanner_v1_BatchCreateSessionsRequest_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable @@ -164,220 +156,206 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "gle/spanner/v1/mutation.proto\032\"google/sp" + "anner/v1/result_set.proto\032#google/spanne" + "r/v1/transaction.proto\032\034google/spanner/v" - + "1/type.proto\"\205\001\n\024CreateSessionRequest\022:\n" - + "\010database\030\001 \001(\tB(\342A\001\002\372A!\n\037spanner.google" - + "apis.com/Database\0221\n\007session\030\002 \001(\0132\032.goo" - + "gle.spanner.v1.SessionB\004\342A\001\002\"\277\001\n\021BatchWr" - + "iteRequest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036sp" - + "anner.googleapis.com/Session\0224\n\tmutation" - + "s\030\002 \003(\0132\033.google.spanner.v1.MutationB\004\342A" - + "\001\002\022:\n\017request_options\030\003 \001(\0132!.google.spa" - + "nner.v1.RequestOptions\"\177\n\022BatchWriteResp" - + "onse\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.Timestamp\"\253\001\n\032Batc" - + "hCreateSessionsRequest\022:\n\010database\030\001 \001(\t" - + "B(\342A\001\002\372A!\n\037spanner.googleapis.com/Databa" - + "se\0224\n\020session_template\030\002 \001(\0132\032.google.sp" - + "anner.v1.Session\022\033\n\rsession_count\030\003 \001(\005B" - + "\004\342A\001\002\"J\n\033BatchCreateSessionsResponse\022+\n\007" - + "session\030\001 \003(\0132\032.google.spanner.v1.Sessio" - + "n\"\214\003\n\007Session\022\022\n\004name\030\001 \001(\tB\004\342A\001\003\0226\n\006lab" - + "els\030\002 \003(\0132&.google.spanner.v1.Session.La" - + "belsEntry\0225\n\013create_time\030\003 \001(\0132\032.google." - + "protobuf.TimestampB\004\342A\001\003\022C\n\031approximate_" - + "last_use_time\030\004 \001(\0132\032.google.protobuf.Ti" - + "mestampB\004\342A\001\003\022\024\n\014creator_role\030\005 \001(\t\032-\n\013L" - + "abelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\002" - + "8\001:t\352Aq\n\036spanner.googleapis.com/Session\022" - + "Oprojects/{project}/instances/{instance}" - + "/databases/{database}/sessions/{session}" - + "\"J\n\021GetSessionRequest\0225\n\004name\030\001 \001(\tB\'\342A\001" - + "\002\372A \n\036spanner.googleapis.com/Session\"\210\001\n" - + "\023ListSessionsRequest\022:\n\010database\030\001 \001(\tB(" - + "\342A\001\002\372A!\n\037spanner.googleapis.com/Database" - + "\022\021\n\tpage_size\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022" - + "\016\n\006filter\030\004 \001(\t\"]\n\024ListSessionsResponse\022" - + ",\n\010sessions\030\001 \003(\0132\032.google.spanner.v1.Se" - + "ssion\022\027\n\017next_page_token\030\002 \001(\t\"M\n\024Delete" - + "SessionRequest\0225\n\004name\030\001 \001(\tB\'\342A\001\002\372A \n\036s" - + "panner.googleapis.com/Session\"\334\001\n\016Reques" - + "tOptions\022<\n\010priority\030\001 \001(\0162*.google.span" - + "ner.v1.RequestOptions.Priority\022\023\n\013reques" - + "t_tag\030\002 \001(\t\022\027\n\017transaction_tag\030\003 \001(\t\"^\n\010" - + "Priority\022\030\n\024PRIORITY_UNSPECIFIED\020\000\022\020\n\014PR" - + "IORITY_LOW\020\001\022\023\n\017PRIORITY_MEDIUM\020\002\022\021\n\rPRI" - + "ORITY_HIGH\020\003\"\202\006\n\021ExecuteSqlRequest\0228\n\007se" - + "ssion\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner.googleapis" - + ".com/Session\022;\n\013transaction\030\002 \001(\0132&.goog" - + "le.spanner.v1.TransactionSelector\022\021\n\003sql" - + "\030\003 \001(\tB\004\342A\001\002\022\'\n\006params\030\004 \001(\0132\027.google.pr" - + "otobuf.Struct\022I\n\013param_types\030\005 \003(\01324.goo" - + "gle.spanner.v1.ExecuteSqlRequest.ParamTy" - + "pesEntry\022\024\n\014resume_token\030\006 \001(\014\022B\n\nquery_" - + "mode\030\007 \001(\0162..google.spanner.v1.ExecuteSq" - + "lRequest.QueryMode\022\027\n\017partition_token\030\010 " - + "\001(\014\022\r\n\005seqno\030\t \001(\003\022H\n\rquery_options\030\n \001(" - + "\01321.google.spanner.v1.ExecuteSqlRequest." - + "QueryOptions\022:\n\017request_options\030\013 \001(\0132!." - + "google.spanner.v1.RequestOptions\022\032\n\022data" - + "_boost_enabled\030\020 \001(\010\032O\n\014QueryOptions\022\031\n\021" - + "optimizer_version\030\001 \001(\t\022$\n\034optimizer_sta" - + "tistics_package\030\002 \001(\t\032J\n\017ParamTypesEntry" - + "\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.google.sp" - + "anner.v1.Type:\0028\001\".\n\tQueryMode\022\n\n\006NORMAL" - + "\020\000\022\010\n\004PLAN\020\001\022\013\n\007PROFILE\020\002\"\245\004\n\026ExecuteBat" - + "chDmlRequest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036" - + "spanner.googleapis.com/Session\022A\n\013transa" - + "ction\030\002 \001(\0132&.google.spanner.v1.Transact" - + "ionSelectorB\004\342A\001\002\022M\n\nstatements\030\003 \003(\01323." - + "google.spanner.v1.ExecuteBatchDmlRequest" - + ".StatementB\004\342A\001\002\022\023\n\005seqno\030\004 \001(\003B\004\342A\001\002\022:\n" - + "\017request_options\030\005 \001(\0132!.google.spanner." - + "v1.RequestOptions\032\355\001\n\tStatement\022\021\n\003sql\030\001" - + " \001(\tB\004\342A\001\002\022\'\n\006params\030\002 \001(\0132\027.google.prot" - + "obuf.Struct\022X\n\013param_types\030\003 \003(\0132C.googl" - + "e.spanner.v1.ExecuteBatchDmlRequest.Stat" - + "ement.ParamTypesEntry\032J\n\017ParamTypesEntry" - + "\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\0132\027.google.sp" - + "anner.v1.Type:\0028\001\"p\n\027ExecuteBatchDmlResp" - + "onse\0221\n\013result_sets\030\001 \003(\0132\034.google.spann" - + "er.v1.ResultSet\022\"\n\006status\030\002 \001(\0132\022.google" - + ".rpc.Status\"H\n\020PartitionOptions\022\034\n\024parti" - + "tion_size_bytes\030\001 \001(\003\022\026\n\016max_partitions\030" - + "\002 \001(\003\"\245\003\n\025PartitionQueryRequest\0228\n\007sessi" - + "on\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner.googleapis.co" + + "1/type.proto\"\203\001\n\024CreateSessionRequest\0229\n" + + "\010database\030\001 \001(\tB\'\340A\002\372A!\n\037spanner.googlea" + + "pis.com/Database\0220\n\007session\030\002 \001(\0132\032.goog" + + "le.spanner.v1.SessionB\003\340A\002\"\251\001\n\032BatchCrea" + + "teSessionsRequest\0229\n\010database\030\001 \001(\tB\'\340A\002" + + "\372A!\n\037spanner.googleapis.com/Database\0224\n\020" + + "session_template\030\002 \001(\0132\032.google.spanner." + + "v1.Session\022\032\n\rsession_count\030\003 \001(\005B\003\340A\002\"J" + + "\n\033BatchCreateSessionsResponse\022+\n\007session" + + "\030\001 \003(\0132\032.google.spanner.v1.Session\"\211\003\n\007S" + + "ession\022\021\n\004name\030\001 \001(\tB\003\340A\003\0226\n\006labels\030\002 \003(" + + "\0132&.google.spanner.v1.Session.LabelsEntr" + + "y\0224\n\013create_time\030\003 \001(\0132\032.google.protobuf" + + ".TimestampB\003\340A\003\022B\n\031approximate_last_use_" + + "time\030\004 \001(\0132\032.google.protobuf.TimestampB\003" + + "\340A\003\022\024\n\014creator_role\030\005 \001(\t\032-\n\013LabelsEntry" + + "\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001:t\352Aq\n\036s" + + "panner.googleapis.com/Session\022Oprojects/" + + "{project}/instances/{instance}/databases" + + "/{database}/sessions/{session}\"I\n\021GetSes" + + "sionRequest\0224\n\004name\030\001 \001(\tB&\340A\002\372A \n\036spann" + + "er.googleapis.com/Session\"\207\001\n\023ListSessio" + + "nsRequest\0229\n\010database\030\001 \001(\tB\'\340A\002\372A!\n\037spa" + + "nner.googleapis.com/Database\022\021\n\tpage_siz" + + "e\030\002 \001(\005\022\022\n\npage_token\030\003 \001(\t\022\016\n\006filter\030\004 " + + "\001(\t\"]\n\024ListSessionsResponse\022,\n\010sessions\030" + + "\001 \003(\0132\032.google.spanner.v1.Session\022\027\n\017nex" + + "t_page_token\030\002 \001(\t\"L\n\024DeleteSessionReque" + + "st\0224\n\004name\030\001 \001(\tB&\340A\002\372A \n\036spanner.google" + + "apis.com/Session\"\334\001\n\016RequestOptions\022<\n\010p" + + "riority\030\001 \001(\0162*.google.spanner.v1.Reques" + + "tOptions.Priority\022\023\n\013request_tag\030\002 \001(\t\022\027" + + "\n\017transaction_tag\030\003 \001(\t\"^\n\010Priority\022\030\n\024P" + + "RIORITY_UNSPECIFIED\020\000\022\020\n\014PRIORITY_LOW\020\001\022" + + "\023\n\017PRIORITY_MEDIUM\020\002\022\021\n\rPRIORITY_HIGH\020\003\"" + + "\200\006\n\021ExecuteSqlRequest\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." + + "TransactionSelector\022\020\n\003sql\030\003 \001(\tB\003\340A\002\022\'\n" + + "\006params\030\004 \001(\0132\027.google.protobuf.Struct\022I" + + "\n\013param_types\030\005 \003(\01324.google.spanner.v1." + + "ExecuteSqlRequest.ParamTypesEntry\022\024\n\014res" + + "ume_token\030\006 \001(\014\022B\n\nquery_mode\030\007 \001(\0162..go" + + "ogle.spanner.v1.ExecuteSqlRequest.QueryM" + + "ode\022\027\n\017partition_token\030\010 \001(\014\022\r\n\005seqno\030\t " + + "\001(\003\022H\n\rquery_options\030\n \001(\01321.google.span" + + "ner.v1.ExecuteSqlRequest.QueryOptions\022:\n" + + "\017request_options\030\013 \001(\0132!.google.spanner." + + "v1.RequestOptions\022\032\n\022data_boost_enabled\030" + + "\020 \001(\010\032O\n\014QueryOptions\022\031\n\021optimizer_versi" + + "on\030\001 \001(\t\022$\n\034optimizer_statistics_package" + + "\030\002 \001(\t\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\".\n\tQueryMode\022\n\n\006NORMAL\020\000\022\010\n\004PLAN\020\001\022\013\n" + + "\007PROFILE\020\002\"\240\004\n\026ExecuteBatchDmlRequest\0227\n" + + "\007session\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleap" + + "is.com/Session\022@\n\013transaction\030\002 \001(\0132&.go" + + "ogle.spanner.v1.TransactionSelectorB\003\340A\002" + + "\022L\n\nstatements\030\003 \003(\01323.google.spanner.v1" + + ".ExecuteBatchDmlRequest.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\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.Struct\022X\n\013param" + + "_types\030\003 \003(\0132C.google.spanner.v1.Execute" + + "BatchDmlRequest.Statement.ParamTypesEntr" + + "y\032J\n\017ParamTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005val" + + "ue\030\002 \001(\0132\027.google.spanner.v1.Type:\0028\001\"p\n" + + "\027ExecuteBatchDmlResponse\0221\n\013result_sets\030" + + "\001 \003(\0132\034.google.spanner.v1.ResultSet\022\"\n\006s" + + "tatus\030\002 \001(\0132\022.google.rpc.Status\"H\n\020Parti" + + "tionOptions\022\034\n\024partition_size_bytes\030\001 \001(" + + "\003\022\026\n\016max_partitions\030\002 \001(\003\"\243\003\n\025PartitionQ" + + "ueryRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036sp" + + "anner.googleapis.com/Session\022;\n\013transact" + + "ion\030\002 \001(\0132&.google.spanner.v1.Transactio" + + "nSelector\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_ty" + + "pes\030\005 \003(\01328.google.spanner.v1.PartitionQ" + + "ueryRequest.ParamTypesEntry\022>\n\021partition" + + "_options\030\006 \001(\0132#.google.spanner.v1.Parti" + + "tionOptions\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\"\261\002\n\024PartitionReadRequest\0227\n\007sess" + + "ion\030\001 \001(\tB&\340A\002\372A \n\036spanner.googleapis.co" + "m/Session\022;\n\013transaction\030\002 \001(\0132&.google." - + "spanner.v1.TransactionSelector\022\021\n\003sql\030\003 " - + "\001(\tB\004\342A\001\002\022\'\n\006params\030\004 \001(\0132\027.google.proto" - + "buf.Struct\022M\n\013param_types\030\005 \003(\01328.google" - + ".spanner.v1.PartitionQueryRequest.ParamT" - + "ypesEntry\022>\n\021partition_options\030\006 \001(\0132#.g" - + "oogle.spanner.v1.PartitionOptions\032J\n\017Par" - + "amTypesEntry\022\013\n\003key\030\001 \001(\t\022&\n\005value\030\002 \001(\013" - + "2\027.google.spanner.v1.Type:\0028\001\"\264\002\n\024Partit" - + "ionReadRequest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A " - + "\n\036spanner.googleapis.com/Session\022;\n\013tran" - + "saction\030\002 \001(\0132&.google.spanner.v1.Transa" - + "ctionSelector\022\023\n\005table\030\003 \001(\tB\004\342A\001\002\022\r\n\005in" - + "dex\030\004 \001(\t\022\017\n\007columns\030\005 \003(\t\0220\n\007key_set\030\006 " - + "\001(\0132\031.google.spanner.v1.KeySetB\004\342A\001\002\022>\n\021" - + "partition_options\030\t \001(\0132#.google.spanner" - + ".v1.PartitionOptions\"$\n\tPartition\022\027\n\017par" - + "tition_token\030\001 \001(\014\"z\n\021PartitionResponse\022" - + "0\n\npartitions\030\001 \003(\0132\034.google.spanner.v1." - + "Partition\0223\n\013transaction\030\002 \001(\0132\036.google." - + "spanner.v1.Transaction\"\207\003\n\013ReadRequest\0228" - + "\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner.google" - + "apis.com/Session\022;\n\013transaction\030\002 \001(\0132&." - + "google.spanner.v1.TransactionSelector\022\023\n" - + "\005table\030\003 \001(\tB\004\342A\001\002\022\r\n\005index\030\004 \001(\t\022\025\n\007col" - + "umns\030\005 \003(\tB\004\342A\001\002\0220\n\007key_set\030\006 \001(\0132\031.goog" - + "le.spanner.v1.KeySetB\004\342A\001\002\022\r\n\005limit\030\010 \001(" - + "\003\022\024\n\014resume_token\030\t \001(\014\022\027\n\017partition_tok" - + "en\030\n \001(\014\022:\n\017request_options\030\013 \001(\0132!.goog" - + "le.spanner.v1.RequestOptions\022\032\n\022data_boo" - + "st_enabled\030\017 \001(\010\"\315\001\n\027BeginTransactionReq" - + "uest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner." - + "googleapis.com/Session\022<\n\007options\030\002 \001(\0132" - + "%.google.spanner.v1.TransactionOptionsB\004" - + "\342A\001\002\022:\n\017request_options\030\003 \001(\0132!.google.s" - + "panner.v1.RequestOptions\"\304\002\n\rCommitReque" - + "st\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036spanner.go" - + "ogleapis.com/Session\022\030\n\016transaction_id\030\002" - + " \001(\014H\000\022G\n\026single_use_transaction\030\003 \001(\0132%" - + ".google.spanner.v1.TransactionOptionsH\000\022" - + ".\n\tmutations\030\004 \003(\0132\033.google.spanner.v1.M" - + "utation\022\033\n\023return_commit_stats\030\005 \001(\010\022:\n\017" - + "request_options\030\006 \001(\0132!.google.spanner.v" - + "1.RequestOptionsB\r\n\013transaction\"i\n\017Rollb" - + "ackRequest\0228\n\007session\030\001 \001(\tB\'\342A\001\002\372A \n\036sp" - + "anner.googleapis.com/Session\022\034\n\016transact" - + "ion_id\030\002 \001(\014B\004\342A\001\0022\205\030\n\007Spanner\022\246\001\n\rCreat" - + "eSession\022\'.google.spanner.v1.CreateSessi" - + "onRequest\032\032.google.spanner.v1.Session\"P\332" - + "A\010database\202\323\344\223\002?\":/v1/{database=projects" - + "/*/instances/*/databases/*}/sessions:\001*\022" - + "\340\001\n\023BatchCreateSessions\022-.google.spanner" - + ".v1.BatchCreateSessionsRequest\032..google." - + "spanner.v1.BatchCreateSessionsResponse\"j" - + "\332A\026database,session_count\202\323\344\223\002K\"F/v1/{da" - + "tabase=projects/*/instances/*/databases/" - + "*}/sessions:batchCreate:\001*\022\227\001\n\nGetSessio" - + "n\022$.google.spanner.v1.GetSessionRequest\032" - + "\032.google.spanner.v1.Session\"G\332A\004name\202\323\344\223" - + "\002:\0228/v1/{name=projects/*/instances/*/dat" - + "abases/*/sessions/*}\022\256\001\n\014ListSessions\022&." - + "google.spanner.v1.ListSessionsRequest\032\'." - + "google.spanner.v1.ListSessionsResponse\"M" - + "\332A\010database\202\323\344\223\002<\022:/v1/{database=project" - + "s/*/instances/*/databases/*}/sessions\022\231\001" - + "\n\rDeleteSession\022\'.google.spanner.v1.Dele" - + "teSessionRequest\032\026.google.protobuf.Empty" - + "\"G\332A\004name\202\323\344\223\002:*8/v1/{name=projects/*/in" - + "stances/*/databases/*/sessions/*}\022\243\001\n\nEx" - + "ecuteSql\022$.google.spanner.v1.ExecuteSqlR" - + "equest\032\034.google.spanner.v1.ResultSet\"Q\202\323" - + "\344\223\002K\"F/v1/{session=projects/*/instances/" - + "*/databases/*/sessions/*}:executeSql:\001*\022" - + "\276\001\n\023ExecuteStreamingSql\022$.google.spanner" - + ".v1.ExecuteSqlRequest\032#.google.spanner.v" - + "1.PartialResultSet\"Z\202\323\344\223\002T\"O/v1/{session" - + "=projects/*/instances/*/databases/*/sess" - + "ions/*}:executeStreamingSql:\001*0\001\022\300\001\n\017Exe" - + "cuteBatchDml\022).google.spanner.v1.Execute" - + "BatchDmlRequest\032*.google.spanner.v1.Exec" - + "uteBatchDmlResponse\"V\202\323\344\223\002P\"K/v1/{sessio" - + "n=projects/*/instances/*/databases/*/ses" - + "sions/*}:executeBatchDml:\001*\022\221\001\n\004Read\022\036.g" - + "oogle.spanner.v1.ReadRequest\032\034.google.sp" - + "anner.v1.ResultSet\"K\202\323\344\223\002E\"@/v1/{session" - + "=projects/*/instances/*/databases/*/sess" - + "ions/*}:read:\001*\022\254\001\n\rStreamingRead\022\036.goog" - + "le.spanner.v1.ReadRequest\032#.google.spann" - + "er.v1.PartialResultSet\"T\202\323\344\223\002N\"I/v1/{ses" - + "sion=projects/*/instances/*/databases/*/" - + "sessions/*}:streamingRead:\001*0\001\022\302\001\n\nBatch" - + "Write\022$.google.spanner.v1.BatchWriteRequ" - + "est\032%.google.spanner.v1.BatchWriteRespon" - + "se\"e\332A\021session,mutations\202\323\344\223\002K\"F/v1/{ses" - + "sion=projects/*/instances/*/databases/*/" - + "sessions/*}:batchWrite:\001*0\001\022\311\001\n\020BeginTra" - + "nsaction\022*.google.spanner.v1.BeginTransa" - + "ctionRequest\032\036.google.spanner.v1.Transac" - + "tion\"i\332A\017session,options\202\323\344\223\002Q\"L/v1/{ses" - + "sion=projects/*/instances/*/databases/*/" - + "sessions/*}:beginTransaction:\001*\022\353\001\n\006Comm" - + "it\022 .google.spanner.v1.CommitRequest\032!.g" - + "oogle.spanner.v1.CommitResponse\"\233\001\332A ses" - + "sion,transaction_id,mutations\332A(session," - + "single_use_transaction,mutations\202\323\344\223\002G\"B" - + "/v1/{session=projects/*/instances/*/data" - + "bases/*/sessions/*}:commit:\001*\022\260\001\n\010Rollba" - + "ck\022\".google.spanner.v1.RollbackRequest\032\026" - + ".google.protobuf.Empty\"h\332A\026session,trans" - + "action_id\202\323\344\223\002I\"D/v1/{session=projects/*" - + "/instances/*/databases/*/sessions/*}:rol" - + "lback:\001*\022\267\001\n\016PartitionQuery\022(.google.spa" - + "nner.v1.PartitionQueryRequest\032$.google.s" - + "panner.v1.PartitionResponse\"U\202\323\344\223\002O\"J/v1" - + "/{session=projects/*/instances/*/databas" - + "es/*/sessions/*}:partitionQuery:\001*\022\264\001\n\rP" - + "artitionRead\022\'.google.spanner.v1.Partiti" - + "onReadRequest\032$.google.spanner.v1.Partit" - + "ionResponse\"T\202\323\344\223\002N\"I/v1/{session=projec" - + "ts/*/instances/*/databases/*/sessions/*}" - + ":partitionRead:\001*\032w\312A\026spanner.googleapis" - + ".com\322A[https://www.googleapis.com/auth/c" - + "loud-platform,https://www.googleapis.com" - + "/auth/spanner.dataB\221\002\n\025com.google.spanne" - + "r.v1B\014SpannerProtoP\001Z5cloud.google.com/g" - + "o/spanner/apiv1/spannerpb;spannerpb\252\002\027Go" - + "ogle.Cloud.Spanner.V1\312\002\027Google\\Cloud\\Spa" - + "nner\\V1\352\002\032Google::Cloud::Spanner::V1\352A_\n" - + "\037spanner.googleapis.com/Database\022\n\021partition_options\030\t \001(\0132#" + + ".google.spanner.v1.PartitionOptions\"$\n\tP" + + "artition\022\027\n\017partition_token\030\001 \001(\014\"z\n\021Par" + + "titionResponse\0220\n\npartitions\030\001 \003(\0132\034.goo" + + "gle.spanner.v1.Partition\0223\n\013transaction\030" + + "\002 \001(\0132\036.google.spanner.v1.Transaction\"\203\003" + + "\n\013ReadRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036" + + "spanner.googleapis.com/Session\022;\n\013transa" + + "ction\030\002 \001(\0132&.google.spanner.v1.Transact" + + "ionSelector\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(\0132\031.google.spanner.v1.KeySetB\003\340A\002\022\r\n" + + "\005limit\030\010 \001(\003\022\024\n\014resume_token\030\t \001(\014\022\027\n\017pa" + + "rtition_token\030\n \001(\014\022:\n\017request_options\030\013" + + " \001(\0132!.google.spanner.v1.RequestOptions\022" + + "\032\n\022data_boost_enabled\030\017 \001(\010\"\313\001\n\027BeginTra" + + "nsactionRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A " + + "\n\036spanner.googleapis.com/Session\022;\n\007opti" + + "ons\030\002 \001(\0132%.google.spanner.v1.Transactio" + + "nOptionsB\003\340A\002\022:\n\017request_options\030\003 \001(\0132!" + + ".google.spanner.v1.RequestOptions\"\303\002\n\rCo" + + "mmitRequest\0227\n\007session\030\001 \001(\tB&\340A\002\372A \n\036sp" + + "anner.googleapis.com/Session\022\030\n\016transact" + + "ion_id\030\002 \001(\014H\000\022G\n\026single_use_transaction" + + "\030\003 \001(\0132%.google.spanner.v1.TransactionOp" + + "tionsH\000\022.\n\tmutations\030\004 \003(\0132\033.google.span" + + "ner.v1.Mutation\022\033\n\023return_commit_stats\030\005" + + " \001(\010\022:\n\017request_options\030\006 \001(\0132!.google.s" + + "panner.v1.RequestOptionsB\r\n\013transaction\"" + + "g\n\017RollbackRequest\0227\n\007session\030\001 \001(\tB&\340A\002" + + "\372A \n\036spanner.googleapis.com/Session\022\033\n\016t" + + "ransaction_id\030\002 \001(\014B\003\340A\0022\300\026\n\007Spanner\022\246\001\n" + + "\rCreateSession\022\'.google.spanner.v1.Creat" + + "eSessionRequest\032\032.google.spanner.v1.Sess" + + "ion\"P\202\323\344\223\002?\":/v1/{database=projects/*/in" + + "stances/*/databases/*}/sessions:\001*\332A\010dat" + + "abase\022\340\001\n\023BatchCreateSessions\022-.google.s" + + "panner.v1.BatchCreateSessionsRequest\032..g" + + "oogle.spanner.v1.BatchCreateSessionsResp" + + "onse\"j\202\323\344\223\002K\"F/v1/{database=projects/*/i" + + "nstances/*/databases/*}/sessions:batchCr" + + "eate:\001*\332A\026database,session_count\022\227\001\n\nGet" + + "Session\022$.google.spanner.v1.GetSessionRe" + + "quest\032\032.google.spanner.v1.Session\"G\202\323\344\223\002" + + ":\0228/v1/{name=projects/*/instances/*/data" + + "bases/*/sessions/*}\332A\004name\022\256\001\n\014ListSessi" + + "ons\022&.google.spanner.v1.ListSessionsRequ" + + "est\032\'.google.spanner.v1.ListSessionsResp" + + "onse\"M\202\323\344\223\002<\022:/v1/{database=projects/*/i" + + "nstances/*/databases/*}/sessions\332A\010datab" + + "ase\022\231\001\n\rDeleteSession\022\'.google.spanner.v" + + "1.DeleteSessionRequest\032\026.google.protobuf" + + ".Empty\"G\202\323\344\223\002:*8/v1/{name=projects/*/ins" + + "tances/*/databases/*/sessions/*}\332A\004name\022" + + "\243\001\n\nExecuteSql\022$.google.spanner.v1.Execu" + + "teSqlRequest\032\034.google.spanner.v1.ResultS" + + "et\"Q\202\323\344\223\002K\"F/v1/{session=projects/*/inst" + + "ances/*/databases/*/sessions/*}:executeS" + + "ql:\001*\022\276\001\n\023ExecuteStreamingSql\022$.google.s" + + "panner.v1.ExecuteSqlRequest\032#.google.spa" + + "nner.v1.PartialResultSet\"Z\202\323\344\223\002T\"O/v1/{s" + + "ession=projects/*/instances/*/databases/" + + "*/sessions/*}:executeStreamingSql:\001*0\001\022\300" + + "\001\n\017ExecuteBatchDml\022).google.spanner.v1.E" + + "xecuteBatchDmlRequest\032*.google.spanner.v" + + "1.ExecuteBatchDmlResponse\"V\202\323\344\223\002P\"K/v1/{" + + "session=projects/*/instances/*/databases" + + "/*/sessions/*}:executeBatchDml:\001*\022\221\001\n\004Re" + + "ad\022\036.google.spanner.v1.ReadRequest\032\034.goo" + + "gle.spanner.v1.ResultSet\"K\202\323\344\223\002E\"@/v1/{s" + + "ession=projects/*/instances/*/databases/" + + "*/sessions/*}:read:\001*\022\254\001\n\rStreamingRead\022" + + "\036.google.spanner.v1.ReadRequest\032#.google" + + ".spanner.v1.PartialResultSet\"T\202\323\344\223\002N\"I/v" + + "1/{session=projects/*/instances/*/databa" + + "ses/*/sessions/*}:streamingRead:\001*0\001\022\311\001\n" + + "\020BeginTransaction\022*.google.spanner.v1.Be" + + "ginTransactionRequest\032\036.google.spanner.v" + + "1.Transaction\"i\202\323\344\223\002Q\"L/v1/{session=proj" + + "ects/*/instances/*/databases/*/sessions/" + + "*}:beginTransaction:\001*\332A\017session,options" + + "\022\353\001\n\006Commit\022 .google.spanner.v1.CommitRe" + + "quest\032!.google.spanner.v1.CommitResponse" + + "\"\233\001\202\323\344\223\002G\"B/v1/{session=projects/*/insta" + + "nces/*/databases/*/sessions/*}:commit:\001*" + + "\332A session,transaction_id,mutations\332A(se" + + "ssion,single_use_transaction,mutations\022\260" + + "\001\n\010Rollback\022\".google.spanner.v1.Rollback" + + "Request\032\026.google.protobuf.Empty\"h\202\323\344\223\002I\"" + + "D/v1/{session=projects/*/instances/*/dat" + + "abases/*/sessions/*}:rollback:\001*\332A\026sessi" + + "on,transaction_id\022\267\001\n\016PartitionQuery\022(.g" + + "oogle.spanner.v1.PartitionQueryRequest\032$" + + ".google.spanner.v1.PartitionResponse\"U\202\323" + + "\344\223\002O\"J/v1/{session=projects/*/instances/" + + "*/databases/*/sessions/*}:partitionQuery" + + ":\001*\022\264\001\n\rPartitionRead\022\'.google.spanner.v" + + "1.PartitionReadRequest\032$.google.spanner." + + "v1.PartitionResponse\"T\202\323\344\223\002N\"I/v1/{sessi" + + "on=projects/*/instances/*/databases/*/se" + + "ssions/*}:partitionRead:\001*\032w\312A\026spanner.g" + + "oogleapis.com\322A[https://www.googleapis.c" + + "om/auth/cloud-platform,https://www.googl" + + "eapis.com/auth/spanner.dataB\221\002\n\025com.goog" + + "le.spanner.v1B\014SpannerProtoP\001Z5cloud.goo" + + "gle.com/go/spanner/apiv1/spannerpb;spann" + + "erpb\252\002\027Google.Cloud.Spanner.V1\312\002\027Google\\" + + "Cloud\\Spanner\\V1\352\002\032Google::Cloud::Spanne" + + "r::V1\352A_\n\037spanner.googleapis.com/Databas" + + "e\022 @@ -96,7 +100,6 @@ public com.google.protobuf.ByteString getId() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -116,7 +119,6 @@ public boolean hasReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -138,7 +140,6 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -530,7 +531,6 @@ public Builder mergeFrom( * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], * [Commit][google.spanner.v1.Spanner.Commit], or * [Rollback][google.spanner.v1.Spanner.Rollback] calls. - * * Single-use read-only transactions do not have IDs, because * single-use transactions do not support multiple requests. *
@@ -552,7 +552,6 @@ public com.google.protobuf.ByteString getId() { * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], * [Commit][google.spanner.v1.Spanner.Commit], or * [Rollback][google.spanner.v1.Spanner.Rollback] calls. - * * Single-use read-only transactions do not have IDs, because * single-use transactions do not support multiple requests. *
@@ -580,7 +579,6 @@ public Builder setId(com.google.protobuf.ByteString value) { * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql], * [Commit][google.spanner.v1.Spanner.Commit], or * [Rollback][google.spanner.v1.Spanner.Rollback] calls. - * * Single-use read-only transactions do not have IDs, because * single-use transactions do not support multiple requests. *
@@ -609,7 +607,6 @@ public Builder clearId() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -628,7 +625,6 @@ public boolean hasReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -653,7 +649,6 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -680,7 +675,6 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp value) { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -704,7 +698,6 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp.Builder builderFor * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -734,7 +727,6 @@ public Builder mergeReadTimestamp(com.google.protobuf.Timestamp value) { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -758,7 +750,6 @@ public Builder clearReadTimestamp() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -777,7 +768,6 @@ public com.google.protobuf.Timestamp.Builder getReadTimestampBuilder() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -800,7 +790,6 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java index d731f85b08a..85b7624ebe4 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptions.java @@ -23,23 +23,18 @@ * *
  * Transactions:
- *
  * Each session can have at most one active transaction at a time (note that
  * standalone reads and queries use a transaction internally and do count
  * towards the one transaction limit). After the active transaction is
  * completed, the session can immediately be re-used for the next transaction.
  * It is not necessary to create a new session for each transaction.
- *
  * Transaction modes:
- *
  * Cloud Spanner supports three transaction modes:
- *
  *   1. Locking read-write. This type of transaction is the only way
  *      to write data into Cloud Spanner. These transactions rely on
  *      pessimistic locking and, if necessary, two-phase commit.
  *      Locking read-write transactions may abort, requiring the
  *      application to retry.
- *
  *   2. Snapshot read-only. Snapshot read-only transactions provide guaranteed
  *      consistency across several reads, but do not allow
  *      writes. Snapshot read-only transactions can be configured to read at
@@ -48,35 +43,28 @@
  *      guaranteed to see the effects of all transactions that have committed
  *      before the start of the read). Snapshot read-only transactions do not
  *      need to be committed.
- *
  *      Queries on change streams must be performed with the snapshot read-only
  *      transaction mode, specifying a strong read. Please see
  *      [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong]
  *      for more details.
- *
  *   3. Partitioned DML. This type of transaction is used to execute
  *      a single Partitioned DML statement. Partitioned DML partitions
  *      the key space and runs the DML statement over each partition
  *      in parallel using separate, internal transactions that commit
  *      independently. Partitioned DML transactions do not need to be
  *      committed.
- *
  * For transactions that only read, snapshot read-only transactions
  * provide simpler semantics and are almost always faster. In
  * particular, read-only transactions do not take locks, so they do
  * not conflict with read-write transactions. As a consequence of not
  * taking locks, they also do not abort, so retry loops are not needed.
- *
  * Transactions may only read-write data in a single database. They
  * may, however, read-write data in different tables within that
  * database.
- *
  * Locking read-write transactions:
- *
  * Locking transactions may be used to atomically read-modify-write
  * data anywhere in a database. This type of transaction is externally
  * consistent.
- *
  * Clients should attempt to minimize the amount of time a transaction
  * is active. Faster transactions commit with higher probability
  * and cause less contention. Cloud Spanner attempts to keep read locks
@@ -86,113 +74,87 @@
  * [Rollback][google.spanner.v1.Spanner.Rollback]. Long periods of
  * inactivity at the client may cause Cloud Spanner to release a
  * transaction's locks and abort it.
- *
  * Conceptually, a read-write transaction consists of zero or more
  * reads or SQL statements followed by
  * [Commit][google.spanner.v1.Spanner.Commit]. At any time before
  * [Commit][google.spanner.v1.Spanner.Commit], the client can send a
  * [Rollback][google.spanner.v1.Spanner.Rollback] request to abort the
  * transaction.
- *
  * Semantics:
- *
  * Cloud Spanner can commit the transaction if all read locks it acquired
  * are still valid at commit time, and it is able to acquire write
  * locks for all writes. Cloud Spanner can abort the transaction for any
  * reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
  * that the transaction has not modified any user data in Cloud Spanner.
- *
  * Unless the transaction commits, Cloud Spanner makes no guarantees about
  * how long the transaction's locks were held for. It is an error to
  * use Cloud Spanner locks for any sort of mutual exclusion other than
  * between Cloud Spanner transactions themselves.
- *
  * Retrying aborted transactions:
- *
  * When a transaction aborts, the application can choose to retry the
  * whole transaction again. To maximize the chances of successfully
  * committing the retry, the client should execute the retry in the
  * same session as the original attempt. The original session's lock
  * priority increases with each consecutive abort, meaning that each
  * attempt has a slightly better chance of success than the previous.
- *
  * Under some circumstances (for example, many transactions attempting to
  * modify the same row(s)), a transaction can abort many times in a
  * short period before successfully committing. Thus, it is not a good
  * idea to cap the number of retries a transaction can attempt;
  * instead, it is better to limit the total amount of time spent
  * retrying.
- *
  * Idle transactions:
- *
  * A transaction is considered idle if it has no outstanding reads or
  * SQL queries and has not started a read or SQL query within the last 10
  * seconds. Idle transactions can be aborted by Cloud Spanner so that they
  * don't hold on to locks indefinitely. If an idle transaction is aborted, the
  * commit will fail with error `ABORTED`.
- *
  * If this behavior is undesirable, periodically executing a simple
  * SQL query in the transaction (for example, `SELECT 1`) prevents the
  * transaction from becoming idle.
- *
  * Snapshot read-only transactions:
- *
  * Snapshot read-only transactions provides a simpler method than
  * locking read-write transactions for doing several consistent
  * reads. However, this type of transaction does not support writes.
- *
  * Snapshot transactions do not take locks. Instead, they work by
  * choosing a Cloud Spanner timestamp, then executing all reads at that
  * timestamp. Since they do not acquire locks, they do not block
  * concurrent read-write transactions.
- *
  * Unlike locking read-write transactions, snapshot read-only
  * transactions never abort. They can fail if the chosen read
  * timestamp is garbage collected; however, the default garbage
  * collection policy is generous enough that most applications do not
  * need to worry about this in practice.
- *
  * Snapshot read-only transactions do not need to call
  * [Commit][google.spanner.v1.Spanner.Commit] or
  * [Rollback][google.spanner.v1.Spanner.Rollback] (and in fact are not
  * permitted to do so).
- *
  * To execute a snapshot transaction, the client specifies a timestamp
  * bound, which tells Cloud Spanner how to choose a read timestamp.
- *
  * The types of timestamp bound are:
- *
  *   - Strong (the default).
  *   - Bounded staleness.
  *   - Exact staleness.
- *
  * If the Cloud Spanner database to be read is geographically distributed,
  * stale read-only transactions can execute more quickly than strong
  * or read-write transactions, because they are able to execute far
  * from the leader replica.
- *
  * Each type of timestamp bound is discussed in detail below.
- *
  * Strong: Strong reads are guaranteed to see the effects of all transactions
  * that have committed before the start of the read. Furthermore, all
  * rows yielded by a single read are consistent with each other -- if
  * any part of the read observes a transaction, all parts of the read
  * see the transaction.
- *
  * Strong reads are not repeatable: two consecutive strong read-only
  * transactions might return inconsistent results if there are
  * concurrent writes. If consistency across reads is required, the
  * reads should be executed within a transaction or at an exact read
  * timestamp.
- *
  * Queries on change streams (see below for more details) must also specify
  * the strong read timestamp bound.
- *
  * See
  * [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong].
- *
  * Exact staleness:
- *
  * These timestamp bounds execute reads at a user-specified
  * timestamp. Reads at a timestamp are guaranteed to see a consistent
  * prefix of the global transaction history: they observe
@@ -201,54 +163,42 @@
  * transactions with a larger commit timestamp. They will block until
  * all conflicting transactions that may be assigned commit timestamps
  * <= the read timestamp have finished.
- *
  * The timestamp can either be expressed as an absolute Cloud Spanner commit
  * timestamp or a staleness relative to the current time.
- *
  * These modes do not require a "negotiation phase" to pick a
  * timestamp. As a result, they execute slightly faster than the
  * equivalent boundedly stale concurrency modes. On the other hand,
  * boundedly stale reads usually return fresher results.
- *
  * See
  * [TransactionOptions.ReadOnly.read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp]
  * and
  * [TransactionOptions.ReadOnly.exact_staleness][google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness].
- *
  * Bounded staleness:
- *
  * Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
  * subject to a user-provided staleness bound. Cloud Spanner chooses the
  * newest timestamp within the staleness bound that allows execution
  * of the reads at the closest available replica without blocking.
- *
  * All rows yielded are consistent with each other -- if any part of
  * the read observes a transaction, all parts of the read see the
  * transaction. Boundedly stale reads are not repeatable: two stale
  * reads, even if they use the same staleness bound, can execute at
  * different timestamps and thus return inconsistent results.
- *
  * Boundedly stale reads execute in two phases: the first phase
  * negotiates a timestamp among all replicas needed to serve the
  * read. In the second phase, reads are executed at the negotiated
  * timestamp.
- *
  * As a result of the two phase execution, bounded staleness reads are
  * usually a little slower than comparable exact staleness
  * reads. However, they are typically able to return fresher
  * results, and are more likely to execute at the closest replica.
- *
  * Because the timestamp negotiation requires up-front knowledge of
  * which rows will be read, it can only be used with single-use
  * read-only transactions.
- *
  * See
  * [TransactionOptions.ReadOnly.max_staleness][google.spanner.v1.TransactionOptions.ReadOnly.max_staleness]
  * and
  * [TransactionOptions.ReadOnly.min_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp].
- *
  * Old read timestamps and garbage collection:
- *
  * Cloud Spanner continuously garbage collects deleted and overwritten data
  * in the background to reclaim storage space. This process is known
  * as "version GC". By default, version GC reclaims versions after they
@@ -257,23 +207,18 @@
  * restriction also applies to in-progress reads and/or SQL queries whose
  * timestamp become too old while executing. Reads and SQL queries with
  * too-old read timestamps fail with the error `FAILED_PRECONDITION`.
- *
  * You can configure and extend the `VERSION_RETENTION_PERIOD` of a
  * database up to a period as long as one week, which allows Cloud Spanner
  * to perform reads up to one week in the past.
- *
  * Querying change Streams:
- *
  * A Change Stream is a schema object that can be configured to watch data
  * changes on the entire database, a set of tables, or a set of columns
  * in a database.
- *
  * When a change stream is created, Spanner automatically defines a
  * corresponding SQL Table-Valued Function (TVF) that can be used to query
  * the change records in the associated change stream using the
  * ExecuteStreamingSql API. The name of the TVF for a change stream is
  * generated from the name of the change stream: READ_<change_stream_name>.
- *
  * All queries on change stream TVFs must be executed using the
  * ExecuteStreamingSql API with a single-use read-only transaction with a
  * strong read-only timestamp_bound. The change stream TVF allows users to
@@ -281,44 +226,34 @@
  * interest. All change records within the retention period is accessible
  * using the strong read-only timestamp_bound. All other TransactionOptions
  * are invalid for change stream queries.
- *
  * In addition, if TransactionOptions.read_only.return_read_timestamp is set
  * to true, a special value of 2^63 - 2 will be returned in the
  * [Transaction][google.spanner.v1.Transaction] message that describes the
  * transaction, instead of a valid read timestamp. This special value should be
  * discarded and not used for any subsequent queries.
- *
  * Please see https://cloud.google.com/spanner/docs/change-streams
  * for more details on how to query the change stream TVFs.
- *
  * Partitioned DML transactions:
- *
  * Partitioned DML transactions are used to execute DML statements with a
  * different execution strategy that provides different, and often better,
  * scalability properties for large, table-wide operations than DML in a
  * ReadWrite transaction. Smaller scoped statements, such as an OLTP workload,
  * should prefer using ReadWrite transactions.
- *
  * Partitioned DML partitions the keyspace and runs the DML statement on each
  * partition in separate, internal transactions. These transactions commit
  * automatically when complete, and run independently from one another.
- *
  * To reduce lock contention, this execution strategy only acquires read locks
  * on rows that match the WHERE clause of the statement. Additionally, the
  * smaller per-partition transactions hold locks for less time.
- *
  * That said, Partitioned DML is not a drop-in replacement for standard DML used
  * in ReadWrite transactions.
- *
  *  - The DML statement must be fully-partitionable. Specifically, the statement
  *    must be expressible as the union of many statements which each access only
  *    a single row of the table.
- *
  *  - The statement is not applied atomically to all rows of the table. Rather,
  *    the statement is applied atomically to partitions of the table, in
  *    independent transactions. Secondary index rows are updated atomically
  *    with the base table rows.
- *
  *  - Partitioned DML does not guarantee exactly-once execution semantics
  *    against a partition. The statement will be applied at least once to each
  *    partition. It is strongly recommended that the DML statement should be
@@ -326,23 +261,19 @@
  *    dangerous to run a statement such as
  *    `UPDATE table SET column = column + 1` as it could be run multiple times
  *    against some rows.
- *
  *  - The partitions are committed automatically - there is no support for
  *    Commit or Rollback. If the call returns an error, or if the client issuing
  *    the ExecuteSql call dies, it is possible that some rows had the statement
  *    executed on them successfully. It is also possible that statement was
  *    never executed against other rows.
- *
  *  - Partitioned DML transactions may only contain the execution of a single
  *    DML statement via ExecuteSql or ExecuteStreamingSql.
- *
  *  - If any error is encountered during the execution of the partitioned DML
  *    operation (for instance, a UNIQUE INDEX violation, division by zero, or a
  *    value that cannot be stored due to schema constraints), then the
  *    operation is stopped at that point and an error is returned. It is
  *    possible that at this point, some partitions have been committed (or even
  *    committed multiple times), and other partitions have not been run at all.
- *
  * Given the above, Partitioned DML is good fit for large, database-wide,
  * operations that are idempotent, such as deleting old rows from a very large
  * table.
@@ -368,6 +299,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
     return new TransactionOptions();
   }
 
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+    return this.unknownFields;
+  }
+
   public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
     return com.google.spanner.v1.TransactionProto
         .internal_static_google_spanner_v1_TransactionOptions_descriptor;
@@ -443,6 +379,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new ReadWrite();
     }
 
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+      return this.unknownFields;
+    }
+
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.TransactionProto
           .internal_static_google_spanner_v1_TransactionOptions_ReadWrite_descriptor;
@@ -474,7 +415,6 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum {
        *
        * 
        * Default value.
-       *
        * If the value is not specified, the pessimistic read lock is used.
        * 
* @@ -486,7 +426,6 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * *
        * Pessimistic lock mode.
-       *
        * Read locks are acquired immediately on read.
        * 
* @@ -498,7 +437,6 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * *
        * Optimistic lock mode.
-       *
        * Locks for reads within the transaction are not acquired on read.
        * Instead the locks are acquired on a commit to validate that
        * read/queried data has not changed since the transaction started.
@@ -515,7 +453,6 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum {
        *
        * 
        * Default value.
-       *
        * If the value is not specified, the pessimistic read lock is used.
        * 
* @@ -527,7 +464,6 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * *
        * Pessimistic lock mode.
-       *
        * Read locks are acquired immediately on read.
        * 
* @@ -539,7 +475,6 @@ public enum ReadLockMode implements com.google.protobuf.ProtocolMessageEnum { * *
        * Optimistic lock mode.
-       *
        * Locks for reads within the transaction are not acquired on read.
        * Instead the locks are acquired on a commit to validate that
        * read/queried data has not changed since the transaction started.
@@ -1216,6 +1151,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) {
       return new PartitionedDml();
     }
 
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet getUnknownFields() {
+      return this.unknownFields;
+    }
+
     public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() {
       return com.google.spanner.v1.TransactionProto
           .internal_static_google_spanner_v1_TransactionOptions_PartitionedDml_descriptor;
@@ -1645,13 +1585,10 @@ public interface ReadOnlyOrBuilder
      *
      * 
      * Executes all reads at a timestamp >= `min_read_timestamp`.
-     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
-     *
      * Note that this option can only be used in single-use transactions.
-     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -1666,13 +1603,10 @@ public interface ReadOnlyOrBuilder * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
-     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
-     *
      * Note that this option can only be used in single-use transactions.
-     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -1687,13 +1621,10 @@ public interface ReadOnlyOrBuilder * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
-     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
-     *
      * Note that this option can only be used in single-use transactions.
-     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -1712,11 +1643,9 @@ public interface ReadOnlyOrBuilder * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -1736,11 +1665,9 @@ public interface ReadOnlyOrBuilder * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -1760,11 +1687,9 @@ public interface ReadOnlyOrBuilder * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -1782,11 +1707,9 @@ public interface ReadOnlyOrBuilder * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -1805,11 +1728,9 @@ public interface ReadOnlyOrBuilder * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -1828,11 +1749,9 @@ public interface ReadOnlyOrBuilder * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -1847,13 +1766,11 @@ public interface ReadOnlyOrBuilder *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
-     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
-     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -1869,13 +1786,11 @@ public interface ReadOnlyOrBuilder *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
-     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
-     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -1891,13 +1806,11 @@ public interface ReadOnlyOrBuilder *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
-     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
-     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -1921,7 +1834,8 @@ public interface ReadOnlyOrBuilder */ boolean getReturnReadTimestamp(); - com.google.spanner.v1.TransactionOptions.ReadOnly.TimestampBoundCase getTimestampBoundCase(); + public com.google.spanner.v1.TransactionOptions.ReadOnly.TimestampBoundCase + getTimestampBoundCase(); } /** * @@ -1950,6 +1864,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new ReadOnly(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionOptions_ReadOnly_descriptor; @@ -1966,8 +1885,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } private int timestampBoundCase_ = 0; - - @SuppressWarnings("serial") private java.lang.Object timestampBound_; public enum TimestampBoundCase @@ -2066,13 +1983,10 @@ public boolean getStrong() { * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
-     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
-     *
      * Note that this option can only be used in single-use transactions.
-     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -2090,13 +2004,10 @@ public boolean hasMinReadTimestamp() { * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
-     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
-     *
      * Note that this option can only be used in single-use transactions.
-     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -2117,13 +2028,10 @@ public com.google.protobuf.Timestamp getMinReadTimestamp() { * *
      * Executes all reads at a timestamp >= `min_read_timestamp`.
-     *
      * This is useful for requesting fresher data than some previous
      * read, or data that is fresh enough to observe the effects of some
      * previously committed transaction whose timestamp is known.
-     *
      * Note that this option can only be used in single-use transactions.
-     *
      * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
      * Example: `"2014-10-02T15:01:23.045123456Z"`.
      * 
@@ -2149,11 +2057,9 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -2176,11 +2082,9 @@ public boolean hasMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -2206,11 +2110,9 @@ public com.google.protobuf.Duration getMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -2235,11 +2137,9 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -2261,11 +2161,9 @@ public boolean hasReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -2290,11 +2188,9 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -2316,13 +2212,11 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
-     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
-     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -2341,13 +2235,11 @@ public boolean hasExactStaleness() { *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
-     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
-     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -2369,13 +2261,11 @@ public com.google.protobuf.Duration getExactStaleness() { *
      * Executes all reads at a timestamp that is `exact_staleness`
      * old. The timestamp is chosen soon after the read is started.
-     *
      * Guarantees that all writes that have committed more than the
      * specified number of seconds ago are visible. Because Cloud Spanner
      * chooses the exact timestamp, this mode works even if the client's
      * local clock is substantially skewed from Cloud Spanner commit
      * timestamps.
-     *
      * Useful for reading at nearby replicas without the distributed
      * timestamp negotiation overhead of `max_staleness`.
      * 
@@ -3031,13 +2921,10 @@ public Builder clearStrong() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3055,13 +2942,10 @@ public boolean hasMinReadTimestamp() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3089,13 +2973,10 @@ public com.google.protobuf.Timestamp getMinReadTimestamp() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3120,13 +3001,10 @@ public Builder setMinReadTimestamp(com.google.protobuf.Timestamp value) { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3148,13 +3026,10 @@ public Builder setMinReadTimestamp(com.google.protobuf.Timestamp.Builder builder * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3189,13 +3064,10 @@ public Builder mergeMinReadTimestamp(com.google.protobuf.Timestamp value) { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3223,13 +3095,10 @@ public Builder clearMinReadTimestamp() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3244,13 +3113,10 @@ public com.google.protobuf.Timestamp.Builder getMinReadTimestampBuilder() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3273,13 +3139,10 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { * *
        * Executes all reads at a timestamp >= `min_read_timestamp`.
-       *
        * This is useful for requesting fresher data than some previous
        * read, or data that is fresh enough to observe the effects of some
        * previously committed transaction whose timestamp is known.
-       *
        * Note that this option can only be used in single-use transactions.
-       *
        * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds.
        * Example: `"2014-10-02T15:01:23.045123456Z"`.
        * 
@@ -3325,11 +3188,9 @@ public com.google.protobuf.TimestampOrBuilder getMinReadTimestampOrBuilder() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3352,11 +3213,9 @@ public boolean hasMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3389,11 +3248,9 @@ public com.google.protobuf.Duration getMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3423,11 +3280,9 @@ public Builder setMaxStaleness(com.google.protobuf.Duration value) { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3454,11 +3309,9 @@ public Builder setMaxStaleness(com.google.protobuf.Duration.Builder builderForVa * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3498,11 +3351,9 @@ public Builder mergeMaxStaleness(com.google.protobuf.Duration value) { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3535,11 +3386,9 @@ public Builder clearMaxStaleness() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3559,11 +3408,9 @@ public com.google.protobuf.Duration.Builder getMaxStalenessBuilder() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3591,11 +3438,9 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * Cloud Spanner chooses the exact timestamp, this mode works even if * the client's local clock is substantially skewed from Cloud Spanner * commit timestamps. - * * Useful for reading the freshest data available at a nearby * replica, while bounding the possible staleness if the local * replica has fallen behind. - * * Note that this option can only be used in single-use * transactions. *
@@ -3640,11 +3485,9 @@ public com.google.protobuf.DurationOrBuilder getMaxStalenessOrBuilder() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3666,11 +3509,9 @@ public boolean hasReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3702,11 +3543,9 @@ public com.google.protobuf.Timestamp getReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3735,11 +3574,9 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp value) { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3765,11 +3602,9 @@ public Builder setReadTimestamp(com.google.protobuf.Timestamp.Builder builderFor * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3808,11 +3643,9 @@ public Builder mergeReadTimestamp(com.google.protobuf.Timestamp value) { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3844,11 +3677,9 @@ public Builder clearReadTimestamp() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3867,11 +3698,9 @@ public com.google.protobuf.Timestamp.Builder getReadTimestampBuilder() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3898,11 +3727,9 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { * the same timestamp always returns the same data. If the * timestamp is in the future, the read will block until the * specified timestamp, modulo the read's deadline. - * * Useful for large scale consistent reads such as mapreduces, or * for coordinating many reads against a consistent snapshot of the * data. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -3944,13 +3771,11 @@ public com.google.protobuf.TimestampOrBuilder getReadTimestampOrBuilder() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -3969,13 +3794,11 @@ public boolean hasExactStaleness() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4004,13 +3827,11 @@ public com.google.protobuf.Duration getExactStaleness() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4036,13 +3857,11 @@ public Builder setExactStaleness(com.google.protobuf.Duration value) { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4065,13 +3884,11 @@ public Builder setExactStaleness(com.google.protobuf.Duration.Builder builderFor *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4107,13 +3924,11 @@ public Builder mergeExactStaleness(com.google.protobuf.Duration value) { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4142,13 +3957,11 @@ public Builder clearExactStaleness() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4164,13 +3977,11 @@ public com.google.protobuf.Duration.Builder getExactStalenessBuilder() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4194,13 +4005,11 @@ public com.google.protobuf.DurationOrBuilder getExactStalenessOrBuilder() { *
        * Executes all reads at a timestamp that is `exact_staleness`
        * old. The timestamp is chosen soon after the read is started.
-       *
        * Guarantees that all writes that have committed more than the
        * specified number of seconds ago are visible. Because Cloud Spanner
        * chooses the exact timestamp, this mode works even if the client's
        * local clock is substantially skewed from Cloud Spanner commit
        * timestamps.
-       *
        * Useful for reading at nearby replicas without the distributed
        * timestamp negotiation overhead of `max_staleness`.
        * 
@@ -4355,8 +4164,6 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly getDefaultInstanceForTy } private int modeCase_ = 0; - - @SuppressWarnings("serial") private java.lang.Object mode_; public enum ModeCase @@ -4412,7 +4219,6 @@ public ModeCase getModeCase() { * *
    * Transaction may write.
-   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -4431,7 +4237,6 @@ public boolean hasReadWrite() {
    *
    * 
    * Transaction may write.
-   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -4453,7 +4258,6 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite getReadWrite() {
    *
    * 
    * Transaction may write.
-   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -4475,7 +4279,6 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO
    *
    * 
    * Partitioned DML transaction.
-   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -4494,7 +4297,6 @@ public boolean hasPartitionedDml() {
    *
    * 
    * Partitioned DML transaction.
-   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -4516,7 +4318,6 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml
    *
    * 
    * Partitioned DML transaction.
-   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -4539,7 +4340,6 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml
    *
    * 
    * Transaction will not write.
-   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -4558,7 +4358,6 @@ public boolean hasReadOnly() {
    *
    * 
    * Transaction will not write.
-   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -4580,7 +4379,6 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly getReadOnly() {
    *
    * 
    * Transaction will not write.
-   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -4804,23 +4602,18 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    *
    * 
    * Transactions:
-   *
    * Each session can have at most one active transaction at a time (note that
    * standalone reads and queries use a transaction internally and do count
    * towards the one transaction limit). After the active transaction is
    * completed, the session can immediately be re-used for the next transaction.
    * It is not necessary to create a new session for each transaction.
-   *
    * Transaction modes:
-   *
    * Cloud Spanner supports three transaction modes:
-   *
    *   1. Locking read-write. This type of transaction is the only way
    *      to write data into Cloud Spanner. These transactions rely on
    *      pessimistic locking and, if necessary, two-phase commit.
    *      Locking read-write transactions may abort, requiring the
    *      application to retry.
-   *
    *   2. Snapshot read-only. Snapshot read-only transactions provide guaranteed
    *      consistency across several reads, but do not allow
    *      writes. Snapshot read-only transactions can be configured to read at
@@ -4829,35 +4622,28 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    *      guaranteed to see the effects of all transactions that have committed
    *      before the start of the read). Snapshot read-only transactions do not
    *      need to be committed.
-   *
    *      Queries on change streams must be performed with the snapshot read-only
    *      transaction mode, specifying a strong read. Please see
    *      [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong]
    *      for more details.
-   *
    *   3. Partitioned DML. This type of transaction is used to execute
    *      a single Partitioned DML statement. Partitioned DML partitions
    *      the key space and runs the DML statement over each partition
    *      in parallel using separate, internal transactions that commit
    *      independently. Partitioned DML transactions do not need to be
    *      committed.
-   *
    * For transactions that only read, snapshot read-only transactions
    * provide simpler semantics and are almost always faster. In
    * particular, read-only transactions do not take locks, so they do
    * not conflict with read-write transactions. As a consequence of not
    * taking locks, they also do not abort, so retry loops are not needed.
-   *
    * Transactions may only read-write data in a single database. They
    * may, however, read-write data in different tables within that
    * database.
-   *
    * Locking read-write transactions:
-   *
    * Locking transactions may be used to atomically read-modify-write
    * data anywhere in a database. This type of transaction is externally
    * consistent.
-   *
    * Clients should attempt to minimize the amount of time a transaction
    * is active. Faster transactions commit with higher probability
    * and cause less contention. Cloud Spanner attempts to keep read locks
@@ -4867,113 +4653,87 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    * [Rollback][google.spanner.v1.Spanner.Rollback]. Long periods of
    * inactivity at the client may cause Cloud Spanner to release a
    * transaction's locks and abort it.
-   *
    * Conceptually, a read-write transaction consists of zero or more
    * reads or SQL statements followed by
    * [Commit][google.spanner.v1.Spanner.Commit]. At any time before
    * [Commit][google.spanner.v1.Spanner.Commit], the client can send a
    * [Rollback][google.spanner.v1.Spanner.Rollback] request to abort the
    * transaction.
-   *
    * Semantics:
-   *
    * Cloud Spanner can commit the transaction if all read locks it acquired
    * are still valid at commit time, and it is able to acquire write
    * locks for all writes. Cloud Spanner can abort the transaction for any
    * reason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees
    * that the transaction has not modified any user data in Cloud Spanner.
-   *
    * Unless the transaction commits, Cloud Spanner makes no guarantees about
    * how long the transaction's locks were held for. It is an error to
    * use Cloud Spanner locks for any sort of mutual exclusion other than
    * between Cloud Spanner transactions themselves.
-   *
    * Retrying aborted transactions:
-   *
    * When a transaction aborts, the application can choose to retry the
    * whole transaction again. To maximize the chances of successfully
    * committing the retry, the client should execute the retry in the
    * same session as the original attempt. The original session's lock
    * priority increases with each consecutive abort, meaning that each
    * attempt has a slightly better chance of success than the previous.
-   *
    * Under some circumstances (for example, many transactions attempting to
    * modify the same row(s)), a transaction can abort many times in a
    * short period before successfully committing. Thus, it is not a good
    * idea to cap the number of retries a transaction can attempt;
    * instead, it is better to limit the total amount of time spent
    * retrying.
-   *
    * Idle transactions:
-   *
    * A transaction is considered idle if it has no outstanding reads or
    * SQL queries and has not started a read or SQL query within the last 10
    * seconds. Idle transactions can be aborted by Cloud Spanner so that they
    * don't hold on to locks indefinitely. If an idle transaction is aborted, the
    * commit will fail with error `ABORTED`.
-   *
    * If this behavior is undesirable, periodically executing a simple
    * SQL query in the transaction (for example, `SELECT 1`) prevents the
    * transaction from becoming idle.
-   *
    * Snapshot read-only transactions:
-   *
    * Snapshot read-only transactions provides a simpler method than
    * locking read-write transactions for doing several consistent
    * reads. However, this type of transaction does not support writes.
-   *
    * Snapshot transactions do not take locks. Instead, they work by
    * choosing a Cloud Spanner timestamp, then executing all reads at that
    * timestamp. Since they do not acquire locks, they do not block
    * concurrent read-write transactions.
-   *
    * Unlike locking read-write transactions, snapshot read-only
    * transactions never abort. They can fail if the chosen read
    * timestamp is garbage collected; however, the default garbage
    * collection policy is generous enough that most applications do not
    * need to worry about this in practice.
-   *
    * Snapshot read-only transactions do not need to call
    * [Commit][google.spanner.v1.Spanner.Commit] or
    * [Rollback][google.spanner.v1.Spanner.Rollback] (and in fact are not
    * permitted to do so).
-   *
    * To execute a snapshot transaction, the client specifies a timestamp
    * bound, which tells Cloud Spanner how to choose a read timestamp.
-   *
    * The types of timestamp bound are:
-   *
    *   - Strong (the default).
    *   - Bounded staleness.
    *   - Exact staleness.
-   *
    * If the Cloud Spanner database to be read is geographically distributed,
    * stale read-only transactions can execute more quickly than strong
    * or read-write transactions, because they are able to execute far
    * from the leader replica.
-   *
    * Each type of timestamp bound is discussed in detail below.
-   *
    * Strong: Strong reads are guaranteed to see the effects of all transactions
    * that have committed before the start of the read. Furthermore, all
    * rows yielded by a single read are consistent with each other -- if
    * any part of the read observes a transaction, all parts of the read
    * see the transaction.
-   *
    * Strong reads are not repeatable: two consecutive strong read-only
    * transactions might return inconsistent results if there are
    * concurrent writes. If consistency across reads is required, the
    * reads should be executed within a transaction or at an exact read
    * timestamp.
-   *
    * Queries on change streams (see below for more details) must also specify
    * the strong read timestamp bound.
-   *
    * See
    * [TransactionOptions.ReadOnly.strong][google.spanner.v1.TransactionOptions.ReadOnly.strong].
-   *
    * Exact staleness:
-   *
    * These timestamp bounds execute reads at a user-specified
    * timestamp. Reads at a timestamp are guaranteed to see a consistent
    * prefix of the global transaction history: they observe
@@ -4982,54 +4742,42 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    * transactions with a larger commit timestamp. They will block until
    * all conflicting transactions that may be assigned commit timestamps
    * <= the read timestamp have finished.
-   *
    * The timestamp can either be expressed as an absolute Cloud Spanner commit
    * timestamp or a staleness relative to the current time.
-   *
    * These modes do not require a "negotiation phase" to pick a
    * timestamp. As a result, they execute slightly faster than the
    * equivalent boundedly stale concurrency modes. On the other hand,
    * boundedly stale reads usually return fresher results.
-   *
    * See
    * [TransactionOptions.ReadOnly.read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.read_timestamp]
    * and
    * [TransactionOptions.ReadOnly.exact_staleness][google.spanner.v1.TransactionOptions.ReadOnly.exact_staleness].
-   *
    * Bounded staleness:
-   *
    * Bounded staleness modes allow Cloud Spanner to pick the read timestamp,
    * subject to a user-provided staleness bound. Cloud Spanner chooses the
    * newest timestamp within the staleness bound that allows execution
    * of the reads at the closest available replica without blocking.
-   *
    * All rows yielded are consistent with each other -- if any part of
    * the read observes a transaction, all parts of the read see the
    * transaction. Boundedly stale reads are not repeatable: two stale
    * reads, even if they use the same staleness bound, can execute at
    * different timestamps and thus return inconsistent results.
-   *
    * Boundedly stale reads execute in two phases: the first phase
    * negotiates a timestamp among all replicas needed to serve the
    * read. In the second phase, reads are executed at the negotiated
    * timestamp.
-   *
    * As a result of the two phase execution, bounded staleness reads are
    * usually a little slower than comparable exact staleness
    * reads. However, they are typically able to return fresher
    * results, and are more likely to execute at the closest replica.
-   *
    * Because the timestamp negotiation requires up-front knowledge of
    * which rows will be read, it can only be used with single-use
    * read-only transactions.
-   *
    * See
    * [TransactionOptions.ReadOnly.max_staleness][google.spanner.v1.TransactionOptions.ReadOnly.max_staleness]
    * and
    * [TransactionOptions.ReadOnly.min_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.min_read_timestamp].
-   *
    * Old read timestamps and garbage collection:
-   *
    * Cloud Spanner continuously garbage collects deleted and overwritten data
    * in the background to reclaim storage space. This process is known
    * as "version GC". By default, version GC reclaims versions after they
@@ -5038,23 +4786,18 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    * restriction also applies to in-progress reads and/or SQL queries whose
    * timestamp become too old while executing. Reads and SQL queries with
    * too-old read timestamps fail with the error `FAILED_PRECONDITION`.
-   *
    * You can configure and extend the `VERSION_RETENTION_PERIOD` of a
    * database up to a period as long as one week, which allows Cloud Spanner
    * to perform reads up to one week in the past.
-   *
    * Querying change Streams:
-   *
    * A Change Stream is a schema object that can be configured to watch data
    * changes on the entire database, a set of tables, or a set of columns
    * in a database.
-   *
    * When a change stream is created, Spanner automatically defines a
    * corresponding SQL Table-Valued Function (TVF) that can be used to query
    * the change records in the associated change stream using the
    * ExecuteStreamingSql API. The name of the TVF for a change stream is
    * generated from the name of the change stream: READ_<change_stream_name>.
-   *
    * All queries on change stream TVFs must be executed using the
    * ExecuteStreamingSql API with a single-use read-only transaction with a
    * strong read-only timestamp_bound. The change stream TVF allows users to
@@ -5062,44 +4805,34 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    * interest. All change records within the retention period is accessible
    * using the strong read-only timestamp_bound. All other TransactionOptions
    * are invalid for change stream queries.
-   *
    * In addition, if TransactionOptions.read_only.return_read_timestamp is set
    * to true, a special value of 2^63 - 2 will be returned in the
    * [Transaction][google.spanner.v1.Transaction] message that describes the
    * transaction, instead of a valid read timestamp. This special value should be
    * discarded and not used for any subsequent queries.
-   *
    * Please see https://cloud.google.com/spanner/docs/change-streams
    * for more details on how to query the change stream TVFs.
-   *
    * Partitioned DML transactions:
-   *
    * Partitioned DML transactions are used to execute DML statements with a
    * different execution strategy that provides different, and often better,
    * scalability properties for large, table-wide operations than DML in a
    * ReadWrite transaction. Smaller scoped statements, such as an OLTP workload,
    * should prefer using ReadWrite transactions.
-   *
    * Partitioned DML partitions the keyspace and runs the DML statement on each
    * partition in separate, internal transactions. These transactions commit
    * automatically when complete, and run independently from one another.
-   *
    * To reduce lock contention, this execution strategy only acquires read locks
    * on rows that match the WHERE clause of the statement. Additionally, the
    * smaller per-partition transactions hold locks for less time.
-   *
    * That said, Partitioned DML is not a drop-in replacement for standard DML used
    * in ReadWrite transactions.
-   *
    *  - The DML statement must be fully-partitionable. Specifically, the statement
    *    must be expressible as the union of many statements which each access only
    *    a single row of the table.
-   *
    *  - The statement is not applied atomically to all rows of the table. Rather,
    *    the statement is applied atomically to partitions of the table, in
    *    independent transactions. Secondary index rows are updated atomically
    *    with the base table rows.
-   *
    *  - Partitioned DML does not guarantee exactly-once execution semantics
    *    against a partition. The statement will be applied at least once to each
    *    partition. It is strongly recommended that the DML statement should be
@@ -5107,23 +4840,19 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build
    *    dangerous to run a statement such as
    *    `UPDATE table SET column = column + 1` as it could be run multiple times
    *    against some rows.
-   *
    *  - The partitions are committed automatically - there is no support for
    *    Commit or Rollback. If the call returns an error, or if the client issuing
    *    the ExecuteSql call dies, it is possible that some rows had the statement
    *    executed on them successfully. It is also possible that statement was
    *    never executed against other rows.
-   *
    *  - Partitioned DML transactions may only contain the execution of a single
    *    DML statement via ExecuteSql or ExecuteStreamingSql.
-   *
    *  - If any error is encountered during the execution of the partitioned DML
    *    operation (for instance, a UNIQUE INDEX violation, division by zero, or a
    *    value that cannot be stored due to schema constraints), then the
    *    operation is stopped at that point and an error is returned. It is
    *    possible that at this point, some partitions have been committed (or even
    *    committed multiple times), and other partitions have not been run at all.
-   *
    * Given the above, Partitioned DML is good fit for large, database-wide,
    * operations that are idempotent, such as deleting old rows from a very large
    * table.
@@ -5378,7 +5107,6 @@ public Builder clearMode() {
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5397,7 +5125,6 @@ public boolean hasReadWrite() {
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5426,7 +5153,6 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite getReadWrite() {
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5452,7 +5178,6 @@ public Builder setReadWrite(com.google.spanner.v1.TransactionOptions.ReadWrite v
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5476,7 +5201,6 @@ public Builder setReadWrite(
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5512,7 +5236,6 @@ public Builder mergeReadWrite(com.google.spanner.v1.TransactionOptions.ReadWrite
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5541,7 +5264,6 @@ public Builder clearReadWrite() {
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5557,7 +5279,6 @@ public com.google.spanner.v1.TransactionOptions.ReadWrite.Builder getReadWriteBu
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5581,7 +5302,6 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO
      *
      * 
      * Transaction may write.
-     *
      * Authorization to begin a read-write transaction requires
      * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
      * on the `session` resource.
@@ -5623,7 +5343,6 @@ public com.google.spanner.v1.TransactionOptions.ReadWriteOrBuilder getReadWriteO
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5642,7 +5361,6 @@ public boolean hasPartitionedDml() {
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5671,7 +5389,6 @@ public com.google.spanner.v1.TransactionOptions.PartitionedDml getPartitionedDml
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5698,7 +5415,6 @@ public Builder setPartitionedDml(
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5722,7 +5438,6 @@ public Builder setPartitionedDml(
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5760,7 +5475,6 @@ public Builder mergePartitionedDml(
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5789,7 +5503,6 @@ public Builder clearPartitionedDml() {
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5806,7 +5519,6 @@ public Builder clearPartitionedDml() {
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5831,7 +5543,6 @@ public Builder clearPartitionedDml() {
      *
      * 
      * Partitioned DML transaction.
-     *
      * Authorization to begin a Partitioned DML transaction requires
      * `spanner.databases.beginPartitionedDmlTransaction` permission
      * on the `session` resource.
@@ -5873,7 +5584,6 @@ public Builder clearPartitionedDml() {
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5892,7 +5602,6 @@ public boolean hasReadOnly() {
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5921,7 +5630,6 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly getReadOnly() {
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5947,7 +5655,6 @@ public Builder setReadOnly(com.google.spanner.v1.TransactionOptions.ReadOnly val
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -5971,7 +5678,6 @@ public Builder setReadOnly(
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -6007,7 +5713,6 @@ public Builder mergeReadOnly(com.google.spanner.v1.TransactionOptions.ReadOnly v
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -6036,7 +5741,6 @@ public Builder clearReadOnly() {
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -6052,7 +5756,6 @@ public com.google.spanner.v1.TransactionOptions.ReadOnly.Builder getReadOnlyBuil
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
@@ -6076,7 +5779,6 @@ public com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrB
      *
      * 
      * Transaction will not write.
-     *
      * Authorization to begin a read-only transaction requires
      * `spanner.databases.beginReadOnlyTransaction` permission
      * on the `session` resource.
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java
index e2f2613bb69..c7b46083a13 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOptionsOrBuilder.java
@@ -28,7 +28,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction may write.
-   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -44,7 +43,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction may write.
-   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -60,7 +58,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction may write.
-   *
    * Authorization to begin a read-write transaction requires
    * `spanner.databases.beginOrRollbackReadWriteTransaction` permission
    * on the `session` resource.
@@ -75,7 +72,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Partitioned DML transaction.
-   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -91,7 +87,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Partitioned DML transaction.
-   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -107,7 +102,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Partitioned DML transaction.
-   *
    * Authorization to begin a Partitioned DML transaction requires
    * `spanner.databases.beginPartitionedDmlTransaction` permission
    * on the `session` resource.
@@ -122,7 +116,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction will not write.
-   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -138,7 +131,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction will not write.
-   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -154,7 +146,6 @@ public interface TransactionOptionsOrBuilder
    *
    * 
    * Transaction will not write.
-   *
    * Authorization to begin a read-only transaction requires
    * `spanner.databases.beginReadOnlyTransaction` permission
    * on the `session` resource.
@@ -164,5 +155,5 @@ public interface TransactionOptionsOrBuilder
    */
   com.google.spanner.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyOrBuilder();
 
-  com.google.spanner.v1.TransactionOptions.ModeCase getModeCase();
+  public com.google.spanner.v1.TransactionOptions.ModeCase getModeCase();
 }
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java
index 57893613d67..24a9ee693d9 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionOrBuilder.java
@@ -32,7 +32,6 @@ public interface TransactionOrBuilder
    * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql],
    * [Commit][google.spanner.v1.Spanner.Commit], or
    * [Rollback][google.spanner.v1.Spanner.Rollback] calls.
-   *
    * Single-use read-only transactions do not have IDs, because
    * single-use transactions do not support multiple requests.
    * 
@@ -50,7 +49,6 @@ public interface TransactionOrBuilder * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -67,7 +65,6 @@ public interface TransactionOrBuilder * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
@@ -84,7 +81,6 @@ public interface TransactionOrBuilder * For snapshot read-only transactions, the read timestamp chosen * for the transaction. Not returned by default: see * [TransactionOptions.ReadOnly.return_read_timestamp][google.spanner.v1.TransactionOptions.ReadOnly.return_read_timestamp]. - * * A timestamp in RFC3339 UTC \"Zulu\" format, accurate to nanoseconds. * Example: `"2014-10-02T15:01:23.045123456Z"`. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java index b96de165770..3d3062141b9 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelector.java @@ -25,7 +25,6 @@ * This message is used to select the transaction in which a * [Read][google.spanner.v1.Spanner.Read] or * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] call runs. - * * See [TransactionOptions][google.spanner.v1.TransactionOptions] for more * information about transactions. *
@@ -50,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new TransactionSelector(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TransactionProto .internal_static_google_spanner_v1_TransactionSelector_descriptor; @@ -66,8 +70,6 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } private int selectorCase_ = 0; - - @SuppressWarnings("serial") private java.lang.Object selector_; public enum SelectorCase @@ -480,7 +482,6 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build * This message is used to select the transaction in which a * [Read][google.spanner.v1.Spanner.Read] or * [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] call runs. - * * See [TransactionOptions][google.spanner.v1.TransactionOptions] for more * information about transactions. *
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java index 478bc44b868..ff10cc1510b 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TransactionSelectorOrBuilder.java @@ -133,5 +133,5 @@ public interface TransactionSelectorOrBuilder */ com.google.spanner.v1.TransactionOptionsOrBuilder getBeginOrBuilder(); - com.google.spanner.v1.TransactionSelector.SelectorCase getSelectorCase(); + public com.google.spanner.v1.TransactionSelector.SelectorCase getSelectorCase(); } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java index eba671dad85..6785a32ef32 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/Type.java @@ -49,6 +49,11 @@ protected java.lang.Object newInstance(UnusedPrivateParameter unused) { return new Type(); } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; + } + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return com.google.spanner.v1.TypeProto.internal_static_google_spanner_v1_Type_descriptor; } diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java index 5ce677274bd..4b6561e9def 100644 --- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java +++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeCode.java @@ -24,7 +24,6 @@ *
  * `TypeCode` is used as part of [Type][google.spanner.v1.Type] to
  * indicate the type of a Cloud Spanner value.
- *
  * Each legal value of a type can be encoded to or decoded from a JSON
  * value, using the encodings described below. All Cloud Spanner values can
  * be `null`, regardless of type; `null`s are always encoded as a JSON
@@ -81,7 +80,6 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * 
    * Encoded as `string` in RFC 3339 timestamp format. The time zone
    * must be present, and must be `"Z"`.
-   *
    * If the schema has the column option
    * `allow_commit_timestamp=true`, the placeholder string
    * `"spanner.commit_timestamp()"` can be used to instruct the system
@@ -154,7 +152,6 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * <br>Decimal format:
    * <br>`[+-]Digits[.[Digits]]` or
    * <br>`[+-][Digits].Digits`
-   *
    * Scientific notation:
    * <br>`[+-]Digits[.[Digits]][ExponentIndicator[+-]Digits]` or
    * <br>`[+-][Digits].Digits[ExponentIndicator[+-]Digits]`
@@ -170,7 +167,6 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * 
    * Encoded as a JSON-formatted `string` as described in RFC 7159. The
    * following rules are applied when parsing JSON input:
-   *
    * - Whitespace characters are not preserved.
    * - If a JSON object has duplicate keys, only the first key is preserved.
    * - Members of a JSON object are not guaranteed to have their order
@@ -231,7 +227,6 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * 
    * Encoded as `string` in RFC 3339 timestamp format. The time zone
    * must be present, and must be `"Z"`.
-   *
    * If the schema has the column option
    * `allow_commit_timestamp=true`, the placeholder string
    * `"spanner.commit_timestamp()"` can be used to instruct the system
@@ -304,7 +299,6 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * <br>Decimal format:
    * <br>`[+-]Digits[.[Digits]]` or
    * <br>`[+-][Digits].Digits`
-   *
    * Scientific notation:
    * <br>`[+-]Digits[.[Digits]][ExponentIndicator[+-]Digits]` or
    * <br>`[+-][Digits].Digits[ExponentIndicator[+-]Digits]`
@@ -320,7 +314,6 @@ public enum TypeCode implements com.google.protobuf.ProtocolMessageEnum {
    * 
    * Encoded as a JSON-formatted `string` as described in RFC 7159. The
    * following rules are applied when parsing JSON input:
-   *
    * - Whitespace characters are not preserved.
    * - If a JSON object has duplicate keys, only the first key is preserved.
    * - Members of a JSON object are not guaranteed to have their order
diff --git a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
index 1c024ce208a..cc18356b426 100644
--- a/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
+++ b/proto-google-cloud-spanner-v1/src/main/java/com/google/spanner/v1/TypeProto.java
@@ -50,26 +50,26 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
     java.lang.String[] descriptorData = {
       "\n\034google/spanner/v1/type.proto\022\021google.s"
           + "panner.v1\032\037google/api/field_behavior.pro"
-          + "to\"\340\001\n\004Type\022/\n\004code\030\001 \001(\0162\033.google.spann"
-          + "er.v1.TypeCodeB\004\342A\001\002\0223\n\022array_element_ty"
-          + "pe\030\002 \001(\0132\027.google.spanner.v1.Type\0222\n\013str"
-          + "uct_type\030\003 \001(\0132\035.google.spanner.v1.Struc"
-          + "tType\022>\n\017type_annotation\030\004 \001(\0162%.google."
-          + "spanner.v1.TypeAnnotationCode\"\177\n\nStructT"
-          + "ype\0223\n\006fields\030\001 \003(\0132#.google.spanner.v1."
-          + "StructType.Field\032<\n\005Field\022\014\n\004name\030\001 \001(\t\022"
-          + "%\n\004type\030\002 \001(\0132\027.google.spanner.v1.Type*\245"
-          + "\001\n\010TypeCode\022\031\n\025TYPE_CODE_UNSPECIFIED\020\000\022\010"
-          + "\n\004BOOL\020\001\022\t\n\005INT64\020\002\022\013\n\007FLOAT64\020\003\022\r\n\tTIME"
-          + "STAMP\020\004\022\010\n\004DATE\020\005\022\n\n\006STRING\020\006\022\t\n\005BYTES\020\007"
-          + "\022\t\n\005ARRAY\020\010\022\n\n\006STRUCT\020\t\022\013\n\007NUMERIC\020\n\022\010\n\004"
-          + "JSON\020\013*X\n\022TypeAnnotationCode\022$\n TYPE_ANN"
-          + "OTATION_CODE_UNSPECIFIED\020\000\022\016\n\nPG_NUMERIC"
-          + "\020\002\022\014\n\010PG_JSONB\020\003B\254\001\n\025com.google.spanner."
-          + "v1B\tTypeProtoP\001Z5cloud.google.com/go/spa"
-          + "nner/apiv1/spannerpb;spannerpb\252\002\027Google."
-          + "Cloud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\"
-          + "V1\352\002\032Google::Cloud::Spanner::V1b\006proto3"
+          + "to\"\337\001\n\004Type\022.\n\004code\030\001 \001(\0162\033.google.spann"
+          + "er.v1.TypeCodeB\003\340A\002\0223\n\022array_element_typ"
+          + "e\030\002 \001(\0132\027.google.spanner.v1.Type\0222\n\013stru"
+          + "ct_type\030\003 \001(\0132\035.google.spanner.v1.Struct"
+          + "Type\022>\n\017type_annotation\030\004 \001(\0162%.google.s"
+          + "panner.v1.TypeAnnotationCode\"\177\n\nStructTy"
+          + "pe\0223\n\006fields\030\001 \003(\0132#.google.spanner.v1.S"
+          + "tructType.Field\032<\n\005Field\022\014\n\004name\030\001 \001(\t\022%"
+          + "\n\004type\030\002 \001(\0132\027.google.spanner.v1.Type*\245\001"
+          + "\n\010TypeCode\022\031\n\025TYPE_CODE_UNSPECIFIED\020\000\022\010\n"
+          + "\004BOOL\020\001\022\t\n\005INT64\020\002\022\013\n\007FLOAT64\020\003\022\r\n\tTIMES"
+          + "TAMP\020\004\022\010\n\004DATE\020\005\022\n\n\006STRING\020\006\022\t\n\005BYTES\020\007\022"
+          + "\t\n\005ARRAY\020\010\022\n\n\006STRUCT\020\t\022\013\n\007NUMERIC\020\n\022\010\n\004J"
+          + "SON\020\013*X\n\022TypeAnnotationCode\022$\n TYPE_ANNO"
+          + "TATION_CODE_UNSPECIFIED\020\000\022\016\n\nPG_NUMERIC\020"
+          + "\002\022\014\n\010PG_JSONB\020\003B\254\001\n\025com.google.spanner.v"
+          + "1B\tTypeProtoP\001Z5cloud.google.com/go/span"
+          + "ner/apiv1/spannerpb;spannerpb\252\002\027Google.C"
+          + "loud.Spanner.V1\312\002\027Google\\Cloud\\Spanner\\V"
+          + "1\352\002\032Google::Cloud::Spanner::V1b\006proto3"
     };
     descriptor =
         com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
diff --git a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto
index e3e9293c618..0c71e03d9a6 100644
--- a/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto
+++ b/proto-google-cloud-spanner-v1/src/main/proto/google/spanner/v1/spanner.proto
@@ -200,20 +200,6 @@ service Spanner {
     };
   }
 
-  // Batches the supplied mutations in a collection of efficient transactions.
-  // The mutations are applied non-atomically in an unspecified order and
-  // thus, they must be independent of each other. Partial failure is possible,
-  // i.e., some mutations may have been applied successfully, while some may
-  // have failed. The results of individual batches are streamed into the
-  // response as and when the batches are applied.
-  rpc BatchWrite(BatchWriteRequest) returns (stream BatchWriteResponse) {
-    option (google.api.http) = {
-      post: "/v1/{session=projects/*/instances/*/databases/*/sessions/*}:batchWrite"
-      body: "*"
-    };
-    option (google.api.method_signature) = "session,mutations";
-  }
-
   // Begins a new transaction. This step can often be skipped:
   // [Read][google.spanner.v1.Spanner.Read], [ExecuteSql][google.spanner.v1.Spanner.ExecuteSql] and
   // [Commit][google.spanner.v1.Spanner.Commit] can begin a new transaction as a
@@ -318,37 +304,6 @@ message CreateSessionRequest {
   Session session = 2 [(google.api.field_behavior) = REQUIRED];
 }
 
-// The request for [BatchWrite][Spanner.BatchWrite].
-message BatchWriteRequest {
-  // The session in which the batch request is to be run.
-  string session = 1 [
-    (google.api.field_behavior) = REQUIRED,
-    (google.api.resource_reference).type = "spanner.googleapis.com/Session"
-  ];
-
-  // The mutations to be applied non-atomically.
-  repeated Mutation mutations = 2 [
-    (google.api.field_behavior) = REQUIRED
-  ];
-
-  // Common options for this request.
-  RequestOptions request_options = 3;
-}
-
-// The result of applying a batch of mutations.
-message BatchWriteResponse {
-  // The mutations applied in this batch. The values index into the `mutations`
-  // field in the corresponding BatchWriteRequest.
-  repeated int32 indexes = 1;
-
-  // An `OK` status indicates success. Any other status indicates a failure.
-  google.rpc.Status status = 2;
-
-  // The commit timestamp of the transaction that applied this batch.
-  // Present if `status` is `OK`, absent otherwise.
-  google.protobuf.Timestamp commit_timestamp = 3;
-}
-
 // The request for [BatchCreateSessions][google.spanner.v1.Spanner.BatchCreateSessions].
 message BatchCreateSessionsRequest {
   // Required. The database in which the new sessions are created.

From acece36c7250a226dbc6a075c8f1291971b990db Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Thu, 6 Jul 2023 13:10:10 +0000
Subject: [PATCH 16/23] remove autogenerated tests

---
 .../cloud/spanner/v1/MockSpannerImpl.java     | 23 --------
 .../spanner/v1/SpannerClientHttpJsonTest.java | 11 ----
 .../cloud/spanner/v1/SpannerClientTest.java   | 58 -------------------
 3 files changed, 92 deletions(-)

diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java
index 303e5cb9f1d..d6176e1f277 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/MockSpannerImpl.java
@@ -21,8 +21,6 @@
 import com.google.protobuf.Empty;
 import com.google.spanner.v1.BatchCreateSessionsRequest;
 import com.google.spanner.v1.BatchCreateSessionsResponse;
-import com.google.spanner.v1.BatchWriteRequest;
-import com.google.spanner.v1.BatchWriteResponse;
 import com.google.spanner.v1.BeginTransactionRequest;
 import com.google.spanner.v1.CommitRequest;
 import com.google.spanner.v1.CommitResponse;
@@ -290,27 +288,6 @@ public void streamingRead(
     }
   }
 
-  @Override
-  public void batchWrite(
-      BatchWriteRequest request, StreamObserver responseObserver) {
-    Object response = responses.poll();
-    if (response instanceof BatchWriteResponse) {
-      requests.add(request);
-      responseObserver.onNext(((BatchWriteResponse) response));
-      responseObserver.onCompleted();
-    } else if (response instanceof Exception) {
-      responseObserver.onError(((Exception) response));
-    } else {
-      responseObserver.onError(
-          new IllegalArgumentException(
-              String.format(
-                  "Unrecognized response type %s for method BatchWrite, expected %s or %s",
-                  response == null ? "null" : response.getClass().getName(),
-                  BatchWriteResponse.class.getName(),
-                  Exception.class.getName())));
-    }
-  }
-
   @Override
   public void beginTransaction(
       BeginTransactionRequest request, StreamObserver responseObserver) {
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java
index adcc245e4be..04bd5df2166 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/v1/SpannerClientHttpJsonTest.java
@@ -806,17 +806,6 @@ public void streamingReadExceptionTest() throws Exception {
     mockService.addException(exception);
   }
 
-  @Test
-  public void batchWriteTest() throws Exception {}
-
-  @Test
-  public void batchWriteExceptionTest() throws Exception {
-    ApiException exception =
-        ApiExceptionFactory.createException(
-            new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false);
-    mockService.addException(exception);
-  }
-
   @Test
   public void beginTransactionTest() throws Exception {
     Transaction expectedResponse =
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 d9e88c6ef13..9e23c7a0523 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
@@ -39,8 +39,6 @@
 import com.google.rpc.Status;
 import com.google.spanner.v1.BatchCreateSessionsRequest;
 import com.google.spanner.v1.BatchCreateSessionsResponse;
-import com.google.spanner.v1.BatchWriteRequest;
-import com.google.spanner.v1.BatchWriteResponse;
 import com.google.spanner.v1.BeginTransactionRequest;
 import com.google.spanner.v1.CommitRequest;
 import com.google.spanner.v1.CommitResponse;
@@ -897,62 +895,6 @@ public void streamingReadExceptionTest() throws Exception {
     }
   }
 
-  @Test
-  public void batchWriteTest() throws Exception {
-    BatchWriteResponse expectedResponse =
-        BatchWriteResponse.newBuilder()
-            .addAllIndexes(new ArrayList())
-            .setStatus(Status.newBuilder().build())
-            .setCommitTimestamp(Timestamp.newBuilder().build())
-            .build();
-    mockSpanner.addResponse(expectedResponse);
-    BatchWriteRequest request =
-        BatchWriteRequest.newBuilder()
-            .setSession(
-                SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString())
-            .addAllMutations(new ArrayList())
-            .setRequestOptions(RequestOptions.newBuilder().build())
-            .build();
-
-    MockStreamObserver responseObserver = new MockStreamObserver<>();
-
-    ServerStreamingCallable callable =
-        client.batchWriteCallable();
-    callable.serverStreamingCall(request, responseObserver);
-
-    List actualResponses = responseObserver.future().get();
-    Assert.assertEquals(1, actualResponses.size());
-    Assert.assertEquals(expectedResponse, actualResponses.get(0));
-  }
-
-  @Test
-  public void batchWriteExceptionTest() throws Exception {
-    StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT);
-    mockSpanner.addException(exception);
-    BatchWriteRequest request =
-        BatchWriteRequest.newBuilder()
-            .setSession(
-                SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString())
-            .addAllMutations(new ArrayList())
-            .setRequestOptions(RequestOptions.newBuilder().build())
-            .build();
-
-    MockStreamObserver responseObserver = new MockStreamObserver<>();
-
-    ServerStreamingCallable callable =
-        client.batchWriteCallable();
-    callable.serverStreamingCall(request, responseObserver);
-
-    try {
-      List actualResponses = responseObserver.future().get();
-      Assert.fail("No exception thrown");
-    } catch (ExecutionException e) {
-      Assert.assertTrue(e.getCause() instanceof InvalidArgumentException);
-      InvalidArgumentException apiException = ((InvalidArgumentException) e.getCause());
-      Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode());
-    }
-  }
-
   @Test
   public void beginTransactionTest() throws Exception {
     Transaction expectedResponse =

From 5f0415479bfba0c8d27b6694c5e9e35e36ccc9cf Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Thu, 6 Jul 2023 13:23:50 +0000
Subject: [PATCH 17/23] batchWriteAtleastOnce -> batchWriteAtLeastOnce

---
 .../main/java/com/google/cloud/spanner/DatabaseClient.java    | 2 +-
 .../java/com/google/cloud/spanner/DatabaseClientImpl.java     | 2 +-
 .../src/main/java/com/google/cloud/spanner/SessionImpl.java   | 4 ++--
 .../src/main/java/com/google/cloud/spanner/SessionPool.java   | 4 ++--
 .../java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java | 2 +-
 .../main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java | 2 +-
 .../java/com/google/cloud/spanner/DatabaseClientImplTest.java | 2 +-
 .../test/java/com/google/cloud/spanner/it/ITWriteTest.java    | 2 +-
 8 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
index 71bcd8d83ac..19eef38641d 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
@@ -229,7 +229,7 @@ CommitResponse writeAtLeastOnceWithOptions(
    *
    * @return ServerStream\
    */
-  ServerStream batchWriteAtleastOnce(Iterable mutations)
+  ServerStream batchWriteAtLeastOnce(Iterable mutations)
       throws SpannerException;
 
   /**
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
index 4ea303f1bf9..918332c6eae 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
@@ -109,7 +109,7 @@ public CommitResponse writeAtLeastOnceWithOptions(
   }
 
   @Override
-  public ServerStream batchWriteAtleastOnce(final Iterable mutations)
+  public ServerStream batchWriteAtLeastOnce(final Iterable mutations)
       throws SpannerException {
     return batchWriteAtleastOnceWithOptions(mutations);
   }
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
index 8d971c6f399..18ad8cca013 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
@@ -199,7 +199,7 @@ public CommitResponse writeAtLeastOnceWithOptions(
   }
 
   @Override
-  public ServerStream batchWriteAtleastOnce(Iterable mutations)
+  public ServerStream batchWriteAtLeastOnce(Iterable mutations)
       throws SpannerException {
     return batchWriteAtleastOnceWithOptions(mutations);
   }
@@ -226,7 +226,7 @@ public ServerStream batchWriteAtleastOnceWithOptions(
     }
     Span span = tracer.spanBuilder(SpannerImpl.BATCH_WRITE).startSpan();
     try (Scope s = tracer.withSpan(span)) {
-      return spanner.getRpc().batchWriteAtleastOnce(requestBuilder.build(), this.options);
+      return spanner.getRpc().batchWriteAtLeastOnce(requestBuilder.build(), this.options);
     } catch (Throwable e) {
       TraceUtil.setWithFailure(span, e);
       throw SpannerExceptionFactory.newSpannerException(e);
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
index 979ab2c13c3..5e4d722f59f 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
@@ -1173,7 +1173,7 @@ public CommitResponse writeAtLeastOnceWithOptions(
     }
 
     @Override
-    public ServerStream batchWriteAtleastOnce(Iterable mutations)
+    public ServerStream batchWriteAtLeastOnce(Iterable mutations)
         throws SpannerException {
       return batchWriteAtleastOnceWithOptions(mutations);
     }
@@ -1436,7 +1436,7 @@ public CommitResponse writeAtLeastOnceWithOptions(
     }
 
     @Override
-    public ServerStream batchWriteAtleastOnce(Iterable mutations)
+    public ServerStream batchWriteAtLeastOnce(Iterable mutations)
         throws SpannerException {
       return batchWriteAtleastOnceWithOptions(mutations);
     }
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
index 26aa9ae6423..9b938d6e34f 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
@@ -1663,7 +1663,7 @@ public ServerStream executeStreamingPartitionedDml(
   }
 
   @Override
-  public ServerStream batchWriteAtleastOnce(
+  public ServerStream batchWriteAtLeastOnce(
       BatchWriteRequest request, @Nullable Map options) {
     GrpcCallContext context =
         newCallContext(options, request.getSession(), request, SpannerGrpc.getBatchWriteMethod());
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java
index bf803f6e11a..9f846661890 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java
@@ -376,7 +376,7 @@ ApiFuture executeQueryAsync(
   ServerStream executeStreamingPartitionedDml(
       ExecuteSqlRequest request, @Nullable Map options, Duration timeout);
 
-  ServerStream batchWriteAtleastOnce(
+  ServerStream batchWriteAtLeastOnce(
       BatchWriteRequest request, @Nullable Map options);
 
   /**
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index 63ecfc833d7..2e61994ddbd 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -339,7 +339,7 @@ public void testBatchWriteAtLeastOnce() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
 
-    ServerStream responseStream = client.batchWriteAtleastOnce(MUTATIONS);
+    ServerStream responseStream = client.batchWriteAtLeastOnce(MUTATIONS);
     int idx = 0;
     for (BatchWriteResponse response : responseStream) {
       assertEquals(
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
index d4ef076c9a8..e7b524e2415 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
@@ -244,7 +244,7 @@ public void batchWriteAtLeastOnce() {
                 .set("StringValue")
                 .to("v2")
                 .build());
-    ServerStream responses = client.batchWriteAtleastOnce(mutations);
+    ServerStream responses = client.batchWriteAtLeastOnce(mutations);
     Set responseIndexes = new HashSet<>();
     Set appliedMutationIndexes = new HashSet<>();
     for (BatchWriteResponse response : responses) {

From 8e15c5caf954b75a7d6c3508915d29fa9516a44c Mon Sep 17 00:00:00 2001
From: rajatrb 
Date: Thu, 6 Jul 2023 13:26:57 +0000
Subject: [PATCH 18/23] batchWriteAtleastOnceWithOptions ->
 batchWriteAtLeastOnceWithOptions

---
 .../com/google/cloud/spanner/DatabaseClient.java     |  2 +-
 .../com/google/cloud/spanner/DatabaseClientImpl.java |  6 +++---
 .../java/com/google/cloud/spanner/SessionImpl.java   |  4 ++--
 .../java/com/google/cloud/spanner/SessionPool.java   | 12 ++++++------
 .../google/cloud/spanner/DatabaseClientImplTest.java |  4 ++--
 5 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
index 19eef38641d..205ac867bbe 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
@@ -278,7 +278,7 @@ ServerStream batchWriteAtLeastOnce(Iterable mutati
    *
    * @return ServerStream\
    */
-  ServerStream batchWriteAtleastOnceWithOptions(
+  ServerStream batchWriteAtLeastOnceWithOptions(
       Iterable mutations, TransactionOption... options) throws SpannerException;
 
   /**
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
index 918332c6eae..0dc8cfde570 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
@@ -111,17 +111,17 @@ public CommitResponse writeAtLeastOnceWithOptions(
   @Override
   public ServerStream batchWriteAtLeastOnce(final Iterable mutations)
       throws SpannerException {
-    return batchWriteAtleastOnceWithOptions(mutations);
+    return batchWriteAtLeastOnceWithOptions(mutations);
   }
 
   @Override
-  public ServerStream batchWriteAtleastOnceWithOptions(
+  public ServerStream batchWriteAtLeastOnceWithOptions(
       final Iterable mutations, final TransactionOption... options)
       throws SpannerException {
     Span span = tracer.spanBuilder(READ_WRITE_TRANSACTION).startSpan();
     try (Scope s = tracer.withSpan(span)) {
       return runWithSessionRetry(
-          session -> session.batchWriteAtleastOnceWithOptions(mutations, options));
+          session -> session.batchWriteAtLeastOnceWithOptions(mutations, options));
     } catch (RuntimeException e) {
       TraceUtil.setWithFailure(span, e);
       throw e;
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
index 18ad8cca013..ef603d5184f 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
@@ -201,11 +201,11 @@ public CommitResponse writeAtLeastOnceWithOptions(
   @Override
   public ServerStream batchWriteAtLeastOnce(Iterable mutations)
       throws SpannerException {
-    return batchWriteAtleastOnceWithOptions(mutations);
+    return batchWriteAtLeastOnceWithOptions(mutations);
   }
 
   @Override
-  public ServerStream batchWriteAtleastOnceWithOptions(
+  public ServerStream batchWriteAtLeastOnceWithOptions(
       Iterable mutations, TransactionOption... transactionOptions)
       throws SpannerException {
     setActive(null);
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
index 5e4d722f59f..139ea26c1a6 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
@@ -1175,14 +1175,14 @@ public CommitResponse writeAtLeastOnceWithOptions(
     @Override
     public ServerStream batchWriteAtLeastOnce(Iterable mutations)
         throws SpannerException {
-      return batchWriteAtleastOnceWithOptions(mutations);
+      return batchWriteAtLeastOnceWithOptions(mutations);
     }
 
     @Override
-    public ServerStream batchWriteAtleastOnceWithOptions(
+    public ServerStream batchWriteAtLeastOnceWithOptions(
         Iterable mutations, TransactionOption... options) throws SpannerException {
       try {
-        return get().batchWriteAtleastOnceWithOptions(mutations, options);
+        return get().batchWriteAtLeastOnceWithOptions(mutations, options);
       } finally {
         close();
       }
@@ -1438,15 +1438,15 @@ public CommitResponse writeAtLeastOnceWithOptions(
     @Override
     public ServerStream batchWriteAtLeastOnce(Iterable mutations)
         throws SpannerException {
-      return batchWriteAtleastOnceWithOptions(mutations);
+      return batchWriteAtLeastOnceWithOptions(mutations);
     }
 
     @Override
-    public ServerStream batchWriteAtleastOnceWithOptions(
+    public ServerStream batchWriteAtLeastOnceWithOptions(
         Iterable mutations, TransactionOption... options) throws SpannerException {
       try {
         markUsed();
-        return delegate.batchWriteAtleastOnceWithOptions(mutations, options);
+        return delegate.batchWriteAtLeastOnceWithOptions(mutations, options);
       } catch (SpannerException e) {
         throw lastException = e;
       }
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index 2e61994ddbd..7ae83a00483 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -362,7 +362,7 @@ public void testBatchWriteAtLeastOnceWithOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
     ServerStream responseStream =
-        client.batchWriteAtleastOnceWithOptions(MUTATIONS, Options.priority(RpcPriority.LOW));
+        client.batchWriteAtLeastOnceWithOptions(MUTATIONS, Options.priority(RpcPriority.LOW));
     for (BatchWriteResponse response : responseStream) {}
 
     assertNotNull(responseStream);
@@ -378,7 +378,7 @@ public void testBatchWriteAtLeastOnceWithTagOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
     ServerStream responseStream =
-        client.batchWriteAtleastOnceWithOptions(MUTATIONS, Options.tag("app=spanner,env=test"));
+        client.batchWriteAtLeastOnceWithOptions(MUTATIONS, Options.tag("app=spanner,env=test"));
     for (BatchWriteResponse response : responseStream) {}
 
     assertNotNull(responseStream);

From 56f39293e4ea80a4b2a9fab9207068aed7a2d426 Mon Sep 17 00:00:00 2001
From: Rajat Bhatta 
Date: Thu, 17 Aug 2023 12:51:27 +0530
Subject: [PATCH 19/23] changes based on updated batch write API

---
 .../google/cloud/spanner/DatabaseClient.java  |  79 +++-----
 .../cloud/spanner/DatabaseClientImpl.java     |  10 +-
 .../google/cloud/spanner/MutationGroup.java   |  39 ++++
 .../com/google/cloud/spanner/SessionImpl.java |  14 +-
 .../com/google/cloud/spanner/SessionPool.java |  22 ++-
 .../cloud/spanner/DatabaseClientImplTest.java |  30 +--
 .../cloud/spanner/MutationGroupTest.java      |  98 ++++++++++
 .../google/cloud/spanner/it/ITWriteTest.java  | 177 ++++++++++--------
 8 files changed, 315 insertions(+), 154 deletions(-)
 create mode 100644 google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java
 create mode 100644 google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java

diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
index 205ac867bbe..4b62d771853 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
@@ -194,34 +194,26 @@ CommitResponse writeAtLeastOnceWithOptions(
       Iterable mutations, TransactionOption... options) throws SpannerException;
 
   /**
-   * Batches the supplied mutations in a collection of efficient transactions. The mutations are
-   * applied non-atomically in an unspecified order and thus, they must be independent of each
-   * other. Partial failure is possible, i.e., some mutations may have been applied successfully,
-   * while some may have failed. The results of individual batches are streamed into the response as
-   * and when the batches are applied.
+   * Applies batch of mutation groups in a collection of efficient transactions. The mutation groups
+   * are applied non-atomically in an unspecified order and thus, they must be independent of each
+   * other. Partial failure is possible, i.e., some mutation groups may have been applied
+   * successfully, while some may have failed. The results of individual batches are streamed into
+   * the response as and when the batches are applied.
    *
    * 

Since this method does not feature replay protection, it may attempt to apply {@code - * mutations} more than once; if the mutations are not idempotent, this may lead to a failure - * being reported when the mutation was applied once. For example, an insert may fail with {@link - * ErrorCode#ALREADY_EXISTS} even though the row did not exist before this method was called. For - * this reason, most users of the library will prefer to use {@link #write(Iterable)} instead. - * However, {@code batchWriteAtLeastOnce()} method may be appropriate for non-atomically - * committing multiple mutations in a single RPC with low latency. + * mutation groups} more than once; if the mutation groups are not idempotent, this may lead to a + * failure being reported when the mutation group was applied once. For example, an insert may + * fail with {@link ErrorCode#ALREADY_EXISTS} even though the row did not exist before this method + * was called. For this reason, most users of the library will prefer to use {@link + * #write(Iterable)} instead. However, {@code batchWriteAtLeastOnce()} method may be appropriate + * for non-atomically committing multiple mutation groups in a single RPC with low latency. * - *

Example of BatchWriteAtleastOnce + *

Example of BatchWriteAtLeastOnce * *

{@code
-   * long singerId = my_singer_id;
-   * Mutation mutation = Mutation.newInsertBuilder("Singers")
-   *         .set("SingerId")
-   *         .to(singerId)
-   *         .set("FirstName")
-   *         .to("Billy")
-   *         .set("LastName")
-   *         .to("Joel")
-   *         .build();
    * ServerStream responses =
-   *     dbClient.batchWriteAtLeastOnce(Collections.singletonList(mutation));
+   *     dbClient.batchWriteAtLeastOnceWithOptions(
+   *         ImmutableList.of(MUTATION_GROUP1, MUTATION_GROUP2));
    * for (BatchWriteResponse response : responses) {
    *   // Do something when a response is received.
    * }
@@ -229,40 +221,31 @@ CommitResponse writeAtLeastOnceWithOptions(
    *
    * @return ServerStream\
    */
-  ServerStream batchWriteAtLeastOnce(Iterable mutations)
+  ServerStream batchWriteAtLeastOnce(Iterable mutationGroups)
       throws SpannerException;
 
   /**
-   * Batches the supplied mutations in a collection of efficient transactions. The mutations are
-   * applied non-atomically in an unspecified order and thus, they must be independent of each
-   * other. Partial failure is possible, i.e., some mutations may have been applied successfully,
-   * while some may have failed. The results of individual batches are streamed into the response as
-   * and when the batches are applied.
+   * Applies batch of mutation groups in a collection of efficient transactions. The mutation groups
+   * are applied non-atomically in an unspecified order and thus, they must be independent of each
+   * other. Partial failure is possible, i.e., some mutation groups may have been applied
+   * successfully, while some may have failed. The results of individual batches are streamed into
+   * the response as and when the batches are applied.
    *
    * 

Since this method does not feature replay protection, it may attempt to apply {@code - * mutations} more than once; if the mutations are not idempotent, this may lead to a failure - * being reported when the mutation was applied once. For example, an insert may fail with {@link - * ErrorCode#ALREADY_EXISTS} even though the row did not exist before this method was called. For - * this reason, most users of the library will prefer to use {@link #write(Iterable)} instead. - * However, {@code batchWriteAtLeastOnce()} method may be appropriate for non-atomically - * committing multiple mutations in a single RPC with low latency. + * mutation groups} more than once; if the mutation groups are not idempotent, this may lead to a + * failure being reported when the mutation group was applied once. For example, an insert may + * fail with {@link ErrorCode#ALREADY_EXISTS} even though the row did not exist before this method + * was called. For this reason, most users of the library will prefer to use {@link + * #write(Iterable)} instead. However, {@code batchWriteAtLeastOnce()} method may be appropriate + * for non-atomically committing multiple mutation groups in a single RPC with low latency. * - *

Example of BatchWriteAtleastOnceWithOptions + *

Example of BatchWriteAtLeastOnceWithOptions * *

{@code
-   * long singerId = my_singer_id;
-   * Mutation mutation = Mutation.newInsertBuilder("Singers")
-   *         .set("SingerId")
-   *         .to(singerId)
-   *         .set("FirstName")
-   *         .to("Billy")
-   *         .set("LastName")
-   *         .to("Joel")
-   *         .build();
    * ServerStream responses =
-   *     dbClient.batchWriteAtLeastOnce(
-   *             Collections.singletonList(mutation),
-   *             Options.priority(RpcPriority.LOW));
+   *     dbClient.batchWriteAtLeastOnceWithOptions(
+   *         ImmutableList.of(MUTATION_GROUP1, MUTATION_GROUP2),
+   *         Options.tag("batch-write-tag"));
    * for (BatchWriteResponse response : responses) {
    *   // Do something when a response is received.
    * }
@@ -279,7 +262,7 @@ ServerStream batchWriteAtLeastOnce(Iterable mutati
    * @return ServerStream\
    */
   ServerStream batchWriteAtLeastOnceWithOptions(
-      Iterable mutations, TransactionOption... options) throws SpannerException;
+      Iterable mutationGroups, TransactionOption... options) throws SpannerException;
 
   /**
    * Returns a context in which a single read can be performed using {@link TimestampBound#strong()}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
index 0dc8cfde570..9ce358c82ce 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
@@ -109,19 +109,19 @@ public CommitResponse writeAtLeastOnceWithOptions(
   }
 
   @Override
-  public ServerStream batchWriteAtLeastOnce(final Iterable mutations)
-      throws SpannerException {
-    return batchWriteAtLeastOnceWithOptions(mutations);
+  public ServerStream batchWriteAtLeastOnce(
+      final Iterable mutationGroups) throws SpannerException {
+    return batchWriteAtLeastOnceWithOptions(mutationGroups);
   }
 
   @Override
   public ServerStream batchWriteAtLeastOnceWithOptions(
-      final Iterable mutations, final TransactionOption... options)
+      final Iterable mutationGroups, final TransactionOption... options)
       throws SpannerException {
     Span span = tracer.spanBuilder(READ_WRITE_TRANSACTION).startSpan();
     try (Scope s = tracer.withSpan(span)) {
       return runWithSessionRetry(
-          session -> session.batchWriteAtLeastOnceWithOptions(mutations, options));
+          session -> session.batchWriteAtLeastOnceWithOptions(mutationGroups, options));
     } catch (RuntimeException e) {
       TraceUtil.setWithFailure(span, e);
       throw e;
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java
new file mode 100644
index 00000000000..43cf3fd6a18
--- /dev/null
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java
@@ -0,0 +1,39 @@
+package com.google.cloud.spanner;
+
+import com.google.common.base.Preconditions;
+import com.google.spanner.v1.BatchWriteRequest;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class MutationGroup {
+  private final List mutations;
+
+  private MutationGroup(List mutations) {
+    this.mutations = mutations;
+  }
+
+  public static MutationGroup of(Mutation... mutations) {
+    Preconditions.checkArgument(mutations.length > 0, "Should pass in at least one mutation.");
+    return new MutationGroup(Arrays.asList(mutations));
+  }
+
+  public List getMutations() {
+    return mutations;
+  }
+
+  static BatchWriteRequest.MutationGroup toProto(final MutationGroup mutationGroup) {
+    List mutationsProto = new ArrayList<>();
+    Mutation.toProto(mutationGroup.getMutations(), mutationsProto);
+    return BatchWriteRequest.MutationGroup.newBuilder().addAllMutations(mutationsProto).build();
+  }
+
+  static List toListProto(
+      final Iterable mutationGroups) {
+    List mutationGroupsProto = new ArrayList<>();
+    for (MutationGroup group : mutationGroups) {
+      mutationGroupsProto.add(toProto(group));
+    }
+    return mutationGroupsProto;
+  }
+}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
index ef603d5184f..a68ab11cf46 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
@@ -199,21 +199,21 @@ public CommitResponse writeAtLeastOnceWithOptions(
   }
 
   @Override
-  public ServerStream batchWriteAtLeastOnce(Iterable mutations)
-      throws SpannerException {
-    return batchWriteAtLeastOnceWithOptions(mutations);
+  public ServerStream batchWriteAtLeastOnce(
+      Iterable mutationGroups) throws SpannerException {
+    return batchWriteAtLeastOnceWithOptions(mutationGroups);
   }
 
   @Override
   public ServerStream batchWriteAtLeastOnceWithOptions(
-      Iterable mutations, TransactionOption... transactionOptions)
+      Iterable mutationGroups, TransactionOption... transactionOptions)
       throws SpannerException {
     setActive(null);
     Options batchWriteRequestOptions = Options.fromTransactionOptions(transactionOptions);
-    List mutationsProto = new ArrayList<>();
-    Mutation.toProto(mutations, mutationsProto);
+    List mutationGroupsProto =
+        MutationGroup.toListProto(mutationGroups);
     final BatchWriteRequest.Builder requestBuilder =
-        BatchWriteRequest.newBuilder().setSession(name).addAllMutations(mutationsProto);
+        BatchWriteRequest.newBuilder().setSession(name).addAllMutationGroups(mutationGroupsProto);
     if (batchWriteRequestOptions.hasPriority() || batchWriteRequestOptions.hasTag()) {
       RequestOptions.Builder requestOptionsBuilder = RequestOptions.newBuilder();
       if (batchWriteRequestOptions.hasPriority()) {
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
index 139ea26c1a6..42a4df55c5d 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
@@ -1173,16 +1173,17 @@ public CommitResponse writeAtLeastOnceWithOptions(
     }
 
     @Override
-    public ServerStream batchWriteAtLeastOnce(Iterable mutations)
-        throws SpannerException {
-      return batchWriteAtLeastOnceWithOptions(mutations);
+    public ServerStream batchWriteAtLeastOnce(
+        Iterable mutationGroups) throws SpannerException {
+      return batchWriteAtLeastOnceWithOptions(mutationGroups);
     }
 
     @Override
     public ServerStream batchWriteAtLeastOnceWithOptions(
-        Iterable mutations, TransactionOption... options) throws SpannerException {
+        Iterable mutationGroups, TransactionOption... options)
+        throws SpannerException {
       try {
-        return get().batchWriteAtLeastOnceWithOptions(mutations, options);
+        return get().batchWriteAtLeastOnceWithOptions(mutationGroups, options);
       } finally {
         close();
       }
@@ -1436,17 +1437,18 @@ public CommitResponse writeAtLeastOnceWithOptions(
     }
 
     @Override
-    public ServerStream batchWriteAtLeastOnce(Iterable mutations)
-        throws SpannerException {
-      return batchWriteAtLeastOnceWithOptions(mutations);
+    public ServerStream batchWriteAtLeastOnce(
+        Iterable mutationGroups) throws SpannerException {
+      return batchWriteAtLeastOnceWithOptions(mutationGroups);
     }
 
     @Override
     public ServerStream batchWriteAtLeastOnceWithOptions(
-        Iterable mutations, TransactionOption... options) throws SpannerException {
+        Iterable mutationGroups, TransactionOption... options)
+        throws SpannerException {
       try {
         markUsed();
-        return delegate.batchWriteAtLeastOnceWithOptions(mutations, options);
+        return delegate.batchWriteAtLeastOnceWithOptions(mutationGroups, options);
       } catch (SpannerException e) {
         throw lastException = e;
       }
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
index 7ae83a00483..e942d40bc0b 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java
@@ -133,12 +133,19 @@ public class DatabaseClientImplTest {
   private static final long UPDATE_COUNT = 1L;
   private static final com.google.rpc.Status STATUS_OK =
       com.google.rpc.Status.newBuilder().setCode(com.google.rpc.Code.OK_VALUE).build();
-  private static final Iterable MUTATIONS =
+  private static final Iterable MUTATION_GROUPS =
       ImmutableList.of(
-          Mutation.newInsertBuilder("FOO1").set("ID").to(1L).set("NAME").to("Bar1").build(),
-          Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build(),
-          Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
-          Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build());
+          MutationGroup.of(
+              Mutation.newInsertBuilder("FOO1").set("ID").to(1L).set("NAME").to("Bar1").build(),
+              Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build()),
+          MutationGroup.of(
+              Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
+              Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build()),
+          MutationGroup.of(
+              Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build(),
+              Mutation.newInsertBuilder("FOO5").set("ID").to(5L).set("NAME").to("Bar5").build()),
+          MutationGroup.of(
+              Mutation.newInsertBuilder("FOO6").set("ID").to(6L).set("NAME").to("Bar6").build()));
   private static final Iterable BATCH_WRITE_RESPONSES =
       ImmutableList.of(
           BatchWriteResponse.newBuilder()
@@ -339,7 +346,7 @@ public void testBatchWriteAtLeastOnce() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
 
-    ServerStream responseStream = client.batchWriteAtLeastOnce(MUTATIONS);
+    ServerStream responseStream = client.batchWriteAtLeastOnce(MUTATION_GROUPS);
     int idx = 0;
     for (BatchWriteResponse response : responseStream) {
       assertEquals(
@@ -353,7 +360,7 @@ public void testBatchWriteAtLeastOnce() {
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
-    assertEquals(request.getMutationsCount(), 4);
+    assertEquals(request.getMutationGroupsCount(), 4);
     assertEquals(request.getRequestOptions().getPriority(), Priority.PRIORITY_UNSPECIFIED);
   }
 
@@ -362,14 +369,14 @@ public void testBatchWriteAtLeastOnceWithOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
     ServerStream responseStream =
-        client.batchWriteAtLeastOnceWithOptions(MUTATIONS, Options.priority(RpcPriority.LOW));
+        client.batchWriteAtLeastOnceWithOptions(MUTATION_GROUPS, Options.priority(RpcPriority.LOW));
     for (BatchWriteResponse response : responseStream) {}
 
     assertNotNull(responseStream);
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
-    assertEquals(request.getMutationsCount(), 4);
+    assertEquals(request.getMutationGroupsCount(), 4);
     assertEquals(request.getRequestOptions().getPriority(), Priority.PRIORITY_LOW);
   }
 
@@ -378,14 +385,15 @@ public void testBatchWriteAtLeastOnceWithTagOptions() {
     DatabaseClient client =
         spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE));
     ServerStream responseStream =
-        client.batchWriteAtLeastOnceWithOptions(MUTATIONS, Options.tag("app=spanner,env=test"));
+        client.batchWriteAtLeastOnceWithOptions(
+            MUTATION_GROUPS, Options.tag("app=spanner,env=test"));
     for (BatchWriteResponse response : responseStream) {}
 
     assertNotNull(responseStream);
     List requests = mockSpanner.getRequestsOfType(BatchWriteRequest.class);
     assertEquals(requests.size(), 1);
     BatchWriteRequest request = requests.get(0);
-    assertEquals(request.getMutationsCount(), 4);
+    assertEquals(request.getMutationGroupsCount(), 4);
     assertEquals(request.getRequestOptions().getTransactionTag(), "app=spanner,env=test");
     assertThat(request.getRequestOptions().getRequestTag()).isEmpty();
   }
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java
new file mode 100644
index 00000000000..6792b53545e
--- /dev/null
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2017 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.cloud.spanner;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import com.google.common.collect.ImmutableList;
+import com.google.spanner.v1.BatchWriteRequest;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/** Unit tests for {@link MutationGroup}. */
+@RunWith(JUnit4.class)
+public class MutationGroupTest {
+  private final Random random = new Random();
+
+  private Mutation getRandomMutation() {
+    return Mutation.newInsertBuilder(String.valueOf(random.nextInt()))
+        .set("ID")
+        .to(random.nextInt())
+        .set("NAME")
+        .to(String.valueOf(random.nextInt()))
+        .build();
+  }
+
+  private BatchWriteRequest.MutationGroup getMutationGroupProto(Mutation[] mutations) {
+    List mutationsProto = new ArrayList<>();
+    Mutation.toProto(Arrays.asList(mutations), mutationsProto);
+    return BatchWriteRequest.MutationGroup.newBuilder().addAllMutations(mutationsProto).build();
+  }
+
+  @Test
+  public void getMutationsTest() {
+    Mutation[] mutations =
+        new Mutation[] {
+          getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation()
+        };
+    MutationGroup mutationGroup = MutationGroup.of(mutations);
+    assertArrayEquals(mutations, mutationGroup.getMutations().toArray());
+    assertEquals(MutationGroup.toProto(mutationGroup), getMutationGroupProto(mutations));
+  }
+
+  @Test
+  public void toProtoTest() {
+    Mutation[] mutations =
+        new Mutation[] {
+          getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation()
+        };
+    MutationGroup mutationGroup = MutationGroup.of(mutations);
+    assertEquals(MutationGroup.toProto(mutationGroup), getMutationGroupProto(mutations));
+  }
+
+  @Test
+  public void toListProtoTest() {
+    Mutation[] mutations1 =
+        new Mutation[] {
+          getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation()
+        };
+    Mutation[] mutations2 =
+        new Mutation[] {
+          getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation()
+        };
+    Mutation[] mutations3 =
+        new Mutation[] {
+          getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation()
+        };
+    List mutationGroups =
+        ImmutableList.of(
+            MutationGroup.of(mutations1),
+            MutationGroup.of(mutations2),
+            MutationGroup.of(mutations3));
+    List mutationGroupsProto =
+        MutationGroup.toListProto(mutationGroups);
+    assertEquals(mutationGroupsProto.get(0), getMutationGroupProto(mutations1));
+    assertEquals(mutationGroupsProto.get(1), getMutationGroupProto(mutations2));
+    assertEquals(mutationGroupsProto.get(2), getMutationGroupProto(mutations3));
+  }
+}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
index e7b524e2415..1888bf6b9e5 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java
@@ -43,6 +43,7 @@
 import com.google.cloud.spanner.Key;
 import com.google.cloud.spanner.KeySet;
 import com.google.cloud.spanner.Mutation;
+import com.google.cloud.spanner.MutationGroup;
 import com.google.cloud.spanner.Options;
 import com.google.cloud.spanner.ParallelIntegrationTest;
 import com.google.cloud.spanner.ResultSet;
@@ -107,51 +108,65 @@ public static List data() {
   private static DatabaseClient googleStandardSQLClient;
   private static DatabaseClient postgreSQLClient;
 
-  private static final String GOOGLE_STANDARD_SQL_SCHEMA =
-      "CREATE TABLE T ("
-          + "  K                   STRING(MAX) NOT NULL,"
-          + "  BoolValue           BOOL,"
-          + "  Int64Value          INT64,"
-          + "  Float64Value        FLOAT64,"
-          + "  StringValue         STRING(MAX),"
-          + "  JsonValue           JSON,"
-          + "  BytesValue          BYTES(MAX),"
-          + "  TimestampValue      TIMESTAMP OPTIONS (allow_commit_timestamp = true),"
-          + "  DateValue           DATE,"
-          + "  NumericValue        NUMERIC,"
-          + "  BoolArrayValue      ARRAY,"
-          + "  Int64ArrayValue     ARRAY,"
-          + "  Float64ArrayValue   ARRAY,"
-          + "  StringArrayValue    ARRAY,"
-          + "  JsonArrayValue      ARRAY,"
-          + "  BytesArrayValue     ARRAY,"
-          + "  TimestampArrayValue ARRAY,"
-          + "  DateArrayValue      ARRAY,"
-          + "  NumericArrayValue   ARRAY,"
-          + ") PRIMARY KEY (K)";
-
-  private static final String POSTGRESQL_SCHEMA =
-      "CREATE TABLE T ("
-          + "  K                   VARCHAR PRIMARY KEY,"
-          + "  BoolValue           BOOL,"
-          + "  Int64Value          BIGINT,"
-          + "  Float64Value        DOUBLE PRECISION,"
-          + "  StringValue         VARCHAR,"
-          + "  JsonValue           JSONB,"
-          + "  BytesValue          BYTEA,"
-          + "  TimestampValue      TIMESTAMPTZ,"
-          + "  DateValue           DATE,"
-          + "  NumericValue        NUMERIC,"
-          + "  BoolArrayValue      BOOL[],"
-          + "  Int64ArrayValue     BIGINT[],"
-          + "  Float64ArrayValue   DOUBLE PRECISION[],"
-          + "  StringArrayValue    VARCHAR[],"
-          + "  JsonArrayValue      JSONB[],"
-          + "  BytesArrayValue     BYTEA[],"
-          + "  TimestampArrayValue TIMESTAMPTZ[],"
-          + "  DateArrayValue      DATE[],"
-          + "  NumericArrayValue   NUMERIC[]"
-          + ")";
+  private static final String[] GOOGLE_STANDARD_SQL_SCHEMA =
+      new String[] {
+        "CREATE TABLE T ("
+            + "  K                   STRING(MAX) NOT NULL,"
+            + "  BoolValue           BOOL,"
+            + "  Int64Value          INT64,"
+            + "  Float64Value        FLOAT64,"
+            + "  StringValue         STRING(MAX),"
+            + "  JsonValue           JSON,"
+            + "  BytesValue          BYTES(MAX),"
+            + "  TimestampValue      TIMESTAMP OPTIONS (allow_commit_timestamp = true),"
+            + "  DateValue           DATE,"
+            + "  NumericValue        NUMERIC,"
+            + "  BoolArrayValue      ARRAY,"
+            + "  Int64ArrayValue     ARRAY,"
+            + "  Float64ArrayValue   ARRAY,"
+            + "  StringArrayValue    ARRAY,"
+            + "  JsonArrayValue      ARRAY,"
+            + "  BytesArrayValue     ARRAY,"
+            + "  TimestampArrayValue ARRAY,"
+            + "  DateArrayValue      ARRAY,"
+            + "  NumericArrayValue   ARRAY,"
+            + ") PRIMARY KEY (K)",
+        "CREATE TABLE T1 ("
+            + "  K1                  STRING(MAX) NOT NULL,"
+            + "  K                   STRING(MAX) NOT NULL,"
+            + "  CONSTRAINT FK FOREIGN KEY (K) REFERENCES T(K)"
+            + ") PRIMARY KEY (K1)"
+      };
+
+  private static final String[] POSTGRESQL_SCHEMA =
+      new String[] {
+        "CREATE TABLE T ("
+            + "  K                   VARCHAR PRIMARY KEY,"
+            + "  BoolValue           BOOL,"
+            + "  Int64Value          BIGINT,"
+            + "  Float64Value        DOUBLE PRECISION,"
+            + "  StringValue         VARCHAR,"
+            + "  JsonValue           JSONB,"
+            + "  BytesValue          BYTEA,"
+            + "  TimestampValue      TIMESTAMPTZ,"
+            + "  DateValue           DATE,"
+            + "  NumericValue        NUMERIC,"
+            + "  BoolArrayValue      BOOL[],"
+            + "  Int64ArrayValue     BIGINT[],"
+            + "  Float64ArrayValue   DOUBLE PRECISION[],"
+            + "  StringArrayValue    VARCHAR[],"
+            + "  JsonArrayValue      JSONB[],"
+            + "  BytesArrayValue     BYTEA[],"
+            + "  TimestampArrayValue TIMESTAMPTZ[],"
+            + "  DateArrayValue      DATE[],"
+            + "  NumericArrayValue   NUMERIC[]"
+            + ")",
+        "CREATE TABLE T1 ("
+            + "  K1                  VARCHAR PRIMARY KEY,"
+            + "  K                   VARCHAR,"
+            + "  CONSTRAINT FK FOREIGN KEY (K) REFERENCES T(K)"
+            + ")"
+      };
 
   /** Sequence used to generate unique keys. */
   private static int seq;
@@ -168,7 +183,7 @@ public static void setUpDatabase()
     if (!EmulatorSpannerHelper.isUsingEmulator()) {
       Database postgreSQLDatabase =
           env.getTestHelper()
-              .createTestDatabase(Dialect.POSTGRESQL, Collections.singletonList(POSTGRESQL_SCHEMA));
+              .createTestDatabase(Dialect.POSTGRESQL, Arrays.asList(POSTGRESQL_SCHEMA));
       postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase);
     }
   }
@@ -199,13 +214,13 @@ private Mutation.WriteBuilder baseInsert() {
   }
 
   private Struct readLastRow(String... columns) {
-    return readRow(lastKey, columns);
+    return readRow("T", lastKey, columns);
   }
 
-  private Struct readRow(String key, String... columns) {
+  private Struct readRow(String table, String key, String... columns) {
     return client
         .singleUse(TimestampBound.strong())
-        .readRow("T", Key.of(key), Arrays.asList(columns));
+        .readRow(table, Key.of(key), Arrays.asList(columns));
   }
 
   @Test
@@ -225,26 +240,37 @@ public void writeAtLeastOnce() {
 
   @Test
   public void batchWriteAtLeastOnce() {
-    assumeFalse("Emulator does not support BatchWriteAtleastOnce", isUsingEmulator());
-    final String k1 = uniqueString(), k2 = uniqueString();
-    lastKey = k2;
-    final List mutations =
+    assumeFalse("Emulator does not support BatchWriteAtLeastOnce", isUsingEmulator());
+    final String k1 = uniqueString(), k2 = uniqueString(), k3 = uniqueString(), k4 = uniqueString();
+    lastKey = k3;
+    final List mutationGroups =
         ImmutableList.of(
-            Mutation.newInsertOrUpdateBuilder("T")
-                .set("K")
-                .to(k1)
-                .set("StringValue")
-                .to("v1")
-                .set("BoolValue")
-                .to(true)
-                .build(),
-            Mutation.newInsertOrUpdateBuilder("T")
-                .set("K")
-                .to(k2)
-                .set("StringValue")
-                .to("v2")
-                .build());
-    ServerStream responses = client.batchWriteAtLeastOnce(mutations);
+            MutationGroup.of(
+                Mutation.newInsertOrUpdateBuilder("T")
+                    .set("K")
+                    .to(k1)
+                    .set("StringValue")
+                    .to("v1")
+                    .set("BoolValue")
+                    .to(true)
+                    .build(),
+                Mutation.newInsertOrUpdateBuilder("T")
+                    .set("K")
+                    .to(k2)
+                    .set("StringValue")
+                    .to("v2")
+                    .build()),
+            MutationGroup.of(
+                Mutation.newInsertOrUpdateBuilder("T")
+                    .set("K")
+                    .to(k3)
+                    .set("StringValue")
+                    .to("v1")
+                    .set("BoolValue")
+                    .to(false)
+                    .build(),
+                Mutation.newInsertOrUpdateBuilder("T1").set("K1").to(k4).set("K").to(k3).build()));
+    ServerStream responses = client.batchWriteAtLeastOnce(mutationGroups);
     Set responseIndexes = new HashSet<>();
     Set appliedMutationIndexes = new HashSet<>();
     for (BatchWriteResponse response : responses) {
@@ -259,16 +285,21 @@ public void batchWriteAtLeastOnce() {
     Struct row;
     // assert row with key k1
     if (appliedMutationIndexes.contains(0)) {
-      row = readRow(k1, "StringValue", "BoolValue");
+      row = readRow("T", k1, "StringValue", "BoolValue");
       assertEquals(row.getString(0), "v1");
       assertTrue(row.getBoolean(1));
+      row = readRow("T", k2, "StringValue", "BoolValue");
+      assertEquals(row.getString(0), "v2");
+      assertTrue(row.isNull(1));
     }
 
-    // assert row with key k2
+    // assert row with key k4, and corresponding referencing table.
     if (appliedMutationIndexes.contains(1)) {
-      row = readRow(k2, "StringValue", "BoolValue");
-      assertEquals(row.getString(0), "v2");
-      assertTrue(row.isNull(1));
+      row = readRow("T", k3, "StringValue", "BoolValue");
+      assertEquals(row.getString(0), "v1");
+      assertFalse(row.getBoolean(1));
+      row = readRow("T1", k4, "K");
+      assertEquals(row.getString(0), k3);
     }
   }
 

From 356849edff6fa00d743f85a4fcb11e2801e5dcec Mon Sep 17 00:00:00 2001
From: Rajat Bhatta 
Date: Thu, 17 Aug 2023 12:56:27 +0530
Subject: [PATCH 20/23] add copyright and doc

---
 .../google/cloud/spanner/MutationGroup.java   | 19 +++++++++++++++++++
 .../cloud/spanner/MutationGroupTest.java      |  2 +-
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java
index 43cf3fd6a18..ee1ca17c101 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2023 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.google.cloud.spanner;
 
 import com.google.common.base.Preconditions;
@@ -6,6 +22,9 @@
 import java.util.Arrays;
 import java.util.List;
 
+/**
+ * Represents a group of Cloud Spanner mutations to be committed together.
+ */
 public class MutationGroup {
   private final List mutations;
 
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java
index 6792b53545e..ab6c4847a04 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google LLC
+ * Copyright 2023 Google LLC
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.

From 1ca0d31faa41eb3238a712c5dd78a059f9907103 Mon Sep 17 00:00:00 2001
From: Rajat Bhatta 
Date: Tue, 22 Aug 2023 16:22:24 +0530
Subject: [PATCH 21/23] address review comments

---
 .../google/cloud/spanner/DatabaseClient.java  | 52 ++++++-------------
 .../cloud/spanner/DatabaseClientImpl.java     |  9 +---
 .../google/cloud/spanner/MutationGroup.java   | 21 +++++---
 .../com/google/cloud/spanner/SessionImpl.java |  6 ---
 .../com/google/cloud/spanner/SessionPool.java | 16 +-----
 .../cloud/spanner/DatabaseClientImplTest.java | 11 ++--
 .../cloud/spanner/MutationGroupTest.java      | 32 +++++++++---
 7 files changed, 60 insertions(+), 87 deletions(-)

diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
index 4e73c0d3b51..9ccd62e685e 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java
@@ -211,41 +211,21 @@ CommitResponse writeAtLeastOnceWithOptions(
    * 

Example of BatchWriteAtLeastOnce * *

{@code
+   * Iterable mutationGroups =
+   *     ImmutableList.of(
+   *         MutationGroup.of(
+   *             Mutation.newInsertBuilder("FOO1").set("ID").to(1L).set("NAME").to("Bar1").build(),
+   *             Mutation.newInsertBuilder("FOO2").set("ID").to(2L).set("NAME").to("Bar2").build()),
+   *         MutationGroup.of(
+   *             Mutation.newInsertBuilder("FOO3").set("ID").to(3L).set("NAME").to("Bar3").build(),
+   *             Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build()),
+   *         MutationGroup.of(
+   *             Mutation.newInsertBuilder("FOO4").set("ID").to(4L).set("NAME").to("Bar4").build(),
+   *             Mutation.newInsertBuilder("FOO5").set("ID").to(5L).set("NAME").to("Bar5").build()),
+   *         MutationGroup.of(
+   *             Mutation.newInsertBuilder("FOO6").set("ID").to(6L).set("NAME").to("Bar6").build()));
    * ServerStream responses =
-   *     dbClient.batchWriteAtLeastOnceWithOptions(
-   *         ImmutableList.of(MUTATION_GROUP1, MUTATION_GROUP2));
-   * for (BatchWriteResponse response : responses) {
-   *   // Do something when a response is received.
-   * }
-   * }
- * - * @return ServerStream\ - */ - ServerStream batchWriteAtLeastOnce(Iterable mutationGroups) - throws SpannerException; - - /** - * Applies batch of mutation groups in a collection of efficient transactions. The mutation groups - * are applied non-atomically in an unspecified order and thus, they must be independent of each - * other. Partial failure is possible, i.e., some mutation groups may have been applied - * successfully, while some may have failed. The results of individual batches are streamed into - * the response as and when the batches are applied. - * - *

Since this method does not feature replay protection, it may attempt to apply {@code - * mutation groups} more than once; if the mutation groups are not idempotent, this may lead to a - * failure being reported when the mutation group was applied once. For example, an insert may - * fail with {@link ErrorCode#ALREADY_EXISTS} even though the row did not exist before this method - * was called. For this reason, most users of the library will prefer to use {@link - * #write(Iterable)} instead. However, {@code batchWriteAtLeastOnce()} method may be appropriate - * for non-atomically committing multiple mutation groups in a single RPC with low latency. - * - *

Example of BatchWriteAtLeastOnceWithOptions - * - *

{@code
-   * ServerStream responses =
-   *     dbClient.batchWriteAtLeastOnceWithOptions(
-   *         ImmutableList.of(MUTATION_GROUP1, MUTATION_GROUP2),
-   *         Options.tag("batch-write-tag"));
+   *     dbClient.batchWriteAtLeastOnce(mutationGroups, Options.tag("batch-write-tag"));
    * for (BatchWriteResponse response : responses) {
    *   // Do something when a response is received.
    * }
@@ -258,10 +238,8 @@ ServerStream batchWriteAtLeastOnce(Iterable m
    *       RpcPriority} to use for the batch write request.
    *   
  • {@link Options#tag(String)}: The transaction tag to use for the batch write request. * - * - * @return ServerStream\ */ - ServerStream batchWriteAtLeastOnceWithOptions( + ServerStream batchWriteAtLeastOnce( Iterable mutationGroups, TransactionOption... options) throws SpannerException; /** diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java index 9ce358c82ce..3835cb1f338 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java @@ -110,18 +110,11 @@ public CommitResponse writeAtLeastOnceWithOptions( @Override public ServerStream batchWriteAtLeastOnce( - final Iterable mutationGroups) throws SpannerException { - return batchWriteAtLeastOnceWithOptions(mutationGroups); - } - - @Override - public ServerStream batchWriteAtLeastOnceWithOptions( final Iterable mutationGroups, final TransactionOption... options) throws SpannerException { Span span = tracer.spanBuilder(READ_WRITE_TRANSACTION).startSpan(); try (Scope s = tracer.withSpan(span)) { - return runWithSessionRetry( - session -> session.batchWriteAtLeastOnceWithOptions(mutationGroups, options)); + return runWithSessionRetry(session -> session.batchWriteAtLeastOnce(mutationGroups, options)); } catch (RuntimeException e) { TraceUtil.setWithFailure(span, e); throw e; diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java index ee1ca17c101..101ffe48349 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/MutationGroup.java @@ -17,27 +17,32 @@ package com.google.cloud.spanner; import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; import com.google.spanner.v1.BatchWriteRequest; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -/** - * Represents a group of Cloud Spanner mutations to be committed together. - */ +/** Represents a group of Cloud Spanner mutations to be committed together. */ public class MutationGroup { - private final List mutations; + private final ImmutableList mutations; - private MutationGroup(List mutations) { + private MutationGroup(ImmutableList mutations) { this.mutations = mutations; } + /** Creates a {@code MutationGroup} given a vararg of mutations. */ public static MutationGroup of(Mutation... mutations) { Preconditions.checkArgument(mutations.length > 0, "Should pass in at least one mutation."); - return new MutationGroup(Arrays.asList(mutations)); + return new MutationGroup(ImmutableList.copyOf(mutations)); + } + + /** Creates a {@code MutationGroup} given an iterable of mutations. */ + public static MutationGroup of(Iterable mutations) { + return new MutationGroup(ImmutableList.copyOf(mutations)); } - public List getMutations() { + /** Returns corresponding mutations for this MutationGroup. */ + public ImmutableList getMutations() { return mutations; } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java index a68ab11cf46..076a12a5c83 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java @@ -200,12 +200,6 @@ public CommitResponse writeAtLeastOnceWithOptions( @Override public ServerStream batchWriteAtLeastOnce( - Iterable mutationGroups) throws SpannerException { - return batchWriteAtLeastOnceWithOptions(mutationGroups); - } - - @Override - public ServerStream batchWriteAtLeastOnceWithOptions( Iterable mutationGroups, TransactionOption... transactionOptions) throws SpannerException { setActive(null); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java index 7e988edb740..09a9732302e 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java @@ -1175,16 +1175,10 @@ public CommitResponse writeAtLeastOnceWithOptions( @Override public ServerStream batchWriteAtLeastOnce( - Iterable mutationGroups) throws SpannerException { - return batchWriteAtLeastOnceWithOptions(mutationGroups); - } - - @Override - public ServerStream batchWriteAtLeastOnceWithOptions( Iterable mutationGroups, TransactionOption... options) throws SpannerException { try { - return get().batchWriteAtLeastOnceWithOptions(mutationGroups, options); + return get().batchWriteAtLeastOnce(mutationGroups, options); } finally { close(); } @@ -1471,17 +1465,11 @@ public CommitResponse writeAtLeastOnceWithOptions( @Override public ServerStream batchWriteAtLeastOnce( - Iterable mutationGroups) throws SpannerException { - return batchWriteAtLeastOnceWithOptions(mutationGroups); - } - - @Override - public ServerStream batchWriteAtLeastOnceWithOptions( Iterable mutationGroups, TransactionOption... options) throws SpannerException { try { markUsed(); - return delegate.batchWriteAtLeastOnceWithOptions(mutationGroups, options); + return delegate.batchWriteAtLeastOnce(mutationGroups, options); } catch (SpannerException e) { throw lastException = e; } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java index afb129c8626..d56c4066fdd 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseClientImplTest.java @@ -39,8 +39,8 @@ import com.google.api.core.ApiFutures; import com.google.api.gax.grpc.testing.LocalChannelProvider; import com.google.api.gax.retrying.RetrySettings; -import com.google.api.gax.rpc.ServerStream; import com.google.api.gax.rpc.ApiCallContext; +import com.google.api.gax.rpc.ServerStream; import com.google.api.gax.rpc.StatusCode; import com.google.cloud.ByteArray; import com.google.cloud.NoCredentials; @@ -71,9 +71,9 @@ import com.google.protobuf.ByteString; import com.google.protobuf.ListValue; import com.google.protobuf.NullValue; +import com.google.rpc.RetryInfo; import com.google.spanner.v1.BatchWriteRequest; import com.google.spanner.v1.BatchWriteResponse; -import com.google.rpc.RetryInfo; import com.google.spanner.v1.CommitRequest; import com.google.spanner.v1.DeleteSessionRequest; import com.google.spanner.v1.ExecuteBatchDmlRequest; @@ -655,7 +655,7 @@ public void testWriteAtLeastOnceWithTagOptions() { } @Test - public void testBatchWriteAtLeastOnce() { + public void testBatchWriteAtLeastOnceWithoutOptions() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); @@ -682,7 +682,7 @@ public void testBatchWriteAtLeastOnceWithOptions() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); ServerStream responseStream = - client.batchWriteAtLeastOnceWithOptions(MUTATION_GROUPS, Options.priority(RpcPriority.LOW)); + client.batchWriteAtLeastOnce(MUTATION_GROUPS, Options.priority(RpcPriority.LOW)); for (BatchWriteResponse response : responseStream) {} assertNotNull(responseStream); @@ -698,8 +698,7 @@ public void testBatchWriteAtLeastOnceWithTagOptions() { DatabaseClient client = spanner.getDatabaseClient(DatabaseId.of(TEST_PROJECT, TEST_INSTANCE, TEST_DATABASE)); ServerStream responseStream = - client.batchWriteAtLeastOnceWithOptions( - MUTATION_GROUPS, Options.tag("app=spanner,env=test")); + client.batchWriteAtLeastOnce(MUTATION_GROUPS, Options.tag("app=spanner,env=test")); for (BatchWriteResponse response : responseStream) {} assertNotNull(responseStream); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java index ab6c4847a04..7a20e55789c 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java @@ -22,7 +22,6 @@ import com.google.common.collect.ImmutableList; import com.google.spanner.v1.BatchWriteRequest; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Random; import org.junit.Test; @@ -43,20 +42,32 @@ private Mutation getRandomMutation() { .build(); } - private BatchWriteRequest.MutationGroup getMutationGroupProto(Mutation[] mutations) { + private BatchWriteRequest.MutationGroup getMutationGroupProto(ImmutableList mutations) { List mutationsProto = new ArrayList<>(); - Mutation.toProto(Arrays.asList(mutations), mutationsProto); + Mutation.toProto(mutations, mutationsProto); return BatchWriteRequest.MutationGroup.newBuilder().addAllMutations(mutationsProto).build(); } @Test - public void getMutationsTest() { + public void ofTest() { Mutation[] mutations = new Mutation[] { getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation() }; MutationGroup mutationGroup = MutationGroup.of(mutations); assertArrayEquals(mutations, mutationGroup.getMutations().toArray()); + assertEquals( + MutationGroup.toProto(mutationGroup), + getMutationGroupProto(ImmutableList.copyOf(mutations))); + } + + @Test + public void createWithMutationsTest() { + ImmutableList mutations = + ImmutableList.of( + getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation()); + MutationGroup mutationGroup = MutationGroup.createWithMutations(mutations); + assertEquals(mutations, mutationGroup.getMutations()); assertEquals(MutationGroup.toProto(mutationGroup), getMutationGroupProto(mutations)); } @@ -67,7 +78,9 @@ public void toProtoTest() { getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation() }; MutationGroup mutationGroup = MutationGroup.of(mutations); - assertEquals(MutationGroup.toProto(mutationGroup), getMutationGroupProto(mutations)); + assertEquals( + MutationGroup.toProto(mutationGroup), + getMutationGroupProto(ImmutableList.copyOf(mutations))); } @Test @@ -91,8 +104,11 @@ public void toListProtoTest() { MutationGroup.of(mutations3)); List mutationGroupsProto = MutationGroup.toListProto(mutationGroups); - assertEquals(mutationGroupsProto.get(0), getMutationGroupProto(mutations1)); - assertEquals(mutationGroupsProto.get(1), getMutationGroupProto(mutations2)); - assertEquals(mutationGroupsProto.get(2), getMutationGroupProto(mutations3)); + assertEquals( + mutationGroupsProto.get(0), getMutationGroupProto(ImmutableList.copyOf(mutations1))); + assertEquals( + mutationGroupsProto.get(1), getMutationGroupProto(ImmutableList.copyOf(mutations2))); + assertEquals( + mutationGroupsProto.get(2), getMutationGroupProto(ImmutableList.copyOf(mutations3))); } } From c3e3d7bcbeeff83f18b96ddb042146a9d807d142 Mon Sep 17 00:00:00 2001 From: Rajat Bhatta Date: Tue, 22 Aug 2023 16:56:04 +0530 Subject: [PATCH 22/23] address review comments --- .../com/google/cloud/spanner/SessionImpl.java | 41 ++++++++++--------- .../cloud/spanner/MutationGroupTest.java | 6 +-- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java index 076a12a5c83..5645340dcb6 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java @@ -163,7 +163,6 @@ public CommitResponse writeAtLeastOnceWithOptions( Iterable mutations, TransactionOption... transactionOptions) throws SpannerException { setActive(null); - Options commitRequestOptions = Options.fromTransactionOptions(transactionOptions); List mutationsProto = new ArrayList<>(); Mutation.toProto(mutations, mutationsProto); final CommitRequest.Builder requestBuilder = @@ -175,15 +174,9 @@ public CommitResponse writeAtLeastOnceWithOptions( .setSingleUseTransaction( TransactionOptions.newBuilder() .setReadWrite(TransactionOptions.ReadWrite.getDefaultInstance())); - if (commitRequestOptions.hasPriority() || commitRequestOptions.hasTag()) { - RequestOptions.Builder requestOptionsBuilder = RequestOptions.newBuilder(); - if (commitRequestOptions.hasPriority()) { - requestOptionsBuilder.setPriority(commitRequestOptions.priority()); - } - if (commitRequestOptions.hasTag()) { - requestOptionsBuilder.setTransactionTag(commitRequestOptions.tag()); - } - requestBuilder.setRequestOptions(requestOptionsBuilder.build()); + RequestOptions commitRequestOptions = getRequestOptions(transactionOptions); + if (commitRequestOptions != null) { + requestBuilder.setRequestOptions(commitRequestOptions); } Span span = tracer.spanBuilder(SpannerImpl.COMMIT).startSpan(); try (Scope s = tracer.withSpan(span)) { @@ -198,25 +191,33 @@ public CommitResponse writeAtLeastOnceWithOptions( } } + private RequestOptions getRequestOptions(TransactionOption... transactionOptions) { + Options requestOptions = Options.fromTransactionOptions(transactionOptions); + if (requestOptions.hasPriority() || requestOptions.hasTag()) { + RequestOptions.Builder requestOptionsBuilder = RequestOptions.newBuilder(); + if (requestOptions.hasPriority()) { + requestOptionsBuilder.setPriority(requestOptions.priority()); + } + if (requestOptions.hasTag()) { + requestOptionsBuilder.setTransactionTag(requestOptions.tag()); + } + return requestOptionsBuilder.build(); + } + return null; + } + @Override public ServerStream batchWriteAtLeastOnce( Iterable mutationGroups, TransactionOption... transactionOptions) throws SpannerException { setActive(null); - Options batchWriteRequestOptions = Options.fromTransactionOptions(transactionOptions); List mutationGroupsProto = MutationGroup.toListProto(mutationGroups); final BatchWriteRequest.Builder requestBuilder = BatchWriteRequest.newBuilder().setSession(name).addAllMutationGroups(mutationGroupsProto); - if (batchWriteRequestOptions.hasPriority() || batchWriteRequestOptions.hasTag()) { - RequestOptions.Builder requestOptionsBuilder = RequestOptions.newBuilder(); - if (batchWriteRequestOptions.hasPriority()) { - requestOptionsBuilder.setPriority(batchWriteRequestOptions.priority()); - } - if (batchWriteRequestOptions.hasTag()) { - requestOptionsBuilder.setTransactionTag(batchWriteRequestOptions.tag()); - } - requestBuilder.setRequestOptions(requestOptionsBuilder.build()); + RequestOptions batchWriteRequestOptions = getRequestOptions(transactionOptions); + if (batchWriteRequestOptions != null) { + requestBuilder.setRequestOptions(batchWriteRequestOptions); } Span span = tracer.spanBuilder(SpannerImpl.BATCH_WRITE).startSpan(); try (Scope s = tracer.withSpan(span)) { diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java index 7a20e55789c..99fcb8b6943 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MutationGroupTest.java @@ -49,7 +49,7 @@ private BatchWriteRequest.MutationGroup getMutationGroupProto(ImmutableList mutations = ImmutableList.of( getRandomMutation(), getRandomMutation(), getRandomMutation(), getRandomMutation()); - MutationGroup mutationGroup = MutationGroup.createWithMutations(mutations); + MutationGroup mutationGroup = MutationGroup.of(mutations); assertEquals(mutations, mutationGroup.getMutations()); assertEquals(MutationGroup.toProto(mutationGroup), getMutationGroupProto(mutations)); } From a036cedb7166ead4750d0e25d5af8e4e4e03c2f0 Mon Sep 17 00:00:00 2001 From: Rajat Bhatta Date: Fri, 25 Aug 2023 12:54:11 +0530 Subject: [PATCH 23/23] add more documentation --- .../java/com/google/cloud/spanner/DatabaseClient.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java index 9ccd62e685e..06237131458 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClient.java @@ -200,11 +200,12 @@ CommitResponse writeAtLeastOnceWithOptions( * successfully, while some may have failed. The results of individual batches are streamed into * the response as and when the batches are applied. * - *

    Since this method does not feature replay protection, it may attempt to apply {@code - * mutation groups} more than once; if the mutation groups are not idempotent, this may lead to a - * failure being reported when the mutation group was applied once. For example, an insert may - * fail with {@link ErrorCode#ALREADY_EXISTS} even though the row did not exist before this method - * was called. For this reason, most users of the library will prefer to use {@link + *

    One BatchWriteResponse can contain the results for multiple MutationGroups. Inspect the + * indexes field to determine the MutationGroups that the BatchWriteResponse is for. + * + *

    The mutation groups may be applied more than once. This can lead to failures if the mutation + * groups are non-idempotent. For example, an insert that is replayed can return an {@link + * ErrorCode#ALREADY_EXISTS} error. For this reason, users of the library may prefer to use {@link * #write(Iterable)} instead. However, {@code batchWriteAtLeastOnce()} method may be appropriate * for non-atomically committing multiple mutation groups in a single RPC with low latency. *