diff --git a/gapic-libraries-bom/pom.xml b/gapic-libraries-bom/pom.xml index 35db705c7dc6..30a069b6694f 100644 --- a/gapic-libraries-bom/pom.xml +++ b/gapic-libraries-bom/pom.xml @@ -1116,6 +1116,13 @@ pom import + + com.google.cloud + google-cloud-spanneradapter-bom + 0.1.0-SNAPSHOT + pom + import + com.google.cloud google-cloud-speech-bom diff --git a/generation_config.yaml b/generation_config.yaml index 36a2575248a3..8bd2a831ac57 100644 --- a/generation_config.yaml +++ b/generation_config.yaml @@ -2327,6 +2327,24 @@ libraries: requires_billing: true library_name: shopping-merchant-reviews +- api_shortname: spanneradapter + name_pretty: Cloud Spanner Adapter API + product_documentation: + https://cloud.google.com/java/docs/reference/google-cloud-spanneradapter/latest/overview + api_description: The Cloud Spanner Adapter service allows native drivers of supported database + dialects to interact directly with Cloud Spanner by wrapping the underlying wire + protocol used by the driver in a gRPC stream. + client_documentation: + https://cloud.google.com/java/docs/reference/google-cloud-spanneradapter/latest/overview + release_level: preview + distribution_name: com.google.cloud:google-cloud-spanneradapter + api_id: spanneradapter.googleapis.com + library_type: GAPIC_AUTO + group_id: com.google.cloud + cloud_api: true + GAPICs: + - proto_path: google/spanner/adapter/v1 + requires_billing: true - api_shortname: speech name_pretty: Cloud Speech product_documentation: https://cloud.google.com/speech-to-text/docs/ diff --git a/java-spanneradapter/.OwlBot-hermetic.yaml b/java-spanneradapter/.OwlBot-hermetic.yaml new file mode 100644 index 000000000000..accec67fe030 --- /dev/null +++ b/java-spanneradapter/.OwlBot-hermetic.yaml @@ -0,0 +1,35 @@ +# Copyright 2024 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. + + +deep-remove-regex: +- "/java-spanneradapter/grpc-google-.*/src" +- "/java-spanneradapter/proto-google-.*/src" +- "/java-spanneradapter/google-.*/src" +- "/java-spanneradapter/samples/snippets/generated" + +deep-preserve-regex: +- "/java-spanneradapter/google-.*/src/test/java/com/google/cloud/.*/v.*/it/IT.*Test.java" + +deep-copy-regex: +- source: "/google/spanner/adapter/(v.*)/.*-java/proto-google-.*/src" + dest: "/owl-bot-staging/java-spanneradapter/$1/proto-google-cloud-spanneradapter-$1/src" +- source: "/google/spanner/adapter/(v.*)/.*-java/grpc-google-.*/src" + dest: "/owl-bot-staging/java-spanneradapter/$1/grpc-google-cloud-spanneradapter-$1/src" +- source: "/google/spanner/adapter/(v.*)/.*-java/gapic-google-.*/src" + dest: "/owl-bot-staging/java-spanneradapter/$1/google-cloud-spanneradapter/src" +- source: "/google/spanner/adapter/(v.*)/.*-java/samples/snippets/generated" + dest: "/owl-bot-staging/java-spanneradapter/$1/samples/snippets/generated" + +api-name: spanneradapter \ No newline at end of file diff --git a/java-spanneradapter/.repo-metadata.json b/java-spanneradapter/.repo-metadata.json new file mode 100644 index 000000000000..aad133a2e5b5 --- /dev/null +++ b/java-spanneradapter/.repo-metadata.json @@ -0,0 +1,16 @@ +{ + "api_shortname": "spanneradapter", + "name_pretty": "Cloud Spanner Adapter API", + "product_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-spanneradapter/latest/overview", + "api_description": "The Cloud Spanner Adapter service allows native drivers of supported database dialects to interact directly with Cloud Spanner by wrapping the underlying wire protocol used by the driver in a gRPC stream.", + "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-spanneradapter/latest/overview", + "release_level": "preview", + "transport": "both", + "language": "java", + "repo": "googleapis/google-cloud-java", + "repo_short": "java-spanneradapter", + "distribution_name": "com.google.cloud:google-cloud-spanneradapter", + "api_id": "spanneradapter.googleapis.com", + "library_type": "GAPIC_AUTO", + "requires_billing": true +} \ No newline at end of file diff --git a/java-spanneradapter/README.md b/java-spanneradapter/README.md new file mode 100644 index 000000000000..72fc1f996cd4 --- /dev/null +++ b/java-spanneradapter/README.md @@ -0,0 +1,224 @@ +# Google Cloud Spanner Adapter API Client for Java + +Java idiomatic client for [Cloud Spanner Adapter API][product-docs]. + +[![Maven][maven-version-image]][maven-version-link] +![Stability][stability-image] + +- [Product Documentation][product-docs] +- [Client Library Documentation][javadocs] + +> Note: This client is a work-in-progress, and may occasionally +> make backwards-incompatible changes. + + +## Quickstart + + +If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file: + +```xml + + + + com.google.cloud + libraries-bom + 26.61.0 + pom + import + + + + + + + com.google.cloud + google-cloud-spanneradapter + + +``` + +If you are using Maven without the BOM, add this to your dependencies: + + +```xml + + com.google.cloud + google-cloud-spanneradapter + 0.0.1 + +``` + +If you are using Gradle without BOM, add this to your dependencies: + +```Groovy +implementation 'com.google.cloud:google-cloud-spanneradapter:0.0.1' +``` + +If you are using SBT, add this to your dependencies: + +```Scala +libraryDependencies += "com.google.cloud" % "google-cloud-spanneradapter" % "0.0.1" +``` + +## Authentication + +See the [Authentication][authentication] section in the base directory's README. + +## Authorization + +The client application making API calls must be granted [authorization scopes][auth-scopes] required for the desired Cloud Spanner Adapter API APIs, and the authenticated principal must have the [IAM role(s)][predefined-iam-roles] required to access GCP resources using the Cloud Spanner Adapter API API calls. + +## Getting Started + +### Prerequisites + +You will need a [Google Cloud Platform Console][developer-console] project with the Cloud Spanner Adapter API [API enabled][enable-api]. +You will need to [enable billing][enable-billing] to use Google Cloud Spanner Adapter API. +[Follow these instructions][create-project] to get your project set up. You will also need to set up the local development environment by +[installing the Google Cloud Command Line Interface][cloud-cli] and running the following commands in command line: +`gcloud auth login` and `gcloud config set project [YOUR PROJECT ID]`. + +### Installation and setup + +You'll need to obtain the `google-cloud-spanneradapter` library. See the [Quickstart](#quickstart) section +to add `google-cloud-spanneradapter` as a dependency in your code. + +## About Cloud Spanner Adapter API + + +[Cloud Spanner Adapter API][product-docs] The Cloud Spanner Adapter service allows native drivers of supported database dialects to interact directly with Cloud Spanner by wrapping the underlying wire protocol used by the driver in a gRPC stream. + +See the [Cloud Spanner Adapter API client library docs][javadocs] to learn how to +use this Cloud Spanner Adapter API Client Library. + + + + + + +## Troubleshooting + +To get help, follow the instructions in the [shared Troubleshooting document][troubleshooting]. + +## Transport + +Cloud Spanner Adapter API uses both gRPC and HTTP/JSON for the transport layer. + +## Supported Java Versions + +Java 8 or above is required for using this client. + +Google's Java client libraries, +[Google Cloud Client Libraries][cloudlibs] +and +[Google Cloud API Libraries][apilibs], +follow the +[Oracle Java SE support roadmap][oracle] +(see the Oracle Java SE Product Releases section). + +### For new development + +In general, new feature development occurs with support for the lowest Java +LTS version covered by Oracle's Premier Support (which typically lasts 5 years +from initial General Availability). If the minimum required JVM for a given +library is changed, it is accompanied by a [semver][semver] major release. + +Java 11 and (in September 2021) Java 17 are the best choices for new +development. + +### Keeping production systems current + +Google tests its client libraries with all current LTS versions covered by +Oracle's Extended Support (which typically lasts 8 years from initial +General Availability). + +#### Legacy support + +Google's client libraries support legacy versions of Java runtimes with long +term stable libraries that don't receive feature updates on a best efforts basis +as it may not be possible to backport all patches. + +Google provides updates on a best efforts basis to apps that continue to use +Java 7, though apps might need to upgrade to current versions of the library +that supports their JVM. + +#### Where to find specific information + +The latest versions and the supported Java versions are identified on +the individual GitHub repository `github.com/GoogleAPIs/java-SERVICENAME` +and on [google-cloud-java][g-c-j]. + +## Versioning + + +This library follows [Semantic Versioning](http://semver.org/). + + +It is currently in major version zero (``0.y.z``), which means that anything may change at any time +and the public API should not be considered stable. + + +## Contributing + + +Contributions to this library are always welcome and highly encouraged. + +See [CONTRIBUTING][contributing] for more information how to get started. + +Please note that this project is released with a Contributor Code of Conduct. By participating in +this project you agree to abide by its terms. See [Code of Conduct][code-of-conduct] for more +information. + + +## License + +Apache 2.0 - See [LICENSE][license] for more information. + +## CI Status + +Java Version | Status +------------ | ------ +Java 8 | [![Kokoro CI][kokoro-badge-image-2]][kokoro-badge-link-2] +Java 8 OSX | [![Kokoro CI][kokoro-badge-image-3]][kokoro-badge-link-3] +Java 8 Windows | [![Kokoro CI][kokoro-badge-image-4]][kokoro-badge-link-4] +Java 11 | [![Kokoro CI][kokoro-badge-image-5]][kokoro-badge-link-5] + +Java is a registered trademark of Oracle and/or its affiliates. + +[product-docs]: https://cloud.google.com/java/docs/reference/google-cloud-spanneradapter/latest/overview +[javadocs]: https://cloud.google.com/java/docs/reference/google-cloud-spanneradapter/latest/overview +[kokoro-badge-image-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java7.svg +[kokoro-badge-link-1]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java7.html +[kokoro-badge-image-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8.svg +[kokoro-badge-link-2]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8.html +[kokoro-badge-image-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-osx.svg +[kokoro-badge-link-3]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-osx.html +[kokoro-badge-image-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-win.svg +[kokoro-badge-link-4]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java8-win.html +[kokoro-badge-image-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java11.svg +[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/google-cloud-java/java11.html +[stability-image]: https://img.shields.io/badge/stability-preview-yellow +[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanneradapter.svg +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanneradapter/0.0.1 +[authentication]: https://github.com/googleapis/google-cloud-java#authentication +[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes +[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles +[iam-policy]: https://cloud.google.com/iam/docs/overview#cloud-iam-policy +[developer-console]: https://console.developers.google.com/ +[create-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects +[cloud-cli]: https://cloud.google.com/cli +[troubleshooting]: https://github.com/googleapis/google-cloud-java/blob/main/TROUBLESHOOTING.md +[contributing]: https://github.com/googleapis/google-cloud-java/blob/main/CONTRIBUTING.md +[code-of-conduct]: https://github.com/googleapis/google-cloud-java/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct +[license]: https://github.com/googleapis/google-cloud-java/blob/main/LICENSE +[enable-billing]: https://cloud.google.com/apis/docs/getting-started#enabling_billing +[enable-api]: https://console.cloud.google.com/flows/enableapi?apiid=spanneradapter.googleapis.com +[libraries-bom]: https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM +[shell_img]: https://gstatic.com/cloudssh/images/open-btn.png + +[semver]: https://semver.org/ +[cloudlibs]: https://cloud.google.com/apis/docs/client-libraries-explained +[apilibs]: https://cloud.google.com/apis/docs/client-libraries-explained#google_api_client_libraries +[oracle]: https://www.oracle.com/java/technologies/java-se-support-roadmap.html +[g-c-j]: http://github.com/googleapis/google-cloud-java diff --git a/java-spanneradapter/google-cloud-spanneradapter-bom/pom.xml b/java-spanneradapter/google-cloud-spanneradapter-bom/pom.xml new file mode 100644 index 000000000000..7ffe31a78986 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter-bom/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + com.google.cloud + google-cloud-spanneradapter-bom + 0.1.0-SNAPSHOT + pom + + com.google.cloud + google-cloud-pom-parent + 1.59.0-SNAPSHOT + ../../google-cloud-pom-parent/pom.xml + + + Google Cloud Spanner Adapter API BOM + + BOM for Cloud Spanner Adapter API + + + + true + + + + + + com.google.cloud + google-cloud-spanneradapter + 0.1.0-SNAPSHOT + + + com.google.api.grpc + grpc-google-cloud-spanneradapter-v1 + 0.1.0-SNAPSHOT + + + com.google.api.grpc + proto-google-cloud-spanneradapter-v1 + 0.1.0-SNAPSHOT + + + + diff --git a/java-spanneradapter/google-cloud-spanneradapter/pom.xml b/java-spanneradapter/google-cloud-spanneradapter/pom.xml new file mode 100644 index 000000000000..5fa418b19370 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/pom.xml @@ -0,0 +1,115 @@ + + + 4.0.0 + com.google.cloud + google-cloud-spanneradapter + 0.1.0-SNAPSHOT + jar + Google Cloud Spanner Adapter API + Cloud Spanner Adapter API The Cloud Spanner Adapter service allows native drivers of supported database dialects to interact directly with Cloud Spanner by wrapping the underlying wire protocol used by the driver in a gRPC stream. + + com.google.cloud + google-cloud-spanneradapter-parent + 0.1.0-SNAPSHOT + + + google-cloud-spanneradapter + + + + io.grpc + grpc-api + + + io.grpc + grpc-stub + + + io.grpc + grpc-protobuf + + + com.google.api + api-common + + + com.google.protobuf + protobuf-java + + + com.google.api.grpc + proto-google-common-protos + + + + com.google.api.grpc + proto-google-cloud-spanneradapter-v1 + + + com.google.guava + guava + + + com.google.api + gax + + + com.google.api + gax-grpc + + + com.google.api + gax-httpjson + + + com.google.api.grpc + proto-google-iam-v1 + + + org.threeten + threetenbp + + + + + com.google.api.grpc + grpc-google-common-protos + test + + + com.google.api.grpc + grpc-google-iam-v1 + test + + + junit + junit + test + + + + com.google.api.grpc + grpc-google-cloud-spanneradapter-v1 + test + + + + com.google.api + gax + testlib + test + + + com.google.api + gax-grpc + testlib + test + + + com.google.api + gax-httpjson + testlib + test + + + diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/AdapterClient.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/AdapterClient.java new file mode 100644 index 000000000000..7408035137c9 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/AdapterClient.java @@ -0,0 +1,382 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.spanner.adapter.v1.stub.AdapterStub; +import com.google.spanner.adapter.v1.stub.AdapterStubSettings; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Service Description: Cloud Spanner Adapter API + * + *

The Cloud Spanner Adapter service allows native drivers of supported database dialects to + * interact directly with Cloud Spanner by wrapping the underlying wire protocol used by the driver + * in a gRPC stream. + * + *

This class provides the ability to make remote calls to the backing service through method + * calls that map to API methods. Sample code to get started: + * + *

{@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 (AdapterClient adapterClient = AdapterClient.create()) {
+ *   DatabaseName parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]");
+ *   Session session = Session.newBuilder().build();
+ *   Session response = adapterClient.createSession(parent, session);
+ * }
+ * }
+ * + *

Note: close() needs to be called on the AdapterClient object to clean up resources such as + * threads. In the example above, try-with-resources is used, which automatically calls close(). + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Methods
MethodDescriptionMethod Variants

CreateSession

Creates a new session to be used for requests made by the adapter. A session identifies a specific incarnation of a database resource and is meant to be reused across many `AdaptMessage` calls.

+ *

Request object method variants only take one parameter, a request object, which must be constructed before the call.

+ *
    + *
  • createSession(CreateSessionRequest request) + *

+ *

"Flattened" method variants have converted the fields of the request object into function parameters to enable multiple ways to call the same method.

+ *
    + *
  • createSession(DatabaseName parent, Session session) + *

  • createSession(String parent, Session session) + *

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • createSessionCallable() + *

+ *

AdaptMessage

Handles a single message from the client and returns the result as a stream. The server will interpret the message frame and respond with message frames to the client.

+ *

Callable method variants take no parameters and return an immutable API callable object, which can be used to initiate calls to the service.

+ *
    + *
  • adaptMessageCallable() + *

+ *
+ * + *

See the individual methods for example code. + * + *

Many parameters require resource names to be formatted in a particular way. To assist with + * these names, this class includes a format method for each type of name, and additionally a parse + * method to extract the individual identifiers contained within names that are returned. + * + *

This class can be customized by passing in a custom instance of AdapterSettings to create(). + * For example: + * + *

To customize credentials: + * + *

{@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
+ * AdapterSettings adapterSettings =
+ *     AdapterSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ *         .build();
+ * AdapterClient adapterClient = AdapterClient.create(adapterSettings);
+ * }
+ * + *

To customize the endpoint: + * + *

{@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
+ * AdapterSettings adapterSettings = AdapterSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * AdapterClient adapterClient = AdapterClient.create(adapterSettings);
+ * }
+ * + *

To use REST (HTTP1.1/JSON) transport (instead of gRPC) for sending and receiving requests over + * the wire: + * + *

{@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
+ * AdapterSettings adapterSettings = AdapterSettings.newHttpJsonBuilder().build();
+ * AdapterClient adapterClient = AdapterClient.create(adapterSettings);
+ * }
+ * + *

Please refer to the GitHub repository's samples for more quickstart code snippets. + */ +@Generated("by gapic-generator-java") +public class AdapterClient implements BackgroundResource { + private final AdapterSettings settings; + private final AdapterStub stub; + + /** Constructs an instance of AdapterClient with default settings. */ + public static final AdapterClient create() throws IOException { + return create(AdapterSettings.newBuilder().build()); + } + + /** + * Constructs an instance of AdapterClient, using the given settings. The channels are created + * based on the settings passed in, or defaults for any settings that are not set. + */ + public static final AdapterClient create(AdapterSettings settings) throws IOException { + return new AdapterClient(settings); + } + + /** + * Constructs an instance of AdapterClient, using the given stub for making calls. This is for + * advanced usage - prefer using create(AdapterSettings). + */ + public static final AdapterClient create(AdapterStub stub) { + return new AdapterClient(stub); + } + + /** + * Constructs an instance of AdapterClient, using the given settings. This is protected so that it + * is easy to make a subclass, but otherwise, the static factory methods should be preferred. + */ + protected AdapterClient(AdapterSettings settings) throws IOException { + this.settings = settings; + this.stub = ((AdapterStubSettings) settings.getStubSettings()).createStub(); + } + + protected AdapterClient(AdapterStub stub) { + this.settings = null; + this.stub = stub; + } + + public final AdapterSettings getSettings() { + return settings; + } + + public AdapterStub getStub() { + return stub; + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a new session to be used for requests made by the adapter. A session identifies a + * specific incarnation of a database resource and is meant to be reused across many + * `AdaptMessage` calls. + * + *

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 (AdapterClient adapterClient = AdapterClient.create()) {
+   *   DatabaseName parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]");
+   *   Session session = Session.newBuilder().build();
+   *   Session response = adapterClient.createSession(parent, session);
+   * }
+   * }
+ * + * @param parent Required. The database in which the new session is created. + * @param session Required. The session to create. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Session createSession(DatabaseName parent, Session session) { + CreateSessionRequest request = + CreateSessionRequest.newBuilder() + .setParent(parent == null ? null : parent.toString()) + .setSession(session) + .build(); + return createSession(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a new session to be used for requests made by the adapter. A session identifies a + * specific incarnation of a database resource and is meant to be reused across many + * `AdaptMessage` calls. + * + *

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 (AdapterClient adapterClient = AdapterClient.create()) {
+   *   String parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString();
+   *   Session session = Session.newBuilder().build();
+   *   Session response = adapterClient.createSession(parent, session);
+   * }
+   * }
+ * + * @param parent Required. The database in which the new session is created. + * @param session Required. The session to create. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Session createSession(String parent, Session session) { + CreateSessionRequest request = + CreateSessionRequest.newBuilder().setParent(parent).setSession(session).build(); + return createSession(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a new session to be used for requests made by the adapter. A session identifies a + * specific incarnation of a database resource and is meant to be reused across many + * `AdaptMessage` calls. + * + *

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 (AdapterClient adapterClient = AdapterClient.create()) {
+   *   CreateSessionRequest request =
+   *       CreateSessionRequest.newBuilder()
+   *           .setParent(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString())
+   *           .setSession(Session.newBuilder().build())
+   *           .build();
+   *   Session response = adapterClient.createSession(request);
+   * }
+   * }
+ * + * @param request The request object containing all of the parameters for the API call. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final Session createSession(CreateSessionRequest request) { + return createSessionCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Creates a new session to be used for requests made by the adapter. A session identifies a + * specific incarnation of a database resource and is meant to be reused across many + * `AdaptMessage` calls. + * + *

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 (AdapterClient adapterClient = AdapterClient.create()) {
+   *   CreateSessionRequest request =
+   *       CreateSessionRequest.newBuilder()
+   *           .setParent(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString())
+   *           .setSession(Session.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = adapterClient.createSessionCallable().futureCall(request);
+   *   // Do something.
+   *   Session response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable createSessionCallable() { + return stub.createSessionCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Handles a single message from the client and returns the result as a stream. The server will + * interpret the message frame and respond with message frames to the client. + * + *

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 (AdapterClient adapterClient = AdapterClient.create()) {
+   *   AdaptMessageRequest request =
+   *       AdaptMessageRequest.newBuilder()
+   *           .setName(
+   *               SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString())
+   *           .setProtocol("protocol-989163880")
+   *           .setPayload(ByteString.EMPTY)
+   *           .putAllAttachments(new HashMap())
+   *           .build();
+   *   ServerStream stream =
+   *       adapterClient.adaptMessageCallable().call(request);
+   *   for (AdaptMessageResponse response : stream) {
+   *     // Do something when a response is received.
+   *   }
+   * }
+   * }
+ */ + public final ServerStreamingCallable + adaptMessageCallable() { + return stub.adaptMessageCallable(); + } + + @Override + public final void close() { + stub.close(); + } + + @Override + public void shutdown() { + stub.shutdown(); + } + + @Override + public boolean isShutdown() { + return stub.isShutdown(); + } + + @Override + public boolean isTerminated() { + return stub.isTerminated(); + } + + @Override + public void shutdownNow() { + stub.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return stub.awaitTermination(duration, unit); + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/AdapterSettings.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/AdapterSettings.java new file mode 100644 index 000000000000..41b1e73015a6 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/AdapterSettings.java @@ -0,0 +1,226 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1; + +import com.google.api.core.ApiFunction; +import com.google.api.core.BetaApi; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ClientSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.spanner.adapter.v1.stub.AdapterStubSettings; +import java.io.IOException; +import java.util.List; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link AdapterClient}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (spanner.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the + * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings) + * of createSession: + * + *

{@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
+ * AdapterSettings.Builder adapterSettingsBuilder = AdapterSettings.newBuilder();
+ * adapterSettingsBuilder
+ *     .createSessionSettings()
+ *     .setRetrySettings(
+ *         adapterSettingsBuilder
+ *             .createSessionSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ *             .build());
+ * AdapterSettings adapterSettings = adapterSettingsBuilder.build();
+ * }
+ * + * Please refer to the [Client Side Retry + * Guide](https://github.com/googleapis/google-cloud-java/blob/main/docs/client_retries.md) for + * additional support in setting retries. + */ +@Generated("by gapic-generator-java") +public class AdapterSettings extends ClientSettings { + + /** Returns the object with the settings used for calls to createSession. */ + public UnaryCallSettings createSessionSettings() { + return ((AdapterStubSettings) getStubSettings()).createSessionSettings(); + } + + /** Returns the object with the settings used for calls to adaptMessage. */ + public ServerStreamingCallSettings + adaptMessageSettings() { + return ((AdapterStubSettings) getStubSettings()).adaptMessageSettings(); + } + + public static final AdapterSettings create(AdapterStubSettings stub) throws IOException { + return new AdapterSettings.Builder(stub.toBuilder()).build(); + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return AdapterStubSettings.defaultExecutorProviderBuilder(); + } + + /** Returns the default service endpoint. */ + public static String getDefaultEndpoint() { + return AdapterStubSettings.getDefaultEndpoint(); + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return AdapterStubSettings.getDefaultServiceScopes(); + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return AdapterStubSettings.defaultCredentialsProviderBuilder(); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return AdapterStubSettings.defaultGrpcTransportProviderBuilder(); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return AdapterStubSettings.defaultHttpJsonTransportProviderBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return AdapterStubSettings.defaultTransportChannelProvider(); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return AdapterStubSettings.defaultApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected AdapterSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + } + + /** Builder for AdapterSettings. */ + public static class Builder extends ClientSettings.Builder { + + protected Builder() throws IOException { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(AdapterStubSettings.newBuilder(clientContext)); + } + + protected Builder(AdapterSettings settings) { + super(settings.getStubSettings().toBuilder()); + } + + protected Builder(AdapterStubSettings.Builder stubSettings) { + super(stubSettings); + } + + private static Builder createDefault() { + return new Builder(AdapterStubSettings.newBuilder()); + } + + private static Builder createHttpJsonDefault() { + return new Builder(AdapterStubSettings.newHttpJsonBuilder()); + } + + public AdapterStubSettings.Builder getStubSettingsBuilder() { + return ((AdapterStubSettings.Builder) getStubSettings()); + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods( + getStubSettingsBuilder().unaryMethodSettingsBuilders(), settingsUpdater); + return this; + } + + /** Returns the builder for the settings used for calls to createSession. */ + public UnaryCallSettings.Builder createSessionSettings() { + return getStubSettingsBuilder().createSessionSettings(); + } + + /** Returns the builder for the settings used for calls to adaptMessage. */ + public ServerStreamingCallSettings.Builder + adaptMessageSettings() { + return getStubSettingsBuilder().adaptMessageSettings(); + } + + @Override + public AdapterSettings build() throws IOException { + return new AdapterSettings(this); + } + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/gapic_metadata.json b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/gapic_metadata.json new file mode 100644 index 000000000000..263c72384fc2 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/gapic_metadata.json @@ -0,0 +1,24 @@ +{ + "schema": "1.0", + "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", + "language": "java", + "protoPackage": "google.spanner.adapter.v1", + "libraryPackage": "com.google.spanner.adapter.v1", + "services": { + "Adapter": { + "clients": { + "grpc": { + "libraryClient": "AdapterClient", + "rpcs": { + "AdaptMessage": { + "methods": ["adaptMessageCallable"] + }, + "CreateSession": { + "methods": ["createSession", "createSession", "createSession", "createSessionCallable"] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/package-info.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/package-info.java new file mode 100644 index 000000000000..d1777d625cc2 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/package-info.java @@ -0,0 +1,48 @@ +/* + * Copyright 2025 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. + */ + +/** + * A client to Cloud Spanner API + * + *

The interfaces provided are listed below, along with usage samples. + * + *

======================= AdapterClient ======================= + * + *

Service Description: Cloud Spanner Adapter API + * + *

The Cloud Spanner Adapter service allows native drivers of supported database dialects to + * interact directly with Cloud Spanner by wrapping the underlying wire protocol used by the driver + * in a gRPC stream. + * + *

Sample for AdapterClient: + * + *

{@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 (AdapterClient adapterClient = AdapterClient.create()) {
+ *   DatabaseName parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]");
+ *   Session session = Session.newBuilder().build();
+ *   Session response = adapterClient.createSession(parent, session);
+ * }
+ * }
+ */ +@Generated("by gapic-generator-java") +package com.google.spanner.adapter.v1; + +import javax.annotation.Generated; diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/AdapterStub.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/AdapterStub.java new file mode 100644 index 000000000000..57e752616ef0 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/AdapterStub.java @@ -0,0 +1,47 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.stub; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.spanner.adapter.v1.AdaptMessageRequest; +import com.google.spanner.adapter.v1.AdaptMessageResponse; +import com.google.spanner.adapter.v1.CreateSessionRequest; +import com.google.spanner.adapter.v1.Session; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Base stub class for the Adapter service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public abstract class AdapterStub implements BackgroundResource { + + public UnaryCallable createSessionCallable() { + throw new UnsupportedOperationException("Not implemented: createSessionCallable()"); + } + + public ServerStreamingCallable adaptMessageCallable() { + throw new UnsupportedOperationException("Not implemented: adaptMessageCallable()"); + } + + @Override + public abstract void close(); +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/AdapterStubSettings.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/AdapterStubSettings.java new file mode 100644 index 000000000000..4afc59490820 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/AdapterStubSettings.java @@ -0,0 +1,381 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.stub; + +import com.google.api.core.ApiFunction; +import com.google.api.core.BetaApi; +import com.google.api.core.ObsoleteApi; +import com.google.api.gax.core.GaxProperties; +import com.google.api.gax.core.GoogleCredentialsProvider; +import com.google.api.gax.core.InstantiatingExecutorProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.HttpJsonTransportChannel; +import com.google.api.gax.httpjson.InstantiatingHttpJsonChannelProvider; +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.StubSettings; +import com.google.api.gax.rpc.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.spanner.adapter.v1.AdaptMessageRequest; +import com.google.spanner.adapter.v1.AdaptMessageResponse; +import com.google.spanner.adapter.v1.CreateSessionRequest; +import com.google.spanner.adapter.v1.Session; +import java.io.IOException; +import java.time.Duration; +import java.util.List; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Settings class to configure an instance of {@link AdapterStub}. + * + *

The default instance has everything set to sensible defaults: + * + *

    + *
  • The default service address (spanner.googleapis.com) and default port (443) are used. + *
  • Credentials are acquired automatically through Application Default Credentials. + *
  • Retries are configured for idempotent methods but not for non-idempotent methods. + *
+ * + *

The builder of this class is recursive, so contained classes are themselves builders. When + * build() is called, the tree of builders is called to create the complete settings object. + * + *

For example, to set the + * [RetrySettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.retrying.RetrySettings) + * of createSession: + * + *

{@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
+ * AdapterStubSettings.Builder adapterSettingsBuilder = AdapterStubSettings.newBuilder();
+ * adapterSettingsBuilder
+ *     .createSessionSettings()
+ *     .setRetrySettings(
+ *         adapterSettingsBuilder
+ *             .createSessionSettings()
+ *             .getRetrySettings()
+ *             .toBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofSeconds(1))
+ *             .setInitialRpcTimeoutDuration(Duration.ofSeconds(5))
+ *             .setMaxAttempts(5)
+ *             .setMaxRetryDelayDuration(Duration.ofSeconds(30))
+ *             .setMaxRpcTimeoutDuration(Duration.ofSeconds(60))
+ *             .setRetryDelayMultiplier(1.3)
+ *             .setRpcTimeoutMultiplier(1.5)
+ *             .setTotalTimeoutDuration(Duration.ofSeconds(300))
+ *             .build());
+ * AdapterStubSettings adapterSettings = adapterSettingsBuilder.build();
+ * }
+ * + * Please refer to the [Client Side Retry + * Guide](https://github.com/googleapis/google-cloud-java/blob/main/docs/client_retries.md) for + * additional support in setting retries. + */ +@Generated("by gapic-generator-java") +public class AdapterStubSettings extends StubSettings { + /** The default scopes of the service. */ + private static final ImmutableList DEFAULT_SERVICE_SCOPES = + ImmutableList.builder() + .add("https://www.googleapis.com/auth/cloud-platform") + .add("https://www.googleapis.com/auth/spanner.data") + .build(); + + private final UnaryCallSettings createSessionSettings; + private final ServerStreamingCallSettings + adaptMessageSettings; + + /** Returns the object with the settings used for calls to createSession. */ + public UnaryCallSettings createSessionSettings() { + return createSessionSettings; + } + + /** Returns the object with the settings used for calls to adaptMessage. */ + public ServerStreamingCallSettings + adaptMessageSettings() { + return adaptMessageSettings; + } + + public AdapterStub createStub() throws IOException { + if (getTransportChannelProvider() + .getTransportName() + .equals(GrpcTransportChannel.getGrpcTransportName())) { + return GrpcAdapterStub.create(this); + } + if (getTransportChannelProvider() + .getTransportName() + .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { + return HttpJsonAdapterStub.create(this); + } + throw new UnsupportedOperationException( + String.format( + "Transport not supported: %s", getTransportChannelProvider().getTransportName())); + } + + /** Returns the default service name. */ + @Override + public String getServiceName() { + return "spanner"; + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return InstantiatingExecutorProvider.newBuilder(); + } + + /** Returns the default service endpoint. */ + @ObsoleteApi("Use getEndpoint() instead") + public static String getDefaultEndpoint() { + return "spanner.googleapis.com:443"; + } + + /** Returns the default mTLS service endpoint. */ + public static String getDefaultMtlsEndpoint() { + return "spanner.mtls.googleapis.com:443"; + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return DEFAULT_SERVICE_SCOPES; + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return GoogleCredentialsProvider.newBuilder() + .setScopesToApply(DEFAULT_SERVICE_SCOPES) + .setUseJwtAccessWithScope(true); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return InstantiatingGrpcChannelProvider.newBuilder() + .setMaxInboundMessageSize(Integer.MAX_VALUE); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return InstantiatingHttpJsonChannelProvider.newBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return defaultGrpcTransportProviderBuilder().build(); + } + + public static ApiClientHeaderProvider.Builder defaultGrpcApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken("gapic", GaxProperties.getLibraryVersion(AdapterStubSettings.class)) + .setTransportToken( + GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken("gapic", GaxProperties.getLibraryVersion(AdapterStubSettings.class)) + .setTransportToken( + GaxHttpJsonProperties.getHttpJsonTokenName(), + GaxHttpJsonProperties.getHttpJsonVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return AdapterStubSettings.defaultGrpcApiClientHeaderProviderBuilder(); + } + + /** Returns a new gRPC builder for this class. */ + public static Builder newBuilder() { + return Builder.createDefault(); + } + + /** Returns a new REST builder for this class. */ + public static Builder newHttpJsonBuilder() { + return Builder.createHttpJsonDefault(); + } + + /** Returns a new builder for this class. */ + public static Builder newBuilder(ClientContext clientContext) { + return new Builder(clientContext); + } + + /** Returns a builder containing all the values of this settings class. */ + public Builder toBuilder() { + return new Builder(this); + } + + protected AdapterStubSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + + createSessionSettings = settingsBuilder.createSessionSettings().build(); + adaptMessageSettings = settingsBuilder.adaptMessageSettings().build(); + } + + /** Builder for AdapterStubSettings. */ + public static class Builder extends StubSettings.Builder { + private final ImmutableList> unaryMethodSettingsBuilders; + private final UnaryCallSettings.Builder createSessionSettings; + private final ServerStreamingCallSettings.Builder + adaptMessageSettings; + private static final ImmutableMap> + RETRYABLE_CODE_DEFINITIONS; + + static { + ImmutableMap.Builder> definitions = + ImmutableMap.builder(); + definitions.put( + "retry_policy_1_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.UNAVAILABLE, StatusCode.Code.RESOURCE_EXHAUSTED))); + definitions.put( + "no_retry_0_codes", ImmutableSet.copyOf(Lists.newArrayList())); + RETRYABLE_CODE_DEFINITIONS = definitions.build(); + } + + private static final ImmutableMap RETRY_PARAM_DEFINITIONS; + + static { + ImmutableMap.Builder definitions = ImmutableMap.builder(); + RetrySettings settings = null; + settings = + RetrySettings.newBuilder() + .setInitialRetryDelayDuration(Duration.ofMillis(250L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelayDuration(Duration.ofMillis(32000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(30000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(30000L)) + .setTotalTimeoutDuration(Duration.ofMillis(30000L)) + .build(); + definitions.put("retry_policy_1_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRpcTimeoutDuration(Duration.ofMillis(3600000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(3600000L)) + .setTotalTimeoutDuration(Duration.ofMillis(3600000L)) + .build(); + definitions.put("no_retry_0_params", settings); + RETRY_PARAM_DEFINITIONS = definitions.build(); + } + + protected Builder() { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(clientContext); + + createSessionSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + adaptMessageSettings = ServerStreamingCallSettings.newBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of(createSessionSettings); + initDefaults(this); + } + + protected Builder(AdapterStubSettings settings) { + super(settings); + + createSessionSettings = settings.createSessionSettings.toBuilder(); + adaptMessageSettings = settings.adaptMessageSettings.toBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of(createSessionSettings); + } + + private static Builder createDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultTransportChannelProvider()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultApiClientHeaderProviderBuilder().build()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder createHttpJsonDefault() { + Builder builder = new Builder(((ClientContext) null)); + + builder.setTransportChannelProvider(defaultHttpJsonTransportProviderBuilder().build()); + builder.setCredentialsProvider(defaultCredentialsProviderBuilder().build()); + builder.setInternalHeaderProvider(defaultHttpJsonApiClientHeaderProviderBuilder().build()); + builder.setMtlsEndpoint(getDefaultMtlsEndpoint()); + builder.setSwitchToMtlsEndpointAllowed(true); + + return initDefaults(builder); + } + + private static Builder initDefaults(Builder builder) { + builder + .createSessionSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_1_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_1_params")); + + builder + .adaptMessageSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_0_params")); + + return builder; + } + + /** + * Applies the given settings updater function to all of the unary API methods in this service. + * + *

Note: This method does not support applying settings to streaming methods. + */ + public Builder applyToAllUnaryMethods( + ApiFunction, Void> settingsUpdater) { + super.applyToAllUnaryMethods(unaryMethodSettingsBuilders, settingsUpdater); + return this; + } + + public ImmutableList> unaryMethodSettingsBuilders() { + return unaryMethodSettingsBuilders; + } + + /** Returns the builder for the settings used for calls to createSession. */ + public UnaryCallSettings.Builder createSessionSettings() { + return createSessionSettings; + } + + /** Returns the builder for the settings used for calls to adaptMessage. */ + public ServerStreamingCallSettings.Builder + adaptMessageSettings() { + return adaptMessageSettings; + } + + @Override + public AdapterStubSettings build() throws IOException { + return new AdapterStubSettings(this); + } + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/GrpcAdapterCallableFactory.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/GrpcAdapterCallableFactory.java new file mode 100644 index 000000000000..1ee781673dfb --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/GrpcAdapterCallableFactory.java @@ -0,0 +1,113 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.stub; + +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcCallableFactory; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.BidiStreamingCallable; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.ClientStreamingCallable; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.StreamingCallSettings; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import com.google.longrunning.stub.OperationsStub; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC callable factory implementation for the Adapter service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class GrpcAdapterCallableFactory implements GrpcStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + GrpcCallSettings grpcCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createUnaryCallable(grpcCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + GrpcCallSettings grpcCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createPagedCallable(grpcCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + GrpcCallSettings grpcCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createBatchingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + OperationCallable createOperationCallable( + GrpcCallSettings grpcCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + return GrpcCallableFactory.createOperationCallable( + grpcCallSettings, callSettings, clientContext, operationsStub); + } + + @Override + public + BidiStreamingCallable createBidiStreamingCallable( + GrpcCallSettings grpcCallSettings, + StreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createBidiStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + GrpcCallSettings grpcCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createServerStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } + + @Override + public + ClientStreamingCallable createClientStreamingCallable( + GrpcCallSettings grpcCallSettings, + StreamingCallSettings callSettings, + ClientContext clientContext) { + return GrpcCallableFactory.createClientStreamingCallable( + grpcCallSettings, callSettings, clientContext); + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/GrpcAdapterStub.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/GrpcAdapterStub.java new file mode 100644 index 000000000000..32ad50758c80 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/GrpcAdapterStub.java @@ -0,0 +1,190 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.stub; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.grpc.GrpcCallSettings; +import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.RequestParamsBuilder; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.stub.GrpcOperationsStub; +import com.google.spanner.adapter.v1.AdaptMessageRequest; +import com.google.spanner.adapter.v1.AdaptMessageResponse; +import com.google.spanner.adapter.v1.CreateSessionRequest; +import com.google.spanner.adapter.v1.Session; +import io.grpc.MethodDescriptor; +import io.grpc.protobuf.ProtoUtils; +import java.io.IOException; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * gRPC stub implementation for the Adapter service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class GrpcAdapterStub extends AdapterStub { + private static final MethodDescriptor + createSessionMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.spanner.adapter.v1.Adapter/CreateSession") + .setRequestMarshaller( + ProtoUtils.marshaller(CreateSessionRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(Session.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + adaptMessageMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.SERVER_STREAMING) + .setFullMethodName("google.spanner.adapter.v1.Adapter/AdaptMessage") + .setRequestMarshaller(ProtoUtils.marshaller(AdaptMessageRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(AdaptMessageResponse.getDefaultInstance())) + .build(); + + private final UnaryCallable createSessionCallable; + private final ServerStreamingCallable + adaptMessageCallable; + + private final BackgroundResource backgroundResources; + private final GrpcOperationsStub operationsStub; + private final GrpcStubCallableFactory callableFactory; + + public static final GrpcAdapterStub create(AdapterStubSettings settings) throws IOException { + return new GrpcAdapterStub(settings, ClientContext.create(settings)); + } + + public static final GrpcAdapterStub create(ClientContext clientContext) throws IOException { + return new GrpcAdapterStub(AdapterStubSettings.newBuilder().build(), clientContext); + } + + public static final GrpcAdapterStub create( + ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException { + return new GrpcAdapterStub( + AdapterStubSettings.newBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of GrpcAdapterStub, using the given settings. This is protected so that + * it is easy to make a subclass, but otherwise, the static factory methods should be preferred. + */ + protected GrpcAdapterStub(AdapterStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new GrpcAdapterCallableFactory()); + } + + /** + * Constructs an instance of GrpcAdapterStub, using the given settings. This is protected so that + * it is easy to make a subclass, but otherwise, the static factory methods should be preferred. + */ + protected GrpcAdapterStub( + AdapterStubSettings settings, + ClientContext clientContext, + GrpcStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory); + + GrpcCallSettings createSessionTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(createSessionMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + GrpcCallSettings adaptMessageTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(adaptMessageMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + + this.createSessionCallable = + callableFactory.createUnaryCallable( + createSessionTransportSettings, settings.createSessionSettings(), clientContext); + this.adaptMessageCallable = + callableFactory.createServerStreamingCallable( + adaptMessageTransportSettings, settings.adaptMessageSettings(), clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + public GrpcOperationsStub getOperationsStub() { + return operationsStub; + } + + @Override + public UnaryCallable createSessionCallable() { + return createSessionCallable; + } + + @Override + public ServerStreamingCallable adaptMessageCallable() { + return adaptMessageCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/HttpJsonAdapterCallableFactory.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/HttpJsonAdapterCallableFactory.java new file mode 100644 index 000000000000..2336213cfd49 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/HttpJsonAdapterCallableFactory.java @@ -0,0 +1,101 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.stub; + +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonCallableFactory; +import com.google.api.gax.httpjson.HttpJsonOperationSnapshotCallable; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.longrunning.stub.OperationsStub; +import com.google.api.gax.rpc.BatchingCallSettings; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.OperationCallSettings; +import com.google.api.gax.rpc.OperationCallable; +import com.google.api.gax.rpc.PagedCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallSettings; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.longrunning.Operation; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST callable factory implementation for the Adapter service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class HttpJsonAdapterCallableFactory + implements HttpJsonStubCallableFactory { + + @Override + public UnaryCallable createUnaryCallable( + HttpJsonCallSettings httpJsonCallSettings, + UnaryCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createUnaryCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + UnaryCallable createPagedCallable( + HttpJsonCallSettings httpJsonCallSettings, + PagedCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createPagedCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public UnaryCallable createBatchingCallable( + HttpJsonCallSettings httpJsonCallSettings, + BatchingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createBatchingCallable( + httpJsonCallSettings, callSettings, clientContext); + } + + @Override + public + OperationCallable createOperationCallable( + HttpJsonCallSettings httpJsonCallSettings, + OperationCallSettings callSettings, + ClientContext clientContext, + OperationsStub operationsStub) { + UnaryCallable innerCallable = + HttpJsonCallableFactory.createBaseUnaryCallable( + httpJsonCallSettings, callSettings.getInitialCallSettings(), clientContext); + HttpJsonOperationSnapshotCallable initialCallable = + new HttpJsonOperationSnapshotCallable( + innerCallable, + httpJsonCallSettings.getMethodDescriptor().getOperationSnapshotFactory()); + return HttpJsonCallableFactory.createOperationCallable( + callSettings, clientContext, operationsStub.longRunningClient(), initialCallable); + } + + @Override + public + ServerStreamingCallable createServerStreamingCallable( + HttpJsonCallSettings httpJsonCallSettings, + ServerStreamingCallSettings callSettings, + ClientContext clientContext) { + return HttpJsonCallableFactory.createServerStreamingCallable( + httpJsonCallSettings, callSettings, clientContext); + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/HttpJsonAdapterStub.java b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/HttpJsonAdapterStub.java new file mode 100644 index 000000000000..39aaa93ff6cf --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/java/com/google/spanner/adapter/v1/stub/HttpJsonAdapterStub.java @@ -0,0 +1,259 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.stub; + +import com.google.api.core.InternalApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.BackgroundResourceAggregation; +import com.google.api.gax.httpjson.ApiMethodDescriptor; +import com.google.api.gax.httpjson.HttpJsonCallSettings; +import com.google.api.gax.httpjson.HttpJsonStubCallableFactory; +import com.google.api.gax.httpjson.ProtoMessageRequestFormatter; +import com.google.api.gax.httpjson.ProtoMessageResponseParser; +import com.google.api.gax.httpjson.ProtoRestSerializer; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.RequestParamsBuilder; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.protobuf.TypeRegistry; +import com.google.spanner.adapter.v1.AdaptMessageRequest; +import com.google.spanner.adapter.v1.AdaptMessageResponse; +import com.google.spanner.adapter.v1.CreateSessionRequest; +import com.google.spanner.adapter.v1.Session; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * REST stub implementation for the Adapter service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class HttpJsonAdapterStub extends AdapterStub { + private static final TypeRegistry typeRegistry = TypeRegistry.newBuilder().build(); + + private static final ApiMethodDescriptor + createSessionMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.spanner.adapter.v1.Adapter/CreateSession") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{parent=projects/*/instances/*/databases/*}/sessions:adapter", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "parent", request.getParent()); + 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("session", request.getSession(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(Session.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + adaptMessageMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.spanner.adapter.v1.Adapter/AdaptMessage") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.SERVER_STREAMING) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/{name=projects/*/instances/*/databases/*/sessions/*}:adaptMessage", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "name", request.getName()); + 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().clearName().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(AdaptMessageResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private final UnaryCallable createSessionCallable; + private final ServerStreamingCallable + adaptMessageCallable; + + private final BackgroundResource backgroundResources; + private final HttpJsonStubCallableFactory callableFactory; + + public static final HttpJsonAdapterStub create(AdapterStubSettings settings) throws IOException { + return new HttpJsonAdapterStub(settings, ClientContext.create(settings)); + } + + public static final HttpJsonAdapterStub create(ClientContext clientContext) throws IOException { + return new HttpJsonAdapterStub(AdapterStubSettings.newHttpJsonBuilder().build(), clientContext); + } + + public static final HttpJsonAdapterStub create( + ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { + return new HttpJsonAdapterStub( + AdapterStubSettings.newHttpJsonBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of HttpJsonAdapterStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonAdapterStub(AdapterStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new HttpJsonAdapterCallableFactory()); + } + + /** + * Constructs an instance of HttpJsonAdapterStub, using the given settings. This is protected so + * that it is easy to make a subclass, but otherwise, the static factory methods should be + * preferred. + */ + protected HttpJsonAdapterStub( + AdapterStubSettings settings, + ClientContext clientContext, + HttpJsonStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + + HttpJsonCallSettings createSessionTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(createSessionMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("parent", String.valueOf(request.getParent())); + return builder.build(); + }) + .build(); + HttpJsonCallSettings adaptMessageTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(adaptMessageMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add("name", String.valueOf(request.getName())); + return builder.build(); + }) + .build(); + + this.createSessionCallable = + callableFactory.createUnaryCallable( + createSessionTransportSettings, settings.createSessionSettings(), clientContext); + this.adaptMessageCallable = + callableFactory.createServerStreamingCallable( + adaptMessageTransportSettings, settings.adaptMessageSettings(), clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + @InternalApi + public static List getMethodDescriptors() { + List methodDescriptors = new ArrayList<>(); + methodDescriptors.add(createSessionMethodDescriptor); + methodDescriptors.add(adaptMessageMethodDescriptor); + return methodDescriptors; + } + + @Override + public UnaryCallable createSessionCallable() { + return createSessionCallable; + } + + @Override + public ServerStreamingCallable adaptMessageCallable() { + return adaptMessageCallable; + } + + @Override + public final void close() { + try { + backgroundResources.close(); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + throw new IllegalStateException("Failed to close resource", e); + } + } + + @Override + public void shutdown() { + backgroundResources.shutdown(); + } + + @Override + public boolean isShutdown() { + return backgroundResources.isShutdown(); + } + + @Override + public boolean isTerminated() { + return backgroundResources.isTerminated(); + } + + @Override + public void shutdownNow() { + backgroundResources.shutdownNow(); + } + + @Override + public boolean awaitTermination(long duration, TimeUnit unit) throws InterruptedException { + return backgroundResources.awaitTermination(duration, unit); + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/main/resources/META-INF/native-image/com.google.spanner.adapter.v1/reflect-config.json b/java-spanneradapter/google-cloud-spanneradapter/src/main/resources/META-INF/native-image/com.google.spanner.adapter.v1/reflect-config.json new file mode 100644 index 000000000000..ad2777e45f24 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/main/resources/META-INF/native-image/com.google.spanner.adapter.v1/reflect-config.json @@ -0,0 +1,1235 @@ +[ + { + "name": "com.google.api.ClientLibraryDestination", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ClientLibraryOrganization", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ClientLibrarySettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ClientLibrarySettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CommonLanguageSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CommonLanguageSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CppSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CppSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CustomHttpPattern", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.CustomHttpPattern$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.DotnetSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.DotnetSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.FieldBehavior", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.GoSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.GoSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.Http", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.Http$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.HttpRule", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.HttpRule$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.JavaSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.JavaSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.LaunchStage", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.MethodSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.MethodSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.MethodSettings$LongRunning", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.MethodSettings$LongRunning$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.NodeSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.NodeSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PhpSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PhpSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.Publishing", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.Publishing$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PythonSettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PythonSettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PythonSettings$ExperimentalFeatures", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.PythonSettings$ExperimentalFeatures$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceDescriptor", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceDescriptor$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceDescriptor$History", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceDescriptor$Style", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceReference", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.ResourceReference$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.RubySettings", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.RubySettings$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.SelectiveGapicGeneration", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.SelectiveGapicGeneration$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$ExtensionRange", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$ExtensionRange$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$ReservedRange", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$DescriptorProto$ReservedRange$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$Edition", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumDescriptorProto$EnumReservedRange", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumDescriptorProto$EnumReservedRange$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumValueDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumValueDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumValueOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$EnumValueOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions$Declaration", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions$Declaration$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ExtensionRangeOptions$VerificationState", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$EnumType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$FieldPresence", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$JsonFormat", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$MessageEncoding", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$RepeatedFieldEncoding", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSet$Utf8Validation", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults$FeatureSetEditionDefault", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FeatureSetDefaults$FeatureSetEditionDefault$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldDescriptorProto$Label", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldDescriptorProto$Type", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$CType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$EditionDefault", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$EditionDefault$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$JSType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$OptionRetention", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FieldOptions$OptionTargetType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileDescriptorSet", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileDescriptorSet$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$FileOptions$OptimizeMode", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo$Annotation", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo$Annotation$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo$Annotation$Semantic", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$GeneratedCodeInfo$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MessageOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MessageOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$MethodOptions$IdempotencyLevel", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$OneofDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$OneofDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$OneofOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$OneofOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ServiceDescriptorProto", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ServiceDescriptorProto$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ServiceOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$ServiceOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SourceCodeInfo", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SourceCodeInfo$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SourceCodeInfo$Location", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$SourceCodeInfo$Location$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption$NamePart", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DescriptorProtos$UninterpretedOption$NamePart$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Duration", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Duration$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.adapter.v1.AdaptMessageRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.adapter.v1.AdaptMessageRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.adapter.v1.AdaptMessageResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.adapter.v1.AdaptMessageResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.adapter.v1.CreateSessionRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.adapter.v1.CreateSessionRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.adapter.v1.Session", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.spanner.adapter.v1.Session$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] \ No newline at end of file diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/AdapterClientHttpJsonTest.java b/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/AdapterClientHttpJsonTest.java new file mode 100644 index 000000000000..6425f5c53cf9 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/AdapterClientHttpJsonTest.java @@ -0,0 +1,177 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.httpjson.GaxHttpJsonProperties; +import com.google.api.gax.httpjson.testing.MockHttpService; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.ApiExceptionFactory; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.api.gax.rpc.StatusCode; +import com.google.api.gax.rpc.testing.FakeStatusCode; +import com.google.spanner.adapter.v1.stub.HttpJsonAdapterStub; +import java.io.IOException; +import java.util.List; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class AdapterClientHttpJsonTest { + private static MockHttpService mockService; + private static AdapterClient client; + + @BeforeClass + public static void startStaticServer() throws IOException { + mockService = + new MockHttpService( + HttpJsonAdapterStub.getMethodDescriptors(), AdapterSettings.getDefaultEndpoint()); + AdapterSettings settings = + AdapterSettings.newHttpJsonBuilder() + .setTransportChannelProvider( + AdapterSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport(mockService) + .build()) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = AdapterClient.create(settings); + } + + @AfterClass + public static void stopServer() { + client.close(); + } + + @Before + public void setUp() {} + + @After + public void tearDown() throws Exception { + mockService.reset(); + } + + @Test + public void createSessionTest() throws Exception { + Session expectedResponse = + Session.newBuilder() + .setName( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .build(); + mockService.addResponse(expectedResponse); + + DatabaseName parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + Session session = Session.newBuilder().build(); + + Session actualResponse = client.createSession(parent, session); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSessionExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + DatabaseName parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + Session session = Session.newBuilder().build(); + client.createSession(parent, session); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSessionTest2() throws Exception { + Session expectedResponse = + Session.newBuilder() + .setName( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .build(); + mockService.addResponse(expectedResponse); + + String parent = "projects/project-9347/instances/instance-9347/databases/database-9347"; + Session session = Session.newBuilder().build(); + + Session actualResponse = client.createSession(parent, session); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockService.getRequestPaths(); + Assert.assertEquals(1, actualRequests.size()); + + String apiClientHeaderKey = + mockService + .getRequestHeaders() + .get(ApiClientHeaderProvider.getDefaultApiClientHeaderKey()) + .iterator() + .next(); + Assert.assertTrue( + GaxHttpJsonProperties.getDefaultApiClientHeaderPattern() + .matcher(apiClientHeaderKey) + .matches()); + } + + @Test + public void createSessionExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String parent = "projects/project-9347/instances/instance-9347/databases/database-9347"; + Session session = Session.newBuilder().build(); + client.createSession(parent, session); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void adaptMessageTest() throws Exception {} + + @Test + public void adaptMessageExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/AdapterClientTest.java b/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/AdapterClientTest.java new file mode 100644 index 000000000000..6073a69c12af --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/AdapterClientTest.java @@ -0,0 +1,224 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1; + +import com.google.api.gax.core.NoCredentialsProvider; +import com.google.api.gax.grpc.GaxGrpcProperties; +import com.google.api.gax.grpc.testing.LocalChannelProvider; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.api.gax.grpc.testing.MockServiceHelper; +import com.google.api.gax.grpc.testing.MockStreamObserver; +import com.google.api.gax.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.api.gax.rpc.ServerStreamingCallable; +import com.google.api.gax.rpc.StatusCode; +import com.google.protobuf.AbstractMessage; +import com.google.protobuf.ByteString; +import io.grpc.StatusRuntimeException; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.UUID; +import java.util.concurrent.ExecutionException; +import javax.annotation.Generated; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +@Generated("by gapic-generator-java") +public class AdapterClientTest { + private static MockAdapter mockAdapter; + private static MockServiceHelper mockServiceHelper; + private LocalChannelProvider channelProvider; + private AdapterClient client; + + @BeforeClass + public static void startStaticServer() { + mockAdapter = new MockAdapter(); + mockServiceHelper = + new MockServiceHelper( + UUID.randomUUID().toString(), Arrays.asList(mockAdapter)); + mockServiceHelper.start(); + } + + @AfterClass + public static void stopServer() { + mockServiceHelper.stop(); + } + + @Before + public void setUp() throws IOException { + mockServiceHelper.reset(); + channelProvider = mockServiceHelper.createChannelProvider(); + AdapterSettings settings = + AdapterSettings.newBuilder() + .setTransportChannelProvider(channelProvider) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = AdapterClient.create(settings); + } + + @After + public void tearDown() throws Exception { + client.close(); + } + + @Test + public void createSessionTest() throws Exception { + Session expectedResponse = + Session.newBuilder() + .setName( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .build(); + mockAdapter.addResponse(expectedResponse); + + DatabaseName parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + Session session = Session.newBuilder().build(); + + Session actualResponse = client.createSession(parent, session); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockAdapter.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CreateSessionRequest actualRequest = ((CreateSessionRequest) actualRequests.get(0)); + + Assert.assertEquals(parent.toString(), actualRequest.getParent()); + Assert.assertEquals(session, actualRequest.getSession()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSessionExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockAdapter.addException(exception); + + try { + DatabaseName parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + Session session = Session.newBuilder().build(); + client.createSession(parent, session); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void createSessionTest2() throws Exception { + Session expectedResponse = + Session.newBuilder() + .setName( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .build(); + mockAdapter.addResponse(expectedResponse); + + String parent = "parent-995424086"; + Session session = Session.newBuilder().build(); + + Session actualResponse = client.createSession(parent, session); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockAdapter.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CreateSessionRequest actualRequest = ((CreateSessionRequest) actualRequests.get(0)); + + Assert.assertEquals(parent, actualRequest.getParent()); + Assert.assertEquals(session, actualRequest.getSession()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void createSessionExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockAdapter.addException(exception); + + try { + String parent = "parent-995424086"; + Session session = Session.newBuilder().build(); + client.createSession(parent, session); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void adaptMessageTest() throws Exception { + AdaptMessageResponse expectedResponse = + AdaptMessageResponse.newBuilder() + .setPayload(ByteString.EMPTY) + .putAllStateUpdates(new HashMap()) + .build(); + mockAdapter.addResponse(expectedResponse); + AdaptMessageRequest request = + AdaptMessageRequest.newBuilder() + .setName( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .setProtocol("protocol-989163880") + .setPayload(ByteString.EMPTY) + .putAllAttachments(new HashMap()) + .build(); + + MockStreamObserver responseObserver = new MockStreamObserver<>(); + + ServerStreamingCallable callable = + client.adaptMessageCallable(); + callable.serverStreamingCall(request, responseObserver); + + List actualResponses = responseObserver.future().get(); + Assert.assertEquals(1, actualResponses.size()); + Assert.assertEquals(expectedResponse, actualResponses.get(0)); + } + + @Test + public void adaptMessageExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockAdapter.addException(exception); + AdaptMessageRequest request = + AdaptMessageRequest.newBuilder() + .setName( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .setProtocol("protocol-989163880") + .setPayload(ByteString.EMPTY) + .putAllAttachments(new HashMap()) + .build(); + + MockStreamObserver responseObserver = new MockStreamObserver<>(); + + ServerStreamingCallable callable = + client.adaptMessageCallable(); + 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()); + } + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/MockAdapter.java b/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/MockAdapter.java new file mode 100644 index 000000000000..5baa237d4e4f --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/MockAdapter.java @@ -0,0 +1,59 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1; + +import com.google.api.core.BetaApi; +import com.google.api.gax.grpc.testing.MockGrpcService; +import com.google.protobuf.AbstractMessage; +import io.grpc.ServerServiceDefinition; +import java.util.List; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockAdapter implements MockGrpcService { + private final MockAdapterImpl serviceImpl; + + public MockAdapter() { + serviceImpl = new MockAdapterImpl(); + } + + @Override + public List getRequests() { + return serviceImpl.getRequests(); + } + + @Override + public void addResponse(AbstractMessage response) { + serviceImpl.addResponse(response); + } + + @Override + public void addException(Exception exception) { + serviceImpl.addException(exception); + } + + @Override + public ServerServiceDefinition getServiceDefinition() { + return serviceImpl.bindService(); + } + + @Override + public void reset() { + serviceImpl.reset(); + } +} diff --git a/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/MockAdapterImpl.java b/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/MockAdapterImpl.java new file mode 100644 index 000000000000..4b5d964da0f5 --- /dev/null +++ b/java-spanneradapter/google-cloud-spanneradapter/src/test/java/com/google/spanner/adapter/v1/MockAdapterImpl.java @@ -0,0 +1,102 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1; + +import com.google.api.core.BetaApi; +import com.google.protobuf.AbstractMessage; +import com.google.spanner.adapter.v1.AdapterGrpc.AdapterImplBase; +import io.grpc.stub.StreamObserver; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import javax.annotation.Generated; + +@BetaApi +@Generated("by gapic-generator-java") +public class MockAdapterImpl extends AdapterImplBase { + private List requests; + private Queue responses; + + public MockAdapterImpl() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + public List getRequests() { + return requests; + } + + public void addResponse(AbstractMessage response) { + responses.add(response); + } + + public void setResponses(List responses) { + this.responses = new LinkedList(responses); + } + + public void addException(Exception exception) { + responses.add(exception); + } + + public void reset() { + requests = new ArrayList<>(); + responses = new LinkedList<>(); + } + + @Override + public void createSession( + CreateSessionRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof Session) { + requests.add(request); + responseObserver.onNext(((Session) 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 CreateSession, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + Session.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void adaptMessage( + AdaptMessageRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof AdaptMessageResponse) { + requests.add(request); + responseObserver.onNext(((AdaptMessageResponse) 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 AdaptMessage, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + AdaptMessageResponse.class.getName(), + Exception.class.getName()))); + } + } +} diff --git a/java-spanneradapter/grpc-google-cloud-spanneradapter-v1/pom.xml b/java-spanneradapter/grpc-google-cloud-spanneradapter-v1/pom.xml new file mode 100644 index 000000000000..7198dc6ffe7b --- /dev/null +++ b/java-spanneradapter/grpc-google-cloud-spanneradapter-v1/pom.xml @@ -0,0 +1,45 @@ + + 4.0.0 + com.google.api.grpc + grpc-google-cloud-spanneradapter-v1 + 0.1.0-SNAPSHOT + grpc-google-cloud-spanneradapter-v1 + GRPC library for google-cloud-spanneradapter + + com.google.cloud + google-cloud-spanneradapter-parent + 0.1.0-SNAPSHOT + + + + io.grpc + grpc-api + + + io.grpc + grpc-stub + + + io.grpc + grpc-protobuf + + + com.google.protobuf + protobuf-java + + + com.google.api.grpc + proto-google-common-protos + + + com.google.api.grpc + proto-google-cloud-spanneradapter-v1 + + + com.google.guava + guava + + + diff --git a/java-spanneradapter/grpc-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdapterGrpc.java b/java-spanneradapter/grpc-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdapterGrpc.java new file mode 100644 index 000000000000..ef48c3491c3e --- /dev/null +++ b/java-spanneradapter/grpc-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdapterGrpc.java @@ -0,0 +1,568 @@ +/* + * Copyright 2025 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. + */ +package com.google.spanner.adapter.v1; + +import static io.grpc.MethodDescriptor.generateFullMethodName; + +/** + * + * + *
+ * Cloud Spanner Adapter API
+ * The Cloud Spanner Adapter service allows native drivers of supported database
+ * dialects to interact directly with Cloud Spanner by wrapping the underlying
+ * wire protocol used by the driver in a gRPC stream.
+ * 
+ */ +@javax.annotation.Generated( + value = "by gRPC proto compiler", + comments = "Source: google/spanner/adapter/v1/adapter.proto") +@io.grpc.stub.annotations.GrpcGenerated +public final class AdapterGrpc { + + private AdapterGrpc() {} + + public static final java.lang.String SERVICE_NAME = "google.spanner.adapter.v1.Adapter"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor< + com.google.spanner.adapter.v1.CreateSessionRequest, com.google.spanner.adapter.v1.Session> + getCreateSessionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "CreateSession", + requestType = com.google.spanner.adapter.v1.CreateSessionRequest.class, + responseType = com.google.spanner.adapter.v1.Session.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.spanner.adapter.v1.CreateSessionRequest, com.google.spanner.adapter.v1.Session> + getCreateSessionMethod() { + io.grpc.MethodDescriptor< + com.google.spanner.adapter.v1.CreateSessionRequest, + com.google.spanner.adapter.v1.Session> + getCreateSessionMethod; + if ((getCreateSessionMethod = AdapterGrpc.getCreateSessionMethod) == null) { + synchronized (AdapterGrpc.class) { + if ((getCreateSessionMethod = AdapterGrpc.getCreateSessionMethod) == null) { + AdapterGrpc.getCreateSessionMethod = + getCreateSessionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateSession")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.adapter.v1.CreateSessionRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.adapter.v1.Session.getDefaultInstance())) + .setSchemaDescriptor(new AdapterMethodDescriptorSupplier("CreateSession")) + .build(); + } + } + } + return getCreateSessionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.spanner.adapter.v1.AdaptMessageRequest, + com.google.spanner.adapter.v1.AdaptMessageResponse> + getAdaptMessageMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "AdaptMessage", + requestType = com.google.spanner.adapter.v1.AdaptMessageRequest.class, + responseType = com.google.spanner.adapter.v1.AdaptMessageResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) + public static io.grpc.MethodDescriptor< + com.google.spanner.adapter.v1.AdaptMessageRequest, + com.google.spanner.adapter.v1.AdaptMessageResponse> + getAdaptMessageMethod() { + io.grpc.MethodDescriptor< + com.google.spanner.adapter.v1.AdaptMessageRequest, + com.google.spanner.adapter.v1.AdaptMessageResponse> + getAdaptMessageMethod; + if ((getAdaptMessageMethod = AdapterGrpc.getAdaptMessageMethod) == null) { + synchronized (AdapterGrpc.class) { + if ((getAdaptMessageMethod = AdapterGrpc.getAdaptMessageMethod) == null) { + AdapterGrpc.getAdaptMessageMethod = + getAdaptMessageMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "AdaptMessage")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.adapter.v1.AdaptMessageRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.spanner.adapter.v1.AdaptMessageResponse + .getDefaultInstance())) + .setSchemaDescriptor(new AdapterMethodDescriptorSupplier("AdaptMessage")) + .build(); + } + } + } + return getAdaptMessageMethod; + } + + /** Creates a new async stub that supports all call types for the service */ + public static AdapterStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public AdapterStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new AdapterStub(channel, callOptions); + } + }; + return AdapterStub.newStub(factory, channel); + } + + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static AdapterBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public AdapterBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new AdapterBlockingV2Stub(channel, callOptions); + } + }; + return AdapterBlockingV2Stub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static AdapterBlockingStub newBlockingStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public AdapterBlockingStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new AdapterBlockingStub(channel, callOptions); + } + }; + return AdapterBlockingStub.newStub(factory, channel); + } + + /** Creates a new ListenableFuture-style stub that supports unary calls on the service */ + public static AdapterFutureStub newFutureStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public AdapterFutureStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new AdapterFutureStub(channel, callOptions); + } + }; + return AdapterFutureStub.newStub(factory, channel); + } + + /** + * + * + *
+   * Cloud Spanner Adapter API
+   * The Cloud Spanner Adapter service allows native drivers of supported database
+   * dialects to interact directly with Cloud Spanner by wrapping the underlying
+   * wire protocol used by the driver in a gRPC stream.
+   * 
+ */ + public interface AsyncService { + + /** + * + * + *
+     * Creates a new session to be used for requests made by the adapter.
+     * A session identifies a specific incarnation of a database resource and is
+     * meant to be reused across many `AdaptMessage` calls.
+     * 
+ */ + default void createSession( + com.google.spanner.adapter.v1.CreateSessionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getCreateSessionMethod(), responseObserver); + } + + /** + * + * + *
+     * Handles a single message from the client and returns the result as a
+     * stream. The server will interpret the message frame and respond with
+     * message frames to the client.
+     * 
+ */ + default void adaptMessage( + com.google.spanner.adapter.v1.AdaptMessageRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getAdaptMessageMethod(), responseObserver); + } + } + + /** + * Base class for the server implementation of the service Adapter. + * + *
+   * Cloud Spanner Adapter API
+   * The Cloud Spanner Adapter service allows native drivers of supported database
+   * dialects to interact directly with Cloud Spanner by wrapping the underlying
+   * wire protocol used by the driver in a gRPC stream.
+   * 
+ */ + public abstract static class AdapterImplBase implements io.grpc.BindableService, AsyncService { + + @java.lang.Override + public final io.grpc.ServerServiceDefinition bindService() { + return AdapterGrpc.bindService(this); + } + } + + /** + * A stub to allow clients to do asynchronous rpc calls to service Adapter. + * + *
+   * Cloud Spanner Adapter API
+   * The Cloud Spanner Adapter service allows native drivers of supported database
+   * dialects to interact directly with Cloud Spanner by wrapping the underlying
+   * wire protocol used by the driver in a gRPC stream.
+   * 
+ */ + public static final class AdapterStub extends io.grpc.stub.AbstractAsyncStub { + private AdapterStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected AdapterStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new AdapterStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a new session to be used for requests made by the adapter.
+     * A session identifies a specific incarnation of a database resource and is
+     * meant to be reused across many `AdaptMessage` calls.
+     * 
+ */ + public void createSession( + com.google.spanner.adapter.v1.CreateSessionRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCreateSessionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Handles a single message from the client and returns the result as a
+     * stream. The server will interpret the message frame and respond with
+     * message frames to the client.
+     * 
+ */ + public void adaptMessage( + com.google.spanner.adapter.v1.AdaptMessageRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncServerStreamingCall( + getChannel().newCall(getAdaptMessageMethod(), getCallOptions()), + request, + responseObserver); + } + } + + /** + * A stub to allow clients to do synchronous rpc calls to service Adapter. + * + *
+   * Cloud Spanner Adapter API
+   * The Cloud Spanner Adapter service allows native drivers of supported database
+   * dialects to interact directly with Cloud Spanner by wrapping the underlying
+   * wire protocol used by the driver in a gRPC stream.
+   * 
+ */ + public static final class AdapterBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private AdapterBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected AdapterBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new AdapterBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a new session to be used for requests made by the adapter.
+     * A session identifies a specific incarnation of a database resource and is
+     * meant to be reused across many `AdaptMessage` calls.
+     * 
+ */ + public com.google.spanner.adapter.v1.Session createSession( + com.google.spanner.adapter.v1.CreateSessionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateSessionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Handles a single message from the client and returns the result as a
+     * stream. The server will interpret the message frame and respond with
+     * message frames to the client.
+     * 
+ */ + @io.grpc.ExperimentalApi("https://github.com/grpc/grpc-java/issues/10918") + public io.grpc.stub.BlockingClientCall + adaptMessage(com.google.spanner.adapter.v1.AdaptMessageRequest request) { + return io.grpc.stub.ClientCalls.blockingV2ServerStreamingCall( + getChannel(), getAdaptMessageMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service Adapter. + * + *
+   * Cloud Spanner Adapter API
+   * The Cloud Spanner Adapter service allows native drivers of supported database
+   * dialects to interact directly with Cloud Spanner by wrapping the underlying
+   * wire protocol used by the driver in a gRPC stream.
+   * 
+ */ + public static final class AdapterBlockingStub + extends io.grpc.stub.AbstractBlockingStub { + private AdapterBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected AdapterBlockingStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new AdapterBlockingStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a new session to be used for requests made by the adapter.
+     * A session identifies a specific incarnation of a database resource and is
+     * meant to be reused across many `AdaptMessage` calls.
+     * 
+ */ + public com.google.spanner.adapter.v1.Session createSession( + com.google.spanner.adapter.v1.CreateSessionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateSessionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Handles a single message from the client and returns the result as a
+     * stream. The server will interpret the message frame and respond with
+     * message frames to the client.
+     * 
+ */ + public java.util.Iterator adaptMessage( + com.google.spanner.adapter.v1.AdaptMessageRequest request) { + return io.grpc.stub.ClientCalls.blockingServerStreamingCall( + getChannel(), getAdaptMessageMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do ListenableFuture-style rpc calls to service Adapter. + * + *
+   * Cloud Spanner Adapter API
+   * The Cloud Spanner Adapter service allows native drivers of supported database
+   * dialects to interact directly with Cloud Spanner by wrapping the underlying
+   * wire protocol used by the driver in a gRPC stream.
+   * 
+ */ + public static final class AdapterFutureStub + extends io.grpc.stub.AbstractFutureStub { + private AdapterFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected AdapterFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new AdapterFutureStub(channel, callOptions); + } + + /** + * + * + *
+     * Creates a new session to be used for requests made by the adapter.
+     * A session identifies a specific incarnation of a database resource and is
+     * meant to be reused across many `AdaptMessage` calls.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture + createSession(com.google.spanner.adapter.v1.CreateSessionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCreateSessionMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_CREATE_SESSION = 0; + private static final int METHODID_ADAPT_MESSAGE = 1; + + private static final class MethodHandlers + implements io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final AsyncService serviceImpl; + private final int methodId; + + MethodHandlers(AsyncService serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_CREATE_SESSION: + serviceImpl.createSession( + (com.google.spanner.adapter.v1.CreateSessionRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_ADAPT_MESSAGE: + serviceImpl.adaptMessage( + (com.google.spanner.adapter.v1.AdaptMessageRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + default: + throw new AssertionError(); + } + } + } + + public static final io.grpc.ServerServiceDefinition bindService(AsyncService service) { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getCreateSessionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.spanner.adapter.v1.CreateSessionRequest, + com.google.spanner.adapter.v1.Session>(service, METHODID_CREATE_SESSION))) + .addMethod( + getAdaptMessageMethod(), + io.grpc.stub.ServerCalls.asyncServerStreamingCall( + new MethodHandlers< + com.google.spanner.adapter.v1.AdaptMessageRequest, + com.google.spanner.adapter.v1.AdaptMessageResponse>( + service, METHODID_ADAPT_MESSAGE))) + .build(); + } + + private abstract static class AdapterBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, + io.grpc.protobuf.ProtoServiceDescriptorSupplier { + AdapterBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("Adapter"); + } + } + + private static final class AdapterFileDescriptorSupplier extends AdapterBaseDescriptorSupplier { + AdapterFileDescriptorSupplier() {} + } + + private static final class AdapterMethodDescriptorSupplier extends AdapterBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final java.lang.String methodName; + + AdapterMethodDescriptorSupplier(java.lang.String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (AdapterGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = + result = + io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new AdapterFileDescriptorSupplier()) + .addMethod(getCreateSessionMethod()) + .addMethod(getAdaptMessageMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/java-spanneradapter/owlbot.py b/java-spanneradapter/owlbot.py new file mode 100644 index 000000000000..2ba11e6bba67 --- /dev/null +++ b/java-spanneradapter/owlbot.py @@ -0,0 +1,36 @@ +# Copyright 2024 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. + +import synthtool as s +from synthtool.languages import java + + +for library in s.get_staging_dirs(): + # put any special-case replacements here + s.move(library) + +s.remove_staging_dirs() +java.common_templates(monorepo=True, excludes=[ + ".github/*", + ".kokoro/*", + "samples/*", + "CODE_OF_CONDUCT.md", + "CONTRIBUTING.md", + "LICENSE", + "SECURITY.md", + "java.header", + "license-checks.xml", + "renovate.json", + ".gitignore" +]) \ No newline at end of file diff --git a/java-spanneradapter/pom.xml b/java-spanneradapter/pom.xml new file mode 100644 index 000000000000..e04790297e0a --- /dev/null +++ b/java-spanneradapter/pom.xml @@ -0,0 +1,55 @@ + + + 4.0.0 + com.google.cloud + google-cloud-spanneradapter-parent + pom + 0.1.0-SNAPSHOT + Google Cloud Spanner Adapter API Parent + + Java idiomatic client for Google Cloud Platform services. + + + + com.google.cloud + google-cloud-jar-parent + 1.59.0-SNAPSHOT + ../google-cloud-jar-parent/pom.xml + + + + UTF-8 + UTF-8 + github + google-cloud-spanneradapter-parent + + + + + + com.google.cloud + google-cloud-spanneradapter + 0.1.0-SNAPSHOT + + + com.google.api.grpc + grpc-google-cloud-spanneradapter-v1 + 0.1.0-SNAPSHOT + + + com.google.api.grpc + proto-google-cloud-spanneradapter-v1 + 0.1.0-SNAPSHOT + + + + + + + google-cloud-spanneradapter + grpc-google-cloud-spanneradapter-v1 + proto-google-cloud-spanneradapter-v1 + google-cloud-spanneradapter-bom + + + diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/clirr-ignored-differences.xml b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/clirr-ignored-differences.xml new file mode 100644 index 000000000000..cd616933f11c --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/clirr-ignored-differences.xml @@ -0,0 +1,80 @@ + + + + + 7012 + com/google/spanner/adapter/v1/*OrBuilder + * get*(*) + + + 7012 + com/google/spanner/adapter/v1/*OrBuilder + boolean contains*(*) + + + 7012 + com/google/spanner/adapter/v1/*OrBuilder + boolean has*(*) + + + + 7006 + com/google/spanner/adapter/v1/** + * getDefaultInstanceForType() + ** + + + 7006 + com/google/spanner/adapter/v1/** + * addRepeatedField(*) + ** + + + 7006 + com/google/spanner/adapter/v1/** + * clear() + ** + + + 7006 + com/google/spanner/adapter/v1/** + * clearField(*) + ** + + + 7006 + com/google/spanner/adapter/v1/** + * clearOneof(*) + ** + + + 7006 + com/google/spanner/adapter/v1/** + * clone() + ** + + + 7006 + com/google/spanner/adapter/v1/** + * mergeUnknownFields(*) + ** + + + 7006 + com/google/spanner/adapter/v1/** + * setField(*) + ** + + + 7006 + com/google/spanner/adapter/v1/** + * setRepeatedField(*) + ** + + + 7006 + com/google/spanner/adapter/v1/** + * setUnknownFields(*) + ** + + diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/pom.xml b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/pom.xml new file mode 100644 index 000000000000..8875f22d830a --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/pom.xml @@ -0,0 +1,37 @@ + + 4.0.0 + com.google.api.grpc + proto-google-cloud-spanneradapter-v1 + 0.1.0-SNAPSHOT + proto-google-cloud-spanneradapter-v1 + Proto library for google-cloud-spanneradapter + + com.google.cloud + google-cloud-spanneradapter-parent + 0.1.0-SNAPSHOT + + + + com.google.protobuf + protobuf-java + + + com.google.api.grpc + proto-google-common-protos + + + com.google.api.grpc + proto-google-iam-v1 + + + com.google.api + api-common + + + com.google.guava + guava + + + diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageRequest.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageRequest.java new file mode 100644 index 000000000000..38655889bcdf --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageRequest.java @@ -0,0 +1,1301 @@ +/* + * Copyright 2025 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/adapter/v1/adapter.proto + +// Protobuf Java Version: 3.25.8 +package com.google.spanner.adapter.v1; + +/** + * + * + *
+ * Message sent by the client to the adapter.
+ * 
+ * + * Protobuf type {@code google.spanner.adapter.v1.AdaptMessageRequest} + */ +public final class AdaptMessageRequest extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.adapter.v1.AdaptMessageRequest) + AdaptMessageRequestOrBuilder { + private static final long serialVersionUID = 0L; + + // Use AdaptMessageRequest.newBuilder() to construct. + private AdaptMessageRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private AdaptMessageRequest() { + name_ = ""; + protocol_ = ""; + payload_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new AdaptMessageRequest(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageRequest_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetAttachments(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.adapter.v1.AdaptMessageRequest.class, + com.google.spanner.adapter.v1.AdaptMessageRequest.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Required. The database session in which the adapter request is processed.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + 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(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The database session in which the adapter request is processed.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PROTOCOL_FIELD_NUMBER = 2; + + @SuppressWarnings("serial") + private volatile java.lang.Object protocol_ = ""; + + /** + * + * + *
+   * Required. Identifier for the underlying wire protocol.
+   * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The protocol. + */ + @java.lang.Override + public java.lang.String getProtocol() { + java.lang.Object ref = protocol_; + 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(); + protocol_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. Identifier for the underlying wire protocol.
+   * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for protocol. + */ + @java.lang.Override + public com.google.protobuf.ByteString getProtocolBytes() { + java.lang.Object ref = protocol_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + protocol_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PAYLOAD_FIELD_NUMBER = 3; + private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+   * Optional. Uninterpreted bytes from the underlying wire protocol.
+   * 
+ * + * bytes payload = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The payload. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPayload() { + return payload_; + } + + public static final int ATTACHMENTS_FIELD_NUMBER = 4; + + private static final class AttachmentsDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageRequest_AttachmentsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField attachments_; + + private com.google.protobuf.MapField + internalGetAttachments() { + if (attachments_ == null) { + return com.google.protobuf.MapField.emptyMapField(AttachmentsDefaultEntryHolder.defaultEntry); + } + return attachments_; + } + + public int getAttachmentsCount() { + return internalGetAttachments().getMap().size(); + } + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsAttachments(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetAttachments().getMap().containsKey(key); + } + + /** Use {@link #getAttachmentsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAttachments() { + return getAttachmentsMap(); + } + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getAttachmentsMap() { + return internalGetAttachments().getMap(); + } + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getAttachmentsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttachments().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getAttachmentsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttachments().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + 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(name_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(protocol_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, protocol_); + } + if (!payload_.isEmpty()) { + output.writeBytes(3, payload_); + } + com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + output, internalGetAttachments(), AttachmentsDefaultEntryHolder.defaultEntry, 4); + 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(name_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(protocol_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, protocol_); + } + if (!payload_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(3, payload_); + } + for (java.util.Map.Entry entry : + internalGetAttachments().getMap().entrySet()) { + com.google.protobuf.MapEntry attachments__ = + AttachmentsDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, attachments__); + } + 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.adapter.v1.AdaptMessageRequest)) { + return super.equals(obj); + } + com.google.spanner.adapter.v1.AdaptMessageRequest other = + (com.google.spanner.adapter.v1.AdaptMessageRequest) obj; + + if (!getName().equals(other.getName())) return false; + if (!getProtocol().equals(other.getProtocol())) return false; + if (!getPayload().equals(other.getPayload())) return false; + if (!internalGetAttachments().equals(other.internalGetAttachments())) 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) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (37 * hash) + PROTOCOL_FIELD_NUMBER; + hash = (53 * hash) + getProtocol().hashCode(); + hash = (37 * hash) + PAYLOAD_FIELD_NUMBER; + hash = (53 * hash) + getPayload().hashCode(); + if (!internalGetAttachments().getMap().isEmpty()) { + hash = (37 * hash) + ATTACHMENTS_FIELD_NUMBER; + hash = (53 * hash) + internalGetAttachments().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest 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.adapter.v1.AdaptMessageRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest 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.adapter.v1.AdaptMessageRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest 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.adapter.v1.AdaptMessageRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest 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.adapter.v1.AdaptMessageRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest 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.adapter.v1.AdaptMessageRequest 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; + } + + /** + * + * + *
+   * Message sent by the client to the adapter.
+   * 
+ * + * Protobuf type {@code google.spanner.adapter.v1.AdaptMessageRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.adapter.v1.AdaptMessageRequest) + com.google.spanner.adapter.v1.AdaptMessageRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageRequest_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetAttachments(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 4: + return internalGetMutableAttachments(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.adapter.v1.AdaptMessageRequest.class, + com.google.spanner.adapter.v1.AdaptMessageRequest.Builder.class); + } + + // Construct using com.google.spanner.adapter.v1.AdaptMessageRequest.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + protocol_ = ""; + payload_ = com.google.protobuf.ByteString.EMPTY; + internalGetMutableAttachments().clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageRequest_descriptor; + } + + @java.lang.Override + public com.google.spanner.adapter.v1.AdaptMessageRequest getDefaultInstanceForType() { + return com.google.spanner.adapter.v1.AdaptMessageRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.adapter.v1.AdaptMessageRequest build() { + com.google.spanner.adapter.v1.AdaptMessageRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.adapter.v1.AdaptMessageRequest buildPartial() { + com.google.spanner.adapter.v1.AdaptMessageRequest result = + new com.google.spanner.adapter.v1.AdaptMessageRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.adapter.v1.AdaptMessageRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.protocol_ = protocol_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.payload_ = payload_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.attachments_ = internalGetAttachments(); + result.attachments_.makeImmutable(); + } + } + + @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.adapter.v1.AdaptMessageRequest) { + return mergeFrom((com.google.spanner.adapter.v1.AdaptMessageRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.adapter.v1.AdaptMessageRequest other) { + if (other == com.google.spanner.adapter.v1.AdaptMessageRequest.getDefaultInstance()) + return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (!other.getProtocol().isEmpty()) { + protocol_ = other.protocol_; + bitField0_ |= 0x00000002; + onChanged(); + } + if (other.getPayload() != com.google.protobuf.ByteString.EMPTY) { + setPayload(other.getPayload()); + } + internalGetMutableAttachments().mergeFrom(other.internalGetAttachments()); + bitField0_ |= 0x00000008; + 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: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + protocol_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 26: + { + payload_ = input.readBytes(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 34: + { + com.google.protobuf.MapEntry attachments__ = + input.readMessage( + AttachmentsDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableAttachments() + .getMutableMap() + .put(attachments__.getKey(), attachments__.getValue()); + bitField0_ |= 0x00000008; + break; + } // case 34 + 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 name_ = ""; + + /** + * + * + *
+     * Required. The database session in which the adapter request is processed.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The database session in which the adapter request is processed.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The database session in which the adapter request is processed.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The database session in which the adapter request is processed.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The database session in which the adapter request is processed.
+     * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private java.lang.Object protocol_ = ""; + + /** + * + * + *
+     * Required. Identifier for the underlying wire protocol.
+     * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The protocol. + */ + public java.lang.String getProtocol() { + java.lang.Object ref = protocol_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + protocol_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. Identifier for the underlying wire protocol.
+     * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for protocol. + */ + public com.google.protobuf.ByteString getProtocolBytes() { + java.lang.Object ref = protocol_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + protocol_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. Identifier for the underlying wire protocol.
+     * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The protocol to set. + * @return This builder for chaining. + */ + public Builder setProtocol(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + protocol_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Identifier for the underlying wire protocol.
+     * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return This builder for chaining. + */ + public Builder clearProtocol() { + protocol_ = getDefaultInstance().getProtocol(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. Identifier for the underlying wire protocol.
+     * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @param value The bytes for protocol to set. + * @return This builder for chaining. + */ + public Builder setProtocolBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + protocol_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+     * Optional. Uninterpreted bytes from the underlying wire protocol.
+     * 
+ * + * bytes payload = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The payload. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPayload() { + return payload_; + } + + /** + * + * + *
+     * Optional. Uninterpreted bytes from the underlying wire protocol.
+     * 
+ * + * bytes payload = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The payload to set. + * @return This builder for chaining. + */ + public Builder setPayload(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + payload_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Uninterpreted bytes from the underlying wire protocol.
+     * 
+ * + * bytes payload = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPayload() { + bitField0_ = (bitField0_ & ~0x00000004); + payload_ = getDefaultInstance().getPayload(); + onChanged(); + return this; + } + + private com.google.protobuf.MapField attachments_; + + private com.google.protobuf.MapField + internalGetAttachments() { + if (attachments_ == null) { + return com.google.protobuf.MapField.emptyMapField( + AttachmentsDefaultEntryHolder.defaultEntry); + } + return attachments_; + } + + private com.google.protobuf.MapField + internalGetMutableAttachments() { + if (attachments_ == null) { + attachments_ = + com.google.protobuf.MapField.newMapField(AttachmentsDefaultEntryHolder.defaultEntry); + } + if (!attachments_.isMutable()) { + attachments_ = attachments_.copy(); + } + bitField0_ |= 0x00000008; + onChanged(); + return attachments_; + } + + public int getAttachmentsCount() { + return internalGetAttachments().getMap().size(); + } + + /** + * + * + *
+     * Optional. Opaque request state passed by the client to the server.
+     * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsAttachments(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetAttachments().getMap().containsKey(key); + } + + /** Use {@link #getAttachmentsMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getAttachments() { + return getAttachmentsMap(); + } + + /** + * + * + *
+     * Optional. Opaque request state passed by the client to the server.
+     * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getAttachmentsMap() { + return internalGetAttachments().getMap(); + } + + /** + * + * + *
+     * Optional. Opaque request state passed by the client to the server.
+     * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getAttachmentsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttachments().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. Opaque request state passed by the client to the server.
+     * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getAttachmentsOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetAttachments().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearAttachments() { + bitField0_ = (bitField0_ & ~0x00000008); + internalGetMutableAttachments().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. Opaque request state passed by the client to the server.
+     * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeAttachments(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableAttachments().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableAttachments() { + bitField0_ |= 0x00000008; + return internalGetMutableAttachments().getMutableMap(); + } + + /** + * + * + *
+     * Optional. Opaque request state passed by the client to the server.
+     * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAttachments(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableAttachments().getMutableMap().put(key, value); + bitField0_ |= 0x00000008; + return this; + } + + /** + * + * + *
+     * Optional. Opaque request state passed by the client to the server.
+     * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAllAttachments(java.util.Map values) { + internalGetMutableAttachments().getMutableMap().putAll(values); + bitField0_ |= 0x00000008; + 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.adapter.v1.AdaptMessageRequest) + } + + // @@protoc_insertion_point(class_scope:google.spanner.adapter.v1.AdaptMessageRequest) + private static final com.google.spanner.adapter.v1.AdaptMessageRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.adapter.v1.AdaptMessageRequest(); + } + + public static com.google.spanner.adapter.v1.AdaptMessageRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AdaptMessageRequest 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.adapter.v1.AdaptMessageRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageRequestOrBuilder.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageRequestOrBuilder.java new file mode 100644 index 000000000000..e766c3f10992 --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageRequestOrBuilder.java @@ -0,0 +1,163 @@ +/* + * Copyright 2025 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/adapter/v1/adapter.proto + +// Protobuf Java Version: 3.25.8 +package com.google.spanner.adapter.v1; + +public interface AdaptMessageRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.adapter.v1.AdaptMessageRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The database session in which the adapter request is processed.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Required. The database session in which the adapter request is processed.
+   * 
+ * + * + * string name = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); + + /** + * + * + *
+   * Required. Identifier for the underlying wire protocol.
+   * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The protocol. + */ + java.lang.String getProtocol(); + + /** + * + * + *
+   * Required. Identifier for the underlying wire protocol.
+   * 
+ * + * string protocol = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The bytes for protocol. + */ + com.google.protobuf.ByteString getProtocolBytes(); + + /** + * + * + *
+   * Optional. Uninterpreted bytes from the underlying wire protocol.
+   * 
+ * + * bytes payload = 3 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The payload. + */ + com.google.protobuf.ByteString getPayload(); + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getAttachmentsCount(); + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + boolean containsAttachments(java.lang.String key); + + /** Use {@link #getAttachmentsMap()} instead. */ + @java.lang.Deprecated + java.util.Map getAttachments(); + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.Map getAttachmentsMap(); + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + /* nullable */ + java.lang.String getAttachmentsOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. Opaque request state passed by the client to the server.
+   * 
+ * + * map<string, string> attachments = 4 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.lang.String getAttachmentsOrThrow(java.lang.String key); +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageResponse.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageResponse.java new file mode 100644 index 000000000000..30c313c4b406 --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageResponse.java @@ -0,0 +1,910 @@ +/* + * Copyright 2025 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/adapter/v1/adapter.proto + +// Protobuf Java Version: 3.25.8 +package com.google.spanner.adapter.v1; + +/** + * + * + *
+ * Message sent by the adapter to the client.
+ * 
+ * + * Protobuf type {@code google.spanner.adapter.v1.AdaptMessageResponse} + */ +public final class AdaptMessageResponse extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.adapter.v1.AdaptMessageResponse) + AdaptMessageResponseOrBuilder { + private static final long serialVersionUID = 0L; + + // Use AdaptMessageResponse.newBuilder() to construct. + private AdaptMessageResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private AdaptMessageResponse() { + payload_ = com.google.protobuf.ByteString.EMPTY; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new AdaptMessageResponse(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageResponse_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetStateUpdates(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.adapter.v1.AdaptMessageResponse.class, + com.google.spanner.adapter.v1.AdaptMessageResponse.Builder.class); + } + + public static final int PAYLOAD_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString payload_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+   * Optional. Uninterpreted bytes from the underlying wire protocol.
+   * 
+ * + * bytes payload = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The payload. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPayload() { + return payload_; + } + + public static final int STATE_UPDATES_FIELD_NUMBER = 2; + + private static final class StateUpdatesDefaultEntryHolder { + static final com.google.protobuf.MapEntry defaultEntry = + com.google.protobuf.MapEntry.newDefaultInstance( + com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageResponse_StateUpdatesEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + + @SuppressWarnings("serial") + private com.google.protobuf.MapField stateUpdates_; + + private com.google.protobuf.MapField + internalGetStateUpdates() { + if (stateUpdates_ == null) { + return com.google.protobuf.MapField.emptyMapField( + StateUpdatesDefaultEntryHolder.defaultEntry); + } + return stateUpdates_; + } + + public int getStateUpdatesCount() { + return internalGetStateUpdates().getMap().size(); + } + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsStateUpdates(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetStateUpdates().getMap().containsKey(key); + } + + /** Use {@link #getStateUpdatesMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getStateUpdates() { + return getStateUpdatesMap(); + } + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getStateUpdatesMap() { + return internalGetStateUpdates().getMap(); + } + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getStateUpdatesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetStateUpdates().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getStateUpdatesOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetStateUpdates().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + 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 (!payload_.isEmpty()) { + output.writeBytes(1, payload_); + } + com.google.protobuf.GeneratedMessageV3.serializeStringMapTo( + output, internalGetStateUpdates(), StateUpdatesDefaultEntryHolder.defaultEntry, 2); + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!payload_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(1, payload_); + } + for (java.util.Map.Entry entry : + internalGetStateUpdates().getMap().entrySet()) { + com.google.protobuf.MapEntry stateUpdates__ = + StateUpdatesDefaultEntryHolder.defaultEntry + .newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, stateUpdates__); + } + 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.adapter.v1.AdaptMessageResponse)) { + return super.equals(obj); + } + com.google.spanner.adapter.v1.AdaptMessageResponse other = + (com.google.spanner.adapter.v1.AdaptMessageResponse) obj; + + if (!getPayload().equals(other.getPayload())) return false; + if (!internalGetStateUpdates().equals(other.internalGetStateUpdates())) 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) + PAYLOAD_FIELD_NUMBER; + hash = (53 * hash) + getPayload().hashCode(); + if (!internalGetStateUpdates().getMap().isEmpty()) { + hash = (37 * hash) + STATE_UPDATES_FIELD_NUMBER; + hash = (53 * hash) + internalGetStateUpdates().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse 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.adapter.v1.AdaptMessageResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse 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.adapter.v1.AdaptMessageResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse 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.adapter.v1.AdaptMessageResponse parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse 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.adapter.v1.AdaptMessageResponse parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse 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.adapter.v1.AdaptMessageResponse 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; + } + + /** + * + * + *
+   * Message sent by the adapter to the client.
+   * 
+ * + * Protobuf type {@code google.spanner.adapter.v1.AdaptMessageResponse} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.adapter.v1.AdaptMessageResponse) + com.google.spanner.adapter.v1.AdaptMessageResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageResponse_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetStateUpdates(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 2: + return internalGetMutableStateUpdates(); + default: + throw new RuntimeException("Invalid map field number: " + number); + } + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.adapter.v1.AdaptMessageResponse.class, + com.google.spanner.adapter.v1.AdaptMessageResponse.Builder.class); + } + + // Construct using com.google.spanner.adapter.v1.AdaptMessageResponse.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + payload_ = com.google.protobuf.ByteString.EMPTY; + internalGetMutableStateUpdates().clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_AdaptMessageResponse_descriptor; + } + + @java.lang.Override + public com.google.spanner.adapter.v1.AdaptMessageResponse getDefaultInstanceForType() { + return com.google.spanner.adapter.v1.AdaptMessageResponse.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.adapter.v1.AdaptMessageResponse build() { + com.google.spanner.adapter.v1.AdaptMessageResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.adapter.v1.AdaptMessageResponse buildPartial() { + com.google.spanner.adapter.v1.AdaptMessageResponse result = + new com.google.spanner.adapter.v1.AdaptMessageResponse(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.adapter.v1.AdaptMessageResponse result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.payload_ = payload_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.stateUpdates_ = internalGetStateUpdates(); + result.stateUpdates_.makeImmutable(); + } + } + + @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.adapter.v1.AdaptMessageResponse) { + return mergeFrom((com.google.spanner.adapter.v1.AdaptMessageResponse) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.adapter.v1.AdaptMessageResponse other) { + if (other == com.google.spanner.adapter.v1.AdaptMessageResponse.getDefaultInstance()) + return this; + if (other.getPayload() != com.google.protobuf.ByteString.EMPTY) { + setPayload(other.getPayload()); + } + internalGetMutableStateUpdates().mergeFrom(other.internalGetStateUpdates()); + bitField0_ |= 0x00000002; + 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: + { + payload_ = input.readBytes(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + com.google.protobuf.MapEntry stateUpdates__ = + input.readMessage( + StateUpdatesDefaultEntryHolder.defaultEntry.getParserForType(), + extensionRegistry); + internalGetMutableStateUpdates() + .getMutableMap() + .put(stateUpdates__.getKey(), stateUpdates__.getValue()); + bitField0_ |= 0x00000002; + break; + } // case 18 + 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.ByteString payload_ = com.google.protobuf.ByteString.EMPTY; + + /** + * + * + *
+     * Optional. Uninterpreted bytes from the underlying wire protocol.
+     * 
+ * + * bytes payload = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The payload. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPayload() { + return payload_; + } + + /** + * + * + *
+     * Optional. Uninterpreted bytes from the underlying wire protocol.
+     * 
+ * + * bytes payload = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The payload to set. + * @return This builder for chaining. + */ + public Builder setPayload(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + payload_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Uninterpreted bytes from the underlying wire protocol.
+     * 
+ * + * bytes payload = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearPayload() { + bitField0_ = (bitField0_ & ~0x00000001); + payload_ = getDefaultInstance().getPayload(); + onChanged(); + return this; + } + + private com.google.protobuf.MapField stateUpdates_; + + private com.google.protobuf.MapField + internalGetStateUpdates() { + if (stateUpdates_ == null) { + return com.google.protobuf.MapField.emptyMapField( + StateUpdatesDefaultEntryHolder.defaultEntry); + } + return stateUpdates_; + } + + private com.google.protobuf.MapField + internalGetMutableStateUpdates() { + if (stateUpdates_ == null) { + stateUpdates_ = + com.google.protobuf.MapField.newMapField(StateUpdatesDefaultEntryHolder.defaultEntry); + } + if (!stateUpdates_.isMutable()) { + stateUpdates_ = stateUpdates_.copy(); + } + bitField0_ |= 0x00000002; + onChanged(); + return stateUpdates_; + } + + public int getStateUpdatesCount() { + return internalGetStateUpdates().getMap().size(); + } + + /** + * + * + *
+     * Optional. Opaque state updates to be applied by the client.
+     * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public boolean containsStateUpdates(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + return internalGetStateUpdates().getMap().containsKey(key); + } + + /** Use {@link #getStateUpdatesMap()} instead. */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getStateUpdates() { + return getStateUpdatesMap(); + } + + /** + * + * + *
+     * Optional. Opaque state updates to be applied by the client.
+     * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.Map getStateUpdatesMap() { + return internalGetStateUpdates().getMap(); + } + + /** + * + * + *
+     * Optional. Opaque state updates to be applied by the client.
+     * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public /* nullable */ java.lang.String getStateUpdatesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetStateUpdates().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + + /** + * + * + *
+     * Optional. Opaque state updates to be applied by the client.
+     * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.lang.String getStateUpdatesOrThrow(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + java.util.Map map = internalGetStateUpdates().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearStateUpdates() { + bitField0_ = (bitField0_ & ~0x00000002); + internalGetMutableStateUpdates().getMutableMap().clear(); + return this; + } + + /** + * + * + *
+     * Optional. Opaque state updates to be applied by the client.
+     * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removeStateUpdates(java.lang.String key) { + if (key == null) { + throw new NullPointerException("map key"); + } + internalGetMutableStateUpdates().getMutableMap().remove(key); + return this; + } + + /** Use alternate mutation accessors instead. */ + @java.lang.Deprecated + public java.util.Map getMutableStateUpdates() { + bitField0_ |= 0x00000002; + return internalGetMutableStateUpdates().getMutableMap(); + } + + /** + * + * + *
+     * Optional. Opaque state updates to be applied by the client.
+     * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putStateUpdates(java.lang.String key, java.lang.String value) { + if (key == null) { + throw new NullPointerException("map key"); + } + if (value == null) { + throw new NullPointerException("map value"); + } + internalGetMutableStateUpdates().getMutableMap().put(key, value); + bitField0_ |= 0x00000002; + return this; + } + + /** + * + * + *
+     * Optional. Opaque state updates to be applied by the client.
+     * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder putAllStateUpdates(java.util.Map values) { + internalGetMutableStateUpdates().getMutableMap().putAll(values); + bitField0_ |= 0x00000002; + 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.adapter.v1.AdaptMessageResponse) + } + + // @@protoc_insertion_point(class_scope:google.spanner.adapter.v1.AdaptMessageResponse) + private static final com.google.spanner.adapter.v1.AdaptMessageResponse DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.adapter.v1.AdaptMessageResponse(); + } + + public static com.google.spanner.adapter.v1.AdaptMessageResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AdaptMessageResponse 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.adapter.v1.AdaptMessageResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageResponseOrBuilder.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageResponseOrBuilder.java new file mode 100644 index 000000000000..6d55f591fe30 --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdaptMessageResponseOrBuilder.java @@ -0,0 +1,107 @@ +/* + * Copyright 2025 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/adapter/v1/adapter.proto + +// Protobuf Java Version: 3.25.8 +package com.google.spanner.adapter.v1; + +public interface AdaptMessageResponseOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.adapter.v1.AdaptMessageResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. Uninterpreted bytes from the underlying wire protocol.
+   * 
+ * + * bytes payload = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The payload. + */ + com.google.protobuf.ByteString getPayload(); + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getStateUpdatesCount(); + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + boolean containsStateUpdates(java.lang.String key); + + /** Use {@link #getStateUpdatesMap()} instead. */ + @java.lang.Deprecated + java.util.Map getStateUpdates(); + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.Map getStateUpdatesMap(); + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + /* nullable */ + java.lang.String getStateUpdatesOrDefault( + java.lang.String key, + /* nullable */ + java.lang.String defaultValue); + + /** + * + * + *
+   * Optional. Opaque state updates to be applied by the client.
+   * 
+ * + * map<string, string> state_updates = 2 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.lang.String getStateUpdatesOrThrow(java.lang.String key); +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdapterProto.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdapterProto.java new file mode 100644 index 000000000000..726b4786beba --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/AdapterProto.java @@ -0,0 +1,194 @@ +/* + * Copyright 2025 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/adapter/v1/adapter.proto + +// Protobuf Java Version: 3.25.8 +package com.google.spanner.adapter.v1; + +public final class AdapterProto { + private AdapterProto() {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistryLite registry) {} + + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions((com.google.protobuf.ExtensionRegistryLite) registry); + } + + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_adapter_v1_AdaptMessageRequest_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_adapter_v1_AdaptMessageRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_adapter_v1_AdaptMessageRequest_AttachmentsEntry_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_adapter_v1_AdaptMessageRequest_AttachmentsEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_adapter_v1_AdaptMessageResponse_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_adapter_v1_AdaptMessageResponse_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_adapter_v1_AdaptMessageResponse_StateUpdatesEntry_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_adapter_v1_AdaptMessageResponse_StateUpdatesEntry_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_adapter_v1_Session_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_adapter_v1_Session_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_spanner_adapter_v1_CreateSessionRequest_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_spanner_adapter_v1_CreateSessionRequest_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + + static { + java.lang.String[] descriptorData = { + "\n" + + "\'google/spanner/adapter/v1/adapter.prot" + + "o\022\031google.spanner.adapter.v1\032\034google/api" + + "/annotations.proto\032\027google/api/client.pr" + + "oto\032\037google/api/field_behavior.proto\032\031google/api/resource.proto\"\207\002\n" + + "\023AdaptMessageRequest\0224\n" + + "\004name\030\001 \001(\tB&\340A\002\372A \n" + + "\036spanner.googleapis.com/Session\022\025\n" + + "\010protocol\030\002 \001(\tB\003\340A\002\022\024\n" + + "\007payload\030\003 \001(\014B\003\340A\001\022Y\n" + + "\013attachments\030\004" + + " \003(\0132?.google.spanner.adapter.v1.AdaptMessageRequest.AttachmentsEntryB\003\340A\001\0322\n" + + "\020AttachmentsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"\300\001\n" + + "\024AdaptMessageResponse\022\024\n" + + "\007payload\030\001 \001(\014B\003\340A\001\022]\n\r" + + "state_updates\030\002 \003(\0132" + + "A.google.spanner.adapter.v1.AdaptMessageResponse.StateUpdatesEntryB\003\340A\001\0323\n" + + "\021StateUpdatesEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"\247\001\n" + + "\007Session\022\021\n" + + "\004name\030\001 \001(\tB\003\340A\010:\210\001\352A\204\001\n" + + "\036spanner.googleapis.com/Session\022Oprojects/{project}/instances/{instance}/data" + + "bases/{database}/sessions/{session}*\010sessions2\007session\"\211\001\n" + + "\024CreateSessionRequest\0227\n" + + "\006parent\030\001 \001(\tB\'\340A\002\372A!\n" + + "\037spanner.googleapis.com/Database\0228\n" + + "\007session\030\002" + + " \001(\0132\".google.spanner.adapter.v1.SessionB\003\340A\0022\223\004\n" + + "\007Adapter\022\310\001\n\r" + + "CreateSession\022/.google.spanner.adapter.v1.CreateSessionRequest\032\".goog" + + "le.spanner.adapter.v1.Session\"b\332A\016parent" + + ",session\202\323\344\223\002K\"@/v1/{parent=projects/*/i" + + "nstances/*/databases/*}/sessions:adapter:\007session\022\303\001\n" + + "\014AdaptMessage\022..google.spanner.adapter.v1.AdaptMessageRequest\032/.goo" + + "gle.spanner.adapter.v1.AdaptMessageRespo" + + "nse\"P\202\323\344\223\002J\"E/v1/{name=projects/*/instan" + + "ces/*/databases/*/sessions/*}:adaptMessa" + + "ge:\001*0\001\032w\312A\026spanner.googleapis.com\322A[htt" + + "ps://www.googleapis.com/auth/cloud-platf" + + "orm,https://www.googleapis.com/auth/spanner.dataB\272\002\n" + + "\035com.google.spanner.adapter.v1B\014AdapterProtoP\001Z=cloud.google.com/go/" + + "spanner/adapter/apiv1/adapterpb;adapterp" + + "b\252\002\037Google.Cloud.Spanner.Adapter.V1\312\002\037Go" + + "ogle\\Cloud\\Spanner\\Adapter\\V1\352\002#Google::Cloud::Spanner::Adapter::V1\352A_\n" + + "\037spanner.googleapis.com/Database\022 + * The request for + * [CreateSessionRequest][Adapter.CreateSessionRequest]. + * + * + * Protobuf type {@code google.spanner.adapter.v1.CreateSessionRequest} + */ +public final class CreateSessionRequest extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.adapter.v1.CreateSessionRequest) + CreateSessionRequestOrBuilder { + private static final long serialVersionUID = 0L; + + // Use CreateSessionRequest.newBuilder() to construct. + private CreateSessionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private CreateSessionRequest() { + parent_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new CreateSessionRequest(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_CreateSessionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_CreateSessionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.adapter.v1.CreateSessionRequest.class, + com.google.spanner.adapter.v1.CreateSessionRequest.Builder.class); + } + + private int bitField0_; + public static final int PARENT_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object parent_ = ""; + + /** + * + * + *
+   * Required. The database in which the new session is created.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + @java.lang.Override + public java.lang.String getParent() { + java.lang.Object ref = parent_; + 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(); + parent_ = s; + return s; + } + } + + /** + * + * + *
+   * Required. The database in which the new session is created.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + @java.lang.Override + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SESSION_FIELD_NUMBER = 2; + private com.google.spanner.adapter.v1.Session session_; + + /** + * + * + *
+   * Required. The session to create.
+   * 
+ * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the session field is set. + */ + @java.lang.Override + public boolean hasSession() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. The session to create.
+   * 
+ * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The session. + */ + @java.lang.Override + public com.google.spanner.adapter.v1.Session getSession() { + return session_ == null ? com.google.spanner.adapter.v1.Session.getDefaultInstance() : session_; + } + + /** + * + * + *
+   * Required. The session to create.
+   * 
+ * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.spanner.adapter.v1.SessionOrBuilder getSessionOrBuilder() { + return session_ == null ? com.google.spanner.adapter.v1.Session.getDefaultInstance() : session_; + } + + 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(parent_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, parent_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(2, getSession()); + } + 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(parent_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, parent_); + } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getSession()); + } + 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.adapter.v1.CreateSessionRequest)) { + return super.equals(obj); + } + com.google.spanner.adapter.v1.CreateSessionRequest other = + (com.google.spanner.adapter.v1.CreateSessionRequest) obj; + + if (!getParent().equals(other.getParent())) return false; + if (hasSession() != other.hasSession()) return false; + if (hasSession()) { + if (!getSession().equals(other.getSession())) 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) + PARENT_FIELD_NUMBER; + hash = (53 * hash) + getParent().hashCode(); + if (hasSession()) { + hash = (37 * hash) + SESSION_FIELD_NUMBER; + hash = (53 * hash) + getSession().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest parseFrom( + java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest 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.adapter.v1.CreateSessionRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest 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.adapter.v1.CreateSessionRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest parseFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest 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.adapter.v1.CreateSessionRequest parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest 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.adapter.v1.CreateSessionRequest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest 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.adapter.v1.CreateSessionRequest 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
+   * [CreateSessionRequest][Adapter.CreateSessionRequest].
+   * 
+ * + * Protobuf type {@code google.spanner.adapter.v1.CreateSessionRequest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.adapter.v1.CreateSessionRequest) + com.google.spanner.adapter.v1.CreateSessionRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_CreateSessionRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_CreateSessionRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.adapter.v1.CreateSessionRequest.class, + com.google.spanner.adapter.v1.CreateSessionRequest.Builder.class); + } + + // Construct using com.google.spanner.adapter.v1.CreateSessionRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { + getSessionFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + parent_ = ""; + session_ = null; + if (sessionBuilder_ != null) { + sessionBuilder_.dispose(); + sessionBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_CreateSessionRequest_descriptor; + } + + @java.lang.Override + public com.google.spanner.adapter.v1.CreateSessionRequest getDefaultInstanceForType() { + return com.google.spanner.adapter.v1.CreateSessionRequest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.adapter.v1.CreateSessionRequest build() { + com.google.spanner.adapter.v1.CreateSessionRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.adapter.v1.CreateSessionRequest buildPartial() { + com.google.spanner.adapter.v1.CreateSessionRequest result = + new com.google.spanner.adapter.v1.CreateSessionRequest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.adapter.v1.CreateSessionRequest result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.parent_ = parent_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000002) != 0)) { + result.session_ = sessionBuilder_ == null ? session_ : sessionBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @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.adapter.v1.CreateSessionRequest) { + return mergeFrom((com.google.spanner.adapter.v1.CreateSessionRequest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.adapter.v1.CreateSessionRequest other) { + if (other == com.google.spanner.adapter.v1.CreateSessionRequest.getDefaultInstance()) + return this; + if (!other.getParent().isEmpty()) { + parent_ = other.parent_; + bitField0_ |= 0x00000001; + onChanged(); + } + if (other.hasSession()) { + mergeSession(other.getSession()); + } + 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: + { + parent_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(getSessionFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + 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 parent_ = ""; + + /** + * + * + *
+     * Required. The database in which the new session is created.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + public java.lang.String getParent() { + java.lang.Object ref = parent_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + parent_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Required. The database in which the new session is created.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + public com.google.protobuf.ByteString getParentBytes() { + java.lang.Object ref = parent_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + parent_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Required. The database in which the new session is created.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The parent to set. + * @return This builder for chaining. + */ + public Builder setParent(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The database in which the new session is created.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return This builder for chaining. + */ + public Builder clearParent() { + parent_ = getDefaultInstance().getParent(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The database in which the new session is created.
+     * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @param value The bytes for parent to set. + * @return This builder for chaining. + */ + public Builder setParentBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + parent_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + private com.google.spanner.adapter.v1.Session session_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.adapter.v1.Session, + com.google.spanner.adapter.v1.Session.Builder, + com.google.spanner.adapter.v1.SessionOrBuilder> + sessionBuilder_; + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the session field is set. + */ + public boolean hasSession() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The session. + */ + public com.google.spanner.adapter.v1.Session getSession() { + if (sessionBuilder_ == null) { + return session_ == null + ? com.google.spanner.adapter.v1.Session.getDefaultInstance() + : session_; + } else { + return sessionBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setSession(com.google.spanner.adapter.v1.Session value) { + if (sessionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + session_ = value; + } else { + sessionBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setSession(com.google.spanner.adapter.v1.Session.Builder builderForValue) { + if (sessionBuilder_ == null) { + session_ = builderForValue.build(); + } else { + sessionBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeSession(com.google.spanner.adapter.v1.Session value) { + if (sessionBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && session_ != null + && session_ != com.google.spanner.adapter.v1.Session.getDefaultInstance()) { + getSessionBuilder().mergeFrom(value); + } else { + session_ = value; + } + } else { + sessionBuilder_.mergeFrom(value); + } + if (session_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearSession() { + bitField0_ = (bitField0_ & ~0x00000002); + session_ = null; + if (sessionBuilder_ != null) { + sessionBuilder_.dispose(); + sessionBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.adapter.v1.Session.Builder getSessionBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getSessionFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.spanner.adapter.v1.SessionOrBuilder getSessionOrBuilder() { + if (sessionBuilder_ != null) { + return sessionBuilder_.getMessageOrBuilder(); + } else { + return session_ == null + ? com.google.spanner.adapter.v1.Session.getDefaultInstance() + : session_; + } + } + + /** + * + * + *
+     * Required. The session to create.
+     * 
+ * + * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.adapter.v1.Session, + com.google.spanner.adapter.v1.Session.Builder, + com.google.spanner.adapter.v1.SessionOrBuilder> + getSessionFieldBuilder() { + if (sessionBuilder_ == null) { + sessionBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.spanner.adapter.v1.Session, + com.google.spanner.adapter.v1.Session.Builder, + com.google.spanner.adapter.v1.SessionOrBuilder>( + getSession(), getParentForChildren(), isClean()); + session_ = null; + } + return sessionBuilder_; + } + + @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.adapter.v1.CreateSessionRequest) + } + + // @@protoc_insertion_point(class_scope:google.spanner.adapter.v1.CreateSessionRequest) + private static final com.google.spanner.adapter.v1.CreateSessionRequest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.adapter.v1.CreateSessionRequest(); + } + + public static com.google.spanner.adapter.v1.CreateSessionRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CreateSessionRequest 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.adapter.v1.CreateSessionRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/CreateSessionRequestOrBuilder.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/CreateSessionRequestOrBuilder.java new file mode 100644 index 000000000000..f7c5f5df043a --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/CreateSessionRequestOrBuilder.java @@ -0,0 +1,96 @@ +/* + * Copyright 2025 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/adapter/v1/adapter.proto + +// Protobuf Java Version: 3.25.8 +package com.google.spanner.adapter.v1; + +public interface CreateSessionRequestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.adapter.v1.CreateSessionRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. The database in which the new session is created.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The parent. + */ + java.lang.String getParent(); + + /** + * + * + *
+   * Required. The database in which the new session is created.
+   * 
+ * + * + * string parent = 1 [(.google.api.field_behavior) = REQUIRED, (.google.api.resource_reference) = { ... } + * + * + * @return The bytes for parent. + */ + com.google.protobuf.ByteString getParentBytes(); + + /** + * + * + *
+   * Required. The session to create.
+   * 
+ * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the session field is set. + */ + boolean hasSession(); + + /** + * + * + *
+   * Required. The session to create.
+   * 
+ * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The session. + */ + com.google.spanner.adapter.v1.Session getSession(); + + /** + * + * + *
+   * Required. The session to create.
+   * 
+ * + * .google.spanner.adapter.v1.Session session = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.spanner.adapter.v1.SessionOrBuilder getSessionOrBuilder(); +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/DatabaseName.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/DatabaseName.java new file mode 100644 index 000000000000..1fcc3eb09791 --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/DatabaseName.java @@ -0,0 +1,223 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +@Generated("by gapic-generator-java") +public class DatabaseName implements ResourceName { + private static final PathTemplate PROJECT_INSTANCE_DATABASE = + PathTemplate.createWithoutUrlEncoding( + "projects/{project}/instances/{instance}/databases/{database}"); + private volatile Map fieldValuesMap; + private final String project; + private final String instance; + private final String database; + + @Deprecated + protected DatabaseName() { + project = null; + instance = null; + database = null; + } + + private DatabaseName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + instance = Preconditions.checkNotNull(builder.getInstance()); + database = Preconditions.checkNotNull(builder.getDatabase()); + } + + public String getProject() { + return project; + } + + public String getInstance() { + return instance; + } + + public String getDatabase() { + return database; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static DatabaseName of(String project, String instance, String database) { + return newBuilder().setProject(project).setInstance(instance).setDatabase(database).build(); + } + + public static String format(String project, String instance, String database) { + return newBuilder() + .setProject(project) + .setInstance(instance) + .setDatabase(database) + .build() + .toString(); + } + + public static DatabaseName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PROJECT_INSTANCE_DATABASE.validatedMatch( + formattedString, "DatabaseName.parse: formattedString not in valid format"); + return of(matchMap.get("project"), matchMap.get("instance"), matchMap.get("database")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList<>(values.size()); + for (DatabaseName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PROJECT_INSTANCE_DATABASE.matches(formattedString); + } + + @Override + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + if (project != null) { + fieldMapBuilder.put("project", project); + } + if (instance != null) { + fieldMapBuilder.put("instance", instance); + } + if (database != null) { + fieldMapBuilder.put("database", database); + } + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PROJECT_INSTANCE_DATABASE.instantiate( + "project", project, "instance", instance, "database", database); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o != null && getClass() == o.getClass()) { + DatabaseName that = ((DatabaseName) o); + return Objects.equals(this.project, that.project) + && Objects.equals(this.instance, that.instance) + && Objects.equals(this.database, that.database); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= Objects.hashCode(project); + h *= 1000003; + h ^= Objects.hashCode(instance); + h *= 1000003; + h ^= Objects.hashCode(database); + return h; + } + + /** Builder for projects/{project}/instances/{instance}/databases/{database}. */ + public static class Builder { + private String project; + private String instance; + private String database; + + protected Builder() {} + + public String getProject() { + return project; + } + + public String getInstance() { + return instance; + } + + public String getDatabase() { + return database; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setInstance(String instance) { + this.instance = instance; + return this; + } + + public Builder setDatabase(String database) { + this.database = database; + return this; + } + + private Builder(DatabaseName databaseName) { + this.project = databaseName.project; + this.instance = databaseName.instance; + this.database = databaseName.database; + } + + public DatabaseName build() { + return new DatabaseName(this); + } + } +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/Session.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/Session.java new file mode 100644 index 000000000000..bc2ce7a16916 --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/Session.java @@ -0,0 +1,631 @@ +/* + * Copyright 2025 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/adapter/v1/adapter.proto + +// Protobuf Java Version: 3.25.8 +package com.google.spanner.adapter.v1; + +/** + * + * + *
+ * A session in the Cloud Spanner Adapter API.
+ * 
+ * + * Protobuf type {@code google.spanner.adapter.v1.Session} + */ +public final class Session extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.spanner.adapter.v1.Session) + SessionOrBuilder { + private static final long serialVersionUID = 0L; + + // Use Session.newBuilder() to construct. + private Session(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private Session() { + name_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new Session(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_Session_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_Session_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.adapter.v1.Session.class, + com.google.spanner.adapter.v1.Session.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object name_ = ""; + + /** + * + * + *
+   * Identifier. The name of the session. This is always system-assigned.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + 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(); + name_ = s; + return s; + } + } + + /** + * + * + *
+   * Identifier. The name of the session. This is always system-assigned.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + 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(name_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + 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(name_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + 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.adapter.v1.Session)) { + return super.equals(obj); + } + com.google.spanner.adapter.v1.Session other = (com.google.spanner.adapter.v1.Session) obj; + + if (!getName().equals(other.getName())) 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) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.spanner.adapter.v1.Session parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.Session 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.adapter.v1.Session parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.Session 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.adapter.v1.Session parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.spanner.adapter.v1.Session parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.spanner.adapter.v1.Session parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.Session 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.adapter.v1.Session parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.Session 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.adapter.v1.Session parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.spanner.adapter.v1.Session 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.adapter.v1.Session 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; + } + + /** + * + * + *
+   * A session in the Cloud Spanner Adapter API.
+   * 
+ * + * Protobuf type {@code google.spanner.adapter.v1.Session} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.spanner.adapter.v1.Session) + com.google.spanner.adapter.v1.SessionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_Session_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_Session_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.spanner.adapter.v1.Session.class, + com.google.spanner.adapter.v1.Session.Builder.class); + } + + // Construct using com.google.spanner.adapter.v1.Session.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + name_ = ""; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.spanner.adapter.v1.AdapterProto + .internal_static_google_spanner_adapter_v1_Session_descriptor; + } + + @java.lang.Override + public com.google.spanner.adapter.v1.Session getDefaultInstanceForType() { + return com.google.spanner.adapter.v1.Session.getDefaultInstance(); + } + + @java.lang.Override + public com.google.spanner.adapter.v1.Session build() { + com.google.spanner.adapter.v1.Session result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.spanner.adapter.v1.Session buildPartial() { + com.google.spanner.adapter.v1.Session result = + new com.google.spanner.adapter.v1.Session(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.spanner.adapter.v1.Session result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.name_ = name_; + } + } + + @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.adapter.v1.Session) { + return mergeFrom((com.google.spanner.adapter.v1.Session) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.spanner.adapter.v1.Session other) { + if (other == com.google.spanner.adapter.v1.Session.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + bitField0_ |= 0x00000001; + 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: + { + name_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + 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 name_ = ""; + + /** + * + * + *
+     * Identifier. The name of the session. This is always system-assigned.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Identifier. The name of the session. This is always system-assigned.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @return The bytes for name. + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Identifier. The name of the session. This is always system-assigned.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + name_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Identifier. The name of the session. This is always system-assigned.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @return This builder for chaining. + */ + public Builder clearName() { + name_ = getDefaultInstance().getName(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Identifier. The name of the session. This is always system-assigned.
+     * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + name_ = value; + bitField0_ |= 0x00000001; + 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.adapter.v1.Session) + } + + // @@protoc_insertion_point(class_scope:google.spanner.adapter.v1.Session) + private static final com.google.spanner.adapter.v1.Session DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.spanner.adapter.v1.Session(); + } + + public static com.google.spanner.adapter.v1.Session getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Session 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.adapter.v1.Session getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/SessionName.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/SessionName.java new file mode 100644 index 000000000000..8370e75c844e --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/SessionName.java @@ -0,0 +1,259 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1; + +import com.google.api.pathtemplate.PathTemplate; +import com.google.api.resourcenames.ResourceName; +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +@Generated("by gapic-generator-java") +public class SessionName implements ResourceName { + private static final PathTemplate PROJECT_INSTANCE_DATABASE_SESSION = + PathTemplate.createWithoutUrlEncoding( + "projects/{project}/instances/{instance}/databases/{database}/sessions/{session}"); + private volatile Map fieldValuesMap; + private final String project; + private final String instance; + private final String database; + private final String session; + + @Deprecated + protected SessionName() { + project = null; + instance = null; + database = null; + session = null; + } + + private SessionName(Builder builder) { + project = Preconditions.checkNotNull(builder.getProject()); + instance = Preconditions.checkNotNull(builder.getInstance()); + database = Preconditions.checkNotNull(builder.getDatabase()); + session = Preconditions.checkNotNull(builder.getSession()); + } + + public String getProject() { + return project; + } + + public String getInstance() { + return instance; + } + + public String getDatabase() { + return database; + } + + public String getSession() { + return session; + } + + public static Builder newBuilder() { + return new Builder(); + } + + public Builder toBuilder() { + return new Builder(this); + } + + public static SessionName of(String project, String instance, String database, String session) { + return newBuilder() + .setProject(project) + .setInstance(instance) + .setDatabase(database) + .setSession(session) + .build(); + } + + public static String format(String project, String instance, String database, String session) { + return newBuilder() + .setProject(project) + .setInstance(instance) + .setDatabase(database) + .setSession(session) + .build() + .toString(); + } + + public static SessionName parse(String formattedString) { + if (formattedString.isEmpty()) { + return null; + } + Map matchMap = + PROJECT_INSTANCE_DATABASE_SESSION.validatedMatch( + formattedString, "SessionName.parse: formattedString not in valid format"); + return of( + matchMap.get("project"), + matchMap.get("instance"), + matchMap.get("database"), + matchMap.get("session")); + } + + public static List parseList(List formattedStrings) { + List list = new ArrayList<>(formattedStrings.size()); + for (String formattedString : formattedStrings) { + list.add(parse(formattedString)); + } + return list; + } + + public static List toStringList(List values) { + List list = new ArrayList<>(values.size()); + for (SessionName value : values) { + if (value == null) { + list.add(""); + } else { + list.add(value.toString()); + } + } + return list; + } + + public static boolean isParsableFrom(String formattedString) { + return PROJECT_INSTANCE_DATABASE_SESSION.matches(formattedString); + } + + @Override + public Map getFieldValuesMap() { + if (fieldValuesMap == null) { + synchronized (this) { + if (fieldValuesMap == null) { + ImmutableMap.Builder fieldMapBuilder = ImmutableMap.builder(); + if (project != null) { + fieldMapBuilder.put("project", project); + } + if (instance != null) { + fieldMapBuilder.put("instance", instance); + } + if (database != null) { + fieldMapBuilder.put("database", database); + } + if (session != null) { + fieldMapBuilder.put("session", session); + } + fieldValuesMap = fieldMapBuilder.build(); + } + } + } + return fieldValuesMap; + } + + public String getFieldValue(String fieldName) { + return getFieldValuesMap().get(fieldName); + } + + @Override + public String toString() { + return PROJECT_INSTANCE_DATABASE_SESSION.instantiate( + "project", project, "instance", instance, "database", database, "session", session); + } + + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } + if (o != null && getClass() == o.getClass()) { + SessionName that = ((SessionName) o); + return Objects.equals(this.project, that.project) + && Objects.equals(this.instance, that.instance) + && Objects.equals(this.database, that.database) + && Objects.equals(this.session, that.session); + } + return false; + } + + @Override + public int hashCode() { + int h = 1; + h *= 1000003; + h ^= Objects.hashCode(project); + h *= 1000003; + h ^= Objects.hashCode(instance); + h *= 1000003; + h ^= Objects.hashCode(database); + h *= 1000003; + h ^= Objects.hashCode(session); + return h; + } + + /** + * Builder for projects/{project}/instances/{instance}/databases/{database}/sessions/{session}. + */ + public static class Builder { + private String project; + private String instance; + private String database; + private String session; + + protected Builder() {} + + public String getProject() { + return project; + } + + public String getInstance() { + return instance; + } + + public String getDatabase() { + return database; + } + + public String getSession() { + return session; + } + + public Builder setProject(String project) { + this.project = project; + return this; + } + + public Builder setInstance(String instance) { + this.instance = instance; + return this; + } + + public Builder setDatabase(String database) { + this.database = database; + return this; + } + + public Builder setSession(String session) { + this.session = session; + return this; + } + + private Builder(SessionName sessionName) { + this.project = sessionName.project; + this.instance = sessionName.instance; + this.database = sessionName.database; + this.session = sessionName.session; + } + + public SessionName build() { + return new SessionName(this); + } + } +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/SessionOrBuilder.java b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/SessionOrBuilder.java new file mode 100644 index 000000000000..7dcc0de2bd9c --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/java/com/google/spanner/adapter/v1/SessionOrBuilder.java @@ -0,0 +1,52 @@ +/* + * Copyright 2025 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/adapter/v1/adapter.proto + +// Protobuf Java Version: 3.25.8 +package com.google.spanner.adapter.v1; + +public interface SessionOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.spanner.adapter.v1.Session) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Identifier. The name of the session. This is always system-assigned.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @return The name. + */ + java.lang.String getName(); + + /** + * + * + *
+   * Identifier. The name of the session. This is always system-assigned.
+   * 
+ * + * string name = 1 [(.google.api.field_behavior) = IDENTIFIER]; + * + * @return The bytes for name. + */ + com.google.protobuf.ByteString getNameBytes(); +} diff --git a/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/proto/google/spanner/adapter/v1/adapter.proto b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/proto/google/spanner/adapter/v1/adapter.proto new file mode 100644 index 000000000000..bc3afa35af59 --- /dev/null +++ b/java-spanneradapter/proto-google-cloud-spanneradapter-v1/src/main/proto/google/spanner/adapter/v1/adapter.proto @@ -0,0 +1,123 @@ +// Copyright 2025 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. + +syntax = "proto3"; + +package google.spanner.adapter.v1; + +import "google/api/annotations.proto"; +import "google/api/client.proto"; +import "google/api/field_behavior.proto"; +import "google/api/resource.proto"; + +option csharp_namespace = "Google.Cloud.Spanner.Adapter.V1"; +option go_package = "cloud.google.com/go/spanner/adapter/apiv1/adapterpb;adapterpb"; +option java_multiple_files = true; +option java_outer_classname = "AdapterProto"; +option java_package = "com.google.spanner.adapter.v1"; +option php_namespace = "Google\\Cloud\\Spanner\\Adapter\\V1"; +option ruby_package = "Google::Cloud::Spanner::Adapter::V1"; +option (google.api.resource_definition) = { + type: "spanner.googleapis.com/Database" + pattern: "projects/{project}/instances/{instance}/databases/{database}" +}; + +// Cloud Spanner Adapter API +// +// The Cloud Spanner Adapter service allows native drivers of supported database +// dialects to interact directly with Cloud Spanner by wrapping the underlying +// wire protocol used by the driver in a gRPC stream. +service Adapter { + option (google.api.default_host) = "spanner.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/cloud-platform," + "https://www.googleapis.com/auth/spanner.data"; + + // Creates a new session to be used for requests made by the adapter. + // A session identifies a specific incarnation of a database resource and is + // meant to be reused across many `AdaptMessage` calls. + rpc CreateSession(CreateSessionRequest) returns (Session) { + option (google.api.http) = { + post: "/v1/{parent=projects/*/instances/*/databases/*}/sessions:adapter" + body: "session" + }; + option (google.api.method_signature) = "parent,session"; + } + + // Handles a single message from the client and returns the result as a + // stream. The server will interpret the message frame and respond with + // message frames to the client. + rpc AdaptMessage(AdaptMessageRequest) returns (stream AdaptMessageResponse) { + option (google.api.http) = { + post: "/v1/{name=projects/*/instances/*/databases/*/sessions/*}:adaptMessage" + body: "*" + }; + } +} + +// Message sent by the client to the adapter. +message AdaptMessageRequest { + // Required. The database session in which the adapter request is processed. + string name = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { type: "spanner.googleapis.com/Session" } + ]; + + // Required. Identifier for the underlying wire protocol. + string protocol = 2 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Uninterpreted bytes from the underlying wire protocol. + bytes payload = 3 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Opaque request state passed by the client to the server. + map attachments = 4 [(google.api.field_behavior) = OPTIONAL]; +} + +// Message sent by the adapter to the client. +message AdaptMessageResponse { + // Optional. Uninterpreted bytes from the underlying wire protocol. + bytes payload = 1 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Opaque state updates to be applied by the client. + map state_updates = 2 + [(google.api.field_behavior) = OPTIONAL]; +} + +// A session in the Cloud Spanner Adapter API. +message Session { + option (google.api.resource) = { + type: "spanner.googleapis.com/Session" + pattern: "projects/{project}/instances/{instance}/databases/{database}/sessions/{session}" + plural: "sessions" + singular: "session" + }; + + // Identifier. The name of the session. This is always system-assigned. + string name = 1 [(google.api.field_behavior) = IDENTIFIER]; +} + +// The request for +// [CreateSessionRequest][Adapter.CreateSessionRequest]. +message CreateSessionRequest { + // Required. The database in which the new session is created. + string parent = 1 [ + (google.api.field_behavior) = REQUIRED, + (google.api.resource_reference) = { + type: "spanner.googleapis.com/Database" + } + ]; + + // Required. The session to create. + Session session = 2 [(google.api.field_behavior) = REQUIRED]; +} diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/adaptmessage/AsyncAdaptMessage.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/adaptmessage/AsyncAdaptMessage.java new file mode 100644 index 000000000000..2a847bffeb9e --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/adaptmessage/AsyncAdaptMessage.java @@ -0,0 +1,57 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_Adapter_AdaptMessage_async] +import com.google.api.gax.rpc.ServerStream; +import com.google.protobuf.ByteString; +import com.google.spanner.adapter.v1.AdaptMessageRequest; +import com.google.spanner.adapter.v1.AdaptMessageResponse; +import com.google.spanner.adapter.v1.AdapterClient; +import com.google.spanner.adapter.v1.SessionName; +import java.util.HashMap; + +public class AsyncAdaptMessage { + + public static void main(String[] args) throws Exception { + asyncAdaptMessage(); + } + + public static void asyncAdaptMessage() throws Exception { + // 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 (AdapterClient adapterClient = AdapterClient.create()) { + AdaptMessageRequest request = + AdaptMessageRequest.newBuilder() + .setName( + SessionName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]", "[SESSION]").toString()) + .setProtocol("protocol-989163880") + .setPayload(ByteString.EMPTY) + .putAllAttachments(new HashMap()) + .build(); + ServerStream stream = + adapterClient.adaptMessageCallable().call(request); + for (AdaptMessageResponse response : stream) { + // Do something when a response is received. + } + } + } +} +// [END spanner_v1_generated_Adapter_AdaptMessage_async] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateSetCredentialsProvider.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateSetCredentialsProvider.java new file mode 100644 index 000000000000..1c1d9e55477a --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateSetCredentialsProvider.java @@ -0,0 +1,44 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_Adapter_Create_SetCredentialsProvider_sync] +import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.spanner.adapter.v1.AdapterClient; +import com.google.spanner.adapter.v1.AdapterSettings; +import com.google.spanner.adapter.v1.myCredentials; + +public class SyncCreateSetCredentialsProvider { + + public static void main(String[] args) throws Exception { + syncCreateSetCredentialsProvider(); + } + + public static void syncCreateSetCredentialsProvider() throws Exception { + // 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 + AdapterSettings adapterSettings = + AdapterSettings.newBuilder() + .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials)) + .build(); + AdapterClient adapterClient = AdapterClient.create(adapterSettings); + } +} +// [END spanner_v1_generated_Adapter_Create_SetCredentialsProvider_sync] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateSetEndpoint.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateSetEndpoint.java new file mode 100644 index 000000000000..d41dc3e1c884 --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateSetEndpoint.java @@ -0,0 +1,40 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_Adapter_Create_SetEndpoint_sync] +import com.google.spanner.adapter.v1.AdapterClient; +import com.google.spanner.adapter.v1.AdapterSettings; +import com.google.spanner.adapter.v1.myEndpoint; + +public class SyncCreateSetEndpoint { + + public static void main(String[] args) throws Exception { + syncCreateSetEndpoint(); + } + + public static void syncCreateSetEndpoint() throws Exception { + // 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 + AdapterSettings adapterSettings = AdapterSettings.newBuilder().setEndpoint(myEndpoint).build(); + AdapterClient adapterClient = AdapterClient.create(adapterSettings); + } +} +// [END spanner_v1_generated_Adapter_Create_SetEndpoint_sync] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateUseHttpJsonTransport.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateUseHttpJsonTransport.java new file mode 100644 index 000000000000..2de60a3adea5 --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/create/SyncCreateUseHttpJsonTransport.java @@ -0,0 +1,39 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_Adapter_Create_UseHttpJsonTransport_sync] +import com.google.spanner.adapter.v1.AdapterClient; +import com.google.spanner.adapter.v1.AdapterSettings; + +public class SyncCreateUseHttpJsonTransport { + + public static void main(String[] args) throws Exception { + syncCreateUseHttpJsonTransport(); + } + + public static void syncCreateUseHttpJsonTransport() throws Exception { + // 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 + AdapterSettings adapterSettings = AdapterSettings.newHttpJsonBuilder().build(); + AdapterClient adapterClient = AdapterClient.create(adapterSettings); + } +} +// [END spanner_v1_generated_Adapter_Create_UseHttpJsonTransport_sync] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/AsyncCreateSession.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/AsyncCreateSession.java new file mode 100644 index 000000000000..71e8d9618df1 --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/AsyncCreateSession.java @@ -0,0 +1,50 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_Adapter_CreateSession_async] +import com.google.api.core.ApiFuture; +import com.google.spanner.adapter.v1.AdapterClient; +import com.google.spanner.adapter.v1.CreateSessionRequest; +import com.google.spanner.adapter.v1.DatabaseName; +import com.google.spanner.adapter.v1.Session; + +public class AsyncCreateSession { + + public static void main(String[] args) throws Exception { + asyncCreateSession(); + } + + public static void asyncCreateSession() throws Exception { + // 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 (AdapterClient adapterClient = AdapterClient.create()) { + CreateSessionRequest request = + CreateSessionRequest.newBuilder() + .setParent(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString()) + .setSession(Session.newBuilder().build()) + .build(); + ApiFuture future = adapterClient.createSessionCallable().futureCall(request); + // Do something. + Session response = future.get(); + } + } +} +// [END spanner_v1_generated_Adapter_CreateSession_async] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSession.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSession.java new file mode 100644 index 000000000000..60f36e0ffe1c --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSession.java @@ -0,0 +1,47 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_Adapter_CreateSession_sync] +import com.google.spanner.adapter.v1.AdapterClient; +import com.google.spanner.adapter.v1.CreateSessionRequest; +import com.google.spanner.adapter.v1.DatabaseName; +import com.google.spanner.adapter.v1.Session; + +public class SyncCreateSession { + + public static void main(String[] args) throws Exception { + syncCreateSession(); + } + + public static void syncCreateSession() throws Exception { + // 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 (AdapterClient adapterClient = AdapterClient.create()) { + CreateSessionRequest request = + CreateSessionRequest.newBuilder() + .setParent(DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString()) + .setSession(Session.newBuilder().build()) + .build(); + Session response = adapterClient.createSession(request); + } + } +} +// [END spanner_v1_generated_Adapter_CreateSession_sync] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSessionDatabasenameSession.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSessionDatabasenameSession.java new file mode 100644 index 000000000000..829457edfac0 --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSessionDatabasenameSession.java @@ -0,0 +1,43 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_Adapter_CreateSession_DatabasenameSession_sync] +import com.google.spanner.adapter.v1.AdapterClient; +import com.google.spanner.adapter.v1.DatabaseName; +import com.google.spanner.adapter.v1.Session; + +public class SyncCreateSessionDatabasenameSession { + + public static void main(String[] args) throws Exception { + syncCreateSessionDatabasenameSession(); + } + + public static void syncCreateSessionDatabasenameSession() throws Exception { + // 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 (AdapterClient adapterClient = AdapterClient.create()) { + DatabaseName parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]"); + Session session = Session.newBuilder().build(); + Session response = adapterClient.createSession(parent, session); + } + } +} +// [END spanner_v1_generated_Adapter_CreateSession_DatabasenameSession_sync] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSessionStringSession.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSessionStringSession.java new file mode 100644 index 000000000000..b64d4a7cb196 --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adapter/createsession/SyncCreateSessionStringSession.java @@ -0,0 +1,43 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_Adapter_CreateSession_StringSession_sync] +import com.google.spanner.adapter.v1.AdapterClient; +import com.google.spanner.adapter.v1.DatabaseName; +import com.google.spanner.adapter.v1.Session; + +public class SyncCreateSessionStringSession { + + public static void main(String[] args) throws Exception { + syncCreateSessionStringSession(); + } + + public static void syncCreateSessionStringSession() throws Exception { + // 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 (AdapterClient adapterClient = AdapterClient.create()) { + String parent = DatabaseName.of("[PROJECT]", "[INSTANCE]", "[DATABASE]").toString(); + Session session = Session.newBuilder().build(); + Session response = adapterClient.createSession(parent, session); + } + } +} +// [END spanner_v1_generated_Adapter_CreateSession_StringSession_sync] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adaptersettings/createsession/SyncCreateSession.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adaptersettings/createsession/SyncCreateSession.java new file mode 100644 index 000000000000..42908349c152 --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/adaptersettings/createsession/SyncCreateSession.java @@ -0,0 +1,55 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.samples; + +// [START spanner_v1_generated_AdapterSettings_CreateSession_sync] +import com.google.spanner.adapter.v1.AdapterSettings; +import java.time.Duration; + +public class SyncCreateSession { + + public static void main(String[] args) throws Exception { + syncCreateSession(); + } + + public static void syncCreateSession() throws Exception { + // 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 + AdapterSettings.Builder adapterSettingsBuilder = AdapterSettings.newBuilder(); + adapterSettingsBuilder + .createSessionSettings() + .setRetrySettings( + adapterSettingsBuilder + .createSessionSettings() + .getRetrySettings() + .toBuilder() + .setInitialRetryDelayDuration(Duration.ofSeconds(1)) + .setInitialRpcTimeoutDuration(Duration.ofSeconds(5)) + .setMaxAttempts(5) + .setMaxRetryDelayDuration(Duration.ofSeconds(30)) + .setMaxRpcTimeoutDuration(Duration.ofSeconds(60)) + .setRetryDelayMultiplier(1.3) + .setRpcTimeoutMultiplier(1.5) + .setTotalTimeoutDuration(Duration.ofSeconds(300)) + .build()); + AdapterSettings adapterSettings = adapterSettingsBuilder.build(); + } +} +// [END spanner_v1_generated_AdapterSettings_CreateSession_sync] diff --git a/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/stub/adapterstubsettings/createsession/SyncCreateSession.java b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/stub/adapterstubsettings/createsession/SyncCreateSession.java new file mode 100644 index 000000000000..93bd8022014b --- /dev/null +++ b/java-spanneradapter/samples/snippets/generated/com/google/spanner/adapter/v1/stub/adapterstubsettings/createsession/SyncCreateSession.java @@ -0,0 +1,55 @@ +/* + * Copyright 2025 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. + */ + +package com.google.spanner.adapter.v1.stub.samples; + +// [START spanner_v1_generated_AdapterStubSettings_CreateSession_sync] +import com.google.spanner.adapter.v1.stub.AdapterStubSettings; +import java.time.Duration; + +public class SyncCreateSession { + + public static void main(String[] args) throws Exception { + syncCreateSession(); + } + + public static void syncCreateSession() throws Exception { + // 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 + AdapterStubSettings.Builder adapterSettingsBuilder = AdapterStubSettings.newBuilder(); + adapterSettingsBuilder + .createSessionSettings() + .setRetrySettings( + adapterSettingsBuilder + .createSessionSettings() + .getRetrySettings() + .toBuilder() + .setInitialRetryDelayDuration(Duration.ofSeconds(1)) + .setInitialRpcTimeoutDuration(Duration.ofSeconds(5)) + .setMaxAttempts(5) + .setMaxRetryDelayDuration(Duration.ofSeconds(30)) + .setMaxRpcTimeoutDuration(Duration.ofSeconds(60)) + .setRetryDelayMultiplier(1.3) + .setRpcTimeoutMultiplier(1.5) + .setTotalTimeoutDuration(Duration.ofSeconds(300)) + .build()); + AdapterStubSettings adapterSettings = adapterSettingsBuilder.build(); + } +} +// [END spanner_v1_generated_AdapterStubSettings_CreateSession_sync] diff --git a/pom.xml b/pom.xml index d42ee1082c19..68b9bb14cb18 100644 --- a/pom.xml +++ b/pom.xml @@ -201,6 +201,7 @@ java-shopping-merchant-quota java-shopping-merchant-reports java-shopping-merchant-reviews + java-spanneradapter java-speech java-storage-transfer java-storagebatchoperations diff --git a/versions.txt b/versions.txt index cde9758a56f0..7df9f284c4c1 100644 --- a/versions.txt +++ b/versions.txt @@ -856,3 +856,6 @@ proto-google-cloud-modelarmor-v1beta:0.5.0:0.6.0-SNAPSHOT grpc-google-cloud-modelarmor-v1beta:0.5.0:0.6.0-SNAPSHOT proto-google-cloud-dataform-v1:0.63.0:0.64.0-SNAPSHOT grpc-google-cloud-dataform-v1:0.63.0:0.64.0-SNAPSHOT +google-cloud-spanneradapter:0.0.1:0.1.0-SNAPSHOT +proto-google-cloud-spanneradapter-v1:0.0.1:0.1.0-SNAPSHOT +grpc-google-cloud-spanneradapter-v1:0.0.1:0.1.0-SNAPSHOT