diff --git a/.cloudbuild/samples_build.yaml b/.cloudbuild/samples_build.yaml index 204a7b254..3dd2ff94c 100644 --- a/.cloudbuild/samples_build.yaml +++ b/.cloudbuild/samples_build.yaml @@ -1,19 +1,19 @@ steps: -- name: gcr.io/cloud-devrel-public-resources/java8 +- name: gcr.io/cloud-devrel-public-resources/java11 entrypoint: ls args: [ '-alt', ] -- name: gcr.io/cloud-devrel-public-resources/java8 +- name: gcr.io/cloud-devrel-public-resources/java11 entrypoint: curl args: [ '--header', 'Metadata-Flavor: Google', 'http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/email' ] -- name: gcr.io/cloud-devrel-public-resources/java8 +- name: gcr.io/cloud-devrel-public-resources/java11 entrypoint: pwd -- name: gcr.io/cloud-devrel-public-resources/java8 +- name: gcr.io/cloud-devrel-public-resources/java11 entrypoint: bash args: [ '.kokoro/build.sh' @@ -22,7 +22,7 @@ steps: - 'JOB_TYPE=samples' - 'GOOGLE_CLOUD_PROJECT=cloud-java-ci-sample' - 'KOKORO_GITHUB_PULL_REQUEST_NUMBER=$_PR_NUMBER' -- name: gcr.io/cloud-devrel-public-resources/java8 +- name: gcr.io/cloud-devrel-public-resources/java11 entrypoint: echo args: [ 'Sample job succeeded', diff --git a/.github/.OwlBot.yaml b/.github/.OwlBot-hermetic.yaml similarity index 80% rename from .github/.OwlBot.yaml rename to .github/.OwlBot-hermetic.yaml index d89045599..ef1c310b3 100644 --- a/.github/.OwlBot.yaml +++ b/.github/.OwlBot-hermetic.yaml @@ -11,9 +11,6 @@ # 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. - -docker: - image: "gcr.io/cloud-devrel-public-resources/owlbot-java:latest" deep-remove-regex: - "/proto-google-.*/src" @@ -25,8 +22,12 @@ deep-copy-regex: dest: "/owl-bot-staging/$1/proto-google-cloud-datastore-$1/src" - source: "/google/datastore/admin/(v.*)/.*-java/proto-google-.*/src" dest: "/owl-bot-staging/$1/proto-google-cloud-datastore-admin-$1/src" +- source: "/google/datastore/(v.*)/.*-java/grpc-google-.*/src" + dest: "/owl-bot-staging/$1/grpc-google-cloud-datastore-$1/src" - source: "/google/datastore/admin/(v.*)/.*-java/grpc-google-.*/src" dest: "/owl-bot-staging/$1/grpc-google-cloud-datastore-admin-$1/src" # Admin & Data APIs share the same wrapper library. +- source: "/google/datastore/(v.*)/.*-java/gapic-google-.*/src" + dest: "/owl-bot-staging/$1/google-cloud-datastore/src" - source: "/google/datastore/admin/(v.*)/.*-java/gapic-google-.*/src" - dest: "/owl-bot-staging/$1/google-cloud-datastore/src" \ No newline at end of file + dest: "/owl-bot-staging/$1/google-cloud-datastore/src" diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml deleted file mode 100644 index 6167135e9..000000000 --- a/.github/.OwlBot.lock.yaml +++ /dev/null @@ -1,17 +0,0 @@ -# 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. -docker: - image: gcr.io/cloud-devrel-public-resources/owlbot-java:latest - digest: sha256:81c3ec554428c8ff6c92f0d58668b7ef52265d053a82284c97a326745e786949 -# created: 2024-03-27T17:59:25.436353226Z diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 3a7c9a454..18cc9f259 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,8 +18,7 @@ updates: # it via template in the synthtool repository. ignore: - dependency-name: "*" - - # rules for the `V3-experimental` branch +# rules for the `grpc-experimental` branch - package-ecosystem: maven directory: "/" schedule: @@ -28,4 +27,4 @@ updates: # Prefix all commit messages with "deps: " prefix: "deps" open-pull-requests-limit: 10 - target-branch: "V3-experimental" + target-branch: "grpc-experimental" diff --git a/.github/generated-files-bot.yml b/.github/generated-files-bot.yml index c644a24e1..e58cdcbad 100644 --- a/.github/generated-files-bot.yml +++ b/.github/generated-files-bot.yml @@ -6,6 +6,7 @@ externalManifests: file: '.github/readme/synth.metadata/synth.metadata' jsonpath: '$.generatedFiles[*]' ignoreAuthors: +- 'cloud-java-bot' - 'renovate-bot' - 'yoshi-automation' - 'release-please[bot]' diff --git a/.github/release-please.yml b/.github/release-please.yml index 53b119627..3fd939966 100644 --- a/.github/release-please.yml +++ b/.github/release-please.yml @@ -30,3 +30,11 @@ branches: handleGHRelease: true releaseType: java-backport branch: 2.17.x + - bumpMinorPreMajor: true + handleGHRelease: true + releaseType: java-backport + branch: 2.19.x + - bumpMinorPreMajor: true + handleGHRelease: true + releaseType: java-backport + branch: 2.26.x diff --git a/.github/scripts/update_generation_config.sh b/.github/scripts/update_generation_config.sh new file mode 100644 index 000000000..fff56bf5d --- /dev/null +++ b/.github/scripts/update_generation_config.sh @@ -0,0 +1,175 @@ +#!/bin/bash +set -e +# This script should be run at the root of the repository. +# This script is used to update googleapis_commitish, gapic_generator_version, +# and libraries_bom_version in generation configuration at the time of running +# and create a pull request. + +# The following commands need to be installed before running the script: +# 1. git +# 2. gh +# 3. jq + +# Utility functions +# Get the latest released version of a Maven artifact. +function get_latest_released_version() { + local group_id=$1 + local artifact_id=$2 + json_content=$(curl -s "https://search.maven.org/solrsearch/select?q=g:${group_id}+AND+a:${artifact_id}&core=gav&rows=500&wt=json") + latest=$(jq -r '.response.docs[] | select(.v | test("^[0-9]+(\\.[0-9]+)*$")) | .v' <<< "${json_content}" | sort -V | tail -n 1) + if [[ -z "${latest}" ]]; then + echo "The latest version of ${group_id}:${artifact_id} is empty." + echo "The returned json from maven.org is invalid: ${json_content}" + exit 1 + else + echo "${latest}" + fi +} + +# Update a key to a new value in the generation config. +function update_config() { + local key_word=$1 + local new_value=$2 + local file=$3 + echo "Update ${key_word} to ${new_value} in ${file}" + sed -i -e "s/^${key_word}.*$/${key_word}: ${new_value}/" "${file}" +} + +# Update an action to a new version in GitHub action. +function update_action() { + local key_word=$1 + local new_value=$2 + local file=$3 + echo "Update ${key_word} to ${new_value} in ${file}" + # use a different delimiter because the key_word contains "/". + sed -i -e "s|${key_word}@v.*$|${key_word}@v${new_value}|" "${file}" +} + +# The parameters of this script is: +# 1. base_branch, the base branch of the result pull request. +# 2. repo, organization/repo-name, e.g., googleapis/google-cloud-java +# 3. [optional] generation_config, the path to the generation configuration, +# the default value is generation_config.yaml in the repository root. +# 4. [optional] workflow, the library generation workflow file, +# the default value is .github/workflows/hermetic_library_generation.yaml. +while [[ $# -gt 0 ]]; do +key="$1" +case "${key}" in + --base_branch) + base_branch="$2" + shift + ;; + --repo) + repo="$2" + shift + ;; + --generation_config) + generation_config="$2" + shift + ;; + --workflow) + workflow="$2" + shift + ;; + *) + echo "Invalid option: [$1]" + exit 1 + ;; +esac +shift +done + +if [ -z "${base_branch}" ]; then + echo "missing required argument --base_branch" + exit 1 +fi + +if [ -z "${repo}" ]; then + echo "missing required argument --repo" + exit 1 +fi + +if [ -z "${generation_config}" ]; then + generation_config="generation_config.yaml" + echo "Use default generation config: ${generation_config}" +fi + +if [ -z "${workflow}" ]; then + workflow=".github/workflows/hermetic_library_generation.yaml" + echo "Use default library generation workflow file: ${workflow}" +fi + +current_branch="generate-libraries-${base_branch}" +title="chore: Update generation configuration at $(date)" + +git checkout "${base_branch}" +# Try to find a open pull request associated with the branch +pr_num=$(gh pr list -s open -H "${current_branch}" -q . --json number | jq ".[] | .number") +# Create a branch if there's no open pull request associated with the +# branch; otherwise checkout the pull request. +if [ -z "${pr_num}" ]; then + git checkout -b "${current_branch}" + # Push the current branch to remote so that we can + # compare the commits later. + git push -u origin "${current_branch}" +else + gh pr checkout "${pr_num}" +fi + +# Only allow fast-forward merging; exit with non-zero result if there's merging +# conflict. +git merge -m "chore: merge ${base_branch} into ${current_branch}" "${base_branch}" + +mkdir tmp-googleapis +# Use partial clone because only commit history is needed. +git clone --filter=blob:none https://github.com/googleapis/googleapis.git tmp-googleapis +pushd tmp-googleapis +git pull +latest_commit=$(git rev-parse HEAD) +popd +rm -rf tmp-googleapis +update_config "googleapis_commitish" "${latest_commit}" "${generation_config}" + +# Update gapic-generator-java version to the latest +latest_version=$(get_latest_released_version "com.google.api" "gapic-generator-java") +update_config "gapic_generator_version" "${latest_version}" "${generation_config}" + +# Update composite action version to latest gapic-generator-java version +update_action "googleapis/sdk-platform-java/.github/scripts" \ + "${latest_version}" \ + "${workflow}" + +# Update libraries-bom version to the latest +latest_version=$(get_latest_released_version "com.google.cloud" "libraries-bom") +update_config "libraries_bom_version" "${latest_version}" "${generation_config}" + +git add "${generation_config}" "${workflow}" +changed_files=$(git diff --cached --name-only) +if [[ "${changed_files}" == "" ]]; then + echo "The latest generation config is not changed." + echo "Skip committing to the pull request." +else + git commit -m "${title}" +fi + +# There are potentially at most two commits: merge commit and change commit. +# We want to exit the script if no commit happens (otherwise this will be an +# infinite loop). +# `git cherry` is a way to find whether the local branch has commits that are +# not in the remote branch. +# If we find any such commit, push them to remote branch. +unpushed_commit=$(git cherry -v "origin/${current_branch}" | wc -l) +if [[ "${unpushed_commit}" -eq 0 ]]; then + echo "No unpushed commits, exit" + exit 0 +fi + +if [ -z "${pr_num}" ]; then + git remote add remote_repo https://cloud-java-bot:"${GH_TOKEN}@github.com/${repo}.git" + git fetch -q remote_repo + git push -f remote_repo "${current_branch}" + gh pr create --title "${title}" --head "${current_branch}" --body "${title}" --base "${base_branch}" +else + git push + gh pr edit "${pr_num}" --title "${title}" --body "${title}" +fi diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml index 0159d7ae3..12d6c76d2 100644 --- a/.github/sync-repo-settings.yaml +++ b/.github/sync-repo-settings.yaml @@ -15,10 +15,12 @@ branchProtectionRules: - units (11) - 'Kokoro - Test: Integration' - cla/google - - OwlBot Post Processor - - 'Kokoro - Test: Java GraalVM Native Image' - - 'Kokoro - Test: Java 17 GraalVM Native Image' + - 'Kokoro - Test: Java GraalVM Native Image A' + - 'Kokoro - Test: Java GraalVM Native Image B' + - 'Kokoro - Test: Java GraalVM Native Image C' - javadoc + - library_generation + - unmanaged_dependency_check - pattern: 1.106.5-sp isAdminEnforced: true requiredApprovingReviewCount: 1 @@ -62,7 +64,6 @@ branchProtectionRules: - units (11) - 'Kokoro - Test: Integration' - cla/google - - OwlBot Post Processor - pattern: 2.2.x isAdminEnforced: true requiredApprovingReviewCount: 1 @@ -77,7 +78,6 @@ branchProtectionRules: - units (11) - 'Kokoro - Test: Integration' - cla/google - - OwlBot Post Processor - pattern: 2.12.x isAdminEnforced: true requiredApprovingReviewCount: 1 @@ -92,7 +92,6 @@ branchProtectionRules: - units (11) - 'Kokoro - Test: Integration' - cla/google - - OwlBot Post Processor - 'Kokoro - Test: Java GraalVM Native Image' - 'Kokoro - Test: Java 17 GraalVM Native Image' - pattern: multi-db @@ -109,10 +108,40 @@ branchProtectionRules: - units (11) - 'Kokoro - Test: Integration' - cla/google - - OwlBot Post Processor - 'Kokoro - Test: Java GraalVM Native Image' - 'Kokoro - Test: Java 17 GraalVM Native Image' - - pattern: V3-experimental + - pattern: grpc-experimental + isAdminEnforced: true + requiredApprovingReviewCount: 1 + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: false + requiredStatusCheckContexts: + - dependencies (17) + - lint + - clirr + - units (8) + - units (11) + - 'Kokoro - Test: Integration' + - cla/google + - 'Kokoro - Test: Java GraalVM Native Image' + - 'Kokoro - Test: Java 17 GraalVM Native Image' + - javadoc + - pattern: 2.15.x + isAdminEnforced: true + requiredApprovingReviewCount: 1 + requiresCodeOwnerReviews: true + requiresStrictStatusChecks: false + requiredStatusCheckContexts: + - dependencies (17) + - lint + - clirr + - units (8) + - units (11) + - 'Kokoro - Test: Integration' + - cla/google + - 'Kokoro - Test: Java GraalVM Native Image' + - 'Kokoro - Test: Java 17 GraalVM Native Image' + - pattern: 2.17.x isAdminEnforced: true requiredApprovingReviewCount: 1 requiresCodeOwnerReviews: true @@ -125,11 +154,10 @@ branchProtectionRules: - units (11) - 'Kokoro - Test: Integration' - cla/google - - OwlBot Post Processor - 'Kokoro - Test: Java GraalVM Native Image' - 'Kokoro - Test: Java 17 GraalVM Native Image' - javadoc - - pattern: 2.15.x + - pattern: 2.19.x isAdminEnforced: true requiredApprovingReviewCount: 1 requiresCodeOwnerReviews: true @@ -142,10 +170,10 @@ branchProtectionRules: - units (11) - 'Kokoro - Test: Integration' - cla/google - - OwlBot Post Processor - 'Kokoro - Test: Java GraalVM Native Image' - 'Kokoro - Test: Java 17 GraalVM Native Image' - - pattern: 2.17.x + - javadoc + - pattern: 2.26.x isAdminEnforced: true requiredApprovingReviewCount: 1 requiresCodeOwnerReviews: true @@ -158,10 +186,11 @@ branchProtectionRules: - units (11) - 'Kokoro - Test: Integration' - cla/google - - OwlBot Post Processor - 'Kokoro - Test: Java GraalVM Native Image' - 'Kokoro - Test: Java 17 GraalVM Native Image' - javadoc + - library_generation + - unmanaged_dependency_check permissionRules: - team: yoshi-admins permission: admin diff --git a/.github/trusted-contribution.yml b/.github/trusted-contribution.yml index a0ba1f7d9..88d3ac9bf 100644 --- a/.github/trusted-contribution.yml +++ b/.github/trusted-contribution.yml @@ -1,3 +1,9 @@ trustedContributors: - renovate-bot - gcf-owl-bot[bot] + +annotations: +- type: comment + text: "/gcbrun" +- type: label + text: "kokoro:force-run" diff --git a/.github/workflows/approve-readme.yaml b/.github/workflows/approve-readme.yaml index f5fc7d516..59f00b8eb 100644 --- a/.github/workflows/approve-readme.yaml +++ b/.github/workflows/approve-readme.yaml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest if: github.repository_owner == 'googleapis' && github.head_ref == 'autosynth-readme' steps: - - uses: actions/github-script@v6 + - uses: actions/github-script@v7 with: github-token: ${{secrets.YOSHI_APPROVER_TOKEN}} script: | diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ae66b1973..2192f032d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,8 +27,8 @@ jobs: matrix: java: [11, 17, 21] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{matrix.java}} @@ -41,8 +41,8 @@ jobs: name: "units (8)" runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: java-version: 8 distribution: temurin @@ -51,7 +51,7 @@ jobs: # https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#jvm run: echo "SUREFIRE_JVM_OPT=-Djvm=${JAVA_HOME}/bin/java" >> $GITHUB_ENV shell: bash - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: java-version: 17 distribution: temurin @@ -59,15 +59,23 @@ jobs: env: JOB_TYPE: test windows: + # Building using Java 11 and run the tests with Java 8 runtime runs-on: windows-latest steps: - name: Support longpaths run: git config --system core.longpaths true - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: - distribution: temurin java-version: 8 + distribution: temurin + - name: "Set jvm system property environment variable for surefire plugin (unit tests)" + run: echo "SUREFIRE_JVM_OPT=-Djvm=${JAVA_HOME}\bin\java" >> $GITHUB_ENV + shell: bash + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 11 - run: java -version - run: .kokoro/build.bat env: @@ -78,8 +86,8 @@ jobs: matrix: java: [17] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: temurin java-version: ${{matrix.java}} @@ -88,8 +96,8 @@ jobs: javadoc: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: temurin java-version: 17 @@ -100,11 +108,11 @@ jobs: lint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: temurin - java-version: 11 + java-version: 17 - run: java -version - run: .kokoro/build.sh env: @@ -112,8 +120,8 @@ jobs: clirr: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: temurin java-version: 8 diff --git a/.github/workflows/hermetic_library_generation.yaml b/.github/workflows/hermetic_library_generation.yaml new file mode 100644 index 000000000..f0b1369c8 --- /dev/null +++ b/.github/workflows/hermetic_library_generation.yaml @@ -0,0 +1,45 @@ +# 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. +# GitHub action job to test core java library features on +# downstream client libraries before they are released. +name: Hermetic library generation upon generation config change through pull requests +on: + pull_request: + +env: + REPO_FULL_NAME: ${{ github.event.pull_request.head.repo.full_name }} + GITHUB_REPOSITORY: ${{ github.repository }} +jobs: + library_generation: + runs-on: ubuntu-latest + steps: + - name: Determine whether the pull request comes from a fork + run: | + if [[ "${GITHUB_REPOSITORY}" != "${REPO_FULL_NAME}" ]]; then + echo "This PR comes from a fork. Skip library generation." + echo "SHOULD_RUN=false" >> $GITHUB_ENV + else + echo "SHOULD_RUN=true" >> $GITHUB_ENV + fi + - uses: actions/checkout@v4 + if: env.SHOULD_RUN == 'true' + with: + fetch-depth: 0 + token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} + - uses: googleapis/sdk-platform-java/.github/scripts@v2.57.0 + if: env.SHOULD_RUN == 'true' + with: + base_ref: ${{ github.base_ref }} + head_ref: ${{ github.head_ref }} + token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} diff --git a/.github/workflows/renovate_config_check.yaml b/.github/workflows/renovate_config_check.yaml index 87d8eb2be..47b9e87c9 100644 --- a/.github/workflows/renovate_config_check.yaml +++ b/.github/workflows/renovate_config_check.yaml @@ -7,16 +7,16 @@ on: jobs: renovate_bot_config_validation: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: '20' + node-version: '22' - name: Install Renovate and Config Validator run: | diff --git a/.github/workflows/samples.yaml b/.github/workflows/samples.yaml index 10d252d77..186fd8bcf 100644 --- a/.github/workflows/samples.yaml +++ b/.github/workflows/samples.yaml @@ -20,11 +20,11 @@ jobs: checkstyle: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: temurin - java-version: 8 + java-version: 17 - name: Run checkstyle run: mvn -P lint --quiet --batch-mode checkstyle:check working-directory: samples/snippets diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml index 851d94b20..c39a53f54 100644 --- a/.github/workflows/unmanaged_dependency_check.yaml +++ b/.github/workflows/unmanaged_dependency_check.yaml @@ -5,8 +5,8 @@ jobs: unmanaged_dependency_check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 with: distribution: temurin java-version: 11 @@ -14,6 +14,6 @@ jobs: shell: bash run: .kokoro/build.sh - name: Unmanaged dependency check - uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.29.0 + uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.47.0 with: bom-path: google-cloud-datastore-bom/pom.xml diff --git a/.github/workflows/update_generation_config.yaml b/.github/workflows/update_generation_config.yaml new file mode 100644 index 000000000..cd2d5fd5a --- /dev/null +++ b/.github/workflows/update_generation_config.yaml @@ -0,0 +1,44 @@ +# 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. +# GitHub action job to test core java library features on +# downstream client libraries before they are released. +name: Update generation configuration +on: + schedule: + - cron: '0 2 * * *' + workflow_dispatch: + +jobs: + update-generation-config: + runs-on: ubuntu-24.04 + env: + # the branch into which the pull request is merged + base_branch: main + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} + - name: Update params in generation config to latest + shell: bash + run: | + set -x + [ -z "$(git config user.email)" ] && git config --global user.email "cloud-java-bot@google.com" + [ -z "$(git config user.name)" ] && git config --global user.name "cloud-java-bot" + bash .github/scripts/update_generation_config.sh \ + --base_branch "${base_branch}" \ + --repo ${{ github.repository }} + env: + GH_TOKEN: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }} + diff --git a/.gitignore b/.gitignore index 6f5e4424d..241f84417 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,4 @@ target/ *.iml __pycache__/ -.flattened-pom.xml \ No newline at end of file +.flattened-pom.xml diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 8a894939c..f77424b4f 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -1,11 +1,11 @@ #!/bin/bash -# Copyright 2019 Google LLC +# 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 +# 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, @@ -42,42 +42,53 @@ if [[ ! -z "${GOOGLE_APPLICATION_CREDENTIALS}" && "${GOOGLE_APPLICATION_CREDENTI export GOOGLE_APPLICATION_CREDENTIALS=$(realpath ${KOKORO_GFILE_DIR}/${GOOGLE_APPLICATION_CREDENTIALS}) fi + RETURN_CODE=0 set +e case ${JOB_TYPE} in test) echo "SUREFIRE_JVM_OPT: ${SUREFIRE_JVM_OPT}" - mvn test -B -ntp -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} + mvn test -B -ntp -Dfmt.skip=true -Dclirr.skip=true -Denforcer.skip=true ${SUREFIRE_JVM_OPT} RETURN_CODE=$? ;; lint) - mvn com.coveo:fmt-maven-plugin:check -B -ntp + mvn com.spotify.fmt:fmt-maven-plugin:check -B -ntp RETURN_CODE=$? ;; javadoc) - mvn javadoc:javadoc javadoc:test-javadoc -B -ntp + mvn javadoc:javadoc javadoc:test-javadoc -B -ntp -Dfmt.skip=true RETURN_CODE=$? ;; integration) + # Kokoro integration tests use both JDK 11 and JDK 8. Integration + # tests require JDK 11 export as JAVA env variable to run cloud datastore + # emulator (https://cloud.google.com/sdk/docs/release-notes#39300_2022-07-12). + # For Java 8 environment, we will still run the tests using Java 8 with + # SUREFIRE_JVM_OPT for Maven surefire plugin: + # https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#jvm + if [[ -n "${JAVA11_HOME}" && -n "${JAVA8_HOME}" ]] + then + export JAVA=${JAVA11_HOME}/bin/java + export SUREFIRE_JVM_OPT=-Djvm=${JAVA8_HOME}/bin/java + fi + mvn -B ${INTEGRATION_TEST_ARGS} \ -ntp \ -Penable-integration-tests \ -DtrimStackTrace=false \ -Dclirr.skip=true \ -Denforcer.skip=true \ + -Dcheckstyle.skip=true \ + -DskipUnitTests=true \ + -Dfmt.skip=true \ -fae \ verify RETURN_CODE=$? ;; graalvm) # Run Unit and Integration Tests with Native Image - mvn -B ${INTEGRATION_TEST_ARGS} -ntp -Pnative test - RETURN_CODE=$? - ;; -graalvm17) - # Run Unit and Integration Tests with Native Image - mvn -B ${INTEGRATION_TEST_ARGS} -ntp -Pnative test + mvn -B ${INTEGRATION_TEST_ARGS} -ntp -Pnative test -Dfmt.skip=true RETURN_CODE=$? ;; samples) @@ -101,6 +112,7 @@ samples) -DtrimStackTrace=false \ -Dclirr.skip=true \ -Denforcer.skip=true \ + -Dfmt.skip=true \ -fae \ verify RETURN_CODE=$? @@ -110,7 +122,7 @@ samples) fi ;; clirr) - mvn -B -ntp -Denforcer.skip=true clirr:check + mvn -B -ntp -Dfmt.skip=true -Denforcer.skip=true clirr:check RETURN_CODE=$? ;; *) diff --git a/.kokoro/common.sh b/.kokoro/common.sh index f8f957af1..aeb3568bb 100644 --- a/.kokoro/common.sh +++ b/.kokoro/common.sh @@ -52,7 +52,7 @@ function retry_with_backoff { return $exit_code } -## Helper functionss +## Helper functions function now() { date +"%Y-%m-%d %H:%M:%S" | tr -d '\n'; } function msg() { println "$*" >&2; } function println() { printf '%s\n' "$(now) $*"; } diff --git a/.kokoro/presubmit/graalvm-native.cfg b/.kokoro/presubmit/graalvm-native-a.cfg similarity index 78% rename from .kokoro/presubmit/graalvm-native.cfg rename to .kokoro/presubmit/graalvm-native-a.cfg index b5c7f594b..d0c295213 100644 --- a/.kokoro/presubmit/graalvm-native.cfg +++ b/.kokoro/presubmit/graalvm-native-a.cfg @@ -3,7 +3,7 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.29.0" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.46.2" # {x-version-update:google-cloud-shared-dependencies:current} } env_vars: { @@ -33,6 +33,6 @@ env_vars: { } env_vars: { - key: "DATASTORE_PROJECT_ID" - value: "gcloud-devel" + key: "IT_SERVICE_ACCOUNT_EMAIL" + value: "it-service-account@gcloud-devel.iam.gserviceaccount.com" } \ No newline at end of file diff --git a/.kokoro/presubmit/graalvm-native-17.cfg b/.kokoro/presubmit/graalvm-native-b.cfg similarity index 76% rename from .kokoro/presubmit/graalvm-native-17.cfg rename to .kokoro/presubmit/graalvm-native-b.cfg index d7a73c2c6..962c305ff 100644 --- a/.kokoro/presubmit/graalvm-native-17.cfg +++ b/.kokoro/presubmit/graalvm-native-b.cfg @@ -3,12 +3,12 @@ # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.29.0" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.46.2" # {x-version-update:google-cloud-shared-dependencies:current} } env_vars: { key: "JOB_TYPE" - value: "graalvm17" + value: "graalvm" } # TODO: remove this after we've migrated all tests and scripts @@ -33,6 +33,6 @@ env_vars: { } env_vars: { - key: "DATASTORE_PROJECT_ID" - value: "gcloud-devel" + key: "IT_SERVICE_ACCOUNT_EMAIL" + value: "it-service-account@gcloud-devel.iam.gserviceaccount.com" } \ No newline at end of file diff --git a/.kokoro/presubmit/graalvm-native-c.cfg b/.kokoro/presubmit/graalvm-native-c.cfg new file mode 100644 index 000000000..87b5dff65 --- /dev/null +++ b/.kokoro/presubmit/graalvm-native-c.cfg @@ -0,0 +1,38 @@ +# Format: //devtools/kokoro/config/proto/build.proto + +# Configure the docker image for kokoro-trampoline. +env_vars: { + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_c:3.46.2" # {x-version-update:google-cloud-shared-dependencies:current} +} + +env_vars: { + key: "JOB_TYPE" + value: "graalvm" +} + +# TODO: remove this after we've migrated all tests and scripts +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_CLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "secret_manager/java-it-service-account" +} + +env_vars: { + key: "SECRET_MANAGER_KEYS" + value: "java-it-service-account" +} + +env_vars: { + key: "IT_SERVICE_ACCOUNT_EMAIL" + value: "it-service-account@gcloud-devel.iam.gserviceaccount.com" +} \ No newline at end of file diff --git a/.kokoro/presubmit/integration.cfg b/.kokoro/presubmit/integration.cfg index fd5cd6689..71431d938 100644 --- a/.kokoro/presubmit/integration.cfg +++ b/.kokoro/presubmit/integration.cfg @@ -35,4 +35,4 @@ env_vars: { env_vars: { key: "SECRET_MANAGER_KEYS" value: "java-it-service-account" -} +} \ No newline at end of file diff --git a/.readme-partials.yaml b/.readme-partials.yaml index 9823b5c70..a6afbfd20 100644 --- a/.readme-partials.yaml +++ b/.readme-partials.yaml @@ -105,7 +105,116 @@ custom_content: | running on Compute Engine or from your own desktop. To run the example on App Engine, simply move the code from the main method to your application's servlet class and change the print statements to display on your webpage. + + gRPC Java Datastore Client User Guide + ------- + The [Java Datastore client](https://github.com/googleapis/java-datastore) now offers gRPC as a transport layer option with experimental support. Using [gRPC connection pooling](https://grpc.io/docs/guides/performance/) enables distributing RPCs over multiple connections which may improve performance. + + #### Installation Instructions + To use this feature, please upgrade your Java-datastore SDK to version v2.28.0 or a newer release. You can find the latest versions [here](https://github.com/googleapis/java-datastore/releases). + + #### How to Use + To opt-in to the gRPC transport behavior, simply add the below line of code (`setTransportOptions`) to your Datastore client instantiation. + + Example: + ```java + DatastoreOptions datastoreOptions = + DatastoreOptions.newBuilder() + .setProjectId("my-project") + .setDatabaseId("my-database") + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .build(); + ``` + Setting the transport options explicitly to `GrpcTransportOptions` will signal the client to use gRPC instead of HTTP when making calls to the server. + + To revert back to the existing stable behavior and transport, simply remove the transport options line or replace it with `HttpTransportOptions`. Please note this will require an application rebuild and restart. + Example: + ```java + // will default to existing HTTP transport behavior + DatastoreOptions datastoreOptions = DatastoreOptions.newBuilder() + .setProjectId("my-project") + .setDatabaseId("my-database") + .build(); + + // will also default to existing HTTP transport behavior + DatastoreOptions datastoreOptions = + DatastoreOptions.newBuilder() + .setProjectId("my-project") + .setDatabaseId("my-database") + .setTransportOptions(HttpTransportOptions.newBuilder() + .setConnectTimeout(1000) + .build()).build(); + ``` + + Note: client instantiations that already use `setTransportOptions` with `HttpTransportOptions` will continue to have the same behavior. Only transports that are explicitly set to gRPC will change. + + #### Verify Datastore Transport Options Type + To verify which type of TransportOptions you have successfully configured, you can use the below lines of code to compare transport options type: + ```java + // checks if using gRPC transport options + boolean isGRPC = datastore.getOptions().getTransportOptions() instanceof GrpcTransportOptions; + + // checks if using HTTP transport options + boolean isHTTP = datastore.getOptions().getTransportOptions() instanceof HTTPTransportOptions; + ``` + + #### New Features + There are new gRPC specific features available to use in this update. + + ##### Connection Pool + A connection pool, also known as a channel pool, is a cache of database connections that are shared and reused to improve connection latency and performance. With this update, now you will be able to configure the channel pool to improve application performance. This section guides you in determining the optimal connection pool size and configuring it within the Java datastore client. + To customize the number of channels your client uses, you can update the channel provider in the DatastoreOptions. + ###### Determine the best connection pool size + The default connection pool size is right for most applications, and in most cases there's no need to change it. + + However sometimes you may want to change your connection pool size due to high throughput or buffered requests. Ideally, to leave room for traffic fluctuations, a connection pool has about twice the number of connections it takes for maximum saturation. Because a connection can handle a maximum of 100 concurrent requests, between 10 and 50 outstanding requests per connection is optimal. The limit of 100 concurrent streams per gRPC connection is enforced in Google's middleware layer, and you are not able to reconfigure this number. + + The following steps help you calculate the optimal number of connections in your channel pool using estimate per-client QPS and average latency numbers. + + To calculate the optimal connections, gather the following information: + + 1. The maximum number of queries per second (QPS) per client when your application is running a typical workload. + 2. The average latency (the response time for a single request) in ms. + 3. Determine the number of requests that you can send serially per second by dividing 1,000 by the average latency value. + 4. Divide the QPS in seconds by the number of serial requests per second. + 5. Divide the result by 50 requests per channel to determine the minimum optimal channel pool size. (If your calculation is less than 2, use at least 2 channels anyway, to ensure redundancy.) + 6. Divide the same result by 10 requests per channel to determine the maximum optimal channel pool size. + + These steps are expressed in the following equations: + ```java + (QPS ÷ (1,000 ÷ latency ms)) ÷ 50 streams = Minimum optimal number of connections + (QPS ÷ (1,000 ÷ latency ms)) ÷ 10 streams = Maximum optimal number of connections + ``` + + ###### Example + Your application typically sends 50,000 requests per second, and the average latency is 10 ms. Divide 1,000 by 10 ms to determine that you can send 100 requests serially per second. + Divide that number into 50,000 to get the parallelism needed to send 50,000 QPS: 500. Each channel can have at most 100 requests out concurrently, and your target channel utilization + is between 10 and 50 concurrent streams. Therefore, to calculate the minimum, divide 500 by 50 to get 10. To find the maximum, divide 500 by 10 to get 50. This means that your channel + pool size for this example should be between 10 and 50 connections. + It is also important to monitor your traffic after making changes and adjust the number of connections in your pool if necessary. + + ###### Set the pool size + The following code sample demonstrates how to configure the channel pool in the client libraries using `DatastoreOptions`. + See [ChannelPoolSettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.grpc.ChannelPoolSettings) and [Performance Best Practices](https://grpc.io/docs/guides/performance/) for more information on channel pools and best practices for performance. + + Code Example + ```java + InstantiatingGrpcChannelProvider channelProvider = + DatastoreSettings.defaultGrpcTransportProviderBuilder() + .setChannelPoolSettings( + ChannelPoolSettings.builder() + .setInitialChannelCount(MIN_VAL) + .setMaxChannelCount(MAX_VAL) + .build()) + .build(); + + DatastoreOptions options = DatastoreOptions.newBuilder() + .setProjectId("my-project") + .setChannelProvider(channelProvider) + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .build(); + ``` Testing ------- diff --git a/.repo-metadata.json b/.repo-metadata.json index e6ebd09de..6ae8c95c0 100644 --- a/.repo-metadata.json +++ b/.repo-metadata.json @@ -2,19 +2,21 @@ "api_shortname": "datastore", "name_pretty": "Cloud Datastore", "product_documentation": "https://cloud.google.com/datastore", + "api_description": "is a fully managed, schemaless database for\\nstoring non-relational data. Cloud Datastore automatically scales with\\nyour users and supports ACID transactions, high availability of reads and\\nwrites, strong consistency for reads and ancestor queries, and eventual\\nconsistency for all other queries.", "client_documentation": "https://cloud.google.com/java/docs/reference/google-cloud-datastore/latest/history", - "issue_tracker": "https://issuetracker.google.com/savedsearches/559768", "release_level": "stable", + "transport": "both", "language": "java", "repo": "googleapis/java-datastore", "repo_short": "java-datastore", "distribution_name": "com.google.cloud:google-cloud-datastore", - "codeowner_team": "@googleapis/cloud-native-db-dpes @googleapis/api-datastore-sdk @googleapis/api-firestore-partners", "api_id": "datastore.googleapis.com", "library_type": "GAPIC_COMBO", - "api_description": "is a fully managed, schemaless database for\nstoring non-relational data. Cloud Datastore automatically scales with\nyour users and supports ACID transactions, high availability of reads and\nwrites, strong consistency for reads and ancestor queries, and eventual\nconsistency for all other queries.", + "requires_billing": true, + "codeowner_team": "@googleapis/cloud-native-db-dpes @googleapis/api-datastore-sdk @googleapis/api-firestore-partners", "excluded_dependencies": "grpc-google-cloud-datastore-v1", - "extra_versioned_modules": "datastore-v1-proto-client", "excluded_poms": "grpc-google-cloud-datastore-v1", + "issue_tracker": "https://issuetracker.google.com/savedsearches/559768", + "extra_versioned_modules": "datastore-v1-proto-client", "recommended_package": "com.google.cloud.datastore" -} +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index ba6bc10ff..eb97ef264 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,335 @@ # Changelog +## [2.28.1](https://github.com/googleapis/java-datastore/compare/v2.28.0...v2.28.1) (2025-05-06) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.47.0 ([#1841](https://github.com/googleapis/java-datastore/issues/1841)) ([ac393e6](https://github.com/googleapis/java-datastore/commit/ac393e61e517d30b534be3e99070c210081c4f0b)) +* Update googleapis/sdk-platform-java action to v2.57.0 ([#1842](https://github.com/googleapis/java-datastore/issues/1842)) ([0745906](https://github.com/googleapis/java-datastore/commit/0745906bbdd8819ac2ccaafa301c8f4b4fd20be4)) + +## [2.28.0](https://github.com/googleapis/java-datastore/compare/v2.27.2...v2.28.0) (2025-04-29) + + +### Features + +* Java datastore gapic upgrade ([#1824](https://github.com/googleapis/java-datastore/issues/1824)) ([a296d43](https://github.com/googleapis/java-datastore/commit/a296d43724c57aba6a69ebed249261e3d367d625)) + +## [2.27.2](https://github.com/googleapis/java-datastore/compare/v2.27.1...v2.27.2) (2025-04-25) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.56.2 ([1210f32](https://github.com/googleapis/java-datastore/commit/1210f32662e7aafd2e170643bedbb851f40f3646)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.46.2 ([#1823](https://github.com/googleapis/java-datastore/issues/1823)) ([4d2026c](https://github.com/googleapis/java-datastore/commit/4d2026c330009becc201a95c42af365cc83b8ea5)) + +## [2.27.1](https://github.com/googleapis/java-datastore/compare/v2.27.0...v2.27.1) (2025-03-18) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.55.1 ([ba1ad98](https://github.com/googleapis/java-datastore/commit/ba1ad98cce4c0feae13a370ea0581d15674dd43c)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.45.1 ([#1791](https://github.com/googleapis/java-datastore/issues/1791)) ([ab5ac8e](https://github.com/googleapis/java-datastore/commit/ab5ac8e6407541520fabb4504fcce0d675347f63)) + +## [2.27.0](https://github.com/googleapis/java-datastore/compare/v2.26.4...v2.27.0) (2025-03-05) + + +### Features + +* Next release from main branch is 2.27.0 ([#1781](https://github.com/googleapis/java-datastore/issues/1781)) ([d29f47c](https://github.com/googleapis/java-datastore/commit/d29f47cbef9998acdc8b7b0f42d93574dab3cc7f)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.54.0 ([b9b302b](https://github.com/googleapis/java-datastore/commit/b9b302bb6c8bb1c8d8b175b776b2f65317511987)) + + +### Dependencies + +* Update dependency com.google.cloud:gapic-libraries-bom to v1.53.0 ([#1779](https://github.com/googleapis/java-datastore/issues/1779)) ([8369118](https://github.com/googleapis/java-datastore/commit/8369118994e9a18b888a7779376fea7e22b219ed)) + +## [2.26.4](https://github.com/googleapis/java-datastore/compare/v2.26.3...v2.26.4) (2025-02-26) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.44.0 ([#1769](https://github.com/googleapis/java-datastore/issues/1769)) ([7a86509](https://github.com/googleapis/java-datastore/commit/7a8650939e652fc3b384053454d6ef5084bb1508)) + +## [2.26.3](https://github.com/googleapis/java-datastore/compare/v2.26.2...v2.26.3) (2025-02-21) + + +### Dependencies + +* Update dependency com.google.cloud:gapic-libraries-bom to v1.52.0 ([#1747](https://github.com/googleapis/java-datastore/issues/1747)) ([592072b](https://github.com/googleapis/java-datastore/commit/592072b194706e63a7fd4a6f6230377e8f4b729d)) + +## [2.26.2](https://github.com/googleapis/java-datastore/compare/v2.26.1...v2.26.2) (2025-02-12) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.53.0 ([be0d0cd](https://github.com/googleapis/java-datastore/commit/be0d0cd960b9254d26404d9331b78dee1104cf0a)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.43.0 ([#1737](https://github.com/googleapis/java-datastore/issues/1737)) ([7272a41](https://github.com/googleapis/java-datastore/commit/7272a4197a0d7fb97ee039ccb88ac13a1ec037d1)) +* Update googleapis/sdk-platform-java action to v2.53.0 ([#1738](https://github.com/googleapis/java-datastore/issues/1738)) ([b8a7a5d](https://github.com/googleapis/java-datastore/commit/b8a7a5d5d8700ccccb643162843e3043396a9444)) + +## [2.26.1](https://github.com/googleapis/java-datastore/compare/v2.26.0...v2.26.1) (2025-02-05) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.52.0 ([9594024](https://github.com/googleapis/java-datastore/commit/95940241de9f324000d52dc80b3106aedefd481e)) + + +### Dependencies + +* Update dependency com.google.cloud:gapic-libraries-bom to v1.51.0 ([#1726](https://github.com/googleapis/java-datastore/issues/1726)) ([89f31a8](https://github.com/googleapis/java-datastore/commit/89f31a88d346193c9a5533de3e38c9088db30043)) + +## [2.26.0](https://github.com/googleapis/java-datastore/compare/v2.25.4...v2.26.0) (2025-01-29) + + +### Features + +* Add firestoreInDatastoreMode for datastore emulator ([#1698](https://github.com/googleapis/java-datastore/issues/1698)) ([50f106d](https://github.com/googleapis/java-datastore/commit/50f106d4c50884ce471a66c00df322270fe4a91c)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.42.0 ([#1725](https://github.com/googleapis/java-datastore/issues/1725)) ([1cbaf22](https://github.com/googleapis/java-datastore/commit/1cbaf22cf557aec606dce7a5ca5d3ebe620a9339)) + +## [2.25.4](https://github.com/googleapis/java-datastore/compare/v2.25.3...v2.25.4) (2025-01-22) + + +### Dependencies + +* Update dependency org.easymock:easymock to v5.5.0 ([#1666](https://github.com/googleapis/java-datastore/issues/1666)) ([0333b07](https://github.com/googleapis/java-datastore/commit/0333b0744bab87afe78dad1c17f6811d3dec47e6)) + +## [2.25.3](https://github.com/googleapis/java-datastore/compare/v2.25.2...v2.25.3) (2025-01-15) + + +### Dependencies + +* Update dependency com.google.cloud:gapic-libraries-bom to v1.50.0 ([#1708](https://github.com/googleapis/java-datastore/issues/1708)) ([b78660f](https://github.com/googleapis/java-datastore/commit/b78660f3866ce5c1198db4590b5e1f645170ecff)) + +## [2.25.2](https://github.com/googleapis/java-datastore/compare/v2.25.1...v2.25.2) (2025-01-09) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.51.1 ([90d8b30](https://github.com/googleapis/java-datastore/commit/90d8b3034d5a583d880a822d1e763035a2120f4a)) +* Fix emulator command arg data-dir ([#1695](https://github.com/googleapis/java-datastore/issues/1695)) ([9d53195](https://github.com/googleapis/java-datastore/commit/9d531957da3f017f0702a126601eaa8afe3113d6)) + + +### Dependencies + +* Update dependency com.google.cloud:gapic-libraries-bom to v1.49.0 ([#1693](https://github.com/googleapis/java-datastore/issues/1693)) ([8160c28](https://github.com/googleapis/java-datastore/commit/8160c2895e947c118cea24e92d9a31a1fdf4653f)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.41.1 ([#1703](https://github.com/googleapis/java-datastore/issues/1703)) ([bf9537f](https://github.com/googleapis/java-datastore/commit/bf9537f81b6e7cc2252ad0183fb87db656b009d7)) +* Update dependency com.google.guava:guava-testlib to v33.4.0-jre ([#1694](https://github.com/googleapis/java-datastore/issues/1694)) ([b91a2af](https://github.com/googleapis/java-datastore/commit/b91a2af534eb7568ec86a0b27a80a6bd2943af7b)) + +## [2.25.1](https://github.com/googleapis/java-datastore/compare/v2.25.0...v2.25.1) (2024-12-13) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.51.0 ([106ee4d](https://github.com/googleapis/java-datastore/commit/106ee4dd7ca4dd9e59a5419f59b8625680e60f15)) + + +### Dependencies + +* Update sdk platform java dependencies ([#1685](https://github.com/googleapis/java-datastore/issues/1685)) ([4372350](https://github.com/googleapis/java-datastore/commit/4372350117ba57903f510512a383339b6a4ea47c)) + +## [2.25.0](https://github.com/googleapis/java-datastore/compare/v2.24.3...v2.25.0) (2024-12-11) + + +### Features + +* Introduce `java.time` methods and variables ([#1671](https://github.com/googleapis/java-datastore/issues/1671)) ([5a78a80](https://github.com/googleapis/java-datastore/commit/5a78a8075867f4b2fc598f0423bd2ab65b559856)) + + +### Dependencies + +* Update dependency com.google.cloud:gapic-libraries-bom to v1.48.0 ([#1605](https://github.com/googleapis/java-datastore/issues/1605)) ([5c6a678](https://github.com/googleapis/java-datastore/commit/5c6a67844f7b5d4c7001cccd1bed3d0d56be6e90)) + + +### Documentation + +* Update gapic upgrade installation instructions ([#1677](https://github.com/googleapis/java-datastore/issues/1677)) ([b3fbfcc](https://github.com/googleapis/java-datastore/commit/b3fbfcc9654bc63bf0d8f3025641d8c50a24ef97)) + +## [2.24.3](https://github.com/googleapis/java-datastore/compare/v2.24.2...v2.24.3) (2024-11-18) + + +### Dependencies + +* Update sdk platform java dependencies ([#1662](https://github.com/googleapis/java-datastore/issues/1662)) ([b4d3ab9](https://github.com/googleapis/java-datastore/commit/b4d3ab9a72bb2a4dff59bf54abcc5d9536b2596b)) + +## [2.24.2](https://github.com/googleapis/java-datastore/compare/v2.24.1...v2.24.2) (2024-11-06) + + +### Bug Fixes + +* **doc:** Add discriptions for TransactionCallable interface ([#1644](https://github.com/googleapis/java-datastore/issues/1644)) ([173a883](https://github.com/googleapis/java-datastore/commit/173a88330cc5693f54504348cf39bf3191db2250)) +* **doc:** Fix return types for batch interface ([#1645](https://github.com/googleapis/java-datastore/issues/1645)) ([1189211](https://github.com/googleapis/java-datastore/commit/11892116f0fb8eacb711a8f48e780e48a232f987)) + +## [2.24.1](https://github.com/googleapis/java-datastore/compare/v2.24.0...v2.24.1) (2024-10-28) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.39.0 ([#1640](https://github.com/googleapis/java-datastore/issues/1640)) ([fe61f66](https://github.com/googleapis/java-datastore/commit/fe61f6691a5e3c8fbfc974b6fe613a69652241ca)) +* Update googleapis/sdk-platform-java action to v2.49.0 ([#1638](https://github.com/googleapis/java-datastore/issues/1638)) ([57598d7](https://github.com/googleapis/java-datastore/commit/57598d7d59cd6917f23a653403613e4edc160c64)) + +## [2.24.0](https://github.com/googleapis/java-datastore/compare/v2.23.0...v2.24.0) (2024-10-24) + + +### Features + +* Add FindNearest API to the stable branch ([3512ba2](https://github.com/googleapis/java-datastore/commit/3512ba2f1bcd358e3c39c36944e05873b3f25f51)) + + +### Bug Fixes + +* **sample:** Change update entity sample to use transaction ([#1633](https://github.com/googleapis/java-datastore/issues/1633)) ([c44f17a](https://github.com/googleapis/java-datastore/commit/c44f17a7bb93d688367611ee2533c59c940ae61f)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.38.0 ([#1632](https://github.com/googleapis/java-datastore/issues/1632)) ([6453f1e](https://github.com/googleapis/java-datastore/commit/6453f1e44f370a13434ef68295ae5638612032c8)) +* Update googleapis/sdk-platform-java action to v2.48.0 ([#1628](https://github.com/googleapis/java-datastore/issues/1628)) ([d3bce79](https://github.com/googleapis/java-datastore/commit/d3bce79467254b3128a8f16d5754e91d29ece525)) + +## [2.23.0](https://github.com/googleapis/java-datastore/compare/v2.22.0...v2.23.0) (2024-10-14) + + +### Features + +* Support for field update operators in the Datastore API and resolution strategies when there is a conflict at write time ([b299266](https://github.com/googleapis/java-datastore/commit/b299266e42037b731ee7bbba21dbded73a37323c)) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.46.1 ([678eee2](https://github.com/googleapis/java-datastore/commit/678eee2dfb6d447a852edd436137f8ebfbe50d74)) +* **deps:** Update the Java code generator (gapic-generator-java) to 2.47.0 ([b299266](https://github.com/googleapis/java-datastore/commit/b299266e42037b731ee7bbba21dbded73a37323c)) + + +### Dependencies + +* Update sdk platform java dependencies ([#1617](https://github.com/googleapis/java-datastore/issues/1617)) ([6eaff23](https://github.com/googleapis/java-datastore/commit/6eaff23f9de25ae6ad2a4fea67c0b65a243c08fd)) + +## [2.22.0](https://github.com/googleapis/java-datastore/compare/v2.21.3...v2.22.0) (2024-09-26) + + +### Features + +* Add sample code for multiple inequalities indexing consideration query ([#1579](https://github.com/googleapis/java-datastore/issues/1579)) ([1286792](https://github.com/googleapis/java-datastore/commit/1286792d7b49229d698df652cd117d229a5cd97e)) +* Introducing Tracing with OpenTelemetry API [#1537](https://github.com/googleapis/java-datastore/issues/1537) ([#1576](https://github.com/googleapis/java-datastore/issues/1576)) ([5440c22](https://github.com/googleapis/java-datastore/commit/5440c22364074c108450c3a748a6a17d5f1dddda)) + + +### Bug Fixes + +* Update opentelemetry-sdk dependency to be test-only ([#1595](https://github.com/googleapis/java-datastore/issues/1595)) ([9d719e8](https://github.com/googleapis/java-datastore/commit/9d719e809ea830d8602399b72e432580f14ae6bd)) +* Update opentelemetry.version to 1.42.1 to match the BOM version ([#1598](https://github.com/googleapis/java-datastore/issues/1598)) ([23c5c26](https://github.com/googleapis/java-datastore/commit/23c5c2662117370c66c611604c56b878d41f4738)) + + +### Dependencies + +* Update dependency com.google.cloud:gapic-libraries-bom to v1.43.0 ([#1584](https://github.com/googleapis/java-datastore/issues/1584)) ([fae3b74](https://github.com/googleapis/java-datastore/commit/fae3b74eaa3494a27fd43f56435c01e8fc09e5ee)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.36.0 ([#1590](https://github.com/googleapis/java-datastore/issues/1590)) ([2db9e43](https://github.com/googleapis/java-datastore/commit/2db9e439189baf8f97127f6cff1de5d47efb0073)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.36.1 ([#1602](https://github.com/googleapis/java-datastore/issues/1602)) ([e1b7d4b](https://github.com/googleapis/java-datastore/commit/e1b7d4b205312d7d4c2a285f3d1f61388da65c83)) +* Update dependency com.google.guava:guava-testlib to v33.3.1-jre ([#1592](https://github.com/googleapis/java-datastore/issues/1592)) ([5d078a4](https://github.com/googleapis/java-datastore/commit/5d078a4b294d071716f51f0d4b9baa5d65a0fe90)) +* Update dependency com.google.testparameterinjector:test-parameter-injector to v1.17 ([#1585](https://github.com/googleapis/java-datastore/issues/1585)) ([8f74a49](https://github.com/googleapis/java-datastore/commit/8f74a49c5982d00bd168e78671163683f7b41126)) + +## [2.21.3](https://github.com/googleapis/java-datastore/compare/v2.21.2...v2.21.3) (2024-09-11) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.35.0 ([#1561](https://github.com/googleapis/java-datastore/issues/1561)) ([5a79fd8](https://github.com/googleapis/java-datastore/commit/5a79fd8d1202e65c02423fe40402c41af6050efa)) +* Update dependency com.google.errorprone:error_prone_core to v2.31.0 ([#1523](https://github.com/googleapis/java-datastore/issues/1523)) ([8d3af32](https://github.com/googleapis/java-datastore/commit/8d3af322fb56032cd7a9d29e60fd93d1f3e7e632)) +* Update dependency com.google.guava:guava-testlib to v33.3.0-jre ([#1548](https://github.com/googleapis/java-datastore/issues/1548)) ([18ba37f](https://github.com/googleapis/java-datastore/commit/18ba37f60b5b3e69c95f6e55a28daf8c0de82ba9)) +* Update dependency org.easymock:easymock to v5.4.0 ([#1482](https://github.com/googleapis/java-datastore/issues/1482)) ([ee788a1](https://github.com/googleapis/java-datastore/commit/ee788a162841994e09a61bb81b94cbe93353a78e)) + +## [2.21.2](https://github.com/googleapis/java-datastore/compare/v2.21.1...v2.21.2) (2024-08-22) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.34.0 ([#1547](https://github.com/googleapis/java-datastore/issues/1547)) ([8c5f595](https://github.com/googleapis/java-datastore/commit/8c5f5954d88732ab929b4477a3f15b0052adc2ff)) + +## [2.21.1](https://github.com/googleapis/java-datastore/compare/v2.21.0...v2.21.1) (2024-08-06) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.33.0 ([#1531](https://github.com/googleapis/java-datastore/issues/1531)) ([9e52395](https://github.com/googleapis/java-datastore/commit/9e52395f7ee71315331790284d35e7aad2f387ed)) + +## [2.21.0](https://github.com/googleapis/java-datastore/compare/v2.20.2...v2.21.0) (2024-07-31) + + +### Features + +* Enable hermetic library generation ([#1462](https://github.com/googleapis/java-datastore/issues/1462)) ([d142d9c](https://github.com/googleapis/java-datastore/commit/d142d9c95d91c8cadaf696efc12d6136814938ff)) + +## [2.20.2](https://github.com/googleapis/java-datastore/compare/v2.20.1...v2.20.2) (2024-06-28) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.32.0 ([#1492](https://github.com/googleapis/java-datastore/issues/1492)) ([d940c93](https://github.com/googleapis/java-datastore/commit/d940c937959942d753f9215e7ce940ab6742be46)) + +## [2.20.1](https://github.com/googleapis/java-datastore/compare/v2.20.0...v2.20.1) (2024-06-04) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.31.0 ([#1471](https://github.com/googleapis/java-datastore/issues/1471)) ([42c643d](https://github.com/googleapis/java-datastore/commit/42c643d78562c5cbd6c17c29a0a124be8d05198a)) +* Update dependency com.google.errorprone:error_prone_core to v2.28.0 ([#1469](https://github.com/googleapis/java-datastore/issues/1469)) ([e3fac2b](https://github.com/googleapis/java-datastore/commit/e3fac2bf9992fcb2e91319df0520094865de2d49)) +* Update dependency com.google.guava:guava-testlib to v33.2.1-jre ([#1470](https://github.com/googleapis/java-datastore/issues/1470)) ([614e930](https://github.com/googleapis/java-datastore/commit/614e930f2bdccc517d4733e5fb7f3cefad696a20)) + +## [2.20.0](https://github.com/googleapis/java-datastore/compare/v2.19.3...v2.20.0) (2024-05-27) + + +### Features + +* New PropertyMask field which allows partial commits, lookups, and query results ([#1455](https://github.com/googleapis/java-datastore/issues/1455)) ([ff5e397](https://github.com/googleapis/java-datastore/commit/ff5e39775446216b4806f55f14dacb7fc8e8854b)) + + +### Bug Fixes + +* Migrate off TextPrinter's deprecated methods ([#1452](https://github.com/googleapis/java-datastore/issues/1452)) ([c3c1317](https://github.com/googleapis/java-datastore/commit/c3c131735863d71971110e2ac7ac0244ce16ee92)) +* Set the correct database id on the key parent when calling Key#getParent ([#1457](https://github.com/googleapis/java-datastore/issues/1457)) ([992815d](https://github.com/googleapis/java-datastore/commit/992815d9989d04f7b371dfa320ed17894626a07f)) + +## [2.19.3](https://github.com/googleapis/java-datastore/compare/v2.19.2...v2.19.3) (2024-05-16) + + +### Dependencies + +* Update actions/checkout action to v4 ([#1390](https://github.com/googleapis/java-datastore/issues/1390)) ([80dbca1](https://github.com/googleapis/java-datastore/commit/80dbca1246facf21b08d33e5c6a09b9708b6ce63)) +* Update dependency com.google.cloud:sdk-platform-java-config to v3.30.1 ([#1443](https://github.com/googleapis/java-datastore/issues/1443)) ([79f6c46](https://github.com/googleapis/java-datastore/commit/79f6c46bdbabc66082f23e9562ee9541e0fdeac9)) + +## [2.19.2](https://github.com/googleapis/java-datastore/compare/v2.19.1...v2.19.2) (2024-05-03) + + +### Bug Fixes + +* **deps:** Update the Java code generator (gapic-generator-java) to 2.39.0 ([#1406](https://github.com/googleapis/java-datastore/issues/1406)) ([b265fb3](https://github.com/googleapis/java-datastore/commit/b265fb3c3b8ebc972edbe5a7beae816379846dac)) + + +### Dependencies + +* Update dependency com.google.cloud:sdk-platform-java-config to v3.30.0 ([#1426](https://github.com/googleapis/java-datastore/issues/1426)) ([ac3a1c1](https://github.com/googleapis/java-datastore/commit/ac3a1c10f64c8338346f8fb39f4857f47e8fc639)) +* Update dependency com.google.errorprone:error_prone_core to v2.27.0 ([#1411](https://github.com/googleapis/java-datastore/issues/1411)) ([a3f5a2c](https://github.com/googleapis/java-datastore/commit/a3f5a2c24bff408479541e08278e888cf3166727)) +* Update dependency com.google.errorprone:error_prone_core to v2.27.1 ([#1421](https://github.com/googleapis/java-datastore/issues/1421)) ([48d7daf](https://github.com/googleapis/java-datastore/commit/48d7dafc0c7a49e95bf41d29865ac872b0de0faf)) +* Update dependency com.google.guava:guava-testlib to v33.2.0-jre ([#1422](https://github.com/googleapis/java-datastore/issues/1422)) ([5a5dfdf](https://github.com/googleapis/java-datastore/commit/5a5dfdfb0855cf485b875ab071b79979d24f98dd)) + ## [2.19.1](https://github.com/googleapis/java-datastore/compare/v2.19.0...v2.19.1) (2024-04-19) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b65dd279c..ff092b68e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -84,7 +84,7 @@ Code in this repo is formatted with [google-java-format](https://github.com/google/google-java-format). To run formatting on your project, you can run: ``` -mvn com.coveo:fmt-maven-plugin:format +mvn com.spotify.fmt:fmt-maven-plugin:format ``` [1]: https://cloud.google.com/docs/authentication/getting-started#creating_a_service_account diff --git a/README.md b/README.md index 3f6f9916c..1c9fdac68 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file: com.google.cloud libraries-bom - 26.38.0 + 26.59.0 pom import @@ -36,13 +36,12 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file: If you are using Maven without the BOM, add this to your dependencies: - ```xml com.google.cloud google-cloud-datastore - 2.19.1 + 2.27.2 ``` @@ -50,22 +49,21 @@ If you are using Maven without the BOM, add this to your dependencies: If you are using Gradle 5.x or later, add this to your dependencies: ```Groovy -implementation platform('com.google.cloud:libraries-bom:26.38.0') +implementation platform('com.google.cloud:libraries-bom:26.59.0') implementation 'com.google.cloud:google-cloud-datastore' ``` If you are using Gradle without BOM, add this to your dependencies: ```Groovy -implementation 'com.google.cloud:google-cloud-datastore:2.19.1' +implementation 'com.google.cloud:google-cloud-datastore:2.28.1' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "2.19.1" +libraryDependencies += "com.google.cloud" % "google-cloud-datastore" % "2.28.1" ``` - ## Authentication @@ -80,7 +78,7 @@ The client application making API calls must be granted [authorization scopes][a ### Prerequisites You will need a [Google Cloud Platform Console][developer-console] project with the Cloud Datastore [API enabled][enable-api]. - +You will need to [enable billing][enable-billing] to use Google Cloud Datastore. [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]`. @@ -93,11 +91,7 @@ to add `google-cloud-datastore` as a dependency in your code. ## About Cloud Datastore -[Cloud Datastore][product-docs] is a fully managed, schemaless database for -storing non-relational data. Cloud Datastore automatically scales with -your users and supports ACID transactions, high availability of reads and -writes, strong consistency for reads and ancestor queries, and eventual -consistency for all other queries. +[Cloud Datastore][product-docs] is a fully managed, schemaless database for\nstoring non-relational data. Cloud Datastore automatically scales with\nyour users and supports ACID transactions, high availability of reads and\nwrites, strong consistency for reads and ancestor queries, and eventual\nconsistency for all other queries. See the [Cloud Datastore client library docs][javadocs] to learn how to use this Cloud Datastore Client Library. @@ -210,6 +204,115 @@ running on Compute Engine or from your own desktop. To run the example on App En the code from the main method to your application's servlet class and change the print statements to display on your webpage. +gRPC Java Datastore Client User Guide +------- +The [Java Datastore client](https://github.com/googleapis/java-datastore) now offers gRPC as a transport layer option with experimental support. Using [gRPC connection pooling](https://grpc.io/docs/guides/performance/) enables distributing RPCs over multiple connections which may improve performance. + +#### Installation Instructions +To use this feature, please upgrade your Java-datastore SDK to version v2.28.0 or a newer release. You can find the latest versions [here](https://github.com/googleapis/java-datastore/releases). + +#### How to Use +To opt-in to the gRPC transport behavior, simply add the below line of code (`setTransportOptions`) to your Datastore client instantiation. + +Example: +```java +DatastoreOptions datastoreOptions = + DatastoreOptions.newBuilder() + .setProjectId("my-project") + .setDatabaseId("my-database") + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .build(); +``` +Setting the transport options explicitly to `GrpcTransportOptions` will signal the client to use gRPC instead of HTTP when making calls to the server. + +To revert back to the existing stable behavior and transport, simply remove the transport options line or replace it with `HttpTransportOptions`. Please note this will require an application rebuild and restart. +Example: +```java +// will default to existing HTTP transport behavior +DatastoreOptions datastoreOptions = DatastoreOptions.newBuilder() + .setProjectId("my-project") + .setDatabaseId("my-database") + .build(); + +// will also default to existing HTTP transport behavior +DatastoreOptions datastoreOptions = + DatastoreOptions.newBuilder() + .setProjectId("my-project") + .setDatabaseId("my-database") + .setTransportOptions(HttpTransportOptions.newBuilder() + .setConnectTimeout(1000) + .build()).build(); +``` + +Note: client instantiations that already use `setTransportOptions` with `HttpTransportOptions` will continue to have the same behavior. Only transports that are explicitly set to gRPC will change. + +#### Verify Datastore Transport Options Type +To verify which type of TransportOptions you have successfully configured, you can use the below lines of code to compare transport options type: +```java +// checks if using gRPC transport options +boolean isGRPC = datastore.getOptions().getTransportOptions() instanceof GrpcTransportOptions; + +// checks if using HTTP transport options +boolean isHTTP = datastore.getOptions().getTransportOptions() instanceof HTTPTransportOptions; +``` + +#### New Features +There are new gRPC specific features available to use in this update. + +##### Connection Pool +A connection pool, also known as a channel pool, is a cache of database connections that are shared and reused to improve connection latency and performance. With this update, now you will be able to configure the channel pool to improve application performance. This section guides you in determining the optimal connection pool size and configuring it within the Java datastore client. +To customize the number of channels your client uses, you can update the channel provider in the DatastoreOptions. +###### Determine the best connection pool size +The default connection pool size is right for most applications, and in most cases there's no need to change it. + +However sometimes you may want to change your connection pool size due to high throughput or buffered requests. Ideally, to leave room for traffic fluctuations, a connection pool has about twice the number of connections it takes for maximum saturation. Because a connection can handle a maximum of 100 concurrent requests, between 10 and 50 outstanding requests per connection is optimal. The limit of 100 concurrent streams per gRPC connection is enforced in Google's middleware layer, and you are not able to reconfigure this number. + +The following steps help you calculate the optimal number of connections in your channel pool using estimate per-client QPS and average latency numbers. + +To calculate the optimal connections, gather the following information: + +1. The maximum number of queries per second (QPS) per client when your application is running a typical workload. +2. The average latency (the response time for a single request) in ms. +3. Determine the number of requests that you can send serially per second by dividing 1,000 by the average latency value. +4. Divide the QPS in seconds by the number of serial requests per second. +5. Divide the result by 50 requests per channel to determine the minimum optimal channel pool size. (If your calculation is less than 2, use at least 2 channels anyway, to ensure redundancy.) +6. Divide the same result by 10 requests per channel to determine the maximum optimal channel pool size. + +These steps are expressed in the following equations: +```java +(QPS ÷ (1,000 ÷ latency ms)) ÷ 50 streams = Minimum optimal number of connections +(QPS ÷ (1,000 ÷ latency ms)) ÷ 10 streams = Maximum optimal number of connections +``` + +###### Example +Your application typically sends 50,000 requests per second, and the average latency is 10 ms. Divide 1,000 by 10 ms to determine that you can send 100 requests serially per second. +Divide that number into 50,000 to get the parallelism needed to send 50,000 QPS: 500. Each channel can have at most 100 requests out concurrently, and your target channel utilization +is between 10 and 50 concurrent streams. Therefore, to calculate the minimum, divide 500 by 50 to get 10. To find the maximum, divide 500 by 10 to get 50. This means that your channel +pool size for this example should be between 10 and 50 connections. + +It is also important to monitor your traffic after making changes and adjust the number of connections in your pool if necessary. + +###### Set the pool size +The following code sample demonstrates how to configure the channel pool in the client libraries using `DatastoreOptions`. +See [ChannelPoolSettings](https://cloud.google.com/java/docs/reference/gax/latest/com.google.api.gax.grpc.ChannelPoolSettings) and [Performance Best Practices](https://grpc.io/docs/guides/performance/) for more information on channel pools and best practices for performance. + +Code Example +```java +InstantiatingGrpcChannelProvider channelProvider = + DatastoreSettings.defaultGrpcTransportProviderBuilder() + .setChannelPoolSettings( + ChannelPoolSettings.builder() + .setInitialChannelCount(MIN_VAL) + .setMaxChannelCount(MAX_VAL) + .build()) + .build(); + +DatastoreOptions options = DatastoreOptions.newBuilder() + .setProjectId("my-project") + .setChannelProvider(channelProvider) + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .build(); +``` Testing ------- @@ -260,7 +363,6 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-datastore/tre | Sample | Source Code | Try it | | --------------------------- | --------------------------------- | ------ | -| Native Image Datastore Sample | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/native-image-sample/src/main/java/com/example/datastore/NativeImageDatastoreSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/native-image-sample/src/main/java/com/example/datastore/NativeImageDatastoreSample.java) | | Quickstart Sample | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/QuickstartSample.java) | | Avg Aggregation On Kind | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/AvgAggregationOnKind.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/aggregation/AvgAggregationOnKind.java) | | Avg Aggregation With Limit | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/AvgAggregationWithLimit.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/aggregation/AvgAggregationWithLimit.java) | @@ -279,7 +381,9 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-datastore/tre | Sum Aggregation With Limit | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithLimit.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithLimit.java) | | Sum Aggregation With Order By | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithOrderBy.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithOrderBy.java) | | Sum Aggregation With Property Filter | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithPropertyFilter.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/aggregation/SumAggregationWithPropertyFilter.java) | +| Indexing Consideration Query | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/filters/IndexingConsiderationQuery.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/filters/IndexingConsiderationQuery.java) | | Create a union between two filters | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/filters/OrFilterQuery.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/filters/OrFilterQuery.java) | +| Order Fields Query | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/filters/OrderFieldsQuery.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/filters/OrderFieldsQuery.java) | | Query Profile Explain | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplain.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplain.java) | | Query Profile Explain Aggregation | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAggregation.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAggregation.java) | | Query Profile Explain Analyze | [source code](https://github.com/googleapis/java-datastore/blob/main/samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyze.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-datastore&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/datastore/queryprofile/QueryProfileExplainAnalyze.java) | @@ -292,6 +396,10 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-datastore/tre To get help, follow the instructions in the [shared Troubleshooting document][troubleshooting]. +## Transport + +Cloud Datastore uses both gRPC and HTTP/JSON for the transport layer. + ## Supported Java Versions Java 8 or above is required for using this client. @@ -384,7 +492,7 @@ Java is a registered trademark of Oracle and/or its affiliates. [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-datastore/java11.html [stability-image]: https://img.shields.io/badge/stability-stable-green [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-datastore.svg -[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-datastore/2.19.1 +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-datastore/2.28.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 @@ -396,7 +504,7 @@ Java is a registered trademark of Oracle and/or its affiliates. [contributing]: https://github.com/googleapis/java-datastore/blob/main/CONTRIBUTING.md [code-of-conduct]: https://github.com/googleapis/java-datastore/blob/main/CODE_OF_CONDUCT.md#contributor-code-of-conduct [license]: https://github.com/googleapis/java-datastore/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=datastore.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 diff --git a/datastore-v1-proto-client/pom.xml b/datastore-v1-proto-client/pom.xml index e136a9d8c..32e5dc65c 100644 --- a/datastore-v1-proto-client/pom.xml +++ b/datastore-v1-proto-client/pom.xml @@ -19,12 +19,12 @@ 4.0.0 com.google.cloud.datastore datastore-v1-proto-client - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT com.google.cloud google-cloud-datastore-parent - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT jar @@ -98,7 +98,7 @@ com.google.truth truth - 1.4.2 + 1.4.4 test diff --git a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreEmulator.java b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreEmulator.java index 2fb11ebe8..dcca102a1 100644 --- a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreEmulator.java +++ b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreEmulator.java @@ -262,6 +262,7 @@ public synchronized File getProjectDirectory() { static class StartupMonitor extends Thread { private final InputStream inputStream; private volatile boolean success = false; + /** This latch will reach 0 once server startup has completed. */ private final CountDownLatch startupCompleteLatch = new CountDownLatch(1); diff --git a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreException.java b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreException.java index 400e63308..b283603fb 100644 --- a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreException.java +++ b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreException.java @@ -28,12 +28,16 @@ public DatastoreException(String methodName, Code code, String message, Throwabl this.code = code; } - /** @return the canonical error code */ + /** + * @return the canonical error code + */ public Code getCode() { return code; } - /** @return the datastore method name */ + /** + * @return the datastore method name + */ public String getMethodName() { return methodName; } diff --git a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreHelper.java b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreHelper.java index 23ac315b5..239673061 100644 --- a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreHelper.java +++ b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/DatastoreHelper.java @@ -336,7 +336,9 @@ private static void setProjectEndpointFromEnv(DatastoreOptions.Builder options) return; } - /** @see #getOptionsFromEnv() */ + /** + * @see #getOptionsFromEnv() + */ public static Datastore getDatastoreFromEnv() throws GeneralSecurityException, IOException { return DatastoreFactory.get().create(getOptionsFromEnv().build()); } diff --git a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/EndToEndChecksumHandler.java b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/EndToEndChecksumHandler.java index 3f840a8ba..339fe4878 100644 --- a/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/EndToEndChecksumHandler.java +++ b/datastore-v1-proto-client/src/main/java/com/google/datastore/v1/client/EndToEndChecksumHandler.java @@ -24,6 +24,7 @@ class EndToEndChecksumHandler { /** The checksum http header on http requests */ static final String HTTP_REQUEST_CHECKSUM_HEADER = "x-request-checksum-348659783"; + /** The checksum http header on http responses */ static final String HTTP_RESPONSE_CHECKSUM_HEADER = "x-response-checksum-348659783"; diff --git a/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/QuerySplitterTest.java b/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/QuerySplitterTest.java index b064e137a..0802a62aa 100644 --- a/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/QuerySplitterTest.java +++ b/datastore-v1-proto-client/src/test/java/com/google/datastore/v1/client/QuerySplitterTest.java @@ -101,8 +101,7 @@ public void disallowsSortOrder() { public void disallowsMultipleKinds() { Datastore datastore = factory.create(options.build()); Query queryWithMultipleKinds = - query - .toBuilder() + query.toBuilder() .addKind(KindExpression.newBuilder().setName("another-kind").build()) .build(); IllegalArgumentException exception = @@ -129,8 +128,7 @@ public void disallowsKindlessQuery() { public void disallowsInequalityFilter() { Datastore datastore = factory.create(options.build()); Query queryWithInequality = - query - .toBuilder() + query.toBuilder() .setFilter(makeFilter("foo", Operator.GREATER_THAN, makeValue("value"))) .build(); IllegalArgumentException exception = @@ -177,16 +175,13 @@ public void getSplits() throws Exception { assertThat(splittedQueries) .containsExactly( - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, null, splitKey1)) .build(), - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey1, splitKey3)) .build(), - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey3, null)) .build()); @@ -229,16 +224,13 @@ public void getSplitsWithDatabaseId() throws Exception { assertThat(splitQueries) .containsExactly( - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, null, splitKey1)) .build(), - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey1, splitKey3)) .build(), - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey3, null)) .build()); @@ -277,12 +269,10 @@ public void notEnoughSplits() throws Exception { assertThat(splittedQueries) .containsExactly( - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, null, splitKey0)) .build(), - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey0, null)) .build()); @@ -325,16 +315,13 @@ public void getSplits_withReadTime() throws Exception { assertThat(splittedQueries) .containsExactly( - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, null, splitKey1)) .build(), - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey1, splitKey3)) .build(), - query - .toBuilder() + query.toBuilder() .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey3, null)) .build()); diff --git a/generation_config.yaml b/generation_config.yaml new file mode 100644 index 000000000..c7f6ff188 --- /dev/null +++ b/generation_config.yaml @@ -0,0 +1,25 @@ +gapic_generator_version: 2.56.2 +googleapis_commitish: ce291b3bc967923f89e0e54ed33d18802672b171 +libraries_bom_version: 26.59.0 +libraries: + - api_shortname: datastore + name_pretty: Cloud Datastore + product_documentation: https://cloud.google.com/datastore + client_documentation: https://cloud.google.com/java/docs/reference/google-cloud-datastore/latest/history + issue_tracker: https://issuetracker.google.com/savedsearches/559768 + release_level: stable + language: java + repo: googleapis/java-datastore + repo_short: java-datastore + distribution_name: com.google.cloud:google-cloud-datastore + codeowner_team: '@googleapis/cloud-native-db-dpes @googleapis/api-datastore-sdk @googleapis/api-firestore-partners' + api_id: datastore.googleapis.com + library_type: GAPIC_COMBO + api_description: is a fully managed, schemaless database for\nstoring non-relational data. Cloud Datastore automatically scales with\nyour users and supports ACID transactions, high availability of reads and\nwrites, strong consistency for reads and ancestor queries, and eventual\nconsistency for all other queries. + excluded_dependencies: grpc-google-cloud-datastore-v1 + extra_versioned_modules: datastore-v1-proto-client + excluded_poms: grpc-google-cloud-datastore-v1 + recommended_package: com.google.cloud.datastore + GAPICs: + - proto_path: google/datastore/v1 + - proto_path: google/datastore/admin/v1 diff --git a/google-cloud-datastore-bom/pom.xml b/google-cloud-datastore-bom/pom.xml index 2651713e3..6842d693e 100644 --- a/google-cloud-datastore-bom/pom.xml +++ b/google-cloud-datastore-bom/pom.xml @@ -3,12 +3,12 @@ 4.0.0 com.google.cloud google-cloud-datastore-bom - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT pom com.google.cloud sdk-platform-java-config - 3.29.0 + 3.47.0 Google Cloud datastore BOM @@ -52,22 +52,22 @@ com.google.cloud google-cloud-datastore - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-datastore-admin-v1 - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT com.google.api.grpc proto-google-cloud-datastore-v1 - 0.110.2-SNAPSHOT + 0.119.2-SNAPSHOT com.google.api.grpc proto-google-cloud-datastore-admin-v1 - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT diff --git a/google-cloud-datastore-utils/pom.xml b/google-cloud-datastore-utils/pom.xml new file mode 100644 index 000000000..0360a44a6 --- /dev/null +++ b/google-cloud-datastore-utils/pom.xml @@ -0,0 +1,111 @@ + + + 4.0.0 + com.google.cloud + google-cloud-datastore-utils + 2.28.2-SNAPSHOT + jar + Google Cloud Datastore Utilities + https://github.com/googleapis/java-datastore + + Java datastore client utility library. + + + com.google.cloud + google-cloud-datastore-parent + 2.28.2-SNAPSHOT + + + google-cloud-datastore-utils + + + + com.google.api-client + google-api-client + + + com.google.http-client + google-http-client-protobuf + + + com.google.http-client + google-http-client-gson + + + com.google.api.grpc + proto-google-cloud-datastore-v1 + + + com.google.api + api-common + + + com.google.protobuf + protobuf-java + + + com.google.guava + guava + + + com.google.api.grpc + proto-google-common-protos + + + com.google.http-client + google-http-client + + + com.google.http-client + google-http-client-jackson2 + + + com.google.oauth-client + google-oauth-client + + + com.google.code.findbugs + jsr305 + + + + junit + junit + test + + + com.google.truth + truth + 1.4.2 + test + + + org.checkerframework + checker-qual + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + -Xmx2048m + + + + + + + + native + + + true + + + + diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/Datastore.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/Datastore.java new file mode 100644 index 000000000..d66e9ce60 --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/Datastore.java @@ -0,0 +1,136 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import com.google.datastore.v1.*; +import com.google.rpc.Code; +import java.io.IOException; +import java.io.InputStream; + +/** + * Provides access to Cloud Datastore. + * + *

This class is thread-safe. + */ +public class Datastore { + + final RemoteRpc remoteRpc; + + Datastore(RemoteRpc remoteRpc) { + this.remoteRpc = remoteRpc; + } + + /** Reset the RPC count. */ + public void resetRpcCount() { + remoteRpc.resetRpcCount(); + } + + /** + * Returns the number of RPC calls made since the client was created or {@link #resetRpcCount} was + * called. + */ + public int getRpcCount() { + return remoteRpc.getRpcCount(); + } + + private com.google.datastore.utils.DatastoreException invalidResponseException( + String method, IOException exception) { + return RemoteRpc.makeException( + remoteRpc.getUrl(), method, Code.UNAVAILABLE, "Invalid response", exception); + } + + public AllocateIdsResponse allocateIds(AllocateIdsRequest request) + throws com.google.datastore.utils.DatastoreException { + try (InputStream is = + remoteRpc.call("allocateIds", request, request.getProjectId(), request.getDatabaseId())) { + return AllocateIdsResponse.parseFrom(is); + } catch (IOException exception) { + throw invalidResponseException("allocateIds", exception); + } + } + + public BeginTransactionResponse beginTransaction(BeginTransactionRequest request) + throws com.google.datastore.utils.DatastoreException { + try (InputStream is = + remoteRpc.call( + "beginTransaction", request, request.getProjectId(), request.getDatabaseId())) { + return BeginTransactionResponse.parseFrom(is); + } catch (IOException exception) { + throw invalidResponseException("beginTransaction", exception); + } + } + + public CommitResponse commit(CommitRequest request) + throws com.google.datastore.utils.DatastoreException { + try (InputStream is = + remoteRpc.call("commit", request, request.getProjectId(), request.getDatabaseId())) { + return CommitResponse.parseFrom(is); + } catch (IOException exception) { + throw invalidResponseException("commit", exception); + } + } + + public LookupResponse lookup(LookupRequest request) + throws com.google.datastore.utils.DatastoreException { + try (InputStream is = + remoteRpc.call("lookup", request, request.getProjectId(), request.getDatabaseId())) { + return LookupResponse.parseFrom(is); + } catch (IOException exception) { + throw invalidResponseException("lookup", exception); + } + } + + public ReserveIdsResponse reserveIds(ReserveIdsRequest request) + throws com.google.datastore.utils.DatastoreException { + try (InputStream is = + remoteRpc.call("reserveIds", request, request.getProjectId(), request.getDatabaseId())) { + return ReserveIdsResponse.parseFrom(is); + } catch (IOException exception) { + throw invalidResponseException("reserveIds", exception); + } + } + + public RollbackResponse rollback(RollbackRequest request) + throws com.google.datastore.utils.DatastoreException { + try (InputStream is = + remoteRpc.call("rollback", request, request.getProjectId(), request.getDatabaseId())) { + return RollbackResponse.parseFrom(is); + } catch (IOException exception) { + throw invalidResponseException("rollback", exception); + } + } + + public RunQueryResponse runQuery(RunQueryRequest request) + throws com.google.datastore.utils.DatastoreException { + try (InputStream is = + remoteRpc.call("runQuery", request, request.getProjectId(), request.getDatabaseId())) { + return RunQueryResponse.parseFrom(is); + } catch (IOException exception) { + throw invalidResponseException("runQuery", exception); + } + } + + public RunAggregationQueryResponse runAggregationQuery(RunAggregationQueryRequest request) + throws DatastoreException { + try (InputStream is = + remoteRpc.call( + "runAggregationQuery", request, request.getProjectId(), request.getDatabaseId())) { + return RunAggregationQueryResponse.parseFrom(is); + } catch (IOException exception) { + throw invalidResponseException("runAggregationQuery", exception); + } + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreException.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreException.java new file mode 100644 index 000000000..67dbc1f9a --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreException.java @@ -0,0 +1,49 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import com.google.rpc.Code; + +/** Indicates an error in a {@link Datastore} call. */ +public class DatastoreException extends Exception { + private final String methodName; + private final Code code; + + public DatastoreException(String methodName, Code code, String message, Throwable cause) { + super(message, cause); + this.methodName = methodName; + this.code = code; + } + + /** + * @return the canonical error code + */ + public Code getCode() { + return code; + } + + /** + * @return the datastore method name + */ + public String getMethodName() { + return methodName; + } + + @Override + public String toString() { + return String.format("%s, code=%s", super.toString(), code); + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreFactory.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreFactory.java new file mode 100644 index 000000000..2befe276e --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreFactory.java @@ -0,0 +1,127 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import static com.google.common.base.Preconditions.checkNotNull; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.http.HttpRequestFactory; +import com.google.api.client.http.HttpTransport; +import com.google.api.client.http.javanet.NetHttpTransport; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Arrays; +import java.util.logging.*; + +/** Client factory for {@link com.google.datastore.utils.Datastore}. */ +public class DatastoreFactory { + + // Lazy load this because we might be running inside App Engine and this + // class isn't on the whitelist. + private static ConsoleHandler methodHandler; + + /** API version. */ + public static final String VERSION = "v1"; + + public static final String DEFAULT_HOST = "https://datastore.googleapis.com"; + + /** Singleton factory instance. */ + private static final DatastoreFactory INSTANCE = new DatastoreFactory(); + + public static DatastoreFactory get() { + return INSTANCE; + } + + /** + * Provides access to a datastore using the provided options. Logs into the application using the + * credentials available via these options. + * + * @throws IllegalArgumentException if the server or credentials weren't provided. + */ + public com.google.datastore.utils.Datastore create( + com.google.datastore.utils.DatastoreOptions options) { + return new com.google.datastore.utils.Datastore(newRemoteRpc(options)); + } + + /** Constructs a Google APIs HTTP client with the associated credentials. */ + public HttpRequestFactory makeClient(com.google.datastore.utils.DatastoreOptions options) { + Credential credential = options.getCredential(); + HttpTransport transport = options.getTransport(); + if (transport == null) { + transport = credential == null ? new NetHttpTransport() : credential.getTransport(); + transport = transport == null ? new NetHttpTransport() : transport; + } + return transport.createRequestFactory(credential); + } + + /** Starts logging datastore method calls to the console. (Useful within tests.) */ + public static void logMethodCalls() { + Logger logger = Logger.getLogger(Datastore.class.getName()); + logger.setLevel(Level.FINE); + if (!Arrays.asList(logger.getHandlers()).contains(getStreamHandler())) { + logger.addHandler(getStreamHandler()); + } + } + + /** Build a valid datastore URL. */ + String buildProjectEndpoint(com.google.datastore.utils.DatastoreOptions options) { + if (options.getProjectEndpoint() != null) { + return options.getProjectEndpoint(); + } + // DatastoreOptions ensures either project endpoint or project ID is set. + String projectId = checkNotNull(options.getProjectId()); + if (options.getHost() != null) { + return validateUrl( + String.format("https://%s/%s/projects/%s", options.getHost(), VERSION, projectId)); + } else if (options.getLocalHost() != null) { + return validateUrl( + String.format("http://%s/%s/projects/%s", options.getLocalHost(), VERSION, projectId)); + } + return validateUrl(String.format("%s/%s/projects/%s", DEFAULT_HOST, VERSION, projectId)); + } + + protected com.google.datastore.utils.RemoteRpc newRemoteRpc(DatastoreOptions options) { + checkNotNull(options); + HttpRequestFactory client = makeClient(options); + return new com.google.datastore.utils.RemoteRpc( + client, options.getInitializer(), buildProjectEndpoint(options)); + } + + private static String validateUrl(String url) { + try { + return new URI(url).toString(); + } catch (URISyntaxException e) { + throw new IllegalArgumentException(e); + } + } + + // TODO: Support something other than console handler for when we're + // running in App Engine + private static synchronized StreamHandler getStreamHandler() { + if (methodHandler == null) { + methodHandler = new ConsoleHandler(); + methodHandler.setFormatter( + new Formatter() { + @Override + public String format(LogRecord record) { + return record.getMessage() + "\n"; + } + }); + methodHandler.setLevel(Level.FINE); + } + return methodHandler; + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreHelper.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreHelper.java new file mode 100644 index 000000000..a937dffad --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreHelper.java @@ -0,0 +1,731 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; +import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; +import com.google.api.client.http.GenericUrl; +import com.google.api.client.http.HttpRequest; +import com.google.api.client.http.HttpTransport; +import com.google.api.client.json.JsonFactory; +import com.google.api.client.json.gson.GsonFactory; +import com.google.datastore.v1.ArrayValue; +import com.google.datastore.v1.CompositeFilter; +import com.google.datastore.v1.Entity; +import com.google.datastore.v1.Filter; +import com.google.datastore.v1.Key; +import com.google.datastore.v1.Key.PathElement; +import com.google.datastore.v1.Key.PathElement.IdTypeCase; +import com.google.datastore.v1.Mutation; +import com.google.datastore.v1.PartitionId; +import com.google.datastore.v1.PropertyFilter; +import com.google.datastore.v1.PropertyOrder; +import com.google.datastore.v1.PropertyReference; +import com.google.datastore.v1.Value; +import com.google.datastore.v1.Value.ValueTypeCase; +import com.google.protobuf.ByteString; +import com.google.protobuf.Timestamp; +import com.google.protobuf.TimestampOrBuilder; +import com.google.type.LatLng; +import java.io.File; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.security.PrivateKey; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicReference; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; + +/** Helper methods for {@link Datastore}. */ +// TODO: Accept OrBuilders when possible. +public final class DatastoreHelper { + private static final Logger logger = + Logger.getLogger(com.google.datastore.utils.DatastoreHelper.class.getName()); + + private static final int MICROSECONDS_PER_SECOND = 1000 * 1000; + private static final int NANOSECONDS_PER_MICROSECOND = 1000; + + /** The property used in the Datastore to give us a random distribution. * */ + public static final String SCATTER_PROPERTY_NAME = "__scatter__"; + + /** The property used in the Datastore to get the key of the entity. * */ + public static final String KEY_PROPERTY_NAME = "__key__"; + + /** Name of the environment variable used to set the project ID. */ + public static final String PROJECT_ID_ENV_VAR = "DATASTORE_PROJECT_ID"; + + /** Name of the environment variable used to set the local host. */ + public static final String LOCAL_HOST_ENV_VAR = "DATASTORE_EMULATOR_HOST"; + + /** Name of the environment variable used to set the service account. */ + public static final String SERVICE_ACCOUNT_ENV_VAR = "DATASTORE_SERVICE_ACCOUNT"; + + /** Name of the environment variable used to set the private key file. */ + public static final String PRIVATE_KEY_FILE_ENV_VAR = "DATASTORE_PRIVATE_KEY_FILE"; + + private static final String URL_OVERRIDE_ENV_VAR = "__DATASTORE_URL_OVERRIDE"; + + private static final AtomicReference projectIdFromComputeEngine = new AtomicReference<>(); + + /** Comparator for Keys */ + private static final class KeyComparator implements Comparator { + + static final com.google.datastore.utils.DatastoreHelper.KeyComparator INSTANCE = + new com.google.datastore.utils.DatastoreHelper.KeyComparator(); + + private int comparePathElement(PathElement thisElement, PathElement otherElement) { + int result = thisElement.getKind().compareTo(otherElement.getKind()); + if (result != 0) { + return result; + } + if (thisElement.getIdTypeCase() == IdTypeCase.ID) { + if (otherElement.getIdTypeCase() != IdTypeCase.ID) { + return -1; + } + return Long.valueOf(thisElement.getId()).compareTo(otherElement.getId()); + } + if (otherElement.getIdTypeCase() == IdTypeCase.ID) { + return 1; + } + + return thisElement.getName().compareTo(otherElement.getName()); + } + + @Override + public int compare(Key thisKey, Key otherKey) { + if (!thisKey.getPartitionId().equals(otherKey.getPartitionId())) { + throw new IllegalArgumentException("Cannot compare keys with different partition ids."); + } + + Iterator thisPath = thisKey.getPathList().iterator(); + Iterator otherPath = otherKey.getPathList().iterator(); + while (thisPath.hasNext()) { + if (!otherPath.hasNext()) { + return 1; + } + int result = comparePathElement(thisPath.next(), otherPath.next()); + if (result != 0) { + return result; + } + } + + return otherPath.hasNext() ? -1 : 0; + } + } + + private DatastoreHelper() {} + + private static HttpTransport newTransport() throws GeneralSecurityException, IOException { + return GoogleNetHttpTransport.newTrustedTransport(); + } + + static JsonFactory newJsonFactory() { + return new GsonFactory(); + } + + /** + * Constructs credentials for the given account and key. + * + * @param serviceAccountId service account ID (typically an e-mail address). + * @param privateKeyFile the file name from which to get the private key. + * @return valid credentials or {@code null} + */ + public static Credential getServiceAccountCredential( + String serviceAccountId, String privateKeyFile) throws GeneralSecurityException, IOException { + return getServiceAccountCredential(serviceAccountId, privateKeyFile, DatastoreOptions.SCOPES); + } + + /** + * Constructs credentials for the given account and key file. + * + * @param serviceAccountId service account ID (typically an e-mail address). + * @param privateKeyFile the file name from which to get the private key. + * @param serviceAccountScopes Collection of OAuth scopes to use with the the service account flow + * or {@code null} if not. + * @return valid credentials or {@code null} + */ + public static Credential getServiceAccountCredential( + String serviceAccountId, String privateKeyFile, Collection serviceAccountScopes) + throws GeneralSecurityException, IOException { + return getCredentialBuilderWithoutPrivateKey(serviceAccountId, serviceAccountScopes) + .setServiceAccountPrivateKeyFromP12File(new File(privateKeyFile)) + .build(); + } + + /** + * Constructs credentials for the given account and key. + * + * @param serviceAccountId service account ID (typically an e-mail address). + * @param privateKey the private key for the given account. + * @param serviceAccountScopes Collection of OAuth scopes to use with the the service account flow + * or {@code null} if not. + * @return valid credentials or {@code null} + */ + public static Credential getServiceAccountCredential( + String serviceAccountId, PrivateKey privateKey, Collection serviceAccountScopes) + throws GeneralSecurityException, IOException { + return getCredentialBuilderWithoutPrivateKey(serviceAccountId, serviceAccountScopes) + .setServiceAccountPrivateKey(privateKey) + .build(); + } + + private static GoogleCredential.Builder getCredentialBuilderWithoutPrivateKey( + String serviceAccountId, Collection serviceAccountScopes) + throws GeneralSecurityException, IOException { + HttpTransport transport = newTransport(); + JsonFactory jsonFactory = newJsonFactory(); + return new GoogleCredential.Builder() + .setTransport(transport) + .setJsonFactory(jsonFactory) + .setServiceAccountId(serviceAccountId) + .setServiceAccountScopes(serviceAccountScopes); + } + + /** + * Constructs a {@link Datastore} from environment variables and/or the Compute Engine metadata + * server. + * + *

The project ID is determined from, in order of preference: + * + *

    + *
  • DATASTORE_PROJECT_ID environment variable + *
  • Compute Engine + *
+ * + *

Credentials are taken from, in order of preference: + * + *

    + *
  1. No credentials (if the DATASTORE_EMULATOR_HOST environment variable is set) + *
  2. Service Account specified by the DATASTORE_SERVICE_ACCOUNT and DATASTORE_PRIVATE_KEY_FILE + * environment variables + *
  3. Google Application Default as described here. + *
+ */ + public static DatastoreOptions.Builder getOptionsFromEnv() + throws GeneralSecurityException, IOException { + DatastoreOptions.Builder options = new DatastoreOptions.Builder(); + setProjectEndpointFromEnv(options); + options.credential(getCredentialFromEnv()); + return options; + } + + private static Credential getCredentialFromEnv() throws GeneralSecurityException, IOException { + if (System.getenv(LOCAL_HOST_ENV_VAR) != null) { + logger.log( + Level.INFO, + "{0} environment variable was set. Not using credentials.", + new Object[] {LOCAL_HOST_ENV_VAR}); + return null; + } + String serviceAccount = System.getenv(SERVICE_ACCOUNT_ENV_VAR); + String privateKeyFile = System.getenv(PRIVATE_KEY_FILE_ENV_VAR); + if (serviceAccount != null && privateKeyFile != null) { + logger.log( + Level.INFO, + "{0} and {1} environment variables were set. " + "Using service account credential.", + new Object[] {SERVICE_ACCOUNT_ENV_VAR, PRIVATE_KEY_FILE_ENV_VAR}); + return getServiceAccountCredential(serviceAccount, privateKeyFile); + } + return GoogleCredential.getApplicationDefault().createScoped(DatastoreOptions.SCOPES); + } + + /** + * Determines the project id from the environment. Uses the following sources in order of + * preference: + * + *
    + *
  1. Value of the DATASTORE_PROJECT_ID environment variable + *
  2. Compute Engine + *
+ * + * @throws IllegalStateException if the project ID cannot be determined + */ + private static String getProjectIdFromEnv() { + if (System.getenv(PROJECT_ID_ENV_VAR) != null) { + return System.getenv(PROJECT_ID_ENV_VAR); + } + String projectIdFromComputeEngine = getProjectIdFromComputeEngine(); + if (projectIdFromComputeEngine != null) { + return projectIdFromComputeEngine; + } + throw new IllegalStateException( + String.format( + "Could not determine project ID." + + " If you are not running on Compute Engine, set the" + + " %s environment variable.", + PROJECT_ID_ENV_VAR)); + } + + /** + * Gets the project ID from the Compute Engine metadata server. Returns {@code null} if the + * project ID cannot be determined (because, for instance, the code is not running on Compute + * Engine). + */ + @Nullable + public static String getProjectIdFromComputeEngine() { + String cachedProjectId = projectIdFromComputeEngine.get(); + return cachedProjectId != null ? cachedProjectId : queryProjectIdFromComputeEngine(); + } + + @Nullable + private static String queryProjectIdFromComputeEngine() { + HttpTransport transport; + + try { + transport = newTransport(); + } catch (GeneralSecurityException | IOException e) { + logger.log(Level.WARNING, "Failed to create HttpTransport.", e); + return null; + } + + try { + GenericUrl projectIdUrl = + new GenericUrl("http://metadata/computeMetadata/v1/project/project-id"); + HttpRequest request = transport.createRequestFactory().buildGetRequest(projectIdUrl); + request.getHeaders().set("Metadata-Flavor", "Google"); + String result = request.execute().parseAsString(); + projectIdFromComputeEngine.set(result); + return result; + } catch (IOException e) { + logger.log(Level.INFO, "Could not determine project ID from Compute Engine.", e); + return null; + } + } + + private static void setProjectEndpointFromEnv(DatastoreOptions.Builder options) { + // DATASTORE_HOST is deprecated. + if (System.getenv("DATASTORE_HOST") != null) { + logger.warning( + String.format( + "Ignoring value of environment variable DATASTORE_HOST. " + + "To point datastore to a host running locally, use " + + "the environment variable %s.", + LOCAL_HOST_ENV_VAR)); + } + String projectId = getProjectIdFromEnv(); + if (System.getenv(URL_OVERRIDE_ENV_VAR) != null) { + options.projectEndpoint( + String.format("%s/projects/%s", System.getenv(URL_OVERRIDE_ENV_VAR), projectId)); + return; + } + if (System.getenv(LOCAL_HOST_ENV_VAR) != null) { + options.projectId(projectId); + options.localHost(System.getenv(LOCAL_HOST_ENV_VAR)); + return; + } + options.projectId(projectId); + return; + } + + /** + * @see #getOptionsFromEnv() + */ + public static Datastore getDatastoreFromEnv() throws GeneralSecurityException, IOException { + return DatastoreFactory.get().create(getOptionsFromEnv().build()); + } + + /** + * Gets a {@link com.google.datastore.utils.QuerySplitter}. + * + *

The returned {@link com.google.datastore.utils.QuerySplitter#getSplits} cannot accept a + * query that contains inequality filters, a sort filter, or a missing kind. + */ + public static QuerySplitter getQuerySplitter() { + return com.google.datastore.utils.QuerySplitterImpl.INSTANCE; + } + + public static Comparator getKeyComparator() { + return com.google.datastore.utils.DatastoreHelper.KeyComparator.INSTANCE; + } + + /** Make a sort order for use in a query. */ + public static PropertyOrder.Builder makeOrder( + String property, PropertyOrder.Direction direction) { + return PropertyOrder.newBuilder() + .setProperty(makePropertyReference(property)) + .setDirection(direction); + } + + /** Makes an ancestor filter. */ + public static Filter.Builder makeAncestorFilter(Key ancestor) { + return makeFilter( + com.google.datastore.utils.DatastoreHelper.KEY_PROPERTY_NAME, + PropertyFilter.Operator.HAS_ANCESTOR, + makeValue(ancestor)); + } + + /** Make a filter on a property for use in a query. */ + public static Filter.Builder makeFilter( + String property, PropertyFilter.Operator operator, Value value) { + return Filter.newBuilder() + .setPropertyFilter( + PropertyFilter.newBuilder() + .setProperty(makePropertyReference(property)) + .setOp(operator) + .setValue(value)); + } + + /** Make a filter on a property for use in a query. */ + public static Filter.Builder makeFilter( + String property, PropertyFilter.Operator operator, Value.Builder value) { + return makeFilter(property, operator, value.build()); + } + + /** Make a composite filter from the given sub-filters using AND to combine filters. */ + public static Filter.Builder makeAndFilter(Filter... subfilters) { + return makeAndFilter(Arrays.asList(subfilters)); + } + + /** Make a composite filter from the given sub-filters using AND to combine filters. */ + public static Filter.Builder makeAndFilter(Iterable subfilters) { + return Filter.newBuilder() + .setCompositeFilter( + CompositeFilter.newBuilder() + .addAllFilters(subfilters) + .setOp(CompositeFilter.Operator.AND)); + } + + /** Make a property reference for use in a query. */ + public static PropertyReference.Builder makePropertyReference(String propertyName) { + return PropertyReference.newBuilder().setName(propertyName); + } + + /** Make an array value containing the specified values. */ + public static Value.Builder makeValue(Iterable values) { + return Value.newBuilder().setArrayValue(ArrayValue.newBuilder().addAllValues(values)); + } + + /** Make a list value containing the specified values. */ + public static Value.Builder makeValue(Value value1, Value value2, Value... rest) { + ArrayValue.Builder arrayValue = ArrayValue.newBuilder(); + arrayValue.addValues(value1); + arrayValue.addValues(value2); + arrayValue.addAllValues(Arrays.asList(rest)); + return Value.newBuilder().setArrayValue(arrayValue); + } + + /** Make an array value containing the specified values. */ + public static Value.Builder makeValue( + Value.Builder value1, Value.Builder value2, Value.Builder... rest) { + ArrayValue.Builder arrayValue = ArrayValue.newBuilder(); + arrayValue.addValues(value1); + arrayValue.addValues(value2); + for (Value.Builder builder : rest) { + arrayValue.addValues(builder); + } + return Value.newBuilder().setArrayValue(arrayValue); + } + + /** Make a key value. */ + public static Value.Builder makeValue(Key key) { + return Value.newBuilder().setKeyValue(key); + } + + /** Make a key value. */ + public static Value.Builder makeValue(Key.Builder key) { + return makeValue(key.build()); + } + + /** Make an integer value. */ + public static Value.Builder makeValue(long key) { + return Value.newBuilder().setIntegerValue(key); + } + + /** Make a floating point value. */ + public static Value.Builder makeValue(double value) { + return Value.newBuilder().setDoubleValue(value); + } + + /** Make a boolean value. */ + public static Value.Builder makeValue(boolean value) { + return Value.newBuilder().setBooleanValue(value); + } + + /** Make a string value. */ + public static Value.Builder makeValue(String value) { + return Value.newBuilder().setStringValue(value); + } + + /** Make an entity value. */ + public static Value.Builder makeValue(Entity entity) { + return Value.newBuilder().setEntityValue(entity); + } + + /** Make a entity value. */ + public static Value.Builder makeValue(Entity.Builder entity) { + return makeValue(entity.build()); + } + + /** Make a ByteString value. */ + public static Value.Builder makeValue(ByteString blob) { + return Value.newBuilder().setBlobValue(blob); + } + + /** Make a timestamp value given a date. */ + public static Value.Builder makeValue(Date date) { + return Value.newBuilder().setTimestampValue(toTimestamp(date.getTime() * 1000L)); + } + + /** Makes a GeoPoint value. */ + public static Value.Builder makeValue(LatLng value) { + return Value.newBuilder().setGeoPointValue(value); + } + + /** Makes a GeoPoint value. */ + public static Value.Builder makeValue(LatLng.Builder value) { + return makeValue(value.build()); + } + + private static Timestamp.Builder toTimestamp(long microseconds) { + long seconds = microseconds / MICROSECONDS_PER_SECOND; + long microsecondsRemainder = microseconds % MICROSECONDS_PER_SECOND; + if (microsecondsRemainder < 0) { + // Nanos must be positive even if microseconds is negative. + // Java modulus doesn't take care of this for us. + microsecondsRemainder += MICROSECONDS_PER_SECOND; + seconds -= 1; + } + return Timestamp.newBuilder() + .setSeconds(seconds) + .setNanos((int) microsecondsRemainder * NANOSECONDS_PER_MICROSECOND); + } + + /** + * Make a key from the specified path of kind/id-or-name pairs and/or Keys. + * + *

The id-or-name values must be either String, Long, Integer or Short. + * + *

The last id-or-name value may be omitted, in which case an entity without an id is created + * (for use with automatic id allocation). + * + *

The PartitionIds of all Keys in the path must be equal. The returned Key.Builder will use + * this PartitionId. + */ + public static Key.Builder makeKey(Object... elements) { + Key.Builder key = Key.newBuilder(); + PartitionId partitionId = null; + for (int pathIndex = 0; pathIndex < elements.length; pathIndex += 2) { + PathElement.Builder pathElement = PathElement.newBuilder(); + Object element = elements[pathIndex]; + if (element instanceof Key) { + Key subKey = (Key) element; + if (partitionId == null) { + partitionId = subKey.getPartitionId(); + } else if (!partitionId.equals(subKey.getPartitionId())) { + throw new IllegalArgumentException( + "Partition IDs did not match, found: " + + partitionId + + " and " + + subKey.getPartitionId()); + } + key.addAllPath(((Key) element).getPathList()); + // We increment by 2, but since we got a Key argument we're only consuming 1 element in this + // iteration of the loop. Decrement the index so that when we jump by 2 we end up in the + // right spot. + pathIndex--; + } else { + String kind; + try { + kind = (String) element; + } catch (ClassCastException e) { + throw new IllegalArgumentException( + "Expected string or Key, got: " + element.getClass(), e); + } + pathElement.setKind(kind); + if (pathIndex + 1 < elements.length) { + Object value = elements[pathIndex + 1]; + if (value instanceof String) { + pathElement.setName((String) value); + } else if (value instanceof Long) { + pathElement.setId((Long) value); + } else if (value instanceof Integer) { + pathElement.setId((Integer) value); + } else if (value instanceof Short) { + pathElement.setId((Short) value); + } else { + throw new IllegalArgumentException( + "Expected string or integer, got: " + value.getClass()); + } + } + key.addPath(pathElement); + } + } + if (partitionId != null && !partitionId.equals(PartitionId.getDefaultInstance())) { + key.setPartitionId(partitionId); + } + return key; + } + + /** + * @return the double contained in value + * @throws IllegalArgumentException if the value does not contain a double. + */ + public static double getDouble(Value value) { + if (value.getValueTypeCase() != ValueTypeCase.DOUBLE_VALUE) { + throw new IllegalArgumentException("Value does not contain a double."); + } + return value.getDoubleValue(); + } + + /** + * @return the key contained in value + * @throws IllegalArgumentException if the value does not contain a key. + */ + public static Key getKey(Value value) { + if (value.getValueTypeCase() != ValueTypeCase.KEY_VALUE) { + throw new IllegalArgumentException("Value does not contain a key."); + } + return value.getKeyValue(); + } + + /** + * @return the blob contained in value + * @throws IllegalArgumentException if the value does not contain a blob. + */ + public static ByteString getByteString(Value value) { + if (value.getMeaning() == 18 && value.getValueTypeCase() == ValueTypeCase.STRING_VALUE) { + return value.getStringValueBytes(); + } else if (value.getValueTypeCase() == ValueTypeCase.BLOB_VALUE) { + return value.getBlobValue(); + } + throw new IllegalArgumentException("Value does not contain a blob."); + } + + /** + * @return the entity contained in value + * @throws IllegalArgumentException if the value does not contain an entity. + */ + public static Entity getEntity(Value value) { + if (value.getValueTypeCase() != ValueTypeCase.ENTITY_VALUE) { + throw new IllegalArgumentException("Value does not contain an Entity."); + } + return value.getEntityValue(); + } + + /** + * @return the string contained in value + * @throws IllegalArgumentException if the value does not contain a string. + */ + public static String getString(Value value) { + if (value.getValueTypeCase() != ValueTypeCase.STRING_VALUE) { + throw new IllegalArgumentException("Value does not contain a string."); + } + return value.getStringValue(); + } + + /** + * @return the boolean contained in value + * @throws IllegalArgumentException if the value does not contain a boolean. + */ + public static boolean getBoolean(Value value) { + if (value.getValueTypeCase() != ValueTypeCase.BOOLEAN_VALUE) { + throw new IllegalArgumentException("Value does not contain a boolean."); + } + return value.getBooleanValue(); + } + + /** + * @return the long contained in value + * @throws IllegalArgumentException if the value does not contain a long. + */ + public static long getLong(Value value) { + if (value.getValueTypeCase() != ValueTypeCase.INTEGER_VALUE) { + throw new IllegalArgumentException("Value does not contain an integer."); + } + return value.getIntegerValue(); + } + + /** + * @return the timestamp in microseconds contained in value + * @throws IllegalArgumentException if the value does not contain a timestamp. + */ + public static long getTimestamp(Value value) { + if (value.getMeaning() == 18 && value.getValueTypeCase() == ValueTypeCase.INTEGER_VALUE) { + return value.getIntegerValue(); + } else if (value.getValueTypeCase() == ValueTypeCase.TIMESTAMP_VALUE) { + return toMicroseconds(value.getTimestampValue()); + } + throw new IllegalArgumentException("Value does not contain a timestamp."); + } + + private static long toMicroseconds(TimestampOrBuilder timestamp) { + // Nanosecond precision is lost. + return timestamp.getSeconds() * MICROSECONDS_PER_SECOND + + timestamp.getNanos() / NANOSECONDS_PER_MICROSECOND; + } + + /** + * @return the array contained in value as a list. + * @throws IllegalArgumentException if the value does not contain an array. + */ + public static List getList(Value value) { + if (value.getValueTypeCase() != ValueTypeCase.ARRAY_VALUE) { + throw new IllegalArgumentException("Value does not contain an array."); + } + return value.getArrayValue().getValuesList(); + } + + /** + * Convert a timestamp value into a {@link Date} clipping off the microseconds. + * + * @param value a timestamp value to convert + * @return the resulting {@link Date} + * @throws IllegalArgumentException if the value does not contain a timestamp. + */ + public static Date toDate(Value value) { + return new Date(getTimestamp(value) / 1000); + } + + /** + * @param entity the entity to insert + * @return a mutation that will insert an entity + */ + public static Mutation.Builder makeInsert(Entity entity) { + return Mutation.newBuilder().setInsert(entity); + } + + /** + * @param entity the entity to update + * @return a mutation that will update an entity + */ + public static Mutation.Builder makeUpdate(Entity entity) { + return Mutation.newBuilder().setUpdate(entity); + } + + /** + * @param entity the entity to upsert + * @return a mutation that will upsert an entity + */ + public static Mutation.Builder makeUpsert(Entity entity) { + return Mutation.newBuilder().setUpsert(entity); + } + + /** + * @param key the key of the entity to delete + * @return a mutation that will delete an entity + */ + public static Mutation.Builder makeDelete(Key key) { + return Mutation.newBuilder().setDelete(key); + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreOptions.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreOptions.java new file mode 100644 index 000000000..f6e91a41a --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/DatastoreOptions.java @@ -0,0 +1,204 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import static com.google.common.base.Preconditions.checkArgument; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.http.HttpRequestInitializer; +import com.google.api.client.http.HttpTransport; +import java.util.Arrays; +import java.util.List; + +/** + * An immutable object containing settings for the datastore. + * + *

Example for connecting to a datastore: + * + *

+ * DatastoreOptions options = new DatastoreOptions.Builder()
+ *     .projectId("my-project-id")
+ *     .credential(DatastoreHelper.getComputeEngineCredential())
+ *     .build();
+ * DatastoreFactory.get().create(options);
+ * 
+ * + *

The options should be passed to {@link DatastoreFactory#create}. + */ +public class DatastoreOptions { + private final String projectId; + + private final String projectEndpoint; + private final String host; + private final String localHost; + + private final HttpRequestInitializer initializer; + + private final Credential credential; + private final HttpTransport transport; + public static final List SCOPES = + Arrays.asList("https://www.googleapis.com/auth/datastore"); + + DatastoreOptions(Builder b) { + checkArgument( + b.projectId != null || b.projectEndpoint != null, + "Either project ID or project endpoint must be provided."); + this.projectId = b.projectId; + this.projectEndpoint = b.projectEndpoint; + this.host = b.host; + this.localHost = b.localHost; + this.initializer = b.initializer; + this.credential = b.credential; + this.transport = b.transport; + } + + /** Builder for {@link DatastoreOptions}. */ + public static class Builder { + private static final String PROJECT_ENDPOINT_AND_PROJECT_ID_ERROR = + "Cannot set both project endpoint and project ID."; + private static final String PROJECT_ENDPOINT_AND_HOST_ERROR = + "Can set at most one of project endpoint, host, and local host."; + + private String projectId; + + private String projectEndpoint; + private String host; + private String localHost; + private HttpRequestInitializer initializer; + private Credential credential; + private HttpTransport transport; + + public Builder() {} + + public Builder(DatastoreOptions options) { + this.projectId = options.projectId; + this.projectEndpoint = options.projectEndpoint; + this.host = options.host; + this.localHost = options.localHost; + this.initializer = options.initializer; + this.credential = options.credential; + this.transport = options.transport; + } + + public DatastoreOptions build() { + return new DatastoreOptions(this); + } + + /** Sets the project ID used to access Cloud Datastore. */ + public Builder projectId(String projectId) { + checkArgument(projectEndpoint == null, PROJECT_ENDPOINT_AND_PROJECT_ID_ERROR); + this.projectId = projectId; + return this; + } + + /** + * Sets the host used to access Cloud Datastore. To connect to the Cloud Datastore Emulator, use + * {@link #localHost} instead. + */ + public Builder host(String host) { + checkArgument(projectEndpoint == null && localHost == null, PROJECT_ENDPOINT_AND_HOST_ERROR); + if (includesScheme(host)) { + throw new IllegalArgumentException( + String.format("Host \"%s\" must not include scheme.", host)); + } + this.host = host; + return this; + } + + /** + * Configures the client to access Cloud Datastore on a local host (typically a Cloud Datastore + * Emulator instance). Call this method also configures the client not to attach credentials to + * requests. + */ + public Builder localHost(String localHost) { + checkArgument(projectEndpoint == null && host == null, PROJECT_ENDPOINT_AND_HOST_ERROR); + if (includesScheme(localHost)) { + throw new IllegalArgumentException( + String.format("Local host \"%s\" must not include scheme.", localHost)); + } + this.localHost = localHost; + return this; + } + + /** + * Sets the project endpoint used to access Cloud Datastore. Prefer using {@link #projectId} + * and/or {@link #host}/{@link #localHost} when possible. + * + * @deprecated Use {@link #projectId} and/or {@link #host}/{@link #localHost} instead. + */ + @Deprecated + public Builder projectEndpoint(String projectEndpoint) { + checkArgument(projectId == null, PROJECT_ENDPOINT_AND_PROJECT_ID_ERROR); + checkArgument(localHost == null && host == null, PROJECT_ENDPOINT_AND_HOST_ERROR); + if (!includesScheme(projectEndpoint)) { + throw new IllegalArgumentException( + String.format("Project endpoint \"%s\" must include scheme.", projectEndpoint)); + } + this.projectEndpoint = projectEndpoint; + return this; + } + + /** Sets the (optional) initializer to run on HTTP requests to Cloud Datastore. */ + public Builder initializer(HttpRequestInitializer initializer) { + this.initializer = initializer; + return this; + } + + /** Sets the Google APIs {@link Credential} used to access Cloud Datastore. */ + public Builder credential(Credential credential) { + this.credential = credential; + return this; + } + + /** Sets the transport used to access Cloud Datastore. */ + public Builder transport(HttpTransport transport) { + this.transport = transport; + return this; + } + + private static boolean includesScheme(String url) { + return url.startsWith("http://") || url.startsWith("https://"); + } + } + + public String getProjectId() { + return projectId; + } + + public String getProjectEndpoint() { + return projectEndpoint; + } + + public String getHost() { + return host; + } + + public String getLocalHost() { + return localHost; + } + + public HttpRequestInitializer getInitializer() { + return initializer; + } + + public Credential getCredential() { + return credential; + } + + public HttpTransport getTransport() { + return transport; + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/QuerySplitter.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/QuerySplitter.java new file mode 100644 index 000000000..31d1fd7d5 --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/QuerySplitter.java @@ -0,0 +1,56 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import com.google.api.core.BetaApi; +import com.google.datastore.v1.PartitionId; +import com.google.datastore.v1.Query; +import com.google.protobuf.Timestamp; +import java.util.List; + +/** Provides the ability to split a query into multiple shards. */ +public interface QuerySplitter { + + /** + * Returns a list of sharded {@link Query}s for the given query. + * + *

This will create up to the desired number of splits, however it may return less splits if + * the desired number of splits is unavailable. This will happen if the number of split points + * provided by the underlying Datastore is less than the desired number, which will occur if the + * number of results for the query is too small. + * + * @param query the query to split. + * @param partition the partition the query is running in. + * @param numSplits the desired number of splits. + * @param datastore the datastore to run on. + * @throws DatastoreException if there was a datastore error while generating query splits. + * @throws IllegalArgumentException if the given query or numSplits was invalid. + */ + List getSplits(Query query, PartitionId partition, int numSplits, Datastore datastore) + throws DatastoreException; + + /** + * Same as {@link #getSplits(Query, PartitionId, int, Datastore)} but the splits are based on + * {@code readTime}, and the returned sharded {@link Query}s should also be executed with {@code + * readTime}. Reading from a timestamp is currently a private preview feature in Datastore. + */ + @BetaApi + default List getSplits( + Query query, PartitionId partition, int numSplits, Datastore datastore, Timestamp readTime) + throws DatastoreException { + throw new UnsupportedOperationException("Not implemented."); + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/QuerySplitterImpl.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/QuerySplitterImpl.java new file mode 100644 index 000000000..ac2a6557e --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/QuerySplitterImpl.java @@ -0,0 +1,309 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import static com.google.datastore.utils.DatastoreHelper.makeAndFilter; + +import com.google.api.core.BetaApi; +import com.google.datastore.v1.EntityResult; +import com.google.datastore.v1.Filter; +import com.google.datastore.v1.Key; +import com.google.datastore.v1.PartitionId; +import com.google.datastore.v1.Projection; +import com.google.datastore.v1.PropertyFilter; +import com.google.datastore.v1.PropertyFilter.Operator; +import com.google.datastore.v1.PropertyOrder.Direction; +import com.google.datastore.v1.PropertyReference; +import com.google.datastore.v1.Query; +import com.google.datastore.v1.QueryResultBatch; +import com.google.datastore.v1.QueryResultBatch.MoreResultsType; +import com.google.datastore.v1.ReadOptions; +import com.google.datastore.v1.RunQueryRequest; +import com.google.protobuf.Timestamp; +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumSet; +import java.util.List; +import javax.annotation.Nullable; + +/** + * Provides the ability to split a query into multiple shards using Cloud Datastore. + * + *

This implementation of the QuerySplitter uses the __scatter__ property to gather random split + * points for a query. + */ +final class QuerySplitterImpl implements QuerySplitter { + + /** The number of keys to sample for each split. * */ + private static final int KEYS_PER_SPLIT = 32; + + private static final EnumSet UNSUPPORTED_OPERATORS = + EnumSet.of( + Operator.LESS_THAN, + Operator.LESS_THAN_OR_EQUAL, + Operator.GREATER_THAN, + Operator.GREATER_THAN_OR_EQUAL); + + static final QuerySplitter INSTANCE = new QuerySplitterImpl(); + + private QuerySplitterImpl() { + // No initialization required. + } + + @Override + public List getSplits( + Query query, PartitionId partition, int numSplits, Datastore datastore) + throws DatastoreException, IllegalArgumentException { + return getSplitsInternal(query, partition, numSplits, datastore, null); + } + + @BetaApi + @Override + public List getSplits( + Query query, PartitionId partition, int numSplits, Datastore datastore, Timestamp readTime) + throws DatastoreException, IllegalArgumentException { + return getSplitsInternal(query, partition, numSplits, datastore, readTime); + } + + private List getSplitsInternal( + Query query, + PartitionId partition, + int numSplits, + Datastore datastore, + @Nullable Timestamp readTime) + throws DatastoreException, IllegalArgumentException { + List splits = new ArrayList(numSplits); + if (numSplits == 1) { + splits.add(query); + return splits; + } + validateQuery(query); + validateSplitSize(numSplits); + + List scatterKeys = getScatterKeys(numSplits, query, partition, datastore, readTime); + Key lastKey = null; + for (Key nextKey : getSplitKey(scatterKeys, numSplits)) { + splits.add(createSplit(lastKey, nextKey, query)); + lastKey = nextKey; + } + splits.add(createSplit(lastKey, null, query)); + return splits; + } + + /** + * Verify that the given number of splits is not out of bounds. + * + * @param numSplits the number of splits. + * @throws IllegalArgumentException if the split size is invalid. + */ + private void validateSplitSize(int numSplits) throws IllegalArgumentException { + if (numSplits < 1) { + throw new IllegalArgumentException("The number of splits must be greater than 0."); + } + } + + /** + * Validates that we only have allowable filters. + * + *

Note that equality and ancestor filters are allowed, however they may result in inefficient + * sharding. + */ + private void validateFilter(Filter filter) throws IllegalArgumentException { + switch (filter.getFilterTypeCase()) { + case COMPOSITE_FILTER: + for (Filter subFilter : filter.getCompositeFilter().getFiltersList()) { + validateFilter(subFilter); + } + break; + case PROPERTY_FILTER: + if (UNSUPPORTED_OPERATORS.contains(filter.getPropertyFilter().getOp())) { + throw new IllegalArgumentException("Query cannot have any inequality filters."); + } + break; + default: + throw new IllegalArgumentException( + "Unsupported filter type: " + filter.getFilterTypeCase()); + } + } + + /** + * Verifies that the given query can be properly scattered. + * + * @param query the query to verify + * @throws IllegalArgumentException if the query is invalid. + */ + private void validateQuery(Query query) throws IllegalArgumentException { + if (query.getKindCount() != 1) { + throw new IllegalArgumentException("Query must have exactly one kind."); + } + if (query.getOrderCount() != 0) { + throw new IllegalArgumentException("Query cannot have any sort orders."); + } + if (query.hasFilter()) { + validateFilter(query.getFilter()); + } + } + + /** + * Create a new {@link Query} given the query and range. + * + * @param lastKey the previous key. If null then assumed to be the beginning. + * @param nextKey the next key. If null then assumed to be the end. + * @param query the desired query. + */ + private Query createSplit(Key lastKey, Key nextKey, Query query) { + if (lastKey == null && nextKey == null) { + return query; + } + List keyFilters = new ArrayList(); + if (query.hasFilter()) { + keyFilters.add(query.getFilter()); + } + if (lastKey != null) { + Filter lowerBound = + DatastoreHelper.makeFilter( + DatastoreHelper.KEY_PROPERTY_NAME, + PropertyFilter.Operator.GREATER_THAN_OR_EQUAL, + DatastoreHelper.makeValue(lastKey)) + .build(); + keyFilters.add(lowerBound); + } + if (nextKey != null) { + Filter upperBound = + DatastoreHelper.makeFilter( + DatastoreHelper.KEY_PROPERTY_NAME, + PropertyFilter.Operator.LESS_THAN, + DatastoreHelper.makeValue(nextKey)) + .build(); + keyFilters.add(upperBound); + } + return Query.newBuilder(query).setFilter(makeAndFilter(keyFilters)).build(); + } + + /** + * Gets a list of split keys given a desired number of splits. + * + *

This list will contain multiple split keys for each split. Only a single split key will be + * chosen as the split point, however providing multiple keys allows for more uniform sharding. + * + * @param numSplits the number of desired splits. + * @param query the user query. + * @param partition the partition to run the query in. + * @param datastore the datastore containing the data. + * @param readTime read time at which to get the split keys from the datastore. + * @throws com.google.datastore.utils.DatastoreException if there was an error when executing the + * datastore query. + */ + private List getScatterKeys( + int numSplits, + Query query, + PartitionId partition, + Datastore datastore, + @Nullable Timestamp readTime) + throws DatastoreException { + Query.Builder scatterPointQuery = createScatterQuery(query, numSplits); + + List keySplits = new ArrayList(); + + QueryResultBatch batch; + do { + RunQueryRequest.Builder scatterRequest = + RunQueryRequest.newBuilder().setPartitionId(partition).setQuery(scatterPointQuery); + scatterRequest.setProjectId(partition.getProjectId()); + scatterRequest.setDatabaseId(partition.getDatabaseId()); + if (readTime != null) { + scatterRequest.setReadOptions(ReadOptions.newBuilder().setReadTime(readTime).build()); + } + batch = datastore.runQuery(scatterRequest.build()).getBatch(); + for (EntityResult result : batch.getEntityResultsList()) { + keySplits.add(result.getEntity().getKey()); + } + scatterPointQuery.setStartCursor(batch.getEndCursor()); + scatterPointQuery + .getLimitBuilder() + .setValue(scatterPointQuery.getLimit().getValue() - batch.getEntityResultsCount()); + } while (batch.getMoreResults() == MoreResultsType.NOT_FINISHED); + Collections.sort(keySplits, DatastoreHelper.getKeyComparator()); + return keySplits; + } + + /** + * Creates a scatter query from the given user query + * + * @param query the user's query. + * @param numSplits the number of splits to create. + */ + private Query.Builder createScatterQuery(Query query, int numSplits) { + // TODO(pcostello): We can potentially support better splits with equality filters in our query + // if there exists a composite index on property, __scatter__, __key__. Until an API for + // metadata exists, this isn't possible. Note that ancestor and inequality queries fall into + // the same category. + Query.Builder scatterPointQuery = Query.newBuilder(); + scatterPointQuery.addAllKind(query.getKindList()); + scatterPointQuery.addOrder( + DatastoreHelper.makeOrder(DatastoreHelper.SCATTER_PROPERTY_NAME, Direction.ASCENDING)); + // There is a split containing entities before and after each scatter entity: + // ||---*------*------*------*------*------*------*---|| = scatter entity + // If we represent each split as a region before a scatter entity, there is an extra region + // following the last scatter point. Thus, we do not need the scatter entities for the last + // region. + scatterPointQuery.getLimitBuilder().setValue((numSplits - 1) * KEYS_PER_SPLIT); + scatterPointQuery.addProjection( + Projection.newBuilder().setProperty(PropertyReference.newBuilder().setName("__key__"))); + return scatterPointQuery; + } + + /** + * Given a list of keys and a number of splits find the keys to split on. + * + * @param keys the list of keys. + * @param numSplits the number of splits. + */ + private Iterable getSplitKey(List keys, int numSplits) { + // If the number of keys is less than the number of splits, we are limited in the number of + // splits we can make. + if (keys.size() < numSplits - 1) { + return keys; + } + + // Calculate the number of keys per split. This should be KEYS_PER_SPLIT, but may + // be less if there are not KEYS_PER_SPLIT * (numSplits - 1) scatter entities. + // + // Consider the following dataset, where - represents an entity and * represents an entity + // that is returned as a scatter entity: + // ||---*-----*----*-----*-----*------*----*----|| + // If we want 4 splits in this data, the optimal split would look like: + // ||---*-----*----*-----*-----*------*----*----|| + // | | | + // The scatter keys in the last region are not useful to us, so we never request them: + // ||---*-----*----*-----*-----*------*---------|| + // | | | + // With 6 scatter keys we want to set scatter points at indexes: 1, 3, 5. + // + // We keep this as a double so that any "fractional" keys per split get distributed throughout + // the splits and don't make the last split significantly larger than the rest. + double numKeysPerSplit = Math.max(1.0, ((double) keys.size()) / (numSplits - 1)); + + List keysList = new ArrayList(numSplits - 1); + // Grab the last sample for each split, otherwise the first split will be too small. + for (int i = 1; i < numSplits; i++) { + int splitIndex = (int) Math.round(i * numKeysPerSplit) - 1; + keysList.add(keys.get(splitIndex)); + } + + return keysList; + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/RemoteRpc.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/RemoteRpc.java new file mode 100644 index 000000000..492936e15 --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/RemoteRpc.java @@ -0,0 +1,239 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import com.google.api.client.http.*; +import com.google.api.client.http.protobuf.ProtoHttpContent; +import com.google.api.client.util.IOUtils; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Strings; +import com.google.protobuf.MessageLite; +import com.google.rpc.Code; +import com.google.rpc.Status; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.SocketTimeoutException; +import java.nio.charset.Charset; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +/** + * An RPC transport that sends protocol buffers over HTTP. + * + *

This class is thread-safe. + */ +class RemoteRpc { + private static final Logger logger = Logger.getLogger(RemoteRpc.class.getName()); + + @VisibleForTesting static final String API_FORMAT_VERSION_HEADER = "X-Goog-Api-Format-Version"; + private static final String API_FORMAT_VERSION = "2"; + + @VisibleForTesting static final String X_GOOG_REQUEST_PARAMS_HEADER = "x-goog-request-params"; + + private final HttpRequestFactory client; + private final HttpRequestInitializer initializer; + private final String url; + private final AtomicInteger rpcCount = new AtomicInteger(0); + // Not final - so it can be set/reset in Unittests + private static boolean enableE2EChecksum = + Boolean.parseBoolean(System.getenv("GOOGLE_CLOUD_DATASTORE_HTTP_ENABLE_E2E_CHECKSUM")); + + RemoteRpc(HttpRequestFactory client, HttpRequestInitializer initializer, String url) { + this.client = client; + this.initializer = initializer; + this.url = url; + try { + resolveURL("dummyRpc"); + } catch (Exception e) { + throw new IllegalArgumentException( + "Unable to construct RemoteRpc due to unsupported url: <" + url + ">", e); + } + } + + /** + * Makes an RPC call using the client. Logs how long it took and any exceptions. + * + *

NOTE: The request could be an InputStream too, but the http client will need to find its + * length, which will require buffering it anyways. + * + * @throws com.google.datastore.utils.DatastoreException if the RPC fails. + */ + public InputStream call( + String methodName, MessageLite request, String projectId, String databaseId) + throws com.google.datastore.utils.DatastoreException { + logger.fine("remote datastore call " + methodName); + + long startTime = System.currentTimeMillis(); + try { + HttpResponse httpResponse; + try { + rpcCount.incrementAndGet(); + ProtoHttpContent payload = new ProtoHttpContent(request); + HttpRequest httpRequest = client.buildPostRequest(resolveURL(methodName), payload); + setHeaders(request, httpRequest, projectId, databaseId); + // Don't throw an HTTPResponseException on error. It converts the response to a String and + // throws away the original, whereas we need the raw bytes to parse it as a proto. + httpRequest.setThrowExceptionOnExecuteError(false); + // Datastore requests typically time out after 60s; set the read timeout to slightly longer + // than that by default (can be overridden via the HttpRequestInitializer). + httpRequest.setReadTimeout(65 * 1000); + if (initializer != null) { + initializer.initialize(httpRequest); + } + httpResponse = httpRequest.execute(); + if (!httpResponse.isSuccessStatusCode()) { + try (InputStream content = httpResponse.getContent()) { + throw makeException( + url, + methodName, + content, + httpResponse.getContentType(), + httpResponse.getContentCharset(), + null, + httpResponse.getStatusCode()); + } + } + InputStream inputStream = httpResponse.getContent(); + return inputStream; + } catch (SocketTimeoutException e) { + throw makeException(url, methodName, Code.DEADLINE_EXCEEDED, "Deadline exceeded", e); + } catch (IOException e) { + throw makeException(url, methodName, Code.UNAVAILABLE, "I/O error", e); + } + } finally { + long elapsedTime = System.currentTimeMillis() - startTime; + logger.fine("remote datastore call " + methodName + " took " + elapsedTime + " ms"); + } + } + + @VisibleForTesting + void setHeaders( + MessageLite request, HttpRequest httpRequest, String projectId, String databaseId) { + httpRequest.getHeaders().put(API_FORMAT_VERSION_HEADER, API_FORMAT_VERSION); + StringBuilder builder = new StringBuilder("project_id="); + builder.append(projectId); + if (!Strings.isNullOrEmpty(databaseId)) { + builder.append("&database_id="); + builder.append(databaseId); + } + httpRequest.getHeaders().put(X_GOOG_REQUEST_PARAMS_HEADER, builder.toString()); + } + + @VisibleForTesting + HttpRequestFactory getClient() { + return client; + } + + @VisibleForTesting + static void setSystemEnvE2EChecksum(boolean enableE2EChecksum) { + RemoteRpc.enableE2EChecksum = enableE2EChecksum; + } + + void resetRpcCount() { + rpcCount.set(0); + } + + int getRpcCount() { + return rpcCount.get(); + } + + public String getUrl() { + return url; + } + + GenericUrl resolveURL(String path) { + return new GenericUrl(url + ":" + path); + } + + HttpRequestFactory getHttpRequestFactory() { + return client; + } + + public static com.google.datastore.utils.DatastoreException makeException( + String url, String methodName, Code code, String message, Throwable cause) { + logger.fine("remote datastore call " + methodName + " against " + url + " failed: " + message); + return new com.google.datastore.utils.DatastoreException(methodName, code, message, cause); + } + + static DatastoreException makeException( + String url, + String methodName, + InputStream content, + String contentType, + Charset contentCharset, + Throwable cause, + int httpStatusCode) { + if (!contentType.equals("application/x-protobuf")) { + String responseContent; + try { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + IOUtils.copy(content, out, false); + responseContent = out.toString(contentCharset.name()); + } catch (IOException e) { + responseContent = ""; + } + return makeException( + url, + methodName, + Code.INTERNAL, + String.format( + "Non-protobuf error: %s. HTTP status code was %d.", responseContent, httpStatusCode), + cause); + } + + Status rpcStatus; + try { + rpcStatus = Status.parseFrom(content); + } catch (IOException e) { + return makeException( + url, + methodName, + Code.INTERNAL, + String.format( + "Unable to parse Status protocol buffer: HTTP status code was %s.", httpStatusCode), + e); + } + + Code code = Code.forNumber(rpcStatus.getCode()); + if (code == null) { + return makeException( + url, + methodName, + Code.INTERNAL, + String.format( + "Invalid error code: %d. Message: %s.", rpcStatus.getCode(), rpcStatus.getMessage()), + cause); + } else if (code == Code.OK) { + // We can end up here because there was no response body (and we successfully parsed an + // empty Status message). This may happen for 401s in particular due to special handling + // in low-level HTTP libraries. + if (httpStatusCode == HttpStatusCodes.STATUS_CODE_UNAUTHORIZED) { + return makeException(url, methodName, Code.UNAUTHENTICATED, "Unauthenticated.", cause); + } + return makeException( + url, + methodName, + Code.INTERNAL, + String.format( + "Unexpected OK error code with HTTP status code of %d. Message: %s.", + httpStatusCode, rpcStatus.getMessage()), + cause); + } + + return makeException(url, methodName, code, rpcStatus.getMessage(), cause); + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/testing/MockCredential.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/testing/MockCredential.java new file mode 100644 index 000000000..d5d16bb65 --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/testing/MockCredential.java @@ -0,0 +1,36 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.datastore.utils.testing; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.http.HttpRequest; +import java.io.IOException; + +/** Fake credential used for testing purpose. */ +public class MockCredential extends Credential { + public MockCredential() { + super( + new AccessMethod() { + @Override + public void intercept(HttpRequest request, String accessToken) throws IOException {} + + @Override + public String getAccessTokenFromRequest(HttpRequest request) { + return "MockAccessToken"; + } + }); + } +} diff --git a/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/testing/MockDatastoreFactory.java b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/testing/MockDatastoreFactory.java new file mode 100644 index 000000000..d4dd5caef --- /dev/null +++ b/google-cloud-datastore-utils/src/main/java/com/google/datastore/utils/testing/MockDatastoreFactory.java @@ -0,0 +1,132 @@ +/* + * Copyright 2022 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.datastore.utils.testing; + +import static com.google.common.base.Preconditions.checkState; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.http.*; +import com.google.api.client.testing.http.MockHttpTransport; +import com.google.api.client.testing.http.MockLowLevelHttpRequest; +import com.google.api.client.testing.http.MockLowLevelHttpResponse; +import com.google.api.client.testing.util.TestableByteArrayInputStream; +import com.google.common.collect.Iterables; +import com.google.datastore.utils.DatastoreFactory; +import com.google.datastore.utils.DatastoreOptions; +import com.google.protobuf.Message; +import com.google.rpc.Code; +import com.google.rpc.Status; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.List; + +/** Fake Datastore factory used for testing purposes when a true Datastore service is not needed. */ +public class MockDatastoreFactory extends DatastoreFactory { + private int nextStatus; + private Message nextResponse; + private Status nextError; + private IOException nextException; + + private String lastPath; + private String lastMimeType; + private byte[] lastBody; + private List lastCookies; + private String lastApiFormatHeaderValue; + + public void setNextResponse(Message response) { + nextStatus = HttpStatusCodes.STATUS_CODE_OK; + nextResponse = response; + nextError = null; + nextException = null; + } + + public void setNextError(int status, Code code, String message) { + nextStatus = status; + nextResponse = null; + nextError = makeErrorContent(message, code); + nextException = null; + } + + public void setNextException(IOException exception) { + nextStatus = 0; + nextResponse = null; + nextError = null; + nextException = exception; + } + + @Override + public HttpRequestFactory makeClient(DatastoreOptions options) { + HttpTransport transport = + new MockHttpTransport() { + @Override + public LowLevelHttpRequest buildRequest(String method, String url) { + return new MockLowLevelHttpRequest(url) { + @Override + public LowLevelHttpResponse execute() throws IOException { + lastPath = new GenericUrl(getUrl()).getRawPath(); + lastMimeType = getContentType(); + lastCookies = getHeaderValues("Cookie"); + lastApiFormatHeaderValue = + Iterables.getOnlyElement(getHeaderValues("X-Goog-Api-Format-Version")); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + getStreamingContent().writeTo(out); + lastBody = out.toByteArray(); + if (nextException != null) { + throw nextException; + } + MockLowLevelHttpResponse response = + new MockLowLevelHttpResponse() + .setStatusCode(nextStatus) + .setContentType("application/x-protobuf"); + if (nextError != null) { + checkState(nextResponse == null); + response.setContent(new TestableByteArrayInputStream(nextError.toByteArray())); + } else { + response.setContent(new TestableByteArrayInputStream(nextResponse.toByteArray())); + } + return response; + } + }; + } + }; + Credential credential = options.getCredential(); + return transport.createRequestFactory(credential); + } + + public String getLastPath() { + return lastPath; + } + + public String getLastMimeType() { + return lastMimeType; + } + + public String getLastApiFormatHeaderValue() { + return lastApiFormatHeaderValue; + } + + public byte[] getLastBody() { + return lastBody; + } + + public List getLastCookies() { + return lastCookies; + } + + private static Status makeErrorContent(String message, Code code) { + return Status.newBuilder().setCode(code.getNumber()).setMessage(message).build(); + } +} diff --git a/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreClientTest.java b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreClientTest.java new file mode 100644 index 000000000..31b0f6440 --- /dev/null +++ b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreClientTest.java @@ -0,0 +1,407 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.fail; + +import com.google.api.client.http.HttpRequest; +import com.google.api.client.http.HttpRequestInitializer; +import com.google.datastore.utils.testing.MockCredential; +import com.google.datastore.utils.testing.MockDatastoreFactory; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.EntityResult; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.QueryResultBatch; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import com.google.protobuf.ByteString; +import com.google.protobuf.Message; +import com.google.rpc.Code; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.SocketTimeoutException; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link DatastoreFactory} and {@link Datastore}. */ +@RunWith(JUnit4.class) +public class DatastoreClientTest { + private static final String PROJECT_ID = "project-id"; + + private DatastoreFactory factory = new MockDatastoreFactory(); + private DatastoreOptions.Builder options = + new DatastoreOptions.Builder().projectId(PROJECT_ID).credential(new MockCredential()); + + @Test + public void options_NoProjectIdOrProjectEndpoint() { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> factory.create(new DatastoreOptions.Builder().build())); + assertThat(exception) + .hasMessageThat() + .contains("Either project ID or project endpoint must be provided"); + factory.create(options.build()); + } + + @Test + public void options_ProjectIdAndProjectEndpoint() throws Exception { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + new DatastoreOptions.Builder() + .projectId(PROJECT_ID) + .projectEndpoint( + "http://localhost:1234/datastore/v1beta42/projects/project-id")); + assertThat(exception) + .hasMessageThat() + .contains("Cannot set both project endpoint and project ID"); + } + + @Test + public void options_LocalHostAndProjectEndpoint() throws Exception { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + new DatastoreOptions.Builder() + .localHost("localhost:8080") + .projectEndpoint( + "http://localhost:1234/datastore/v1beta42/projects/project-id")); + assertThat(exception) + .hasMessageThat() + .contains("Can set at most one of project endpoint, host, and local host"); + } + + @Test + public void options_HostAndProjectEndpoint() throws Exception { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + new DatastoreOptions.Builder() + .host("foo-datastore.googleapis.com") + .projectEndpoint( + "http://localhost:1234/datastore/v1beta42/projects/project-id")); + assertThat(exception) + .hasMessageThat() + .contains("Can set at most one of project endpoint, host, and local host"); + } + + @Test + public void options_HostAndLocalHost() throws Exception { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + new DatastoreOptions.Builder() + .host("foo-datastore.googleapis.com") + .localHost("localhost:8080")); + assertThat(exception) + .hasMessageThat() + .contains("Can set at most one of project endpoint, host, and local host"); + } + + @Test + public void options_InvalidLocalHost() throws Exception { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + factory.create( + new DatastoreOptions.Builder() + .projectId(PROJECT_ID) + .localHost("!not a valid url!") + .build())); + assertThat(exception).hasMessageThat().contains("Illegal character"); + } + + @Test + public void options_SchemeInLocalHost() { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> new DatastoreOptions.Builder().localHost("http://localhost:8080")); + assertThat(exception) + .hasMessageThat() + .contains("Local host \"http://localhost:8080\" must not include scheme"); + } + + @Test + public void options_InvalidHost() { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + factory.create( + new DatastoreOptions.Builder() + .projectId(PROJECT_ID) + .host("!not a valid url!") + .build())); + assertThat(exception).hasMessageThat().contains("Illegal character"); + } + + @Test + public void options_SchemeInHost() { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> new DatastoreOptions.Builder().host("http://foo-datastore.googleapis.com")); + + assertThat(exception) + .hasMessageThat() + .contains("Host \"http://foo-datastore.googleapis.com\" must not include scheme."); + } + + @Test + public void create_NullOptions() throws Exception { + assertThrows(NullPointerException.class, () -> factory.create(null)); + } + + @Test + public void create_Host() { + Datastore datastore = + factory.create( + new DatastoreOptions.Builder() + .projectId(PROJECT_ID) + .host("foo-datastore.googleapis.com") + .build()); + assertThat(datastore.remoteRpc.getUrl()) + .isEqualTo("https://foo-datastore.googleapis.com/v1/projects/project-id"); + } + + @Test + public void create_LocalHost() { + Datastore datastore = + factory.create( + new DatastoreOptions.Builder() + .projectId(PROJECT_ID) + .localHost("localhost:8080") + .build()); + assertThat(datastore.remoteRpc.getUrl()) + .isEqualTo("http://localhost:8080/v1/projects/project-id"); + } + + @Test + public void create_LocalHostIp() { + Datastore datastore = + factory.create( + new DatastoreOptions.Builder() + .projectId(PROJECT_ID) + .localHost("127.0.0.1:8080") + .build()); + assertThat(datastore.remoteRpc.getUrl()) + .isEqualTo("http://127.0.0.1:8080/v1/projects/project-id"); + } + + @Test + public void create_DefaultHost() { + Datastore datastore = + factory.create(new DatastoreOptions.Builder().projectId(PROJECT_ID).build()); + assertThat(datastore.remoteRpc.getUrl()) + .isEqualTo("https://datastore.googleapis.com/v1/projects/project-id"); + } + + @Test + public void create_ProjectEndpoint() { + Datastore datastore = + factory.create( + new DatastoreOptions.Builder() + .projectEndpoint("http://prom-qa/datastore/v1beta42/projects/project-id") + .build()); + assertThat(datastore.remoteRpc.getUrl()) + .isEqualTo("http://prom-qa/datastore/v1beta42/projects/project-id"); + } + + @Test + public void create_ProjectEndpointNoScheme() { + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + factory.create( + new DatastoreOptions.Builder() + .projectEndpoint("localhost:1234/datastore/v1beta42/projects/project-id") + .build())); + assertThat(exception) + .hasMessageThat() + .contains( + "Project endpoint \"localhost:1234/datastore/v1beta42/projects/project-id\" must" + + " include scheme."); + } + + @Test + public void initializer() throws Exception { + options.initializer( + new HttpRequestInitializer() { + @Override + public void initialize(HttpRequest request) { + request.getHeaders().setCookie("magic"); + } + }); + Datastore datastore = factory.create(options.build()); + MockDatastoreFactory mockClient = (MockDatastoreFactory) factory; + AllocateIdsRequest request = AllocateIdsRequest.newBuilder().build(); + AllocateIdsResponse response = AllocateIdsResponse.newBuilder().build(); + mockClient.setNextResponse(response); + assertEquals(response, datastore.allocateIds(request)); + assertEquals("magic", mockClient.getLastCookies().get(0)); + } + + @Test + public void allocateIds() throws Exception { + AllocateIdsRequest.Builder request = AllocateIdsRequest.newBuilder(); + AllocateIdsResponse.Builder response = AllocateIdsResponse.newBuilder(); + expectRpc("allocateIds", request.build(), response.build()); + } + + @Test + public void lookup() throws Exception { + LookupRequest.Builder request = LookupRequest.newBuilder(); + LookupResponse.Builder response = LookupResponse.newBuilder(); + expectRpc("lookup", request.build(), response.build()); + } + + @Test + public void beginTransaction() throws Exception { + BeginTransactionRequest.Builder request = BeginTransactionRequest.newBuilder(); + BeginTransactionResponse.Builder response = BeginTransactionResponse.newBuilder(); + response.setTransaction(ByteString.copyFromUtf8("project-id")); + expectRpc("beginTransaction", request.build(), response.build()); + } + + @Test + public void commit() throws Exception { + CommitRequest.Builder request = CommitRequest.newBuilder(); + request.setTransaction(ByteString.copyFromUtf8("project-id")); + CommitResponse.Builder response = CommitResponse.newBuilder(); + expectRpc("commit", request.build(), response.build()); + } + + @Test + public void reserveIds() throws Exception { + ReserveIdsRequest.Builder request = ReserveIdsRequest.newBuilder(); + ReserveIdsResponse.Builder response = ReserveIdsResponse.newBuilder(); + expectRpc("reserveIds", request.build(), response.build()); + } + + @Test + public void rollback() throws Exception { + RollbackRequest.Builder request = RollbackRequest.newBuilder(); + request.setTransaction(ByteString.copyFromUtf8("project-id")); + RollbackResponse.Builder response = RollbackResponse.newBuilder(); + expectRpc("rollback", request.build(), response.build()); + } + + @Test + public void runQuery() throws Exception { + RunQueryRequest.Builder request = RunQueryRequest.newBuilder(); + request.getQueryBuilder(); + RunQueryResponse.Builder response = RunQueryResponse.newBuilder(); + response + .getBatchBuilder() + .setEntityResultType(EntityResult.ResultType.FULL) + .setMoreResults(QueryResultBatch.MoreResultsType.NOT_FINISHED); + expectRpc("runQuery", request.build(), response.build()); + } + + @Test + public void runAggregationQuery() throws Exception { + RunAggregationQueryRequest.Builder request = RunAggregationQueryRequest.newBuilder(); + RunAggregationQueryResponse.Builder response = RunAggregationQueryResponse.newBuilder(); + expectRpc("runAggregationQuery", request.build(), response.build()); + } + + private void expectRpc(String methodName, Message request, Message response) throws Exception { + Datastore datastore = factory.create(options.build()); + MockDatastoreFactory mockClient = (MockDatastoreFactory) factory; + + mockClient.setNextResponse(response); + @SuppressWarnings("rawtypes") + Class[] methodArgs = {request.getClass()}; + Method call = Datastore.class.getMethod(methodName, methodArgs); + Object[] callArgs = {request}; + assertEquals(response, call.invoke(datastore, callArgs)); + + assertEquals("/v1/projects/project-id:" + methodName, mockClient.getLastPath()); + assertEquals("application/x-protobuf", mockClient.getLastMimeType()); + assertEquals("2", mockClient.getLastApiFormatHeaderValue()); + assertArrayEquals(request.toByteArray(), mockClient.getLastBody()); + assertEquals(1, datastore.getRpcCount()); + + datastore.resetRpcCount(); + assertEquals(0, datastore.getRpcCount()); + + mockClient.setNextError(400, Code.INVALID_ARGUMENT, "oops"); + try { + call.invoke(datastore, callArgs); + fail(); + } catch (InvocationTargetException targetException) { + DatastoreException exception = (DatastoreException) targetException.getCause(); + assertEquals(Code.INVALID_ARGUMENT, exception.getCode()); + assertEquals(methodName, exception.getMethodName()); + assertEquals("oops", exception.getMessage()); + } + + SocketTimeoutException socketTimeoutException = new SocketTimeoutException("ste"); + mockClient.setNextException(socketTimeoutException); + try { + call.invoke(datastore, callArgs); + fail(); + } catch (InvocationTargetException targetException) { + DatastoreException exception = (DatastoreException) targetException.getCause(); + assertEquals(Code.DEADLINE_EXCEEDED, exception.getCode()); + assertEquals(methodName, exception.getMethodName()); + assertEquals("Deadline exceeded", exception.getMessage()); + assertSame(socketTimeoutException, exception.getCause()); + } + + IOException ioException = new IOException("ioe"); + mockClient.setNextException(ioException); + try { + call.invoke(datastore, callArgs); + fail(); + } catch (InvocationTargetException targetException) { + DatastoreException exception = (DatastoreException) targetException.getCause(); + assertEquals(Code.UNAVAILABLE, exception.getCode()); + assertEquals(methodName, exception.getMethodName()); + assertEquals("I/O error", exception.getMessage()); + assertSame(ioException, exception.getCause()); + } + + assertEquals(3, datastore.getRpcCount()); + } +} diff --git a/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreFactoryTest.java b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreFactoryTest.java new file mode 100644 index 000000000..2a3d5a38f --- /dev/null +++ b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreFactoryTest.java @@ -0,0 +1,93 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertTrue; + +import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; +import com.google.api.client.http.HttpRequestFactory; +import com.google.api.client.http.javanet.NetHttpTransport; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Test for {@link DatastoreFactory}. */ +@RunWith(JUnit4.class) +public class DatastoreFactoryTest { + private static final String PROJECT_ID = "project-id"; + + private DatastoreFactory factory = DatastoreFactory.get(); + + /** + * Without specifying a credential or transport, the factory will create a default transport on + * its own. + */ + @Test + public void makeClient_Default() { + DatastoreOptions options = new DatastoreOptions.Builder().projectId(PROJECT_ID).build(); + HttpRequestFactory f = factory.makeClient(options); + assertNotNull(f.getTransport()); + assertTrue(f.getTransport() instanceof NetHttpTransport); + } + + /** + * Specifying a credential, but not a transport, the factory will use the transport from the + * credential. + */ + @Test + public void makeClient_WithCredential() { + NetHttpTransport transport = new NetHttpTransport(); + GoogleCredential credential = new GoogleCredential.Builder().setTransport(transport).build(); + DatastoreOptions options = + new DatastoreOptions.Builder().projectId(PROJECT_ID).credential(credential).build(); + HttpRequestFactory f = factory.makeClient(options); + assertEquals(transport, f.getTransport()); + } + + /** Specifying a transport, but not a credential, the factory will use the transport specified. */ + @Test + public void makeClient_WithTransport() { + NetHttpTransport transport = new NetHttpTransport(); + DatastoreOptions options = + new DatastoreOptions.Builder().projectId(PROJECT_ID).transport(transport).build(); + HttpRequestFactory f = factory.makeClient(options); + assertEquals(transport, f.getTransport()); + } + + /** + * Specifying both credential and transport, the factory will use the transport specified and not + * the one in the credential. + */ + @Test + public void makeClient_WithCredentialTransport() { + NetHttpTransport credTransport = new NetHttpTransport(); + NetHttpTransport transport = new NetHttpTransport(); + GoogleCredential credential = + new GoogleCredential.Builder().setTransport(credTransport).build(); + DatastoreOptions options = + new DatastoreOptions.Builder() + .projectId(PROJECT_ID) + .credential(credential) + .transport(transport) + .build(); + HttpRequestFactory f = factory.makeClient(options); + assertNotSame(credTransport, f.getTransport()); + assertEquals(transport, f.getTransport()); + } +} diff --git a/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreHelperTest.java b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreHelperTest.java new file mode 100644 index 000000000..246202444 --- /dev/null +++ b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/DatastoreHelperTest.java @@ -0,0 +1,317 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import static com.google.datastore.utils.DatastoreHelper.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import com.google.datastore.v1.Key; +import com.google.datastore.v1.PartitionId; +import com.google.datastore.v1.Value; +import com.google.datastore.v1.Value.ValueTypeCase; +import com.google.protobuf.ByteString; +import com.google.protobuf.Timestamp; +import java.util.Date; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link DatastoreHelper}. */ +@RunWith(JUnit4.class) +public class DatastoreHelperTest { + + private static final Key PARENT = + Key.newBuilder().addPath(Key.PathElement.newBuilder().setKind("Parent").setId(23L)).build(); + private static final Key GRANDPARENT = + Key.newBuilder() + .addPath(Key.PathElement.newBuilder().setKind("Grandparent").setId(24L)) + .build(); + private static final Key CHILD = + Key.newBuilder().addPath(Key.PathElement.newBuilder().setKind("Child").setId(26L)).build(); + + @Test + public void testMakeKey_BadTypeForKind() { + try { + DatastoreHelper.makeKey(new Object()); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + } + } + + @Test + public void testMakeKey_BadTypeForNameId() { + try { + DatastoreHelper.makeKey("kind", new Object()); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + } + } + + @Test + public void testMakeKey_Empty() { + assertEquals(Key.newBuilder().build(), DatastoreHelper.makeKey().build()); + } + + @Test + public void testMakeKey_Incomplete() { + assertEquals( + Key.newBuilder().addPath(Key.PathElement.newBuilder().setKind("Foo")).build(), + makeKey("Foo").build()); + } + + @Test + public void testMakeKey_IdInt() { + assertEquals( + Key.newBuilder().addPath(Key.PathElement.newBuilder().setKind("Foo").setId(1)).build(), + makeKey("Foo", 1).build()); + } + + @Test + public void testMakeKey_IdLong() { + assertEquals( + Key.newBuilder().addPath(Key.PathElement.newBuilder().setKind("Foo").setId(1)).build(), + makeKey("Foo", 1L).build()); + } + + @Test + public void testMakeKey_IdShort() { + assertEquals( + Key.newBuilder().addPath(Key.PathElement.newBuilder().setKind("Foo").setId(1)).build(), + makeKey("Foo", (short) 1).build()); + } + + @Test + public void testMakeKey_Name() { + assertEquals( + Key.newBuilder().addPath(Key.PathElement.newBuilder().setKind("Foo").setName("hi")).build(), + makeKey("Foo", "hi").build()); + } + + @Test + public void testMakeKey_KindNameKind() { + assertEquals( + Key.newBuilder() + .addPath(Key.PathElement.newBuilder().setKind("Foo").setName("hi")) + .addPath(Key.PathElement.newBuilder().setKind("Bar")) + .build(), + makeKey("Foo", "hi", "Bar").build()); + } + + @Test + public void testMakeKey_KeyKind() { + // 1 key at the beginning of the series + assertEquals( + Key.newBuilder() + .addPath(PARENT.getPath(0)) + .addPath(Key.PathElement.newBuilder().setKind("Child")) + .build(), + makeKey(PARENT, "Child").build()); + } + + @Test + public void testMakeKey_KindIdKeyKind() { + // 1 key in the middle of the series + assertEquals( + Key.newBuilder() + .addPath(Key.PathElement.newBuilder().setKind("Grandparent").setId(24L)) + .addPath(PARENT.getPath(0)) + .addPath(Key.PathElement.newBuilder().setKind("Child")) + .build(), + makeKey("Grandparent", 24L, PARENT, "Child").build()); + } + + @Test + public void testMakeKey_KindIdKey() { + // 1 key at the end of the series + assertEquals( + Key.newBuilder() + .addPath(Key.PathElement.newBuilder().setKind("Grandparent").setId(24L)) + .addPath(PARENT.getPath(0)) + .build(), + makeKey("Grandparent", 24L, PARENT).build()); + } + + @Test + public void testMakeKey_KeyKindIdKey() { + // 1 key at the beginning and 1 key at the end of the series + assertEquals( + Key.newBuilder() + .addPath(GRANDPARENT.getPath(0)) + .addPath(Key.PathElement.newBuilder().setKind("Parent").setId(23L)) + .addPath(CHILD.getPath(0)) + .build(), + makeKey(GRANDPARENT, "Parent", 23, CHILD).build()); + } + + @Test + public void testMakeKey_Key() { + // Just 1 key + assertEquals(Key.newBuilder().addPath(CHILD.getPath(0)).build(), makeKey(CHILD).build()); + } + + @Test + public void testMakeKey_KeyKey() { + // Just 2 keys + assertEquals( + Key.newBuilder().addPath(PARENT.getPath(0)).addPath(CHILD.getPath(0)).build(), + makeKey(PARENT, CHILD).build()); + } + + @Test + public void testMakeKey_KeyKeyKey() { + // Just 3 keys + assertEquals( + Key.newBuilder() + .addPath(GRANDPARENT.getPath(0)) + .addPath(PARENT.getPath(0)) + .addPath(CHILD.getPath(0)) + .build(), + makeKey(GRANDPARENT, PARENT, CHILD).build()); + } + + @Test + public void testMakeKey_KeyMultiLevelKey() { + // 1 key with 2 elements + assertEquals( + Key.newBuilder() + .addPath(GRANDPARENT.getPath(0)) + .addPath(PARENT.getPath(0)) + .addPath(CHILD.getPath(0)) + .build(), + makeKey(GRANDPARENT, makeKey(PARENT, CHILD).build()).build()); + } + + @Test + public void testMakeKey_MultiLevelKeyKey() { + // 1 key with 2 elements + assertEquals( + Key.newBuilder() + .addPath(GRANDPARENT.getPath(0)) + .addPath(PARENT.getPath(0)) + .addPath(CHILD.getPath(0)) + .build(), + makeKey(makeKey(GRANDPARENT, PARENT).build(), CHILD).build()); + } + + @Test + public void testMakeKey_MultiLevelKey() { + // 1 key with 3 elements + assertEquals( + Key.newBuilder() + .addPath(GRANDPARENT.getPath(0)) + .addPath(PARENT.getPath(0)) + .addPath(CHILD.getPath(0)) + .build(), + makeKey(makeKey(GRANDPARENT, PARENT, CHILD).build()).build()); + } + + @Test + public void testMakeKey_PartitionId() { + PartitionId partitionId = PartitionId.newBuilder().setNamespaceId("namespace-id").build(); + Key parent = PARENT.toBuilder().setPartitionId(partitionId).build(); + assertEquals( + Key.newBuilder() + .setPartitionId(partitionId) + .addPath(PARENT.getPath(0)) + .addPath(Key.PathElement.newBuilder().setKind("Child")) + .build(), + makeKey(parent, "Child").build()); + } + + @Test + public void testMakeKey_NonMatchingPartitionId2() { + PartitionId partitionId1 = PartitionId.newBuilder().setNamespaceId("namespace-id").build(); + PartitionId partitionId2 = + PartitionId.newBuilder().setNamespaceId("another-namespace-id").build(); + try { + makeKey( + PARENT.toBuilder().setPartitionId(partitionId1).build(), + CHILD.toBuilder().setPartitionId(partitionId2).build()); + fail("expected IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + } + } + + @Test + public void testMakeTimestampValue() throws Exception { + // Test cases with nanos == 0. + assertConversion(-50_000, -50, 0); + assertConversion(-1_000, -1, 0); + assertConversion(0, 0, 0); + assertConversion(1_000, 1, 0); + assertConversion(2_000, 2, 0); + assertConversion(100_000, 100, 0); + + // Test cases with nanos % 1_000_000 == 0 (no loss of precision). + assertConversion(2, 0, 2_000_000); + assertConversion(1_003, 1, 3_000_000); + assertConversion(2_005, 2, 5_000_000); + + // Timestamp specification requires that nanos >= 0 even if the timestamp + // is before the epoch. + assertConversion(0, 0, 0); + assertConversion(-250, -1, 750_000_000); // 1/4 second before epoch + assertConversion(-500, -1, 500_000_000); // 1/2 second before epoch + assertConversion(-750, -1, 250_000_000); // 3/4 second before epoch + + // If nanos % 1_000_000 != 0, precision is lost (via truncation) when + // converting to milliseconds. + assertTimestampToMilliseconds(3_100, 3, 100_000_999); + assertMillisecondsToTimestamp(3_100, 3, 100_000_000); + assertTimestampToMilliseconds(5_999, 5, 999_999_999); + assertMillisecondsToTimestamp(5_999, 5, 999_000_000); + assertTimestampToMilliseconds(7_100, 7, 100_000_001); + assertMillisecondsToTimestamp(7_100, 7, 100_000_000); + } + + private void assertConversion(long millis, long seconds, int nanos) { + assertMillisecondsToTimestamp(millis, seconds, nanos); + assertTimestampToMilliseconds(millis, seconds, nanos); + } + + private void assertMillisecondsToTimestamp(long millis, long seconds, long nanos) { + Value timestampValue = makeValue(new Date(millis)).build(); + assertEquals(ValueTypeCase.TIMESTAMP_VALUE, timestampValue.getValueTypeCase()); + assertEquals(seconds, timestampValue.getTimestampValue().getSeconds()); + assertEquals(nanos, timestampValue.getTimestampValue().getNanos()); + } + + private void assertTimestampToMilliseconds(long millis, long seconds, int nanos) { + Value.Builder value = + Value.newBuilder() + .setTimestampValue(Timestamp.newBuilder().setSeconds(seconds).setNanos(nanos)); + assertEquals(millis, DatastoreHelper.toDate(value.build()).getTime()); + } + + @Test + public void testProjectionHandling() { + assertEquals( + ByteString.copyFromUtf8("hi"), getByteString(makeValue("hi").setMeaning(18).build())); + try { + getByteString(makeValue("hi").build()); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + } + + assertEquals(new Date(1), toDate(makeValue(1000).setMeaning(18).build())); + try { + toDate(makeValue(1000).build()); + fail("Expected IllegalArgumentException"); + } catch (IllegalArgumentException expected) { + } + } +} diff --git a/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/QuerySplitterTest.java b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/QuerySplitterTest.java new file mode 100644 index 000000000..cad9502ae --- /dev/null +++ b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/QuerySplitterTest.java @@ -0,0 +1,365 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import static com.google.common.truth.Truth.assertThat; +import static com.google.datastore.utils.DatastoreHelper.*; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertThrows; + +import com.google.datastore.utils.testing.MockCredential; +import com.google.datastore.utils.testing.MockDatastoreFactory; +import com.google.datastore.v1.*; +import com.google.datastore.v1.EntityResult.ResultType; +import com.google.datastore.v1.PropertyFilter.Operator; +import com.google.datastore.v1.PropertyOrder.Direction; +import com.google.datastore.v1.QueryResultBatch.MoreResultsType; +import com.google.protobuf.Int32Value; +import com.google.protobuf.Timestamp; +import java.util.List; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Tests for {@link com.google.datastore.utils.QuerySplitterImpl}. */ +@RunWith(JUnit4.class) +public class QuerySplitterTest { + private static final String PROJECT_ID = "project-id"; + private static final PartitionId PARTITION = + PartitionId.newBuilder().setProjectId(PROJECT_ID).build(); + private static final String KIND = "test-kind"; + + private DatastoreFactory factory = new MockDatastoreFactory(); + private com.google.datastore.utils.DatastoreOptions.Builder options = + new DatastoreOptions.Builder().projectId(PROJECT_ID).credential(new MockCredential()); + + private Filter propertyFilter = makeFilter("foo", Operator.EQUAL, makeValue("value")).build(); + + private Query query = + Query.newBuilder() + .addKind(KindExpression.newBuilder().setName(KIND).build()) + .setFilter(propertyFilter) + .build(); + + private Query splitQuery = + Query.newBuilder() + .addKind(KindExpression.newBuilder().setName(KIND).build()) + .addOrder(makeOrder("__scatter__", Direction.ASCENDING)) + .addProjection(Projection.newBuilder().setProperty(makePropertyReference("__key__"))) + .build(); + + private Key splitKey0 = makeKey(KIND, String.format("%05d", 1)).setPartitionId(PARTITION).build(); + private Key splitKey1 = + makeKey(KIND, String.format("%05d", 101)).setPartitionId(PARTITION).build(); + private Key splitKey2 = + makeKey(KIND, String.format("%05d", 201)).setPartitionId(PARTITION).build(); + private Key splitKey3 = + makeKey(KIND, String.format("%05d", 301)).setPartitionId(PARTITION).build(); + + @Test + public void disallowsSortOrder() { + com.google.datastore.utils.Datastore datastore = factory.create(options.build()); + Query queryWithOrder = + query.toBuilder().addOrder(makeOrder("bar", Direction.ASCENDING)).build(); + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + queryWithOrder, PARTITION, 2, datastore)); + assertThat(exception).hasMessageThat().contains("Query cannot have any sort orders."); + } + + @Test + public void disallowsMultipleKinds() { + com.google.datastore.utils.Datastore datastore = factory.create(options.build()); + Query queryWithMultipleKinds = + query.toBuilder() + .addKind(KindExpression.newBuilder().setName("another-kind").build()) + .build(); + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + queryWithMultipleKinds, PARTITION, 2, datastore)); + assertThat(exception).hasMessageThat().contains("Query must have exactly one kind."); + } + + @Test + public void disallowsKindlessQuery() { + com.google.datastore.utils.Datastore datastore = factory.create(options.build()); + Query kindlessQuery = query.toBuilder().clearKind().build(); + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + kindlessQuery, PARTITION, 2, datastore)); + assertThat(exception).hasMessageThat().contains("Query must have exactly one kind."); + } + + @Test + public void disallowsInequalityFilter() { + com.google.datastore.utils.Datastore datastore = factory.create(options.build()); + Query queryWithInequality = + query.toBuilder() + .setFilter(makeFilter("foo", Operator.GREATER_THAN, makeValue("value"))) + .build(); + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + queryWithInequality, PARTITION, 2, datastore)); + assertThat(exception).hasMessageThat().contains("Query cannot have any inequality filters."); + } + + @Test + public void splitsMustBePositive() { + com.google.datastore.utils.Datastore datastore = factory.create(options.build()); + IllegalArgumentException exception = + assertThrows( + IllegalArgumentException.class, + () -> + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + query, PARTITION, 0, datastore)); + assertThat(exception).hasMessageThat().contains("The number of splits must be greater than 0."); + } + + @Test + public void getSplits() throws Exception { + com.google.datastore.utils.Datastore datastore = factory.create(options.build()); + MockDatastoreFactory mockClient = (MockDatastoreFactory) factory; + + RunQueryResponse splitQueryResponse = + RunQueryResponse.newBuilder() + .setQuery(splitQuery) + .setBatch( + QueryResultBatch.newBuilder() + .setEntityResultType(ResultType.KEY_ONLY) + .setMoreResults(MoreResultsType.NO_MORE_RESULTS) + .addEntityResults(makeKeyOnlyEntity(splitKey0)) + .addEntityResults(makeKeyOnlyEntity(splitKey1)) + .addEntityResults(makeKeyOnlyEntity(splitKey2)) + .addEntityResults(makeKeyOnlyEntity(splitKey3)) + .build()) + .build(); + + mockClient.setNextResponse(splitQueryResponse); + + List splittedQueries = + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + query, PARTITION, 3, datastore); + + assertThat(splittedQueries) + .containsExactly( + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, null, splitKey1)) + .build(), + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey1, splitKey3)) + .build(), + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey3, null)) + .build()); + + RunQueryRequest expectedSplitQueryRequest = + RunQueryRequest.newBuilder() + .setPartitionId(PARTITION) + .setProjectId(PROJECT_ID) + .setQuery( + splitQuery.toBuilder().setLimit(Int32Value.newBuilder().setValue(2 * 32).build())) + .build(); + + assertArrayEquals(expectedSplitQueryRequest.toByteArray(), mockClient.getLastBody()); + } + + @Test + public void getSplitsWithDatabaseId() throws Exception { + com.google.datastore.utils.Datastore datastore = factory.create(options.build()); + MockDatastoreFactory mockClient = (MockDatastoreFactory) factory; + + PartitionId partition = + PartitionId.newBuilder().setProjectId(PROJECT_ID).setDatabaseId("test-database").build(); + + RunQueryResponse splitQueryResponse = + RunQueryResponse.newBuilder() + .setQuery(splitQuery) + .setBatch( + QueryResultBatch.newBuilder() + .setEntityResultType(ResultType.KEY_ONLY) + .setMoreResults(MoreResultsType.NO_MORE_RESULTS) + .addEntityResults(makeKeyOnlyEntity(splitKey0)) + .addEntityResults(makeKeyOnlyEntity(splitKey1)) + .addEntityResults(makeKeyOnlyEntity(splitKey2)) + .addEntityResults(makeKeyOnlyEntity(splitKey3)) + .build()) + .build(); + + mockClient.setNextResponse(splitQueryResponse); + + List splitQueries = + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + query, partition, 3, datastore); + + assertThat(splitQueries) + .containsExactly( + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, null, splitKey1)) + .build(), + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey1, splitKey3)) + .build(), + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey3, null)) + .build()); + + RunQueryRequest expectedSplitQueryRequest = + RunQueryRequest.newBuilder() + .setPartitionId(partition) + .setProjectId(PROJECT_ID) + .setDatabaseId("test-database") + .setQuery( + splitQuery.toBuilder().setLimit(Int32Value.newBuilder().setValue(2 * 32).build())) + .build(); + + assertArrayEquals(expectedSplitQueryRequest.toByteArray(), mockClient.getLastBody()); + } + + @Test + public void notEnoughSplits() throws Exception { + com.google.datastore.utils.Datastore datastore = factory.create(options.build()); + MockDatastoreFactory mockClient = (MockDatastoreFactory) factory; + + RunQueryResponse splitQueryResponse = + RunQueryResponse.newBuilder() + .setQuery(splitQuery) + .setBatch( + QueryResultBatch.newBuilder() + .setEntityResultType(ResultType.KEY_ONLY) + .setMoreResults(MoreResultsType.NO_MORE_RESULTS) + .addEntityResults(makeKeyOnlyEntity(splitKey0)) + .build()) + .build(); + + mockClient.setNextResponse(splitQueryResponse); + + List splittedQueries = + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + query, PARTITION, 100, datastore); + + assertThat(splittedQueries) + .containsExactly( + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, null, splitKey0)) + .build(), + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey0, null)) + .build()); + + RunQueryRequest expectedSplitQueryRequest = + RunQueryRequest.newBuilder() + .setPartitionId(PARTITION) + .setProjectId(PROJECT_ID) + .setQuery( + splitQuery.toBuilder().setLimit(Int32Value.newBuilder().setValue(99 * 32).build())) + .build(); + + assertArrayEquals(expectedSplitQueryRequest.toByteArray(), mockClient.getLastBody()); + } + + @Test + public void getSplits_withReadTime() throws Exception { + Datastore datastore = factory.create(options.build()); + MockDatastoreFactory mockClient = (MockDatastoreFactory) factory; + + RunQueryResponse splitQueryResponse = + RunQueryResponse.newBuilder() + .setQuery(splitQuery) + .setBatch( + QueryResultBatch.newBuilder() + .setEntityResultType(ResultType.KEY_ONLY) + .setMoreResults(MoreResultsType.NO_MORE_RESULTS) + .addEntityResults(makeKeyOnlyEntity(splitKey0)) + .addEntityResults(makeKeyOnlyEntity(splitKey1)) + .addEntityResults(makeKeyOnlyEntity(splitKey2)) + .addEntityResults(makeKeyOnlyEntity(splitKey3)) + .build()) + .build(); + + mockClient.setNextResponse(splitQueryResponse); + + Timestamp readTime = Timestamp.newBuilder().setSeconds(1654651341L).build(); + + List splittedQueries = + com.google.datastore.utils.QuerySplitterImpl.INSTANCE.getSplits( + query, PARTITION, 3, datastore, readTime); + + assertThat(splittedQueries) + .containsExactly( + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, null, splitKey1)) + .build(), + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey1, splitKey3)) + .build(), + query.toBuilder() + .setFilter(makeFilterWithKeyRange(propertyFilter, splitKey3, null)) + .build()); + + RunQueryRequest expectedSplitQueryRequest = + RunQueryRequest.newBuilder() + .setPartitionId(PARTITION) + .setProjectId(PROJECT_ID) + .setQuery( + splitQuery.toBuilder().setLimit(Int32Value.newBuilder().setValue(2 * 32).build())) + .setReadOptions(ReadOptions.newBuilder().setReadTime(readTime)) + .build(); + + assertArrayEquals(expectedSplitQueryRequest.toByteArray(), mockClient.getLastBody()); + } + + private static EntityResult makeKeyOnlyEntity(Key key) { + return EntityResult.newBuilder().setEntity(Entity.newBuilder().setKey(key).build()).build(); + } + + private static Filter makeFilterWithKeyRange(Filter originalFilter, Key startKey, Key endKey) { + Filter startKeyFilter = + startKey == null + ? null + : makeFilter("__key__", Operator.GREATER_THAN_OR_EQUAL, makeValue(startKey)).build(); + + Filter endKeyFilter = + endKey == null + ? null + : makeFilter("__key__", Operator.LESS_THAN, makeValue(endKey)).build(); + + if (startKeyFilter == null && endKeyFilter == null) { + throw new IllegalArgumentException(); + } + + if (startKeyFilter != null && endKeyFilter == null) { + return makeAndFilter(originalFilter, startKeyFilter).build(); + } + + if (startKeyFilter == null && endKeyFilter != null) { + return makeAndFilter(originalFilter, endKeyFilter).build(); + } + + return makeAndFilter(originalFilter, startKeyFilter, endKeyFilter).build(); + } +} diff --git a/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/RemoteRpcTest.java b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/RemoteRpcTest.java new file mode 100644 index 000000000..ae4d7a23e --- /dev/null +++ b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/RemoteRpcTest.java @@ -0,0 +1,341 @@ +/* + * 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. + */ +package com.google.datastore.utils; + +import static org.junit.Assert.*; + +import com.google.api.client.http.HttpRequest; +import com.google.api.client.http.HttpTransport; +import com.google.api.client.http.LowLevelHttpRequest; +import com.google.api.client.http.LowLevelHttpResponse; +import com.google.api.client.http.protobuf.ProtoHttpContent; +import com.google.api.client.util.Charsets; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.protobuf.ByteString; +import com.google.protobuf.MessageLite; +import com.google.rpc.Code; +import com.google.rpc.Status; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.zip.GZIPOutputStream; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Test for {@link RemoteRpc}. */ +@RunWith(JUnit4.class) +public class RemoteRpcTest { + + private static final String METHOD_NAME = "methodName"; + + @Test + public void testException() { + Status statusProto = + Status.newBuilder() + .setCode(Code.UNAUTHENTICATED_VALUE) + .setMessage("The request does not have valid authentication credentials.") + .build(); + DatastoreException exception = + RemoteRpc.makeException( + "url", + METHOD_NAME, + new ByteArrayInputStream(statusProto.toByteArray()), + "application/x-protobuf", + Charsets.UTF_8, + new RuntimeException(), + 401); + assertEquals(Code.UNAUTHENTICATED, exception.getCode()); + assertEquals( + "The request does not have valid authentication credentials.", exception.getMessage()); + assertEquals(METHOD_NAME, exception.getMethodName()); + } + + @Test + public void testInvalidProtoException() { + DatastoreException exception = + RemoteRpc.makeException( + "url", + METHOD_NAME, + new ByteArrayInputStream("".getBytes()), + "application/x-protobuf", + Charsets.UTF_8, + new RuntimeException(), + 401); + assertEquals(Code.INTERNAL, exception.getCode()); + assertEquals( + "Unable to parse Status protocol buffer: HTTP status code was 401.", + exception.getMessage()); + assertEquals(METHOD_NAME, exception.getMethodName()); + } + + @Test + public void testEmptyProtoException() { + Status statusProto = Status.newBuilder().build(); + DatastoreException exception = + RemoteRpc.makeException( + "url", + METHOD_NAME, + new ByteArrayInputStream(statusProto.toByteArray()), + "application/x-protobuf", + Charsets.UTF_8, + new RuntimeException(), + 404); + assertEquals(Code.INTERNAL, exception.getCode()); + assertEquals( + "Unexpected OK error code with HTTP status code of 404. Message: .", + exception.getMessage()); + assertEquals(METHOD_NAME, exception.getMethodName()); + } + + @Test + public void testEmptyProtoExceptionUnauthenticated() { + Status statusProto = Status.newBuilder().build(); + DatastoreException exception = + RemoteRpc.makeException( + "url", + METHOD_NAME, + new ByteArrayInputStream(statusProto.toByteArray()), + "application/x-protobuf", + Charsets.UTF_8, + new RuntimeException(), + 401); + assertEquals(Code.UNAUTHENTICATED, exception.getCode()); + assertEquals("Unauthenticated.", exception.getMessage()); + assertEquals(METHOD_NAME, exception.getMethodName()); + } + + @Test + public void testPlainTextException() { + DatastoreException exception = + RemoteRpc.makeException( + "url", + METHOD_NAME, + new ByteArrayInputStream("Text Error".getBytes()), + "text/plain", + Charsets.UTF_8, + new RuntimeException(), + 401); + assertEquals(Code.INTERNAL, exception.getCode()); + assertEquals( + "Non-protobuf error: Text Error. HTTP status code was 401.", exception.getMessage()); + assertEquals(METHOD_NAME, exception.getMethodName()); + } + + @Test + public void testGzip() throws IOException, DatastoreException { + BeginTransactionResponse response = newBeginTransactionResponse(); + InjectedTestValues injectedTestValues = + new InjectedTestValues(gzip(response), new byte[1], true); + RemoteRpc rpc = newRemoteRpc(injectedTestValues); + + InputStream is = + rpc.call("beginTransaction", BeginTransactionResponse.getDefaultInstance(), "", ""); + BeginTransactionResponse parsedResponse = BeginTransactionResponse.parseFrom(is); + is.close(); + + assertEquals(response, parsedResponse); + // Check that the underlying stream is exhausted. + assertEquals(-1, injectedTestValues.inputStream.read()); + } + + @Test + public void testHttpHeaders_apiFormat() throws IOException { + String projectId = "project-id"; + MessageLite request = + RollbackRequest.newBuilder().setTransaction(ByteString.copyFromUtf8(projectId)).build(); + RemoteRpc rpc = + newRemoteRpc( + new InjectedTestValues(gzip(newBeginTransactionResponse()), new byte[1], true)); + HttpRequest httpRequest = + rpc.getClient().buildPostRequest(rpc.resolveURL("blah"), new ProtoHttpContent(request)); + rpc.setHeaders(request, httpRequest, projectId, ""); + assertNotNull( + httpRequest.getHeaders().getFirstHeaderStringValue(RemoteRpc.API_FORMAT_VERSION_HEADER)); + } + + @Test + public void testHttpHeaders_prefixHeader() throws IOException { + String projectId = "my-project"; + String databaseId = "my-db"; + MessageLite request = + RollbackRequest.newBuilder() + .setTransaction(ByteString.copyFromUtf8(projectId)) + .setDatabaseId(databaseId) + .build(); + RemoteRpc rpc = + newRemoteRpc( + new InjectedTestValues(gzip(newBeginTransactionResponse()), new byte[1], true)); + HttpRequest httpRequest = + rpc.getClient().buildPostRequest(rpc.resolveURL("blah"), new ProtoHttpContent(request)); + rpc.setHeaders(request, httpRequest, projectId, databaseId); + assertEquals( + "project_id=my-project&database_id=my-db", + httpRequest.getHeaders().get(RemoteRpc.X_GOOG_REQUEST_PARAMS_HEADER)); + + MessageLite request2 = + RollbackRequest.newBuilder().setTransaction(ByteString.copyFromUtf8(projectId)).build(); + RemoteRpc rpc2 = + newRemoteRpc( + new InjectedTestValues(gzip(newBeginTransactionResponse()), new byte[1], true)); + HttpRequest httpRequest2 = + rpc2.getClient().buildPostRequest(rpc2.resolveURL("blah"), new ProtoHttpContent(request2)); + rpc2.setHeaders(request, httpRequest2, projectId, ""); + assertEquals( + "project_id=my-project", + httpRequest2.getHeaders().get(RemoteRpc.X_GOOG_REQUEST_PARAMS_HEADER)); + } + + private static BeginTransactionResponse newBeginTransactionResponse() { + return BeginTransactionResponse.newBuilder() + .setTransaction(ByteString.copyFromUtf8("blah-blah-blah")) + .build(); + } + + private static RemoteRpc newRemoteRpc(InjectedTestValues injectedTestValues) { + return new RemoteRpc( + new MyHttpTransport(injectedTestValues).createRequestFactory(), + null, + "https://www.example.com/v1/projects/p"); + } + + private byte[] gzip(BeginTransactionResponse response) throws IOException { + ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); + try (GZIPOutputStream gzipOut = new GZIPOutputStream(bytesOut)) { + response.writeTo(gzipOut); + } + return bytesOut.toByteArray(); + } + + private static class InjectedTestValues { + private final InputStream inputStream; + private final int contentLength; + private final boolean isGzip; + + public InjectedTestValues(byte[] messageBytes, byte[] additionalBytes, boolean isGzip) { + byte[] allBytes = concat(messageBytes, additionalBytes); + this.inputStream = new ByteArrayInputStream(allBytes); + this.contentLength = allBytes.length; + this.isGzip = isGzip; + } + + private static byte[] concat(byte[] a, byte[] b) { + byte[] c = new byte[a.length + b.length]; + System.arraycopy(a, 0, c, 0, a.length); + System.arraycopy(b, 0, c, a.length, b.length); + return c; + } + } + + /** {@link HttpTransport} that allows injection of the returned {@link LowLevelHttpRequest}. */ + private static class MyHttpTransport extends HttpTransport { + + private final InjectedTestValues injectedTestValues; + + public MyHttpTransport(InjectedTestValues injectedTestValues) { + this.injectedTestValues = injectedTestValues; + } + + @Override + protected LowLevelHttpRequest buildRequest(String method, String url) throws IOException { + return new MyLowLevelHttpRequest(injectedTestValues); + } + } + + /** + * {@link LowLevelHttpRequest} that allows injection of the returned {@link LowLevelHttpResponse}. + */ + private static class MyLowLevelHttpRequest extends LowLevelHttpRequest { + + private final InjectedTestValues injectedTestValues; + + public MyLowLevelHttpRequest(InjectedTestValues injectedTestValues) { + this.injectedTestValues = injectedTestValues; + } + + @Override + public void addHeader(String name, String value) throws IOException { + // Do nothing. + } + + @Override + public LowLevelHttpResponse execute() throws IOException { + return new MyLowLevelHttpResponse(injectedTestValues); + } + } + + /** {@link LowLevelHttpResponse} that allows injected properties. */ + private static class MyLowLevelHttpResponse extends LowLevelHttpResponse { + + private final InjectedTestValues injectedTestValues; + + public MyLowLevelHttpResponse(InjectedTestValues injectedTestValues) { + this.injectedTestValues = injectedTestValues; + } + + @Override + public InputStream getContent() throws IOException { + return injectedTestValues.inputStream; + } + + @Override + public String getContentEncoding() throws IOException { + return injectedTestValues.isGzip ? "gzip" : ""; + } + + @Override + public long getContentLength() throws IOException { + return injectedTestValues.contentLength; + } + + @Override + public String getContentType() throws IOException { + return "application/x-protobuf"; + } + + @Override + public String getStatusLine() throws IOException { + return null; + } + + @Override + public int getStatusCode() throws IOException { + return 200; + } + + @Override + public String getReasonPhrase() throws IOException { + return null; + } + + @Override + public int getHeaderCount() throws IOException { + return 0; + } + + @Override + public String getHeaderName(int index) throws IOException { + return null; + } + + @Override + public String getHeaderValue(int index) throws IOException { + return null; + } + } +} diff --git a/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/it/ITDatastoreProtoClientTest.java b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/it/ITDatastoreProtoClientTest.java new file mode 100644 index 000000000..d30c1cbdc --- /dev/null +++ b/google-cloud-datastore-utils/src/test/java/com/google/datastore/utils/it/ITDatastoreProtoClientTest.java @@ -0,0 +1,90 @@ +/* + * 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. + */ +package com.google.datastore.utils.it; + +import static com.google.datastore.utils.DatastoreHelper.makeFilter; +import static com.google.datastore.utils.DatastoreHelper.makeValue; + +import com.google.common.truth.Truth; +import com.google.datastore.utils.Datastore; +import com.google.datastore.utils.DatastoreException; +import com.google.datastore.utils.DatastoreHelper; +import com.google.datastore.v1.*; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.util.List; +import org.junit.Before; +import org.junit.Test; + +public class ITDatastoreProtoClientTest { + + private static Datastore DATASTORE; + + private static PartitionId PARTITION; + + private static final String KIND = "test-kind"; + private static final String PROJECT_ID = System.getenv(DatastoreHelper.PROJECT_ID_ENV_VAR); + + @Before + public void setUp() throws GeneralSecurityException, IOException { + DATASTORE = DatastoreHelper.getDatastoreFromEnv(); + } + + @Test + public void testQuerySplitterWithDefaultDb() throws DatastoreException { + Filter propertyFilter = + makeFilter("foo", PropertyFilter.Operator.EQUAL, makeValue("value")).build(); + Query query = + Query.newBuilder() + .addKind(KindExpression.newBuilder().setName(KIND).build()) + .setFilter(propertyFilter) + .build(); + + PARTITION = PartitionId.newBuilder().setProjectId(PROJECT_ID).build(); + + List splits = + DatastoreHelper.getQuerySplitter().getSplits(query, PARTITION, 2, DATASTORE); + Truth.assertThat(splits).isNotEmpty(); + splits.forEach( + split -> { + Truth.assertThat(split.getKind(0).getName()).isEqualTo(KIND); + Truth.assertThat(split.getFilter()).isEqualTo(propertyFilter); + }); + } + + @Test + public void testQuerySplitterWithDb() throws DatastoreException { + Filter propertyFilter = + makeFilter("foo", PropertyFilter.Operator.EQUAL, makeValue("value")).build(); + Query query = + Query.newBuilder() + .addKind(KindExpression.newBuilder().setName(KIND).build()) + .setFilter(propertyFilter) + .build(); + + PARTITION = PartitionId.newBuilder().setProjectId(PROJECT_ID).setDatabaseId("test-db").build(); + + List splits = + DatastoreHelper.getQuerySplitter().getSplits(query, PARTITION, 2, DATASTORE); + + Truth.assertThat(splits).isNotEmpty(); + splits.forEach( + split -> { + Truth.assertThat(split.getKind(0).getName()).isEqualTo(KIND); + Truth.assertThat(split.getFilter()).isEqualTo(propertyFilter); + }); + } +} diff --git a/google-cloud-datastore/clirr-ignored-differences.xml b/google-cloud-datastore/clirr-ignored-differences.xml index 1620fd752..d1e3a4ff4 100644 --- a/google-cloud-datastore/clirr-ignored-differences.xml +++ b/google-cloud-datastore/clirr-ignored-differences.xml @@ -1,7 +1,50 @@ - + + + com/google/cloud/datastore/ReadOption$QueryAndReadOptions + * + 8001 + + + com/google/cloud/datastore/execution/request/AggregationQueryRequestProtoPreparer + *QueryAndReadOptions* + *QueryConfig* + 7005 + + + + com/google/cloud/datastore/DatastoreException + 5000 + com/google/cloud/grpc/BaseGrpcServiceException + + + + com/google/cloud/datastore/DatastoreException + 5001 + com/google/cloud/http/BaseHttpServiceException + + + com/google/cloud/datastore/Datastore + void close() + 7012 + + + com/google/cloud/datastore/spi/v1/DatastoreRpc + void close() + 7012 + + + com/google/cloud/datastore/Datastore + boolean isClosed() + 7012 + + + com/google/cloud/datastore/spi/v1/DatastoreRpc + boolean isClosed() + 7012 + com/google/cloud/datastore/Datastore com.google.cloud.datastore.QueryResults run(com.google.cloud.datastore.Query, com.google.cloud.datastore.models.ExplainOptions, com.google.cloud.datastore.ReadOption[]) @@ -14,7 +57,7 @@ com/google/cloud/datastore/DatastoreReader - com.google.cloud.datastore.AggregationResults runAggregation(com.google.cloud.datastore.AggregationQuery, com.google.cloud.datastore.models.ExplainOptions) + com.google.cloud.datastore.AggregationResults runAggregation(com.google.cloud.datastore.AggregationQuery, com.google.cloud.datastore.models.ExplainOptions) 7012 @@ -28,18 +71,6 @@ 7012 - - - com/google/cloud/datastore/ReadOption$QueryConfig - com.google.cloud.datastore.ReadOption$QueryConfig create(com.google.cloud.datastore.Query, java.util.List) - *com.google.datastore.v1.ExplainOptions* - 7005 - - - com/google/cloud/datastore/ReadOption$QueryConfig - com.google.cloud.datastore.ReadOption$QueryConfig create(com.google.cloud.datastore.Query) - 7004 - com/google/cloud/datastore/execution/AggregationQueryExecutor com.google.cloud.datastore.AggregationResults execute(com.google.cloud.datastore.AggregationQuery, com.google.cloud.datastore.ReadOption[]) @@ -55,4 +86,21 @@ java.lang.Object execute(com.google.cloud.datastore.Query, com.google.cloud.datastore.ReadOption[]) 7004 + + com/google/cloud/datastore/RetryAndTraceDatastoreRpcDecorator + RetryAndTraceDatastoreRpcDecorator(com.google.cloud.datastore.spi.v1.DatastoreRpc, com.google.cloud.datastore.TraceUtil, com.google.api.gax.retrying.RetrySettings, com.google.cloud.datastore.DatastoreOptions) + RetryAndTraceDatastoreRpcDecorator(com.google.cloud.datastore.spi.v1.DatastoreRpc, com.google.cloud.datastore.telemetry.TraceUtil, com.google.api.gax.retrying.RetrySettings, com.google.cloud.datastore.DatastoreOptions) + 7005 + + + + + com/google/cloud/datastore/TraceUtil + 8001 + + + com/google/cloud/datastore/testing/RemoteDatastoreHelper + 8001 + + diff --git a/google-cloud-datastore/pom.xml b/google-cloud-datastore/pom.xml index 8d6b79e8d..ecb5895ae 100644 --- a/google-cloud-datastore/pom.xml +++ b/google-cloud-datastore/pom.xml @@ -2,7 +2,7 @@ 4.0.0 google-cloud-datastore - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT jar Google Cloud Datastore https://github.com/googleapis/java-datastore @@ -12,12 +12,29 @@ com.google.cloud google-cloud-datastore-parent - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT google-cloud-datastore + 1.42.1 + + + + + com.google.cloud + gapic-libraries-bom + 1.53.0 + pom + import + + + + + com.google.api.grpc + grpc-google-cloud-datastore-v1 + com.google.api.grpc grpc-google-cloud-datastore-admin-v1 @@ -26,6 +43,10 @@ com.google.cloud google-cloud-core-http + + com.google.cloud + google-cloud-core-grpc + com.google.api.grpc proto-google-cloud-datastore-v1 @@ -38,6 +59,10 @@ com.google.cloud.datastore datastore-v1-proto-client + + com.google.auth + google-auth-library-credentials + io.grpc grpc-api @@ -111,6 +136,19 @@ jsr305 + + + io.opentelemetry + opentelemetry-api + ${opentelemetry.version} + + + io.opentelemetry + opentelemetry-context + ${opentelemetry.version} + + + ${project.groupId} @@ -118,11 +156,10 @@ test-jar test - com.google.guava guava-testlib - 33.1.0-jre + 33.4.0-jre test @@ -157,9 +194,65 @@ com.google.truth truth - 1.4.2 + 1.4.4 + test + + + com.google.testparameterinjector + test-parameter-injector + 1.17 + test + + + + io.opentelemetry + opentelemetry-sdk + ${opentelemetry.version} + test + + + io.opentelemetry + opentelemetry-sdk-common + ${opentelemetry.version} + test + + + io.opentelemetry + opentelemetry-sdk-testing + ${opentelemetry.version} + test + + + io.opentelemetry + opentelemetry-sdk-trace + ${opentelemetry.version} + test + + + io.opentelemetry + opentelemetry-semconv + 1.1.0-alpha + test + + + + + com.google.cloud.opentelemetry + exporter-trace + 0.15.0 + test + + + com.google.cloud + google-cloud-trace + test + + + com.google.api.grpc + proto-google-cloud-trace-v1 test + diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Batch.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Batch.java index eb4abd854..bb162af33 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Batch.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Batch.java @@ -16,6 +16,7 @@ package com.google.cloud.datastore; +import com.google.api.core.InternalExtensionOnly; import java.util.List; import javax.annotation.concurrent.NotThreadSafe; @@ -42,6 +43,7 @@ * This class too should not be treated as a thread safe class. */ @NotThreadSafe +@InternalExtensionOnly public interface Batch extends DatastoreBatchWriter { interface Response { @@ -53,9 +55,13 @@ interface Response { /** * {@inheritDoc} * - *

If an entity for {@code entity.getKey()} does not exists, {@code entity} is inserted. + *

If an entity for {@code entity.getKey()} does not exist, {@code entity} is inserted. * Otherwise, {@link #submit()} will throw a {@link DatastoreException} with {@link * DatastoreException#getReason()} equal to {@code "ALREADY_EXISTS"}. + * + * @param entity the entity to be added to the datastore + * @return The entity that was added + * @throws DatastoreException if there was any failure */ @Override Entity add(FullEntity entity); @@ -67,6 +73,10 @@ interface Response { * exists, {@link #submit()} will throw a {@link DatastoreException} with {@link * DatastoreException#getReason()} equal to {@code "ALREADY_EXISTS"}. All entities in {@code * entities} whose key did not exist are inserted. + * + * @param entities entities to be added to the datastore + * @return A list of entities that have been added + * @throws DatastoreException if there was any failure */ @Override List add(FullEntity... entities); @@ -74,10 +84,15 @@ interface Response { /** * Submit the batch to the Datastore. * - * @throws DatastoreException if there was any failure or if batch is not longer active + * @return Response of the batch submit operation. + * @throws DatastoreException if there was any failure or if batch is no longer active */ Response submit(); - /** Returns the batch associated {@link Datastore}. */ + /** + * Returns the batch associated {@link Datastore}. + * + * @return The batch associated datastore + */ Datastore getDatastore(); } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java index 5bd8384a3..0e769a109 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Datastore.java @@ -17,6 +17,7 @@ package com.google.cloud.datastore; import com.google.api.core.BetaApi; +import com.google.api.core.InternalExtensionOnly; import com.google.cloud.Service; import com.google.cloud.datastore.models.ExplainOptions; import com.google.datastore.v1.TransactionOptions; @@ -24,7 +25,8 @@ import java.util.List; /** An interface for Google Cloud Datastore. */ -public interface Datastore extends Service, DatastoreReaderWriter { +@InternalExtensionOnly +public interface Datastore extends Service, DatastoreReaderWriter, AutoCloseable { /** * Returns a new Datastore transaction. @@ -51,6 +53,13 @@ public interface Datastore extends Service, DatastoreReaderWri * @param the type of the return value */ interface TransactionCallable { + /** + * Callback's invoke method for the TransactionCallable. + * + * @param readerWriter DatastoreReaderWriter associated with the new transaction + * @return T The transaction result + * @throws Exception upon failure + */ T run(DatastoreReaderWriter readerWriter) throws Exception; } @@ -481,10 +490,7 @@ interface TransactionCallable { * @throws DatastoreException upon failure */ @BetaApi - default QueryResults run( - Query query, ExplainOptions explainOptions, ReadOption... options) { - throw new UnsupportedOperationException("Not implemented."); - } + QueryResults run(Query query, ExplainOptions explainOptions, ReadOption... options); /** * Submits a {@link AggregationQuery} and returns {@link AggregationResults}. {@link ReadOption}s @@ -529,9 +535,7 @@ default QueryResults run( * @throws DatastoreException upon failure * @return {@link AggregationResults} */ - default AggregationResults runAggregation(AggregationQuery query, ReadOption... options) { - throw new UnsupportedOperationException("Not implemented."); - } + AggregationResults runAggregation(AggregationQuery query, ReadOption... options); /** * Submits a {@link AggregationQuery} with specified {@link @@ -557,8 +561,17 @@ default AggregationResults runAggregation(AggregationQuery query, ReadOption... * @return {@link AggregationResults} */ @BetaApi - default AggregationResults runAggregation( - AggregationQuery query, ExplainOptions explainOptions, ReadOption... options) { - throw new UnsupportedOperationException("Not implemented."); - } + AggregationResults runAggregation( + AggregationQuery query, ExplainOptions explainOptions, ReadOption... options); + + /** + * Closes the gRPC channels associated with this instance and frees up their resources. This + * method blocks until all channels are closed. Once this method is called, this Datastore client + * is no longer usable. + */ + @Override + void close() throws Exception; + + /** Returns true if this background resource has been shut down. */ + boolean isClosed(); } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreBatchWriter.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreBatchWriter.java index db4bd3179..28d2569b6 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreBatchWriter.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreBatchWriter.java @@ -16,6 +16,7 @@ package com.google.cloud.datastore; +import com.google.api.core.InternalExtensionOnly; import java.util.List; import javax.annotation.concurrent.NotThreadSafe; @@ -31,6 +32,7 @@ * This class too should not be treated as a thread safe class. */ @NotThreadSafe +@InternalExtensionOnly public interface DatastoreBatchWriter extends DatastoreWriter { /** diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreException.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreException.java index 512d0a3dc..44bde2c10 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreException.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreException.java @@ -16,10 +16,16 @@ package com.google.cloud.datastore; +import com.google.api.gax.grpc.GrpcStatusCode; +import com.google.api.gax.rpc.ApiException; +import com.google.api.gax.rpc.StatusCode; import com.google.cloud.BaseServiceException; import com.google.cloud.RetryHelper.RetryHelperException; import com.google.cloud.http.BaseHttpServiceException; +import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; +import io.grpc.StatusException; +import io.grpc.StatusRuntimeException; import java.io.IOException; import java.util.Set; @@ -31,7 +37,7 @@ */ public final class DatastoreException extends BaseHttpServiceException { - // see https://cloud.google.com/datastore/docs/concepts/errors#Error_Codes" + // see https://cloud.google.com/datastore/docs/concepts/errors#Error_Codes private static final Set RETRYABLE_ERRORS = ImmutableSet.of( new Error(10, "ABORTED", false), @@ -43,6 +49,10 @@ public DatastoreException(int code, String message, String reason) { this(code, message, reason, true, null); } + public DatastoreException(int code, String message, Throwable cause) { + super(code, message, null, true, RETRYABLE_ERRORS, cause); + } + public DatastoreException(int code, String message, String reason, Throwable cause) { super(code, message, reason, true, RETRYABLE_ERRORS, cause); } @@ -64,7 +74,76 @@ public DatastoreException(IOException exception) { */ static DatastoreException translateAndThrow(RetryHelperException ex) { BaseServiceException.translate(ex); - throw new DatastoreException(UNKNOWN_CODE, ex.getMessage(), null, ex.getCause()); + throw transformThrowable(ex); + } + + static BaseServiceException transformThrowable(Throwable t) { + if (t instanceof BaseServiceException) { + return (BaseServiceException) t; + } + if (t.getCause() instanceof BaseServiceException) { + return (BaseServiceException) t.getCause(); + } + if (t instanceof ApiException) { + return asDatastoreException((ApiException) t); + } + if (t.getCause() instanceof ApiException) { + return asDatastoreException((ApiException) t.getCause()); + } + return getDatastoreException(t); + } + + private static DatastoreException getDatastoreException(Throwable t) { + // unwrap a RetryHelperException if that is what is being translated + if (t instanceof RetryHelperException) { + return new DatastoreException(UNKNOWN_CODE, t.getMessage(), null, t.getCause()); + } + return new DatastoreException(UNKNOWN_CODE, t.getMessage(), t); + } + + static DatastoreException asDatastoreException(ApiException apiEx) { + int datastoreStatusCode = 0; + StatusCode statusCode = apiEx.getStatusCode(); + if (statusCode instanceof GrpcStatusCode) { + GrpcStatusCode gsc = (GrpcStatusCode) statusCode; + datastoreStatusCode = + GrpcToDatastoreCodeTranslation.grpcCodeToDatastoreStatusCode(gsc.getTransportCode()); + } + + // If there is a gRPC exception in our cause, pull its error message up to be our + // message otherwise, create a generic error message with the status code. + String statusCodeName = statusCode.getCode().name(); + String statusExceptionMessage = getStatusExceptionMessage(apiEx); + + String message; + if (statusExceptionMessage != null) { + message = statusCodeName + ": " + statusExceptionMessage; + } else { + message = "Error: " + statusCodeName; + } + + String reason = ""; + if (Strings.isNullOrEmpty(apiEx.getReason())) { + if (apiEx.getStatusCode() != null) { + reason = apiEx.getStatusCode().getCode().name(); + } + } + // It'd be better to use ExceptionData and BaseServiceException#(ExceptionData) but, + // BaseHttpServiceException does not pass that through so we're stuck using this for now. + // TODO: When we can break the coupling to BaseHttpServiceException replace this + return new DatastoreException(datastoreStatusCode, message, reason, apiEx); + } + + private static String getStatusExceptionMessage(Exception apiEx) { + if (apiEx.getMessage() != null) { + return apiEx.getMessage(); + } else { + Throwable cause = apiEx.getCause(); + if (cause instanceof StatusRuntimeException || cause instanceof StatusException) { + return cause.getMessage(); + } + return null; + } } /** diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreFactory.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreFactory.java index 1b443066d..54274e7bb 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreFactory.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreFactory.java @@ -16,7 +16,9 @@ package com.google.cloud.datastore; +import com.google.api.core.InternalExtensionOnly; import com.google.cloud.ServiceFactory; /** An interface for Datastore factories. */ +@InternalExtensionOnly public interface DatastoreFactory extends ServiceFactory {} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java index a3bfb3796..c64474fa8 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreImpl.java @@ -16,6 +16,26 @@ package com.google.cloud.datastore; +import static com.google.cloud.datastore.telemetry.TraceUtil.ATTRIBUTES_KEY_DEFERRED; +import static com.google.cloud.datastore.telemetry.TraceUtil.ATTRIBUTES_KEY_DOCUMENT_COUNT; +import static com.google.cloud.datastore.telemetry.TraceUtil.ATTRIBUTES_KEY_MISSING; +import static com.google.cloud.datastore.telemetry.TraceUtil.ATTRIBUTES_KEY_MORE_RESULTS; +import static com.google.cloud.datastore.telemetry.TraceUtil.ATTRIBUTES_KEY_READ_CONSISTENCY; +import static com.google.cloud.datastore.telemetry.TraceUtil.ATTRIBUTES_KEY_RECEIVED; +import static com.google.cloud.datastore.telemetry.TraceUtil.ATTRIBUTES_KEY_TRANSACTIONAL; +import static com.google.cloud.datastore.telemetry.TraceUtil.ATTRIBUTES_KEY_TRANSACTION_ID; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_ALLOCATE_IDS; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_BEGIN_TRANSACTION; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_COMMIT; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_LOOKUP; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_RESERVE_IDS; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_ROLLBACK; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_RUN_QUERY; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_COMMIT; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_LOOKUP; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_RUN; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_RUN_QUERY; + import com.google.api.core.BetaApi; import com.google.api.gax.retrying.RetrySettings; import com.google.cloud.BaseService; @@ -25,20 +45,23 @@ import com.google.cloud.ServiceOptions; import com.google.cloud.datastore.execution.AggregationQueryExecutor; import com.google.cloud.datastore.spi.v1.DatastoreRpc; +import com.google.cloud.datastore.telemetry.TraceUtil; +import com.google.cloud.datastore.telemetry.TraceUtil.Scope; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; import com.google.common.collect.AbstractIterator; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; +import com.google.datastore.v1.CommitResponse; import com.google.datastore.v1.ExplainOptions; import com.google.datastore.v1.ReadOptions; import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.RunQueryResponse; import com.google.datastore.v1.TransactionOptions; import com.google.protobuf.ByteString; -import io.opencensus.common.Scope; -import io.opencensus.trace.Span; -import io.opencensus.trace.Status; +import io.opentelemetry.context.Context; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -50,16 +73,22 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.Callable; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; final class DatastoreImpl extends BaseService implements Datastore { + Logger logger = Logger.getLogger(Datastore.class.getName()); private final DatastoreRpc datastoreRpc; private final RetrySettings retrySettings; private static final ExceptionHandler TRANSACTION_EXCEPTION_HANDLER = TransactionExceptionHandler.build(); private static final ExceptionHandler TRANSACTION_OPERATION_EXCEPTION_HANDLER = TransactionOperationExceptionHandler.build(); - private final TraceUtil traceUtil = TraceUtil.getInstance(); + + private final com.google.cloud.datastore.telemetry.TraceUtil otelTraceUtil = + getOptions().getTraceUtil(); private final ReadOptionProtoPreparer readOptionProtoPreparer; private final AggregationQueryExecutor aggregationQueryExecutor; @@ -73,7 +102,8 @@ final class DatastoreImpl extends BaseService implements Datas readOptionProtoPreparer = new ReadOptionProtoPreparer(); aggregationQueryExecutor = new AggregationQueryExecutor( - new RetryAndTraceDatastoreRpcDecorator(datastoreRpc, traceUtil, retrySettings, options), + new RetryAndTraceDatastoreRpcDecorator( + datastoreRpc, otelTraceUtil, retrySettings, options), options); } @@ -92,8 +122,82 @@ public Transaction newTransaction() { return new TransactionImpl(this); } - static class ReadWriteTransactionCallable implements Callable { + static class TracedReadWriteTransactionCallable implements Callable { + private final Datastore datastore; + private final TransactionCallable callable; + private volatile TransactionOptions options; + private volatile Transaction transaction; + + private final TraceUtil.Span parentSpan; + + TracedReadWriteTransactionCallable( + Datastore datastore, + TransactionCallable callable, + TransactionOptions options, + @Nullable com.google.cloud.datastore.telemetry.TraceUtil.Span parentSpan) { + this.datastore = datastore; + this.callable = callable; + this.options = options; + this.transaction = null; + this.parentSpan = parentSpan; + } + + Datastore getDatastore() { + return datastore; + } + + TransactionOptions getOptions() { + return options; + } + + Transaction getTransaction() { + return transaction; + } + + void setPrevTransactionId(ByteString transactionId) { + TransactionOptions.ReadWrite readWrite = + TransactionOptions.ReadWrite.newBuilder().setPreviousTransaction(transactionId).build(); + options = options.toBuilder().setReadWrite(readWrite).build(); + } + @Override + public T call() throws DatastoreException { + try (io.opentelemetry.context.Scope ignored = + Context.current().with(parentSpan.getSpan()).makeCurrent()) { + transaction = datastore.newTransaction(options); + T value = callable.run(transaction); + transaction.commit(); + return value; + } catch (Exception ex) { + transaction.rollback(); + throw DatastoreException.propagateUserException(ex); + } finally { + if (transaction.isActive()) { + transaction.rollback(); + } + if (options != null + && options.getModeCase().equals(TransactionOptions.ModeCase.READ_WRITE)) { + setPrevTransactionId(transaction.getTransactionId()); + } + } + } + } + + @Override + public void close() throws Exception { + try { + datastoreRpc.close(); + } catch (Exception e) { + logger.log(Level.WARNING, "Failed to close channels", e); + } + } + + @Override + public boolean isClosed() { + return datastoreRpc.isClosed(); + } + + static class ReadWriteTransactionCallable implements Callable { private final Datastore datastore; private final TransactionCallable callable; private volatile TransactionOptions options; @@ -127,8 +231,8 @@ void setPrevTransactionId(ByteString transactionId) { @Override public T call() throws DatastoreException { - transaction = datastore.newTransaction(options); try { + transaction = datastore.newTransaction(options); T value = callable.run(transaction); transaction.commit(); return value; @@ -149,36 +253,47 @@ public T call() throws DatastoreException { @Override public T runInTransaction(final TransactionCallable callable) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_TRANSACTION); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { + TraceUtil.Span span = otelTraceUtil.startSpan(SPAN_NAME_TRANSACTION_RUN); + Callable transactionCallable = + (getOptions().getOpenTelemetryOptions().isEnabled() + ? new TracedReadWriteTransactionCallable( + this, callable, /* transactionOptions= */ null, span) + : new ReadWriteTransactionCallable(this, callable, /* transactionOptions= */ null)); + try (Scope ignored = span.makeCurrent()) { return RetryHelper.runWithRetries( - new ReadWriteTransactionCallable(this, callable, null), + transactionCallable, retrySettings, TRANSACTION_EXCEPTION_HANDLER, getOptions().getClock()); } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } @Override public T runInTransaction( final TransactionCallable callable, TransactionOptions transactionOptions) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_TRANSACTION); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { + TraceUtil.Span span = otelTraceUtil.startSpan(SPAN_NAME_TRANSACTION_RUN); + + Callable transactionCallable = + (getOptions().getOpenTelemetryOptions().isEnabled() + ? new TracedReadWriteTransactionCallable(this, callable, transactionOptions, span) + : new ReadWriteTransactionCallable(this, callable, transactionOptions)); + + try (Scope ignored = span.makeCurrent()) { return RetryHelper.runWithRetries( - new ReadWriteTransactionCallable(this, callable, transactionOptions), + transactionCallable, retrySettings, TRANSACTION_EXCEPTION_HANDLER, getOptions().getClock()); } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } @@ -236,20 +351,39 @@ public AggregationResults runAggregation( com.google.datastore.v1.RunQueryResponse runQuery( final com.google.datastore.v1.RunQueryRequest requestPb) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_RUNQUERY); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { - return RetryHelper.runWithRetries( - () -> datastoreRpc.runQuery(requestPb), - retrySettings, - requestPb.getReadOptions().getTransaction().isEmpty() - ? EXCEPTION_HANDLER - : TRANSACTION_OPERATION_EXCEPTION_HANDLER, - getOptions().getClock()); + ReadOptions readOptions = requestPb.getReadOptions(); + boolean isTransactional = readOptions.hasTransaction() || readOptions.hasNewTransaction(); + String spanName = (isTransactional ? SPAN_NAME_TRANSACTION_RUN_QUERY : SPAN_NAME_RUN_QUERY); + com.google.cloud.datastore.telemetry.TraceUtil.Span span = otelTraceUtil.startSpan(spanName); + + try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) { + RunQueryResponse response = + RetryHelper.runWithRetries( + () -> datastoreRpc.runQuery(requestPb), + retrySettings, + requestPb.getReadOptions().getTransaction().isEmpty() + ? EXCEPTION_HANDLER + : TRANSACTION_OPERATION_EXCEPTION_HANDLER, + getOptions().getClock()); + span.addEvent( + spanName + " complete.", + new ImmutableMap.Builder() + .put(ATTRIBUTES_KEY_DOCUMENT_COUNT, response.getBatch().getEntityResultsCount()) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, isTransactional) + .put(ATTRIBUTES_KEY_READ_CONSISTENCY, readOptions.getReadConsistency().toString()) + .put( + ATTRIBUTES_KEY_TRANSACTION_ID, + (isTransactional + ? requestPb.getReadOptions().getTransaction().toStringUtf8() + : "")) + .put(ATTRIBUTES_KEY_MORE_RESULTS, response.getBatch().getMoreResults().toString()) + .build()); + return response; } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } @@ -291,8 +425,9 @@ public List allocateId(IncompleteKey... keys) { private com.google.datastore.v1.AllocateIdsResponse allocateIds( final com.google.datastore.v1.AllocateIdsRequest requestPb) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_ALLOCATEIDS); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { + com.google.cloud.datastore.telemetry.TraceUtil.Span span = + otelTraceUtil.startSpan(SPAN_NAME_ALLOCATE_IDS); + try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) { return RetryHelper.runWithRetries( new Callable() { @Override @@ -304,10 +439,10 @@ public com.google.datastore.v1.AllocateIdsResponse call() throws DatastoreExcept EXCEPTION_HANDLER, getOptions().getClock()); } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } @@ -450,14 +585,27 @@ protected Entity computeNext() { com.google.datastore.v1.LookupResponse lookup( final com.google.datastore.v1.LookupRequest requestPb) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_LOOKUP); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { + ReadOptions readOptions = requestPb.getReadOptions(); + boolean isTransactional = readOptions.hasTransaction() || readOptions.hasNewTransaction(); + String spanName = (isTransactional ? SPAN_NAME_TRANSACTION_LOOKUP : SPAN_NAME_LOOKUP); + com.google.cloud.datastore.telemetry.TraceUtil.Span span = otelTraceUtil.startSpan(spanName); + + try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) { return RetryHelper.runWithRetries( - new Callable() { - @Override - public com.google.datastore.v1.LookupResponse call() throws DatastoreException { - return datastoreRpc.lookup(requestPb); - } + () -> { + com.google.datastore.v1.LookupResponse response = datastoreRpc.lookup(requestPb); + span.addEvent( + spanName + " complete.", + new ImmutableMap.Builder() + .put(ATTRIBUTES_KEY_RECEIVED, response.getFoundCount()) + .put(ATTRIBUTES_KEY_MISSING, response.getMissingCount()) + .put(ATTRIBUTES_KEY_DEFERRED, response.getDeferredCount()) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, isTransactional) + .put( + ATTRIBUTES_KEY_TRANSACTION_ID, + isTransactional ? readOptions.getTransaction().toStringUtf8() : "") + .build()); + return response; }, retrySettings, requestPb.getReadOptions().getTransaction().isEmpty() @@ -465,10 +613,10 @@ public com.google.datastore.v1.LookupResponse call() throws DatastoreException { : TRANSACTION_OPERATION_EXCEPTION_HANDLER, getOptions().getClock()); } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } @@ -492,8 +640,9 @@ public List reserveIds(Key... keys) { com.google.datastore.v1.ReserveIdsResponse reserveIds( final com.google.datastore.v1.ReserveIdsRequest requestPb) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_RESERVEIDS); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { + com.google.cloud.datastore.telemetry.TraceUtil.Span span = + otelTraceUtil.startSpan(SPAN_NAME_RESERVE_IDS); + try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) { return RetryHelper.runWithRetries( new Callable() { @Override @@ -505,10 +654,10 @@ public com.google.datastore.v1.ReserveIdsResponse call() throws DatastoreExcepti EXCEPTION_HANDLER, getOptions().getClock()); } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } @@ -602,20 +751,34 @@ private com.google.datastore.v1.CommitResponse commitMutation( com.google.datastore.v1.CommitResponse commit( final com.google.datastore.v1.CommitRequest requestPb) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_COMMIT); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { - return RetryHelper.runWithRetries( - () -> datastoreRpc.commit(requestPb), - retrySettings, - requestPb.getTransaction().isEmpty() - ? EXCEPTION_HANDLER - : TRANSACTION_OPERATION_EXCEPTION_HANDLER, - getOptions().getClock()); + final boolean isTransactional = + requestPb.hasTransaction() || requestPb.hasSingleUseTransaction(); + final String spanName = isTransactional ? SPAN_NAME_TRANSACTION_COMMIT : SPAN_NAME_COMMIT; + com.google.cloud.datastore.telemetry.TraceUtil.Span span = otelTraceUtil.startSpan(spanName); + try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) { + CommitResponse response = + RetryHelper.runWithRetries( + () -> datastoreRpc.commit(requestPb), + retrySettings, + requestPb.getTransaction().isEmpty() + ? EXCEPTION_HANDLER + : TRANSACTION_OPERATION_EXCEPTION_HANDLER, + getOptions().getClock()); + span.addEvent( + spanName + " complete.", + new ImmutableMap.Builder() + .put(ATTRIBUTES_KEY_DOCUMENT_COUNT, response.getMutationResultsCount()) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, isTransactional) + .put( + ATTRIBUTES_KEY_TRANSACTION_ID, + isTransactional ? requestPb.getTransaction().toStringUtf8() : "") + .build()); + return response; } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } @@ -626,24 +789,19 @@ ByteString requestTransactionId( com.google.datastore.v1.BeginTransactionResponse beginTransaction( final com.google.datastore.v1.BeginTransactionRequest requestPb) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_BEGINTRANSACTION); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { + com.google.cloud.datastore.telemetry.TraceUtil.Span span = + otelTraceUtil.startSpan(SPAN_NAME_BEGIN_TRANSACTION); + try (com.google.cloud.datastore.telemetry.TraceUtil.Scope scope = span.makeCurrent()) { return RetryHelper.runWithRetries( - new Callable() { - @Override - public com.google.datastore.v1.BeginTransactionResponse call() - throws DatastoreException { - return datastoreRpc.beginTransaction(requestPb); - } - }, + () -> datastoreRpc.beginTransaction(requestPb), retrySettings, EXCEPTION_HANDLER, getOptions().getClock()); } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } @@ -657,8 +815,9 @@ void rollbackTransaction(ByteString transaction) { } void rollback(final com.google.datastore.v1.RollbackRequest requestPb) { - Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_ROLLBACK); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { + com.google.cloud.datastore.telemetry.TraceUtil.Span span = + otelTraceUtil.startSpan(SPAN_NAME_ROLLBACK); + try (Scope scope = span.makeCurrent()) { RetryHelper.runWithRetries( new Callable() { @Override @@ -670,11 +829,16 @@ public Void call() throws DatastoreException { retrySettings, EXCEPTION_HANDLER, getOptions().getClock()); + span.addEvent( + SPAN_NAME_ROLLBACK, + new ImmutableMap.Builder() + .put(ATTRIBUTES_KEY_TRANSACTION_ID, requestPb.getTransaction().toStringUtf8()) + .build()); } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOpenTelemetryOptions.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOpenTelemetryOptions.java new file mode 100644 index 000000000..ac266562e --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOpenTelemetryOptions.java @@ -0,0 +1,97 @@ +/* + * 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. + */ + +package com.google.cloud.datastore; + +import io.opentelemetry.api.OpenTelemetry; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +public class DatastoreOpenTelemetryOptions { + private final boolean enabled; + private final @Nullable OpenTelemetry openTelemetry; + + DatastoreOpenTelemetryOptions(Builder builder) { + this.enabled = builder.enabled; + this.openTelemetry = builder.openTelemetry; + } + + public boolean isEnabled() { + return enabled; + } + + @Nullable + public OpenTelemetry getOpenTelemetry() { + return openTelemetry; + } + + @Nonnull + public DatastoreOpenTelemetryOptions.Builder toBuilder() { + return new DatastoreOpenTelemetryOptions.Builder(this); + } + + @Nonnull + public static DatastoreOpenTelemetryOptions.Builder newBuilder() { + return new DatastoreOpenTelemetryOptions.Builder(); + } + + public static class Builder { + + private boolean enabled; + + @Nullable private OpenTelemetry openTelemetry; + + private Builder() { + enabled = false; + openTelemetry = null; + } + + private Builder(DatastoreOpenTelemetryOptions options) { + this.enabled = options.enabled; + this.openTelemetry = options.openTelemetry; + } + + @Nonnull + public DatastoreOpenTelemetryOptions build() { + return new DatastoreOpenTelemetryOptions(this); + } + + /** + * Sets whether tracing should be enabled. + * + * @param enabled Whether tracing should be enabled. + */ + @Nonnull + public DatastoreOpenTelemetryOptions.Builder setTracingEnabled(boolean enabled) { + this.enabled = enabled; + return this; + } + + /** + * Sets the {@link OpenTelemetry} to use with this Datastore instance. If telemetry collection + * is enabled, but an `OpenTelemetry` is not provided, the Datastore SDK will attempt to use the + * `GlobalOpenTelemetry`. + * + * @param openTelemetry The OpenTelemetry that should be used by this Datastore instance. + */ + @Nonnull + public DatastoreOpenTelemetryOptions.Builder setOpenTelemetry( + @Nonnull OpenTelemetry openTelemetry) { + this.openTelemetry = openTelemetry; + return this; + } + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java index 8437c3e22..1ea79298c 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java @@ -18,19 +18,29 @@ import static com.google.cloud.datastore.Validator.validateNamespace; +import com.google.api.core.BetaApi; +import com.google.api.gax.grpc.ChannelPoolSettings; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.api.gax.rpc.TransportChannelProvider; import com.google.cloud.ServiceDefaults; import com.google.cloud.ServiceOptions; import com.google.cloud.ServiceRpc; import com.google.cloud.TransportOptions; import com.google.cloud.datastore.spi.DatastoreRpcFactory; import com.google.cloud.datastore.spi.v1.DatastoreRpc; +import com.google.cloud.datastore.spi.v1.GrpcDatastoreRpc; import com.google.cloud.datastore.spi.v1.HttpDatastoreRpc; +import com.google.cloud.datastore.v1.DatastoreSettings; +import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.http.HttpTransportOptions; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableSet; +import java.io.IOException; import java.lang.reflect.Method; import java.util.Objects; import java.util.Set; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; public class DatastoreOptions extends ServiceOptions { @@ -39,10 +49,20 @@ public class DatastoreOptions extends ServiceOptions SCOPES = ImmutableSet.of(DATASTORE_SCOPE); private static final String DEFAULT_DATABASE_ID = ""; + public static final String PROJECT_ID_ENV_VAR = "DATASTORE_PROJECT_ID"; + public static final String LOCAL_HOST_ENV_VAR = "DATASTORE_EMULATOR_HOST"; + public static final int INIT_CHANNEL_COUNT = 1; + public static final int MIN_CHANNEL_COUNT = 1; + public static final int MAX_CHANNEL_COUNT = 4; + + private transient TransportChannelProvider channelProvider = null; private final String namespace; private final String databaseId; + private final transient @Nonnull DatastoreOpenTelemetryOptions openTelemetryOptions; + private final transient @Nonnull com.google.cloud.datastore.telemetry.TraceUtil traceUtil; + public static class DefaultDatastoreFactory implements DatastoreFactory { private static final DatastoreFactory INSTANCE = new DefaultDatastoreFactory(); @@ -59,21 +79,47 @@ public static class DefaultDatastoreRpcFactory implements DatastoreRpcFactory { @Override public ServiceRpc create(DatastoreOptions options) { - return new HttpDatastoreRpc(options); + try { + if (options.getTransportOptions() instanceof GrpcTransportOptions) { + return new GrpcDatastoreRpc(options); + } else { + return new HttpDatastoreRpc(options); + } + } catch (IOException e) { + throw new RuntimeException(e); + } } } + @Nonnull + com.google.cloud.datastore.telemetry.TraceUtil getTraceUtil() { + return traceUtil; + } + + @BetaApi + @Nonnull + public DatastoreOpenTelemetryOptions getOpenTelemetryOptions() { + return openTelemetryOptions; + } + public static class Builder extends ServiceOptions.Builder { private String namespace; private String databaseId; + private TransportChannelProvider channelProvider = null; + private String host; + private TransportOptions transportOptions; + + @Nullable private DatastoreOpenTelemetryOptions openTelemetryOptions = null; private Builder() {} private Builder(DatastoreOptions options) { super(options); - namespace = options.namespace; - databaseId = options.databaseId; + this.namespace = options.namespace; + this.databaseId = options.databaseId; + this.openTelemetryOptions = options.openTelemetryOptions; + this.channelProvider = validateChannelProvider(options.channelProvider); } @Override @@ -82,11 +128,47 @@ public Builder setTransportOptions(TransportOptions transportOptions) { throw new IllegalArgumentException( "Only http transport is allowed for " + API_SHORT_NAME + "."); } + this.transportOptions = transportOptions; return super.setTransportOptions(transportOptions); } + /** + * Sets the transport to gRPC. Note this functionality is experimental and subject to change. + */ + @BetaApi + public Builder setTransportOptions(GrpcTransportOptions transportOptions) { + this.transportOptions = transportOptions; + return super.setTransportOptions(transportOptions); + } + + @Override + public Builder setHost(String host) { + this.host = host; + return super.setHost(host); + } + + /** + * Sets the {@link TransportChannelProvider} to use with this Datastore client. + * + *

This is only compatible with clients using a gRPC transport (see {@code + * DatastoreOptions#setTransportOptions(GrpcTransportOptions)} for more details). + * + *

This functionality is experimental and subject to change. + * + * @param channelProvider A InstantiatingGrpcChannelProvider object that defines the transport + * provider for this client. + */ + @BetaApi + public Builder setChannelProvider(TransportChannelProvider channelProvider) { + this.channelProvider = validateChannelProvider(channelProvider); + return this; + } + @Override public DatastoreOptions build() { + if (this.host == null && this.transportOptions instanceof GrpcTransportOptions) { + this.setHost(DatastoreSettings.getDefaultEndpoint()); + } return new DatastoreOptions(this); } @@ -100,33 +182,81 @@ public Builder setDatabaseId(String databaseId) { this.databaseId = databaseId; return this; } + + /** + * Sets the {@link DatastoreOpenTelemetryOptions} to be used for this Firestore instance. + * + * @param openTelemetryOptions The `DatastoreOpenTelemetryOptions` to use. + */ + @BetaApi + @Nonnull + public Builder setOpenTelemetryOptions( + @Nonnull DatastoreOpenTelemetryOptions openTelemetryOptions) { + this.openTelemetryOptions = openTelemetryOptions; + return this; + } + } + + private static TransportChannelProvider validateChannelProvider( + TransportChannelProvider channelProvider) { + if (channelProvider != null && !(channelProvider instanceof InstantiatingGrpcChannelProvider)) { + throw new IllegalArgumentException( + "Only GRPC channels are allowed for " + API_SHORT_NAME + "."); + } + return channelProvider; } private DatastoreOptions(Builder builder) { super(DatastoreFactory.class, DatastoreRpcFactory.class, builder, new DatastoreDefaults()); + + this.openTelemetryOptions = + builder.openTelemetryOptions != null + ? builder.openTelemetryOptions + : DatastoreOpenTelemetryOptions.newBuilder().build(); + this.traceUtil = com.google.cloud.datastore.telemetry.TraceUtil.getInstance(this); + namespace = MoreObjects.firstNonNull(builder.namespace, defaultNamespace()); databaseId = MoreObjects.firstNonNull(builder.databaseId, DEFAULT_DATABASE_ID); + + if (getTransportOptions() instanceof HttpTransportOptions && builder.channelProvider != null) { + throw new IllegalArgumentException( + "Only gRPC transport allows setting of channel provider or credentials provider"); + } else if (getTransportOptions() instanceof GrpcTransportOptions) { + // For grpc transport options, configure default gRPC Connection pool with minChannelCount = 1 + // and maxChannelCount = 4 + this.channelProvider = + builder.channelProvider != null + ? builder.channelProvider + : GrpcTransportOptions.setUpChannelProvider( + DatastoreSettings.defaultGrpcTransportProviderBuilder() + .setChannelPoolSettings( + ChannelPoolSettings.builder() + .setInitialChannelCount(INIT_CHANNEL_COUNT) + .setMinChannelCount(MIN_CHANNEL_COUNT) + .setMaxChannelCount(MAX_CHANNEL_COUNT) + .build()), + this); + } + } + + public TransportChannelProvider getTransportChannelProvider() { + return channelProvider; } @Override protected String getDefaultHost() { - String host = - System.getProperty( - com.google.datastore.v1.client.DatastoreHelper.LOCAL_HOST_ENV_VAR, - System.getenv(com.google.datastore.v1.client.DatastoreHelper.LOCAL_HOST_ENV_VAR)); + String host = System.getProperty(LOCAL_HOST_ENV_VAR, System.getenv(LOCAL_HOST_ENV_VAR)); return host != null ? host : com.google.datastore.v1.client.DatastoreFactory.DEFAULT_HOST; } @Override protected String getDefaultProject() { - String projectId = - System.getProperty( - com.google.datastore.v1.client.DatastoreHelper.PROJECT_ID_ENV_VAR, - System.getenv(com.google.datastore.v1.client.DatastoreHelper.PROJECT_ID_ENV_VAR)); + String projectId = System.getProperty(PROJECT_ID_ENV_VAR, System.getenv(PROJECT_ID_ENV_VAR)); return projectId != null ? projectId : super.getDefaultProject(); } private static class DatastoreDefaults implements ServiceDefaults { + private final TransportOptions TRANSPORT_OPTIONS = getDefaultTransportOptionsBuilder().build(); @Override public DatastoreFactory getDefaultServiceFactory() { @@ -140,7 +270,11 @@ public DatastoreRpcFactory getDefaultRpcFactory() { @Override public TransportOptions getDefaultTransportOptions() { - return getDefaultHttpTransportOptions(); + return TRANSPORT_OPTIONS; + } + + public static HttpTransportOptions.Builder getDefaultTransportOptionsBuilder() { + return HttpTransportOptions.newBuilder(); } } @@ -148,6 +282,10 @@ public static HttpTransportOptions getDefaultHttpTransportOptions() { return HttpTransportOptions.newBuilder().build(); } + public static GrpcTransportOptions getDefaultGrpcTransportOptions() { + return GrpcTransportOptions.newBuilder().build(); + } + /** Returns the default namespace to be used by the datastore service. */ public String getNamespace() { return namespace; diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReader.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReader.java index 8aef7f5c0..c3137a9a7 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReader.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReader.java @@ -17,11 +17,13 @@ package com.google.cloud.datastore; import com.google.api.core.BetaApi; +import com.google.api.core.InternalExtensionOnly; import com.google.cloud.datastore.models.ExplainOptions; import java.util.Iterator; import java.util.List; /** An interface to represent Google Cloud Datastore read operations. */ +@InternalExtensionOnly public interface DatastoreReader { /** @@ -61,9 +63,7 @@ public interface DatastoreReader { * * @throws DatastoreException upon failure */ - default AggregationResults runAggregation(AggregationQuery query) { - throw new UnsupportedOperationException("Not implemented."); - } + AggregationResults runAggregation(AggregationQuery query); /** * Submits a {@link AggregationQuery} with a specified {@link @@ -72,7 +72,5 @@ default AggregationResults runAggregation(AggregationQuery query) { * @throws DatastoreException upon failure */ @BetaApi - default AggregationResults runAggregation(AggregationQuery query, ExplainOptions explainOptions) { - throw new UnsupportedOperationException("Not implemented."); - } + AggregationResults runAggregation(AggregationQuery query, ExplainOptions explainOptions); } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReaderWriter.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReaderWriter.java index a51a5aa77..bc8700c70 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReaderWriter.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreReaderWriter.java @@ -16,5 +16,8 @@ package com.google.cloud.datastore; +import com.google.api.core.InternalExtensionOnly; + /** An interface that combines both Google Cloud Datastore read and write operations. */ +@InternalExtensionOnly public interface DatastoreReaderWriter extends DatastoreReader, DatastoreWriter {} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreUtils.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreUtils.java new file mode 100644 index 000000000..e991fd51d --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreUtils.java @@ -0,0 +1,57 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.datastore; + +import com.google.api.core.InternalApi; +import com.google.cloud.NoCredentials; +import com.google.common.base.Strings; +import java.net.InetAddress; +import java.net.URL; + +@InternalApi +public class DatastoreUtils { + + public static boolean isEmulator(DatastoreOptions datastoreOptions) { + return isLocalHost(datastoreOptions.getHost()) + || NoCredentials.getInstance().equals(datastoreOptions.getCredentials()); + } + + public static boolean isLocalHost(String host) { + if (Strings.isNullOrEmpty(host)) { + return false; + } + try { + String normalizedHost = "http://" + removeScheme(host); + InetAddress hostAddr = InetAddress.getByName(new URL(normalizedHost).getHost()); + return hostAddr.isAnyLocalAddress() || hostAddr.isLoopbackAddress(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static String removeScheme(String url) { + if (url != null) { + url = url.toLowerCase(); + if (url.startsWith("https://")) { + return url.substring("https://".length()); + } else if (url.startsWith("http://")) { + return url.substring("http://".length()); + } + } + return url; + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreWriter.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreWriter.java index 6c1d6fdbc..b414995e6 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreWriter.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreWriter.java @@ -16,9 +16,11 @@ package com.google.cloud.datastore; +import com.google.api.core.InternalExtensionOnly; import java.util.List; /** An interface to represent Google Cloud Datastore write operations. */ +@InternalExtensionOnly public interface DatastoreWriter { /** diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/GrpcToDatastoreCodeTranslation.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/GrpcToDatastoreCodeTranslation.java new file mode 100644 index 000000000..1d63fb19a --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/GrpcToDatastoreCodeTranslation.java @@ -0,0 +1,93 @@ +/* + * 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. + */ +package com.google.cloud.datastore; + +import com.google.api.gax.grpc.GrpcStatusCode; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.rpc.Code; +import io.grpc.Status; +import java.util.Map; +import java.util.function.Function; + +final class GrpcToDatastoreCodeTranslation { + /** Mappings between gRPC status codes and their corresponding code numbers. */ + private static final ImmutableList STATUS_CODE_MAPPINGS = + ImmutableList.of( + StatusCodeMapping.of(Code.OK.getNumber(), Status.Code.OK), + StatusCodeMapping.of(Code.DATA_LOSS.getNumber(), Status.Code.DATA_LOSS), + StatusCodeMapping.of(Code.INVALID_ARGUMENT.getNumber(), Status.Code.INVALID_ARGUMENT), + StatusCodeMapping.of(Code.OUT_OF_RANGE.getNumber(), Status.Code.OUT_OF_RANGE), + StatusCodeMapping.of(Code.UNAUTHENTICATED.getNumber(), Status.Code.UNAUTHENTICATED), + StatusCodeMapping.of(Code.PERMISSION_DENIED.getNumber(), Status.Code.PERMISSION_DENIED), + StatusCodeMapping.of(Code.NOT_FOUND.getNumber(), Status.Code.NOT_FOUND), + StatusCodeMapping.of(Code.ALREADY_EXISTS.getNumber(), Status.Code.ALREADY_EXISTS), + StatusCodeMapping.of( + Code.FAILED_PRECONDITION.getNumber(), Status.Code.FAILED_PRECONDITION), + StatusCodeMapping.of(Code.RESOURCE_EXHAUSTED.getNumber(), Status.Code.RESOURCE_EXHAUSTED), + StatusCodeMapping.of(Code.INTERNAL.getNumber(), Status.Code.INTERNAL), + StatusCodeMapping.of(Code.UNIMPLEMENTED.getNumber(), Status.Code.UNIMPLEMENTED), + StatusCodeMapping.of(Code.UNAVAILABLE.getNumber(), Status.Code.UNAVAILABLE), + StatusCodeMapping.of(Code.DEADLINE_EXCEEDED.getNumber(), Status.Code.DEADLINE_EXCEEDED), + StatusCodeMapping.of(Code.ABORTED.getNumber(), Status.Code.ABORTED), + StatusCodeMapping.of(Code.CANCELLED.getNumber(), Status.Code.CANCELLED), + StatusCodeMapping.of(Code.UNKNOWN.getNumber(), Status.Code.UNKNOWN)); + + /** Index our {@link StatusCodeMapping} for constant time lookup by {@link Status.Code} */ + private static final Map GRPC_CODE_INDEX = + STATUS_CODE_MAPPINGS.stream() + .collect( + ImmutableMap.toImmutableMap(StatusCodeMapping::getGrpcCode, Function.identity())); + + static int grpcCodeToDatastoreStatusCode(Status.Code code) { + StatusCodeMapping found = GRPC_CODE_INDEX.get(code); + // theoretically it's possible for gRPC to add a new code we haven't mapped here, if this + // happens fall through to our default of 0 + if (found != null) { + return found.getDatastoreCode(); + } else { + return 0; + } + } + + /** + * Simple tuple class to bind together our corresponding http status code and {@link Status.Code} + * while providing easy access to the correct {@link GrpcStatusCode} where necessary. + */ + private static final class StatusCodeMapping { + + private final int datastoreCode; + + private final Status.Code grpcCode; + + private StatusCodeMapping(int datastoreCode, Status.Code grpcCode) { + this.datastoreCode = datastoreCode; + this.grpcCode = grpcCode; + } + + public int getDatastoreCode() { + return datastoreCode; + } + + public Status.Code getGrpcCode() { + return grpcCode; + } + + static StatusCodeMapping of(int datastoreCode, Status.Code grpcCode) { + return new StatusCodeMapping(datastoreCode, grpcCode); + } + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/IncompleteKey.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/IncompleteKey.java index db9973cb5..71e31b94d 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/IncompleteKey.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/IncompleteKey.java @@ -91,9 +91,11 @@ public Key getParent() { PathElement parent = ancestors.get(ancestors.size() - 1); Key.Builder keyBuilder; if (parent.hasName()) { - keyBuilder = Key.newBuilder(getProjectId(), parent.getKind(), parent.getName()); + keyBuilder = + Key.newBuilder(getProjectId(), parent.getKind(), parent.getName(), getDatabaseId()); } else { - keyBuilder = Key.newBuilder(getProjectId(), parent.getKind(), parent.getId()); + keyBuilder = + Key.newBuilder(getProjectId(), parent.getKind(), parent.getId(), getDatabaseId()); } String namespace = getNamespace(); if (namespace != null) { diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Key.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Key.java index 9e851d0cb..14fe264bb 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Key.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Key.java @@ -145,7 +145,7 @@ public Object getNameOrId() { /** Returns the key in an encoded form that can be used as part of a URL. */ public String toUrlSafe() { try { - return URLEncoder.encode(TextFormat.printToString(toPb()), UTF_8.name()); + return URLEncoder.encode(TextFormat.printer().printToString(toPb()), UTF_8.name()); } catch (UnsupportedEncodingException e) { throw new IllegalStateException("Unexpected encoding exception", e); } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResults.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResults.java index 50433a6a9..ca5b240ad 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResults.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/QueryResults.java @@ -17,6 +17,7 @@ package com.google.cloud.datastore; import com.google.api.core.BetaApi; +import com.google.api.core.InternalExtensionOnly; import com.google.cloud.datastore.models.ExplainMetrics; import com.google.datastore.v1.QueryResultBatch; import java.util.Iterator; @@ -31,6 +32,7 @@ * * @param the type of the results value. */ +@InternalExtensionOnly public interface QueryResults extends Iterator { /** Returns the actual class of the result's values. */ @@ -75,7 +77,5 @@ public interface QueryResults extends Iterator { QueryResultBatch.MoreResultsType getMoreResults(); @BetaApi - default Optional getExplainMetrics() { - throw new UnsupportedOperationException("Not implemented."); - } + Optional getExplainMetrics(); } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/RetryAndTraceDatastoreRpcDecorator.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/RetryAndTraceDatastoreRpcDecorator.java index c4a85caab..630ddd225 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/RetryAndTraceDatastoreRpcDecorator.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/RetryAndTraceDatastoreRpcDecorator.java @@ -16,13 +16,13 @@ package com.google.cloud.datastore; import static com.google.cloud.BaseService.EXCEPTION_HANDLER; -import static com.google.cloud.datastore.TraceUtil.SPAN_NAME_RUN_AGGREGATION_QUERY; import com.google.api.core.InternalApi; import com.google.api.gax.retrying.RetrySettings; import com.google.cloud.RetryHelper; import com.google.cloud.RetryHelper.RetryHelperException; import com.google.cloud.datastore.spi.v1.DatastoreRpc; +import com.google.cloud.datastore.telemetry.TraceUtil; import com.google.datastore.v1.AllocateIdsRequest; import com.google.datastore.v1.AllocateIdsResponse; import com.google.datastore.v1.BeginTransactionRequest; @@ -31,6 +31,7 @@ import com.google.datastore.v1.CommitResponse; import com.google.datastore.v1.LookupRequest; import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.ReadOptions; import com.google.datastore.v1.ReserveIdsRequest; import com.google.datastore.v1.ReserveIdsResponse; import com.google.datastore.v1.RollbackRequest; @@ -39,9 +40,6 @@ import com.google.datastore.v1.RunAggregationQueryResponse; import com.google.datastore.v1.RunQueryRequest; import com.google.datastore.v1.RunQueryResponse; -import io.opencensus.common.Scope; -import io.opencensus.trace.Span; -import io.opencensus.trace.Status; import java.util.concurrent.Callable; /** @@ -52,19 +50,19 @@ public class RetryAndTraceDatastoreRpcDecorator implements DatastoreRpc { private final DatastoreRpc datastoreRpc; - private final TraceUtil traceUtil; + private final com.google.cloud.datastore.telemetry.TraceUtil otelTraceUtil; private final RetrySettings retrySettings; private final DatastoreOptions datastoreOptions; public RetryAndTraceDatastoreRpcDecorator( DatastoreRpc datastoreRpc, - TraceUtil traceUtil, + TraceUtil otelTraceUtil, RetrySettings retrySettings, DatastoreOptions datastoreOptions) { this.datastoreRpc = datastoreRpc; - this.traceUtil = traceUtil; this.retrySettings = retrySettings; this.datastoreOptions = datastoreOptions; + this.otelTraceUtil = otelTraceUtil; } @Override @@ -105,20 +103,36 @@ public RunQueryResponse runQuery(RunQueryRequest request) { @Override public RunAggregationQueryResponse runAggregationQuery(RunAggregationQueryRequest request) { - return invokeRpc( - () -> datastoreRpc.runAggregationQuery(request), SPAN_NAME_RUN_AGGREGATION_QUERY); + ReadOptions readOptions = request.getReadOptions(); + boolean isTransactional = readOptions.hasTransaction() || readOptions.hasNewTransaction(); + String spanName = + (isTransactional + ? com.google.cloud.datastore.telemetry.TraceUtil + .SPAN_NAME_TRANSACTION_RUN_AGGREGATION_QUERY + : com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_RUN_AGGREGATION_QUERY); + return invokeRpc(() -> datastoreRpc.runAggregationQuery(request), spanName); + } + + @Override + public void close() throws Exception { + datastoreRpc.close(); + } + + @Override + public boolean isClosed() { + return datastoreRpc.isClosed(); } public O invokeRpc(Callable block, String startSpan) { - Span span = traceUtil.startSpan(startSpan); - try (Scope scope = traceUtil.getTracer().withSpan(span)) { + com.google.cloud.datastore.telemetry.TraceUtil.Span span = otelTraceUtil.startSpan(startSpan); + try (com.google.cloud.datastore.telemetry.TraceUtil.Scope ignored = span.makeCurrent()) { return RetryHelper.runWithRetries( block, this.retrySettings, EXCEPTION_HANDLER, this.datastoreOptions.getClock()); } catch (RetryHelperException e) { - span.setStatus(Status.UNKNOWN.withDescription(e.getMessage())); + span.end(e); throw DatastoreException.translateAndThrow(e); } finally { - span.end(TraceUtil.END_SPAN_OPTIONS); + span.end(); } } } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/StructuredQuery.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/StructuredQuery.java index 30cd05759..5bde80ed6 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/StructuredQuery.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/StructuredQuery.java @@ -27,6 +27,7 @@ import com.google.api.core.ApiFunction; import com.google.api.core.InternalApi; +import com.google.api.core.InternalExtensionOnly; import com.google.cloud.StringEnumType; import com.google.cloud.StringEnumValue; import com.google.cloud.Timestamp; @@ -700,6 +701,7 @@ public String toString() { * * @param the type of result the query returns. */ + @InternalExtensionOnly public interface Builder { /** Sets the namespace for the query. */ diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TraceUtil.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TraceUtil.java deleted file mode 100644 index 57525d15d..000000000 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TraceUtil.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2020 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.cloud.datastore; - -import com.google.cloud.datastore.spi.v1.HttpDatastoreRpc; -import io.opencensus.trace.EndSpanOptions; -import io.opencensus.trace.Span; -import io.opencensus.trace.Tracer; -import io.opencensus.trace.Tracing; - -/** - * Helper class for tracing utility. It is used for instrumenting {@link HttpDatastoreRpc} with - * OpenCensus APIs. - * - *

TraceUtil instances are created by the {@link TraceUtil#getInstance()} method. - */ -public class TraceUtil { - private final Tracer tracer = Tracing.getTracer(); - private static final TraceUtil traceUtil = new TraceUtil(); - static final String SPAN_NAME_ALLOCATEIDS = "CloudDatastoreOperation.allocateIds"; - static final String SPAN_NAME_TRANSACTION = "CloudDatastoreOperation.readWriteTransaction"; - static final String SPAN_NAME_BEGINTRANSACTION = "CloudDatastoreOperation.beginTransaction"; - static final String SPAN_NAME_COMMIT = "CloudDatastoreOperation.commit"; - static final String SPAN_NAME_LOOKUP = "CloudDatastoreOperation.lookup"; - static final String SPAN_NAME_RESERVEIDS = "CloudDatastoreOperation.reserveIds"; - static final String SPAN_NAME_ROLLBACK = "CloudDatastoreOperation.rollback"; - static final String SPAN_NAME_RUNQUERY = "CloudDatastoreOperation.runQuery"; - static final String SPAN_NAME_RUN_AGGREGATION_QUERY = - "CloudDatastoreOperation.runAggregationQuery"; - static final EndSpanOptions END_SPAN_OPTIONS = - EndSpanOptions.builder().setSampleToLocalSpanStore(true).build(); - - /** - * Starts a new span. - * - * @param spanName The name of the returned Span. - * @return The newly created {@link Span}. - */ - protected Span startSpan(String spanName) { - return tracer.spanBuilder(spanName).startSpan(); - } - - /** - * Return the global {@link Tracer}. - * - * @return The global {@link Tracer}. - */ - public Tracer getTracer() { - return tracer; - } - - /** - * Return TraceUtil Object. - * - * @return An instance of {@link TraceUtil} - */ - public static TraceUtil getInstance() { - return traceUtil; - } - - private TraceUtil() {} -} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java index 7b6a67a2d..697e7a6ff 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/Transaction.java @@ -17,6 +17,7 @@ package com.google.cloud.datastore; import com.google.api.core.BetaApi; +import com.google.api.core.InternalExtensionOnly; import com.google.cloud.datastore.models.ExplainOptions; import com.google.protobuf.ByteString; import java.util.Iterator; @@ -63,6 +64,7 @@ * This class too should not be treated as a thread safe class. */ @NotThreadSafe +@InternalExtensionOnly public interface Transaction extends DatastoreBatchWriter, DatastoreReaderWriter { interface Response { @@ -179,9 +181,7 @@ interface Response { QueryResults run(Query query); @BetaApi - default QueryResults run(Query query, ExplainOptions explainOptions) { - throw new UnsupportedOperationException("Not implemented."); - } + QueryResults run(Query query, ExplainOptions explainOptions); /** * Datastore add operation. This method will also allocate id for any entity with an incomplete diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java index f08a908ec..e730db81f 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/TransactionImpl.java @@ -20,6 +20,7 @@ import com.google.api.core.BetaApi; import com.google.cloud.datastore.models.ExplainOptions; +import com.google.cloud.datastore.telemetry.TraceUtil; import com.google.common.collect.ImmutableList; import com.google.datastore.v1.ReadOptions; import com.google.datastore.v1.TransactionOptions; @@ -28,6 +29,7 @@ import java.util.Iterator; import java.util.List; import java.util.Optional; +import javax.annotation.Nonnull; final class TransactionImpl extends BaseDatastoreBatchWriter implements Transaction { @@ -37,6 +39,8 @@ final class TransactionImpl extends BaseDatastoreBatchWriter implements Transact private final ReadOptionProtoPreparer readOptionProtoPreparer; + @Nonnull private final TraceUtil traceUtil; + static class ResponseImpl implements Transaction.Response { private final com.google.datastore.v1.CommitResponse response; @@ -78,6 +82,7 @@ public List getGeneratedKeys() { transactionId = datastore.requestTransactionId(requestPb); this.readOptionProtoPreparer = new ReadOptionProtoPreparer(); + this.traceUtil = datastore.getOptions().getTraceUtil(); } @Override diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ValueBuilder.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ValueBuilder.java index 3c60ef409..315728147 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ValueBuilder.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/ValueBuilder.java @@ -16,6 +16,7 @@ package com.google.cloud.datastore; +import com.google.api.core.InternalExtensionOnly; import com.google.cloud.GcpLaunchStage; /** @@ -25,6 +26,7 @@ * @param

the value type. * @param the value type's associated builder. */ +@InternalExtensionOnly public interface ValueBuilder, B extends ValueBuilder> { ValueType getValueType(); diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClient.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClient.java index 2e58d6679..9ef7f1edf 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClient.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClient.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/DatastoreAdminSettings.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/DatastoreAdminSettings.java index 4bae1f6f3..35f993cc8 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/DatastoreAdminSettings.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/DatastoreAdminSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -65,7 +65,9 @@ *

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 total timeout of getIndex to 30 seconds: + *

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

{@code
  * // This snippet has been automatically generated and should be regarded as a code template only.
@@ -82,10 +84,47 @@
  *             .getIndexSettings()
  *             .getRetrySettings()
  *             .toBuilder()
- *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .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());
  * DatastoreAdminSettings datastoreAdminSettings = datastoreAdminSettingsBuilder.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. + * + *

To configure the RetrySettings of a Long Running Operation method, create an + * OperationTimedPollAlgorithm object and update the RPC's polling algorithm. For example, to + * configure the RetrySettings for exportEntities: + * + *

{@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
+ * DatastoreAdminSettings.Builder datastoreAdminSettingsBuilder =
+ *     DatastoreAdminSettings.newBuilder();
+ * TimedRetryAlgorithm timedRetryAlgorithm =
+ *     OperationalTimedPollAlgorithm.create(
+ *         RetrySettings.newBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofMillis(500))
+ *             .setRetryDelayMultiplier(1.5)
+ *             .setMaxRetryDelayDuration(Duration.ofMillis(5000))
+ *             .setTotalTimeoutDuration(Duration.ofHours(24))
+ *             .build());
+ * datastoreAdminSettingsBuilder
+ *     .createClusterOperationSettings()
+ *     .setPollingAlgorithm(timedRetryAlgorithm)
+ *     .build();
+ * }
*/ @Generated("by gapic-generator-java") public class DatastoreAdminSettings extends ClientSettings { diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/package-info.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/package-info.java index bf70b678a..73f593170 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/package-info.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/DatastoreAdminStub.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/DatastoreAdminStub.java index 90c3c45f9..e5a17cc7d 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/DatastoreAdminStub.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/DatastoreAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/DatastoreAdminStubSettings.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/DatastoreAdminStubSettings.java index 64ad035d8..77314c4bc 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/DatastoreAdminStubSettings.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/DatastoreAdminStubSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -21,6 +21,7 @@ import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; 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; @@ -66,9 +67,9 @@ import com.google.longrunning.Operation; import com.google.protobuf.Empty; import java.io.IOException; +import java.time.Duration; import java.util.List; import javax.annotation.Generated; -import org.threeten.bp.Duration; // AUTO-GENERATED DOCUMENTATION AND CLASS. /** @@ -85,7 +86,9 @@ *

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 total timeout of getIndex to 30 seconds: + *

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

{@code
  * // This snippet has been automatically generated and should be regarded as a code template only.
@@ -102,10 +105,47 @@
  *             .getIndexSettings()
  *             .getRetrySettings()
  *             .toBuilder()
- *             .setTotalTimeout(Duration.ofSeconds(30))
+ *             .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());
  * DatastoreAdminStubSettings datastoreAdminSettings = datastoreAdminSettingsBuilder.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. + * + *

To configure the RetrySettings of a Long Running Operation method, create an + * OperationTimedPollAlgorithm object and update the RPC's polling algorithm. For example, to + * configure the RetrySettings for exportEntities: + * + *

{@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
+ * DatastoreAdminStubSettings.Builder datastoreAdminSettingsBuilder =
+ *     DatastoreAdminStubSettings.newBuilder();
+ * TimedRetryAlgorithm timedRetryAlgorithm =
+ *     OperationalTimedPollAlgorithm.create(
+ *         RetrySettings.newBuilder()
+ *             .setInitialRetryDelayDuration(Duration.ofMillis(500))
+ *             .setRetryDelayMultiplier(1.5)
+ *             .setMaxRetryDelayDuration(Duration.ofMillis(5000))
+ *             .setTotalTimeoutDuration(Duration.ofHours(24))
+ *             .build());
+ * datastoreAdminSettingsBuilder
+ *     .createClusterOperationSettings()
+ *     .setPollingAlgorithm(timedRetryAlgorithm)
+ *     .build();
+ * }
*/ @Generated("by gapic-generator-java") public class DatastoreAdminStubSettings extends StubSettings { @@ -163,9 +203,7 @@ public String extractNextToken(ListIndexesResponse payload) { @Override public Iterable extractResources(ListIndexesResponse payload) { - return payload.getIndexesList() == null - ? ImmutableList.of() - : payload.getIndexesList(); + return payload.getIndexesList(); } }; @@ -258,15 +296,6 @@ public DatastoreAdminStub createStub() throws IOException { "Transport not supported: %s", getTransportChannelProvider().getTransportName())); } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - /** Returns the default service name. */ @Override public String getServiceName() { @@ -279,6 +308,7 @@ public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuild } /** Returns the default service endpoint. */ + @ObsoleteApi("Use getEndpoint() instead") public static String getDefaultEndpoint() { return "datastore.googleapis.com:443"; } @@ -419,21 +449,21 @@ public static class Builder extends StubSettings.Builder getIndexSettings() { return listIndexesSettings; } - /** Returns the endpoint set by the user or the the service's default endpoint. */ - @Override - public String getEndpoint() { - if (super.getEndpoint() != null) { - return super.getEndpoint(); - } - return getDefaultEndpoint(); - } - @Override public DatastoreAdminStubSettings build() throws IOException { return new DatastoreAdminStubSettings(this); diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/GrpcDatastoreAdminCallableFactory.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/GrpcDatastoreAdminCallableFactory.java index 9fa4e901b..fa1147044 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/GrpcDatastoreAdminCallableFactory.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/GrpcDatastoreAdminCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/GrpcDatastoreAdminStub.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/GrpcDatastoreAdminStub.java index 0ab662814..1f6e840e0 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/GrpcDatastoreAdminStub.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/GrpcDatastoreAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminCallableFactory.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminCallableFactory.java index 0f992e4c2..e56561c69 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminCallableFactory.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminCallableFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminStub.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminStub.java index af095ad28..7c1a53ea3 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminStub.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/admin/v1/stub/HttpJsonDatastoreAdminStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/aggregation/AggregationBuilder.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/aggregation/AggregationBuilder.java index ce23edcf0..632f44393 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/aggregation/AggregationBuilder.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/aggregation/AggregationBuilder.java @@ -16,6 +16,8 @@ package com.google.cloud.datastore.aggregation; +import com.google.api.core.InternalExtensionOnly; + /** * An interface to represent the builders which build and customize {@link Aggregation} for {@link * com.google.cloud.datastore.AggregationQuery}. @@ -23,6 +25,7 @@ *

Used by {@link * com.google.cloud.datastore.AggregationQuery.Builder#addAggregation(AggregationBuilder)}. */ +@InternalExtensionOnly public interface AggregationBuilder { A build(); } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/aggregation/CountAggregation.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/aggregation/CountAggregation.java index 632b6633d..af2f23788 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/aggregation/CountAggregation.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/aggregation/CountAggregation.java @@ -23,7 +23,9 @@ /** Represents an {@link Aggregation} which returns count. */ public class CountAggregation extends Aggregation { - /** @param alias Alias to used when running this aggregation. */ + /** + * @param alias Alias to used when running this aggregation. + */ public CountAggregation(String alias) { super(alias); } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExecutionStats.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExecutionStats.java index 52184a01a..6738d84e3 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExecutionStats.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/models/ExecutionStats.java @@ -15,25 +15,27 @@ */ package com.google.cloud.datastore.models; +import static com.google.api.gax.util.TimeConversionUtils.toThreetenDuration; + import com.google.api.core.BetaApi; import com.google.api.core.InternalApi; +import com.google.api.core.ObsoleteApi; import com.google.cloud.Structs; import com.google.common.base.Objects; import java.util.Map; -import org.threeten.bp.Duration; /** Model class for {@link com.google.datastore.v1.ExecutionStats} */ @BetaApi public class ExecutionStats { private final long resultsReturned; - private final Duration executionDuration; + private final java.time.Duration executionDuration; private final long readOperations; private final Map debugStats; @InternalApi public ExecutionStats(com.google.datastore.v1.ExecutionStats proto) { this.resultsReturned = proto.getResultsReturned(); - this.executionDuration = Duration.ofNanos(proto.getExecutionDuration().getNanos()); + this.executionDuration = java.time.Duration.ofNanos(proto.getExecutionDuration().getNanos()); this.readOperations = proto.getReadOperations(); this.debugStats = Structs.asMap(proto.getDebugStats()); } @@ -51,8 +53,14 @@ public Map getDebugStats() { return debugStats; } + /** This method is obsolete. Use {@link #getExecutionDurationJavaTime()} instead. */ + @ObsoleteApi("Use getExecutionDurationJavaTime() instead") + public org.threeten.bp.Duration getExecutionDuration() { + return toThreetenDuration(getExecutionDurationJavaTime()); + } + /** Returns the total time to execute the query in the backend. */ - public Duration getExecutionDuration() { + public java.time.Duration getExecutionDurationJavaTime() { return executionDuration; } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/DatastoreRpcFactory.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/DatastoreRpcFactory.java index 0b7f9094b..acb85a61d 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/DatastoreRpcFactory.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/DatastoreRpcFactory.java @@ -16,6 +16,7 @@ package com.google.cloud.datastore.spi; +import com.google.api.core.InternalExtensionOnly; import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.spi.ServiceRpcFactory; @@ -23,4 +24,5 @@ * An interface for Datastore RPC factory. Implementation will be loaded via {@link * java.util.ServiceLoader}. */ +@InternalExtensionOnly public interface DatastoreRpcFactory extends ServiceRpcFactory {} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/DatastoreRpc.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/DatastoreRpc.java index 33b8e11ea..f13e3873b 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/DatastoreRpc.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/DatastoreRpc.java @@ -16,8 +16,11 @@ package com.google.cloud.datastore.spi.v1; +import com.google.api.core.InternalExtensionOnly; +import com.google.api.gax.rpc.HeaderProvider; import com.google.cloud.ServiceRpc; import com.google.cloud.datastore.DatastoreException; +import com.google.cloud.datastore.v1.DatastoreSettings; import com.google.datastore.v1.AllocateIdsRequest; import com.google.datastore.v1.AllocateIdsResponse; import com.google.datastore.v1.BeginTransactionRequest; @@ -36,7 +39,8 @@ import com.google.datastore.v1.RunQueryResponse; /** Provides access to the remote Datastore service. */ -public interface DatastoreRpc extends ServiceRpc { +@InternalExtensionOnly +public interface DatastoreRpc extends ServiceRpc, AutoCloseable { /** * Sends an allocate IDs request. @@ -93,7 +97,24 @@ BeginTransactionResponse beginTransaction(BeginTransactionRequest request) * * @throws DatastoreException upon failure */ - default RunAggregationQueryResponse runAggregationQuery(RunAggregationQueryRequest request) { - throw new UnsupportedOperationException("Not implemented."); + RunAggregationQueryResponse runAggregationQuery(RunAggregationQueryRequest request); + + @Override + void close() throws Exception; + + /** Returns true if this background resource has been shut down. */ + boolean isClosed(); + + // This class is needed solely to get access to protected method setInternalHeaderProvider() + class DatastoreSettingsBuilder extends DatastoreSettings.Builder { + DatastoreSettingsBuilder(DatastoreSettings settings) { + super(settings); + } + + @Override + protected DatastoreSettings.Builder setInternalHeaderProvider( + HeaderProvider internalHeaderProvider) { + return super.setInternalHeaderProvider(internalHeaderProvider); + } } } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java new file mode 100644 index 000000000..ea9043bb9 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java @@ -0,0 +1,202 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.datastore.spi.v1; + +import static com.google.cloud.datastore.DatastoreUtils.isEmulator; +import static com.google.cloud.datastore.DatastoreUtils.removeScheme; +import static com.google.cloud.datastore.spi.v1.RpcUtils.retrySettingSetter; +import static java.util.concurrent.TimeUnit.SECONDS; + +import com.google.api.core.InternalApi; +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.core.GaxProperties; +import com.google.api.gax.grpc.ChannelPoolSettings; +import com.google.api.gax.grpc.GrpcCallContext; +import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.rpc.ClientContext; +import com.google.api.gax.rpc.HeaderProvider; +import com.google.api.gax.rpc.NoHeaderProvider; +import com.google.api.gax.rpc.TransportChannel; +import com.google.cloud.ServiceOptions; +import com.google.cloud.datastore.DatastoreException; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.v1.DatastoreSettings; +import com.google.cloud.datastore.v1.stub.DatastoreStubSettings; +import com.google.cloud.datastore.v1.stub.GrpcDatastoreStub; +import com.google.cloud.grpc.GrpcTransportOptions; +import com.google.common.base.Strings; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import io.grpc.CallOptions; +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; +import java.io.IOException; +import java.util.Collections; + +@InternalApi +public class GrpcDatastoreRpc implements DatastoreRpc { + + private final GrpcDatastoreStub datastoreStub; + private final ClientContext clientContext; + private boolean closed; + + public GrpcDatastoreRpc(DatastoreOptions datastoreOptions) throws IOException { + try { + clientContext = + isEmulator(datastoreOptions) + ? getClientContextForEmulator(datastoreOptions) + : getClientContext(datastoreOptions); + + /* For grpc transport options, configure default gRPC Connection pool with minChannelCount = 1 and maxChannelCount = 4 */ + DatastoreStubSettings datastoreStubSettings = + DatastoreStubSettings.newBuilder(clientContext) + .applyToAllUnaryMethods(retrySettingSetter(datastoreOptions)) + .setTransportChannelProvider( + DatastoreSettings.defaultGrpcTransportProviderBuilder() + .setChannelPoolSettings( + ChannelPoolSettings.builder() + .setInitialChannelCount(DatastoreOptions.INIT_CHANNEL_COUNT) + .setMinChannelCount(DatastoreOptions.MIN_CHANNEL_COUNT) + .setMaxChannelCount(DatastoreOptions.MAX_CHANNEL_COUNT) + .build()) + .build()) + .build(); + datastoreStub = GrpcDatastoreStub.create(datastoreStubSettings); + } catch (IOException e) { + throw new IOException(e); + } + } + + @Override + public void close() throws Exception { + if (!closed) { + datastoreStub.close(); + for (BackgroundResource resource : clientContext.getBackgroundResources()) { + resource.close(); + } + closed = true; + } + for (BackgroundResource resource : clientContext.getBackgroundResources()) { + resource.awaitTermination(1, SECONDS); + } + } + + @Override + public AllocateIdsResponse allocateIds(AllocateIdsRequest request) { + return datastoreStub.allocateIdsCallable().call(request); + } + + @Override + public BeginTransactionResponse beginTransaction(BeginTransactionRequest request) + throws DatastoreException { + return datastoreStub.beginTransactionCallable().call(request); + } + + @Override + public CommitResponse commit(CommitRequest request) { + return datastoreStub.commitCallable().call(request); + } + + @Override + public LookupResponse lookup(LookupRequest request) { + return datastoreStub.lookupCallable().call(request); + } + + @Override + public ReserveIdsResponse reserveIds(ReserveIdsRequest request) { + return datastoreStub.reserveIdsCallable().call(request); + } + + @Override + public RollbackResponse rollback(RollbackRequest request) { + return datastoreStub.rollbackCallable().call(request); + } + + @Override + public RunQueryResponse runQuery(RunQueryRequest request) { + return datastoreStub.runQueryCallable().call(request); + } + + @Override + public RunAggregationQueryResponse runAggregationQuery(RunAggregationQueryRequest request) { + return datastoreStub.runAggregationQueryCallable().call(request); + } + + @Override + public boolean isClosed() { + return closed && datastoreStub.isShutdown(); + } + + private ClientContext getClientContextForEmulator(DatastoreOptions datastoreOptions) + throws IOException { + ManagedChannel managedChannel = + ManagedChannelBuilder.forTarget(removeScheme(datastoreOptions.getHost())) + .usePlaintext() + .build(); + TransportChannel transportChannel = GrpcTransportChannel.create(managedChannel); + return ClientContext.newBuilder() + .setCredentials(null) + .setTransportChannel(transportChannel) + .setDefaultCallContext(GrpcCallContext.of(managedChannel, CallOptions.DEFAULT)) + .setBackgroundResources(Collections.singletonList(transportChannel)) + .build(); + } + + private ClientContext getClientContext(DatastoreOptions datastoreOptions) throws IOException { + HeaderProvider internalHeaderProvider = + DatastoreSettings.defaultApiClientHeaderProviderBuilder() + .setClientLibToken( + ServiceOptions.getGoogApiClientLibName(), + GaxProperties.getLibraryVersion(datastoreOptions.getClass())) + .setResourceToken(getResourceToken(datastoreOptions)) + .build(); + + DatastoreSettingsBuilder settingsBuilder = + new DatastoreSettingsBuilder(DatastoreSettings.newBuilder().build()); + settingsBuilder.setCredentialsProvider( + GrpcTransportOptions.setUpCredentialsProvider(datastoreOptions)); + settingsBuilder.setTransportChannelProvider(datastoreOptions.getTransportChannelProvider()); + settingsBuilder.setInternalHeaderProvider(internalHeaderProvider); + settingsBuilder.setHeaderProvider( + datastoreOptions.getMergedHeaderProvider(new NoHeaderProvider())); + return ClientContext.create(settingsBuilder.build()); + } + + private String getResourceToken(DatastoreOptions datastoreOptions) { + StringBuilder builder = new StringBuilder("project_id="); + builder.append(datastoreOptions.getProjectId()); + if (!Strings.isNullOrEmpty(datastoreOptions.getDatabaseId())) { + builder.append("&database_id="); + builder.append(datastoreOptions.getDatabaseId()); + } + return builder.toString(); + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/HttpDatastoreRpc.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/HttpDatastoreRpc.java index fd3cdc658..ac39ad5ba 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/HttpDatastoreRpc.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/HttpDatastoreRpc.java @@ -19,9 +19,9 @@ import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import com.google.api.client.http.HttpTransport; +import com.google.api.core.InternalApi; import com.google.cloud.datastore.DatastoreException; import com.google.cloud.datastore.DatastoreOptions; -import com.google.cloud.datastore.TraceUtil; import com.google.cloud.http.CensusHttpModule; import com.google.cloud.http.HttpTransportOptions; import com.google.datastore.v1.AllocateIdsRequest; @@ -40,10 +40,12 @@ import com.google.datastore.v1.RunAggregationQueryResponse; import com.google.datastore.v1.RunQueryRequest; import com.google.datastore.v1.RunQueryResponse; +import io.opencensus.trace.Tracing; import java.io.IOException; import java.net.InetAddress; import java.net.URL; +@InternalApi public class HttpDatastoreRpc implements DatastoreRpc { private final com.google.datastore.v1.client.Datastore client; @@ -58,6 +60,7 @@ public HttpDatastoreRpc(DatastoreOptions options) { .initializer(getHttpRequestInitializer(options, httpTransportOptions)) .transport(transport); String normalizedHost = options.getHost() != null ? options.getHost().toLowerCase() : ""; + if (isLocalHost(normalizedHost)) { clientBuilder = clientBuilder.localHost(removeScheme(normalizedHost)); } else if (!removeScheme(com.google.datastore.v1.client.DatastoreFactory.DEFAULT_HOST) @@ -80,8 +83,7 @@ public HttpDatastoreRpc(DatastoreOptions options) { private HttpRequestInitializer getHttpRequestInitializer( final DatastoreOptions options, HttpTransportOptions httpTransportOptions) { // Open Census initialization - CensusHttpModule censusHttpModule = - new CensusHttpModule(TraceUtil.getInstance().getTracer(), true); + CensusHttpModule censusHttpModule = new CensusHttpModule(Tracing.getTracer(), true); final HttpRequestInitializer censusHttpModuleHttpRequestInitializer = censusHttpModule.getHttpRequestInitializer( httpTransportOptions.getHttpRequestInitializer(options)); @@ -211,4 +213,14 @@ public RunAggregationQueryResponse runAggregationQuery(RunAggregationQueryReques throw translate(ex); } } + + @Override + public void close() throws Exception { + throw new UnsupportedOperationException("Not implemented."); + } + + @Override + public boolean isClosed() { + throw new UnsupportedOperationException("Not implemented."); + } } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/RpcUtils.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/RpcUtils.java new file mode 100644 index 000000000..dee8d6920 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/RpcUtils.java @@ -0,0 +1,34 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.datastore.spi.v1; + +import com.google.api.core.ApiFunction; +import com.google.api.core.InternalApi; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.cloud.datastore.DatastoreOptions; + +@InternalApi +public class RpcUtils { + @InternalApi + static ApiFunction, Void> retrySettingSetter( + DatastoreOptions datastoreOptions) { + return builder -> { + builder.setRetrySettings(datastoreOptions.getRetrySettings()); + return null; + }; + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/DisabledTraceUtil.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/DisabledTraceUtil.java new file mode 100644 index 000000000..ebb630515 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/DisabledTraceUtil.java @@ -0,0 +1,131 @@ +/* + * 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. + */ + +package com.google.cloud.datastore.telemetry; + +import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; +import com.google.api.core.InternalApi; +import com.google.cloud.datastore.telemetry.TraceUtil.Context; +import io.grpc.ManagedChannelBuilder; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanBuilder; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.api.trace.TracerProvider; +import java.util.Map; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * Tracing utility implementation, used to stub out tracing instrumentation when tracing is + * disabled. + */ +@InternalApi +public class DisabledTraceUtil implements TraceUtil { + static class Span implements TraceUtil.Span { + @Override + public void end() {} + + @Override + public void end(Throwable error) {} + + @Override + public void endAtFuture(ApiFuture futureValue) {} + + @Override + public TraceUtil.Span addEvent(String name) { + return this; + } + + @Override + public TraceUtil.Span addEvent(String name, Map attributes) { + return this; + } + + @Override + public TraceUtil.Span setAttribute(String key, int value) { + return this; + } + + @Override + public TraceUtil.Span setAttribute(String key, String value) { + return this; + } + + @Override + public TraceUtil.Span setAttribute(String key, boolean value) { + return this; + } + + public io.opentelemetry.api.trace.Span getSpan() { + return null; + } + + @Override + public Scope makeCurrent() { + return new Scope(); + } + } + + static class Context implements TraceUtil.Context { + @Override + public Scope makeCurrent() { + return new Scope(); + } + } + + static class Scope implements TraceUtil.Scope { + @Override + public void close() {} + } + + @Nullable + @Override + public ApiFunction getChannelConfigurator() { + return null; + } + + @Override + public Span startSpan(String spanName) { + return new Span(); + } + + @Override + public TraceUtil.Span startSpan(String spanName, TraceUtil.Span parentSpan) { + return new Span(); + } + + public SpanBuilder addSettingsAttributesToCurrentSpan(SpanBuilder spanBuilder) { + return getTracer().spanBuilder("TRACING_DISABLED_NO_OP"); + } + + @Nonnull + @Override + public TraceUtil.Span getCurrentSpan() { + return new Span(); + } + + @Nonnull + @Override + public TraceUtil.Context getCurrentContext() { + return new Context(); + } + + @Override + public Tracer getTracer() { + return TracerProvider.noop().get(LIBRARY_NAME); + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/EnabledTraceUtil.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/EnabledTraceUtil.java new file mode 100644 index 000000000..40fc7308e --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/EnabledTraceUtil.java @@ -0,0 +1,323 @@ +/* + * 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. + */ + +package com.google.cloud.datastore.telemetry; + +import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; +import com.google.api.core.ApiFutureCallback; +import com.google.api.core.ApiFutures; +import com.google.api.core.InternalApi; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.telemetry.TraceUtil.Context; +import com.google.cloud.datastore.telemetry.TraceUtil.Scope; +import com.google.cloud.datastore.telemetry.TraceUtil.Span; +import com.google.common.base.Throwables; +import io.grpc.ManagedChannelBuilder; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.api.trace.SpanBuilder; +import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.api.trace.StatusCode; +import io.opentelemetry.api.trace.Tracer; +import java.util.Map; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * Tracing utility implementation, used to stub out tracing instrumentation when tracing is enabled. + */ +@InternalApi +public class EnabledTraceUtil implements TraceUtil { + private final Tracer tracer; + private final OpenTelemetry openTelemetry; + private final DatastoreOptions datastoreOptions; + + EnabledTraceUtil(DatastoreOptions datastoreOptions) { + OpenTelemetry openTelemetry = datastoreOptions.getOpenTelemetryOptions().getOpenTelemetry(); + + // If tracing is enabled, but an OpenTelemetry instance is not provided, fall back + // to using GlobalOpenTelemetry. + if (openTelemetry == null) { + openTelemetry = GlobalOpenTelemetry.get(); + } + + this.datastoreOptions = datastoreOptions; + this.openTelemetry = openTelemetry; + this.tracer = openTelemetry.getTracer(LIBRARY_NAME); + } + + public OpenTelemetry getOpenTelemetry() { + return openTelemetry; + } + + @Override + @Nullable + public ApiFunction getChannelConfigurator() { + // TODO(jimit) Update this to return a gRPC Channel Configurator after gRPC upgrade. + return null; + } + + static class Span implements TraceUtil.Span { + private final io.opentelemetry.api.trace.Span span; + private final String spanName; + + public Span(io.opentelemetry.api.trace.Span span, String spanName) { + this.span = span; + this.spanName = spanName; + } + + @Override + public io.opentelemetry.api.trace.Span getSpan() { + return this.span; + } + + /** Ends this span. */ + @Override + public void end() { + span.end(); + } + + /** Ends this span in an error. */ + @Override + public void end(Throwable error) { + span.setStatus(StatusCode.ERROR, error.getMessage()); + span.recordException( + error, + Attributes.builder() + .put("exception.message", error.getMessage()) + .put("exception.type", error.getClass().getName()) + .put("exception.stacktrace", Throwables.getStackTraceAsString(error)) + .build()); + span.end(); + } + + /** + * If an operation ends in the future, its relevant span should end _after_ the future has been + * completed. This method "appends" the span completion code at the completion of the given + * future. In order for telemetry info to be recorded, the future returned by this method should + * be completed. + */ + @Override + public void endAtFuture(ApiFuture futureValue) { + io.opentelemetry.context.Context asyncContext = io.opentelemetry.context.Context.current(); + ApiFutures.addCallback( + futureValue, + new ApiFutureCallback() { + @Override + public void onFailure(Throwable t) { + try (io.opentelemetry.context.Scope scope = asyncContext.makeCurrent()) { + span.addEvent(spanName + " failed."); + end(t); + } + } + + @Override + public void onSuccess(T result) { + try (io.opentelemetry.context.Scope scope = asyncContext.makeCurrent()) { + span.addEvent(spanName + " succeeded."); + end(); + } + } + }); + } + + /** Adds the given event to this span. */ + @Override + public TraceUtil.Span addEvent(String name) { + span.addEvent(name); + return this; + } + + @Override + public TraceUtil.Span addEvent(String name, Map attributes) { + AttributesBuilder attributesBuilder = Attributes.builder(); + attributes.forEach( + (key, value) -> { + if (value instanceof Integer) { + attributesBuilder.put(key, (int) value); + } else if (value instanceof Long) { + attributesBuilder.put(key, (long) value); + } else if (value instanceof Double) { + attributesBuilder.put(key, (double) value); + } else if (value instanceof Float) { + attributesBuilder.put(key, (float) value); + } else if (value instanceof Boolean) { + attributesBuilder.put(key, (boolean) value); + } else if (value instanceof String) { + attributesBuilder.put(key, (String) value); + } else { + // OpenTelemetry APIs do not support any other type. + throw new IllegalArgumentException( + "Unknown attribute type:" + value.getClass().getSimpleName()); + } + }); + span.addEvent(name, attributesBuilder.build()); + return this; + } + + @Override + public TraceUtil.Span setAttribute(String key, int value) { + span.setAttribute(ATTRIBUTE_SERVICE_PREFIX + key, value); + return this; + } + + @Override + public TraceUtil.Span setAttribute(String key, String value) { + span.setAttribute(ATTRIBUTE_SERVICE_PREFIX + key, value); + return this; + } + + @Override + public TraceUtil.Span setAttribute(String key, boolean value) { + span.setAttribute(ATTRIBUTE_SERVICE_PREFIX + key, value); + return this; + } + + @Override + public Scope makeCurrent() { + try (io.opentelemetry.context.Scope scope = span.makeCurrent()) { + return new Scope(scope); + } + } + } + + static class Scope implements TraceUtil.Scope { + private final io.opentelemetry.context.Scope scope; + + Scope(io.opentelemetry.context.Scope scope) { + this.scope = scope; + } + + @Override + public void close() { + scope.close(); + } + } + + static class Context implements TraceUtil.Context { + private final io.opentelemetry.context.Context context; + + Context(io.opentelemetry.context.Context context) { + this.context = context; + } + + @Override + public Scope makeCurrent() { + try (io.opentelemetry.context.Scope scope = context.makeCurrent()) { + return new Scope(scope); + } + } + } + + /** Applies the current Datastore instance settings as attributes to the current Span */ + @Override + public SpanBuilder addSettingsAttributesToCurrentSpan(SpanBuilder spanBuilder) { + spanBuilder = + spanBuilder.setAllAttributes( + Attributes.builder() + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.databaseId", + datastoreOptions.getDatabaseId()) + .put(ATTRIBUTE_SERVICE_PREFIX + "settings.host", datastoreOptions.getHost()) + .build()); + + if (datastoreOptions.getCredentials() != null) { + spanBuilder = + spanBuilder.setAttribute( + ATTRIBUTE_SERVICE_PREFIX + "settings.credentials.authenticationType", + datastoreOptions.getCredentials().getAuthenticationType()); + } + + if (datastoreOptions.getRetrySettings() != null) { + spanBuilder = + spanBuilder.setAllAttributes( + Attributes.builder() + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.retrySettings.initialRetryDelay", + datastoreOptions.getRetrySettings().getInitialRetryDelay().toString()) + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.retrySettings.maxRetryDelay", + datastoreOptions.getRetrySettings().getMaxRetryDelay().toString()) + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.retrySettings.retryDelayMultiplier", + String.valueOf(datastoreOptions.getRetrySettings().getRetryDelayMultiplier())) + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.retrySettings.maxAttempts", + String.valueOf(datastoreOptions.getRetrySettings().getMaxAttempts())) + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.retrySettings.initialRpcTimeout", + datastoreOptions.getRetrySettings().getInitialRpcTimeout().toString()) + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.retrySettings.maxRpcTimeout", + datastoreOptions.getRetrySettings().getMaxRpcTimeout().toString()) + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.retrySettings.rpcTimeoutMultiplier", + String.valueOf(datastoreOptions.getRetrySettings().getRpcTimeoutMultiplier())) + .put( + ATTRIBUTE_SERVICE_PREFIX + "settings.retrySettings.totalTimeout", + datastoreOptions.getRetrySettings().getTotalTimeout().toString()) + .build()); + } + + // Add the memory utilization of the client at the time this trace was collected. + long totalMemory = Runtime.getRuntime().totalMemory(); + long freeMemory = Runtime.getRuntime().freeMemory(); + double memoryUtilization = ((double) (totalMemory - freeMemory)) / totalMemory; + spanBuilder.setAttribute( + ATTRIBUTE_SERVICE_PREFIX + "memoryUtilization", + String.format("%.2f", memoryUtilization * 100) + "%"); + + return spanBuilder; + } + + @Override + public Span startSpan(String spanName) { + SpanBuilder spanBuilder = tracer.spanBuilder(spanName).setSpanKind(SpanKind.PRODUCER); + io.opentelemetry.api.trace.Span span = + addSettingsAttributesToCurrentSpan(spanBuilder).startSpan(); + return new Span(span, spanName); + } + + @Override + public TraceUtil.Span startSpan(String spanName, TraceUtil.Span parentSpan) { + SpanBuilder spanBuilder = + tracer + .spanBuilder(spanName) + .setSpanKind(SpanKind.PRODUCER) + .setParent(io.opentelemetry.context.Context.current().with(parentSpan.getSpan())); + return new Span(addSettingsAttributesToCurrentSpan(spanBuilder).startSpan(), spanName); + } + + @Nonnull + @Override + public TraceUtil.Span getCurrentSpan() { + return new Span(io.opentelemetry.api.trace.Span.current(), ""); + } + + @Nonnull + @Override + public TraceUtil.Context getCurrentContext() { + return new Context(io.opentelemetry.context.Context.current()); + } + + @Override + public Tracer getTracer() { + return this.tracer; + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/TraceUtil.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/TraceUtil.java new file mode 100644 index 000000000..fd616a733 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/telemetry/TraceUtil.java @@ -0,0 +1,167 @@ +/* + * 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. + */ + +package com.google.cloud.datastore.telemetry; + +import com.google.api.core.ApiFunction; +import com.google.api.core.ApiFuture; +import com.google.api.core.InternalExtensionOnly; +import com.google.cloud.datastore.DatastoreOptions; +import io.grpc.ManagedChannelBuilder; +import io.opentelemetry.api.trace.SpanBuilder; +import io.opentelemetry.api.trace.Tracer; +import java.util.Map; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** Utility interface to manage OpenTelemetry tracing instrumentation based on the configuration. */ +@InternalExtensionOnly +public interface TraceUtil { + static final String ATTRIBUTE_SERVICE_PREFIX = "gcp.datastore."; + static final String ENABLE_TRACING_ENV_VAR = "DATASTORE_ENABLE_TRACING"; + static final String LIBRARY_NAME = "com.google.cloud.datastore"; + static final String SPAN_NAME_LOOKUP = "Lookup"; + static final String SPAN_NAME_ALLOCATE_IDS = "AllocateIds"; + static final String SPAN_NAME_RESERVE_IDS = "ReserveIds"; + static final String SPAN_NAME_COMMIT = "Commit"; + static final String SPAN_NAME_RUN_QUERY = "RunQuery"; + static final String SPAN_NAME_RUN_AGGREGATION_QUERY = "RunAggregationQuery"; + static final String SPAN_NAME_TRANSACTION_RUN = "Transaction.Run"; + static final String SPAN_NAME_BEGIN_TRANSACTION = "Transaction.Begin"; + static final String SPAN_NAME_TRANSACTION_LOOKUP = "Transaction.Lookup"; + static final String SPAN_NAME_TRANSACTION_COMMIT = "Transaction.Commit"; + static final String SPAN_NAME_TRANSACTION_RUN_QUERY = "Transaction.RunQuery"; + static final String SPAN_NAME_ROLLBACK = "Transaction.Rollback"; + static final String SPAN_NAME_TRANSACTION_RUN_AGGREGATION_QUERY = + "Transaction.RunAggregationQuery"; + static final String ATTRIBUTES_KEY_DOCUMENT_COUNT = "doc_count"; + static final String ATTRIBUTES_KEY_TRANSACTIONAL = "transactional"; + static final String ATTRIBUTES_KEY_TRANSACTION_ID = "transaction_id"; + static final String ATTRIBUTES_KEY_READ_CONSISTENCY = "read_consistency"; + static final String ATTRIBUTES_KEY_RECEIVED = "Received"; + static final String ATTRIBUTES_KEY_MISSING = "Missing"; + static final String ATTRIBUTES_KEY_DEFERRED = "Deferred"; + static final String ATTRIBUTES_KEY_MORE_RESULTS = "mor_results"; + + /** + * Creates and returns an instance of the TraceUtil class. + * + * @param datastoreOptions The DatastoreOptions object that is requesting an instance of + * TraceUtil. + * @return An instance of the TraceUtil class. + */ + static TraceUtil getInstance(@Nonnull DatastoreOptions datastoreOptions) { + boolean createEnabledInstance = datastoreOptions.getOpenTelemetryOptions().isEnabled(); + + // The environment variable can override options to enable/disable telemetry collection. + String enableTracingEnvVar = System.getenv(ENABLE_TRACING_ENV_VAR); + if (enableTracingEnvVar != null) { + if (enableTracingEnvVar.equalsIgnoreCase("true") + || enableTracingEnvVar.equalsIgnoreCase("on")) { + createEnabledInstance = true; + } + if (enableTracingEnvVar.equalsIgnoreCase("false") + || enableTracingEnvVar.equalsIgnoreCase("off")) { + createEnabledInstance = false; + } + } + + if (createEnabledInstance) { + return new EnabledTraceUtil(datastoreOptions); + } else { + return new DisabledTraceUtil(); + } + } + + /** Returns a channel configurator for gRPC, or {@code null} if tracing is disabled. */ + @Nullable + ApiFunction getChannelConfigurator(); + + /** Represents a trace span. */ + interface Span { + /** Adds the given event to this span. */ + Span addEvent(String name); + + /** Adds the given event with the given attributes to this span. */ + Span addEvent(String name, Map attributes); + + /** Adds the given attribute to this span. */ + Span setAttribute(String key, int value); + + /** Adds the given attribute to this span. */ + Span setAttribute(String key, String value); + + /** Adds the given attribute to this span. */ + Span setAttribute(String key, boolean value); + + io.opentelemetry.api.trace.Span getSpan(); + + /** Marks this span as the current span. */ + Scope makeCurrent(); + + /** Ends this span. */ + void end(); + + /** Ends this span in an error. */ + void end(Throwable error); + + /** + * If an operation ends in the future, its relevant span should end _after_ the future has been + * completed. This method "appends" the span completion code at the completion of the given + * future. In order for telemetry info to be recorded, the future returned by this method should + * be completed. + */ + void endAtFuture(ApiFuture futureValue); + } + + /** Represents a trace context. */ + interface Context { + /** Makes this context the current context. */ + Scope makeCurrent(); + } + + /** Represents a trace scope. */ + interface Scope extends AutoCloseable { + /** Closes the current scope. */ + void close(); + } + + /** Starts a new span with the given name, sets it as the current span, and returns it. */ + Span startSpan(String spanName); + + /** + * Starts a new span with the given name and the span represented by the parentSpan as its parent, + * sets it as the current span and returns it. + */ + Span startSpan(String spanName, Span parentSpan); + + /** + * Adds common SpanAttributes to the current span, useful when hand-creating a new Span without + * using the TraceUtil.Span interface. + */ + SpanBuilder addSettingsAttributesToCurrentSpan(SpanBuilder spanBuilder); + + /** Returns the current span. */ + @Nonnull + Span getCurrentSpan(); + + /** Returns the current Context. */ + @Nonnull + Context getCurrentContext(); + + /** Returns the current OpenTelemetry Tracer when OpenTelemetry SDK is provided. */ + Tracer getTracer(); +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java index 2723325ee..9f5555d0f 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/LocalDatastoreHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Google LLC + * 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. @@ -16,12 +16,15 @@ package com.google.cloud.datastore.testing; +import static com.google.api.gax.util.TimeConversionUtils.toJavaTimeDuration; import static com.google.common.base.MoreObjects.firstNonNull; import com.google.api.core.InternalApi; +import com.google.api.core.ObsoleteApi; import com.google.cloud.NoCredentials; import com.google.cloud.ServiceOptions; import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.testing.BaseEmulatorHelper; import com.google.common.collect.ImmutableList; import java.io.IOException; @@ -38,7 +41,6 @@ import java.util.UUID; import java.util.concurrent.TimeoutException; import java.util.logging.Logger; -import org.threeten.bp.Duration; /** * Utility to start and stop local Google Cloud Datastore emulators. @@ -52,12 +54,13 @@ public class LocalDatastoreHelper extends BaseEmulatorHelper { private final double consistency; private final Path gcdPath; private boolean storeOnDisk; + private boolean firestoreInDatastoreMode; // Gcloud emulator settings private static final String GCLOUD_CMD_TEXT = "gcloud beta emulators datastore start"; private static final String GCLOUD_CMD_PORT_FLAG = "--host-port="; private static final String VERSION_PREFIX = "cloud-datastore-emulator "; - private static final String MIN_VERSION = "2.0.2"; + private static final String MIN_VERSION = "2.3.1"; // Downloadable emulator settings private static final String BIN_NAME = "cloud-datastore-emulator/cloud_datastore_emulator"; @@ -73,6 +76,8 @@ public class LocalDatastoreHelper extends BaseEmulatorHelper { private static final String PROJECT_FLAG = "--project="; private static final double DEFAULT_CONSISTENCY = 0.9; private static final String DEFAULT_PROJECT_ID = PROJECT_ID_PREFIX + UUID.randomUUID(); + private static final String FIRESTORE_IN_DATASTORE_MODE_FLAG = + "--use-firestore-in-datastore-mode"; private static final Logger LOGGER = Logger.getLogger(LocalDatastoreHelper.class.getName()); @@ -101,6 +106,7 @@ public static class Builder { private int port; private Path dataDir; private boolean storeOnDisk = true; + private boolean firestoreInDatastoreMode = false; private String projectId; private Builder() {} @@ -109,6 +115,7 @@ private Builder(LocalDatastoreHelper helper) { this.consistency = helper.consistency; this.dataDir = helper.gcdPath; this.storeOnDisk = helper.storeOnDisk; + this.firestoreInDatastoreMode = helper.firestoreInDatastoreMode; } public Builder setConsistency(double consistency) { @@ -136,6 +143,11 @@ public Builder setStoreOnDisk(boolean storeOnDisk) { return this; } + public Builder setFirestoreInDatastoreMode(boolean firestoreInDatastoreMode) { + this.firestoreInDatastoreMode = firestoreInDatastoreMode; + return this; + } + /** Creates a {@code LocalDatastoreHelper} object. */ public LocalDatastoreHelper build() { return new LocalDatastoreHelper(this); @@ -151,26 +163,41 @@ private LocalDatastoreHelper(Builder builder) { this.consistency = builder.consistency > 0 ? builder.consistency : DEFAULT_CONSISTENCY; this.gcdPath = builder.dataDir; this.storeOnDisk = builder.storeOnDisk; + this.firestoreInDatastoreMode = builder.firestoreInDatastoreMode; String binName = BIN_NAME; if (isWindows()) { binName = BIN_NAME.replace("/", "\\"); } List gcloudCommand = new ArrayList<>(Arrays.asList(GCLOUD_CMD_TEXT.split(" "))); gcloudCommand.add(GCLOUD_CMD_PORT_FLAG + "localhost:" + getPort()); - gcloudCommand.add(CONSISTENCY_FLAG + builder.consistency); gcloudCommand.add(PROJECT_FLAG + projectId); + if (builder.firestoreInDatastoreMode) { + gcloudCommand.add(FIRESTORE_IN_DATASTORE_MODE_FLAG); + } else { + // At most one of --consistency | --use-firestore-in-datastore-mode can be specified. + // --consistency will be ignored with --use-firestore-in-datastore-mode. + gcloudCommand.add(CONSISTENCY_FLAG + builder.consistency); + } if (!builder.storeOnDisk) { gcloudCommand.add("--no-store-on-disk"); } + if (builder.dataDir != null) { + gcloudCommand.add("--data-dir=" + getGcdPath()); + } GcloudEmulatorRunner gcloudRunner = new GcloudEmulatorRunner(gcloudCommand, VERSION_PREFIX, MIN_VERSION); List binCommand = new ArrayList<>(Arrays.asList(binName, "start")); binCommand.add("--testing"); - binCommand.add(BIN_CMD_PORT_FLAG + getPort()); - binCommand.add(CONSISTENCY_FLAG + getConsistency()); - if (builder.dataDir != null) { - gcloudCommand.add("--data-dir=" + getGcdPath()); + if (builder.firestoreInDatastoreMode) { + // Downloadable emulator runner takes the flag in a different + // format: --firestore_in_datastore_mode + binCommand.add("--firestore_in_datastore_mode"); + } else { + // At most one of --consistency | --firestore_in_datastore_mode can be specified. + // --consistency will be ignored with --firestore_in_datastore_mode. + binCommand.add(CONSISTENCY_FLAG + getConsistency()); } + binCommand.add(BIN_CMD_PORT_FLAG + getPort()); DownloadableEmulatorRunner downloadRunner = new DownloadableEmulatorRunner(binCommand, EMULATOR_URL, MD5_CHECKSUM, ACCESS_TOKEN); this.emulatorRunners = ImmutableList.of(gcloudRunner, downloadRunner); @@ -215,6 +242,14 @@ public DatastoreOptions getOptions(String namespace) { return optionsBuilder.setNamespace(namespace).build(); } + /** + * Returns a {@link DatastoreOptions} instance that sets the host to use the Datastore emulator on + * localhost. The transportOptions is set to {@code grpcTransportOptions}. + */ + public DatastoreOptions getGrpcTransportOptions(GrpcTransportOptions grpcTransportOptions) { + return optionsBuilder.setTransportOptions(grpcTransportOptions).build(); + } + public DatastoreOptions.Builder setNamespace(String namespace) { return optionsBuilder.setNamespace(namespace); } @@ -234,6 +269,13 @@ public boolean isStoreOnDisk() { return storeOnDisk; } + /** + * Returns {@code true} use firestore-in-datastore-mode, otherwise {@code false} use native mode. + */ + public boolean isFirestoreInDatastoreMode() { + return firestoreInDatastoreMode; + } + /** * Creates a local Datastore helper with the specified settings for project ID and consistency. * @@ -307,6 +349,14 @@ public void reset() throws IOException { sendPostRequest("/reset"); } + /** This method is obsolete. Use {@link #stopDuration(java.time.Duration)} instead */ + @ObsoleteApi("Use stopDuration(java.time.Duration) instead") + @Override + public void stop(org.threeten.bp.Duration timeout) + throws IOException, InterruptedException, TimeoutException { + stopDuration(toJavaTimeDuration(timeout)); + } + /** * Stops the Datastore emulator. * @@ -319,15 +369,16 @@ public void reset() throws IOException { * this value high to ensure proper shutdown, like 5 seconds or more. */ @Override - public void stop(Duration timeout) throws IOException, InterruptedException, TimeoutException { + public void stopDuration(java.time.Duration timeout) + throws IOException, InterruptedException, TimeoutException { sendPostRequest("/shutdown"); - waitForProcess(timeout); + waitForProcessDuration(timeout); deleteRecursively(gcdPath); } /** - * Stops the Datastore emulator. The same as {@link #stop(Duration)} but with timeout duration of - * 20 seconds. + * Stops the Datastore emulator. The same as {@link #stopDuration(java.time.Duration)} but with + * timeout duration of 20 seconds. * *

It is important to stop the emulator. Since the emulator runs in its own process, not * stopping it might cause it to become orphan. @@ -335,7 +386,7 @@ public void stop(Duration timeout) throws IOException, InterruptedException, Tim *

It is not required to call {@link #reset()} before {@code stop()}. */ public void stop() throws IOException, InterruptedException, TimeoutException { - stop(Duration.ofSeconds(20)); + stopDuration(java.time.Duration.ofSeconds(20)); } static void deleteRecursively(Path path) throws IOException { diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/DatastoreClient.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/DatastoreClient.java new file mode 100644 index 000000000..e8bea055f --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/DatastoreClient.java @@ -0,0 +1,1087 @@ +/* + * 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.cloud.datastore.v1; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.cloud.datastore.v1.stub.DatastoreStub; +import com.google.cloud.datastore.v1.stub.DatastoreStubSettings; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.Key; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.Mutation; +import com.google.datastore.v1.ReadOptions; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import com.google.protobuf.ByteString; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.TimeUnit; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Service Description: Each RPC normalizes the partition IDs of the keys in its input entities, and + * always returns entities with keys with normalized partition IDs. This applies to all keys and + * entities, including those in values, except keys with both an empty path and an empty or unset + * partition ID. Normalization of input keys sets the project ID (if not already set) to the project + * ID from the request. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+ *   String projectId = "projectId-894832108";
+ *   ReadOptions readOptions = ReadOptions.newBuilder().build();
+ *   List keys = new ArrayList<>();
+ *   LookupResponse response = datastoreClient.lookup(projectId, readOptions, keys);
+ * }
+ * }
+ * + *

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

Lookup

Looks up entities by key.

+ *

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

+ *
    + *
  • lookup(LookupRequest request) + *

+ *

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

+ *
    + *
  • lookup(String projectId, ReadOptions readOptions, List<Key> keys) + *

+ *

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

+ *
    + *
  • lookupCallable() + *

+ *

RunQuery

Queries for entities.

+ *

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

+ *
    + *
  • runQuery(RunQueryRequest request) + *

+ *

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

+ *
    + *
  • runQueryCallable() + *

+ *

RunAggregationQuery

Runs an aggregation query.

+ *

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

+ *
    + *
  • runAggregationQuery(RunAggregationQueryRequest request) + *

+ *

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

+ *
    + *
  • runAggregationQueryCallable() + *

+ *

BeginTransaction

Begins a new transaction.

+ *

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

+ *
    + *
  • beginTransaction(BeginTransactionRequest request) + *

+ *

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

+ *
    + *
  • beginTransaction(String projectId) + *

+ *

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

+ *
    + *
  • beginTransactionCallable() + *

+ *

Commit

Commits a transaction, optionally creating, deleting or modifying some entities.

+ *

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

+ *
    + *
  • commit(CommitRequest request) + *

+ *

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

+ *
    + *
  • commit(String projectId, CommitRequest.Mode mode, List<Mutation> mutations) + *

  • commit(String projectId, CommitRequest.Mode mode, ByteString transaction, List<Mutation> mutations) + *

+ *

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

+ *
    + *
  • commitCallable() + *

+ *

Rollback

Rolls back a transaction.

+ *

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

+ *
    + *
  • rollback(RollbackRequest request) + *

+ *

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

+ *
    + *
  • rollback(String projectId, ByteString transaction) + *

+ *

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

+ *
    + *
  • rollbackCallable() + *

+ *

AllocateIds

Allocates IDs for the given keys, which is useful for referencing an entity before it is inserted.

+ *

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

+ *
    + *
  • allocateIds(AllocateIdsRequest request) + *

+ *

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

+ *
    + *
  • allocateIds(String projectId, List<Key> keys) + *

+ *

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

+ *
    + *
  • allocateIdsCallable() + *

+ *

ReserveIds

Prevents the supplied keys' IDs from being auto-allocated by Cloud Datastore.

+ *

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

+ *
    + *
  • reserveIds(ReserveIdsRequest request) + *

+ *

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

+ *
    + *
  • reserveIds(String projectId, List<Key> keys) + *

+ *

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

+ *
    + *
  • reserveIdsCallable() + *

+ *
+ * + *

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 DatastoreSettings 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
+ * DatastoreSettings datastoreSettings =
+ *     DatastoreSettings.newBuilder()
+ *         .setCredentialsProvider(FixedCredentialsProvider.create(myCredentials))
+ *         .build();
+ * DatastoreClient datastoreClient = DatastoreClient.create(datastoreSettings);
+ * }
+ * + *

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
+ * DatastoreSettings datastoreSettings =
+ *     DatastoreSettings.newBuilder().setEndpoint(myEndpoint).build();
+ * DatastoreClient datastoreClient = DatastoreClient.create(datastoreSettings);
+ * }
+ * + *

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
+ * DatastoreSettings datastoreSettings = DatastoreSettings.newHttpJsonBuilder().build();
+ * DatastoreClient datastoreClient = DatastoreClient.create(datastoreSettings);
+ * }
+ * + *

Please refer to the GitHub repository's samples for more quickstart code snippets. + */ +@Generated("by gapic-generator-java") +public class DatastoreClient implements BackgroundResource { + private final DatastoreSettings settings; + private final DatastoreStub stub; + + /** Constructs an instance of DatastoreClient with default settings. */ + public static final DatastoreClient create() throws IOException { + return create(DatastoreSettings.newBuilder().build()); + } + + /** + * Constructs an instance of DatastoreClient, 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 DatastoreClient create(DatastoreSettings settings) throws IOException { + return new DatastoreClient(settings); + } + + /** + * Constructs an instance of DatastoreClient, using the given stub for making calls. This is for + * advanced usage - prefer using create(DatastoreSettings). + */ + public static final DatastoreClient create(DatastoreStub stub) { + return new DatastoreClient(stub); + } + + /** + * Constructs an instance of DatastoreClient, 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 DatastoreClient(DatastoreSettings settings) throws IOException { + this.settings = settings; + this.stub = ((DatastoreStubSettings) settings.getStubSettings()).createStub(); + } + + protected DatastoreClient(DatastoreStub stub) { + this.settings = null; + this.stub = stub; + } + + public final DatastoreSettings getSettings() { + return settings; + } + + public DatastoreStub getStub() { + return stub; + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Looks up entities by key. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   String projectId = "projectId-894832108";
+   *   ReadOptions readOptions = ReadOptions.newBuilder().build();
+   *   List keys = new ArrayList<>();
+   *   LookupResponse response = datastoreClient.lookup(projectId, readOptions, keys);
+   * }
+   * }
+ * + * @param projectId Required. The ID of the project against which to make the request. + * @param readOptions The options for this lookup request. + * @param keys Required. Keys of entities to look up. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final LookupResponse lookup(String projectId, ReadOptions readOptions, List keys) { + LookupRequest request = + LookupRequest.newBuilder() + .setProjectId(projectId) + .setReadOptions(readOptions) + .addAllKeys(keys) + .build(); + return lookup(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Looks up entities by key. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   LookupRequest request =
+   *       LookupRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setReadOptions(ReadOptions.newBuilder().build())
+   *           .addAllKeys(new ArrayList())
+   *           .setPropertyMask(PropertyMask.newBuilder().build())
+   *           .build();
+   *   LookupResponse response = datastoreClient.lookup(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 LookupResponse lookup(LookupRequest request) { + return lookupCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Looks up entities by key. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   LookupRequest request =
+   *       LookupRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setReadOptions(ReadOptions.newBuilder().build())
+   *           .addAllKeys(new ArrayList())
+   *           .setPropertyMask(PropertyMask.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = datastoreClient.lookupCallable().futureCall(request);
+   *   // Do something.
+   *   LookupResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable lookupCallable() { + return stub.lookupCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Queries for entities. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   RunQueryRequest request =
+   *       RunQueryRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setPartitionId(PartitionId.newBuilder().build())
+   *           .setReadOptions(ReadOptions.newBuilder().build())
+   *           .setPropertyMask(PropertyMask.newBuilder().build())
+   *           .setExplainOptions(ExplainOptions.newBuilder().build())
+   *           .build();
+   *   RunQueryResponse response = datastoreClient.runQuery(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 RunQueryResponse runQuery(RunQueryRequest request) { + return runQueryCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Queries for entities. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   RunQueryRequest request =
+   *       RunQueryRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setPartitionId(PartitionId.newBuilder().build())
+   *           .setReadOptions(ReadOptions.newBuilder().build())
+   *           .setPropertyMask(PropertyMask.newBuilder().build())
+   *           .setExplainOptions(ExplainOptions.newBuilder().build())
+   *           .build();
+   *   ApiFuture future = datastoreClient.runQueryCallable().futureCall(request);
+   *   // Do something.
+   *   RunQueryResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable runQueryCallable() { + return stub.runQueryCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Runs an aggregation query. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   RunAggregationQueryRequest request =
+   *       RunAggregationQueryRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setPartitionId(PartitionId.newBuilder().build())
+   *           .setReadOptions(ReadOptions.newBuilder().build())
+   *           .setExplainOptions(ExplainOptions.newBuilder().build())
+   *           .build();
+   *   RunAggregationQueryResponse response = datastoreClient.runAggregationQuery(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 RunAggregationQueryResponse runAggregationQuery(RunAggregationQueryRequest request) { + return runAggregationQueryCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Runs an aggregation query. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   RunAggregationQueryRequest request =
+   *       RunAggregationQueryRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setPartitionId(PartitionId.newBuilder().build())
+   *           .setReadOptions(ReadOptions.newBuilder().build())
+   *           .setExplainOptions(ExplainOptions.newBuilder().build())
+   *           .build();
+   *   ApiFuture future =
+   *       datastoreClient.runAggregationQueryCallable().futureCall(request);
+   *   // Do something.
+   *   RunAggregationQueryResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + runAggregationQueryCallable() { + return stub.runAggregationQueryCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Begins a new transaction. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   String projectId = "projectId-894832108";
+   *   BeginTransactionResponse response = datastoreClient.beginTransaction(projectId);
+   * }
+   * }
+ * + * @param projectId Required. The ID of the project against which to make the request. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final BeginTransactionResponse beginTransaction(String projectId) { + BeginTransactionRequest request = + BeginTransactionRequest.newBuilder().setProjectId(projectId).build(); + return beginTransaction(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Begins a new transaction. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   BeginTransactionRequest request =
+   *       BeginTransactionRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setTransactionOptions(TransactionOptions.newBuilder().build())
+   *           .build();
+   *   BeginTransactionResponse response = datastoreClient.beginTransaction(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 BeginTransactionResponse beginTransaction(BeginTransactionRequest request) { + return beginTransactionCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Begins a new transaction. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   BeginTransactionRequest request =
+   *       BeginTransactionRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setTransactionOptions(TransactionOptions.newBuilder().build())
+   *           .build();
+   *   ApiFuture future =
+   *       datastoreClient.beginTransactionCallable().futureCall(request);
+   *   // Do something.
+   *   BeginTransactionResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable + beginTransactionCallable() { + return stub.beginTransactionCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Commits a transaction, optionally creating, deleting or modifying some entities. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   String projectId = "projectId-894832108";
+   *   CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0);
+   *   List mutations = new ArrayList<>();
+   *   CommitResponse response = datastoreClient.commit(projectId, mode, mutations);
+   * }
+   * }
+ * + * @param projectId Required. The ID of the project against which to make the request. + * @param mode The type of commit to perform. Defaults to `TRANSACTIONAL`. + * @param mutations The mutations to perform. + *

When mode is `TRANSACTIONAL`, mutations affecting a single entity are applied in order. + * The following sequences of mutations affecting a single entity are not permitted in a + * single `Commit` request: + *

- `insert` followed by `insert` - `update` followed by `insert` - `upsert` followed by + * `insert` - `delete` followed by `update` + *

When mode is `NON_TRANSACTIONAL`, no two mutations may affect a single entity. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final CommitResponse commit( + String projectId, CommitRequest.Mode mode, List mutations) { + CommitRequest request = + CommitRequest.newBuilder() + .setProjectId(projectId) + .setMode(mode) + .addAllMutations(mutations) + .build(); + return commit(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Commits a transaction, optionally creating, deleting or modifying some entities. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   String projectId = "projectId-894832108";
+   *   CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0);
+   *   ByteString transaction = ByteString.EMPTY;
+   *   List mutations = new ArrayList<>();
+   *   CommitResponse response = datastoreClient.commit(projectId, mode, transaction, mutations);
+   * }
+   * }
+ * + * @param projectId Required. The ID of the project against which to make the request. + * @param mode The type of commit to perform. Defaults to `TRANSACTIONAL`. + * @param transaction The identifier of the transaction associated with the commit. A transaction + * identifier is returned by a call to + * [Datastore.BeginTransaction][google.datastore.v1.Datastore.BeginTransaction]. + * @param mutations The mutations to perform. + *

When mode is `TRANSACTIONAL`, mutations affecting a single entity are applied in order. + * The following sequences of mutations affecting a single entity are not permitted in a + * single `Commit` request: + *

- `insert` followed by `insert` - `update` followed by `insert` - `upsert` followed by + * `insert` - `delete` followed by `update` + *

When mode is `NON_TRANSACTIONAL`, no two mutations may affect a single entity. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final CommitResponse commit( + String projectId, CommitRequest.Mode mode, ByteString transaction, List mutations) { + CommitRequest request = + CommitRequest.newBuilder() + .setProjectId(projectId) + .setMode(mode) + .setTransaction(transaction) + .addAllMutations(mutations) + .build(); + return commit(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Commits a transaction, optionally creating, deleting or modifying some entities. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   CommitRequest request =
+   *       CommitRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .addAllMutations(new ArrayList())
+   *           .build();
+   *   CommitResponse response = datastoreClient.commit(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 CommitResponse commit(CommitRequest request) { + return commitCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Commits a transaction, optionally creating, deleting or modifying some entities. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   CommitRequest request =
+   *       CommitRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .addAllMutations(new ArrayList())
+   *           .build();
+   *   ApiFuture future = datastoreClient.commitCallable().futureCall(request);
+   *   // Do something.
+   *   CommitResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable commitCallable() { + return stub.commitCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Rolls back a transaction. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   String projectId = "projectId-894832108";
+   *   ByteString transaction = ByteString.EMPTY;
+   *   RollbackResponse response = datastoreClient.rollback(projectId, transaction);
+   * }
+   * }
+ * + * @param projectId Required. The ID of the project against which to make the request. + * @param transaction Required. The transaction identifier, returned by a call to + * [Datastore.BeginTransaction][google.datastore.v1.Datastore.BeginTransaction]. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final RollbackResponse rollback(String projectId, ByteString transaction) { + RollbackRequest request = + RollbackRequest.newBuilder().setProjectId(projectId).setTransaction(transaction).build(); + return rollback(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Rolls back a transaction. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   RollbackRequest request =
+   *       RollbackRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setTransaction(ByteString.EMPTY)
+   *           .build();
+   *   RollbackResponse response = datastoreClient.rollback(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 RollbackResponse rollback(RollbackRequest request) { + return rollbackCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Rolls back a transaction. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   RollbackRequest request =
+   *       RollbackRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .setTransaction(ByteString.EMPTY)
+   *           .build();
+   *   ApiFuture future = datastoreClient.rollbackCallable().futureCall(request);
+   *   // Do something.
+   *   RollbackResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable rollbackCallable() { + return stub.rollbackCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Allocates IDs for the given keys, which is useful for referencing an entity before it is + * inserted. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   String projectId = "projectId-894832108";
+   *   List keys = new ArrayList<>();
+   *   AllocateIdsResponse response = datastoreClient.allocateIds(projectId, keys);
+   * }
+   * }
+ * + * @param projectId Required. The ID of the project against which to make the request. + * @param keys Required. A list of keys with incomplete key paths for which to allocate IDs. No + * key may be reserved/read-only. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final AllocateIdsResponse allocateIds(String projectId, List keys) { + AllocateIdsRequest request = + AllocateIdsRequest.newBuilder().setProjectId(projectId).addAllKeys(keys).build(); + return allocateIds(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Allocates IDs for the given keys, which is useful for referencing an entity before it is + * inserted. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   AllocateIdsRequest request =
+   *       AllocateIdsRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .addAllKeys(new ArrayList())
+   *           .build();
+   *   AllocateIdsResponse response = datastoreClient.allocateIds(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 AllocateIdsResponse allocateIds(AllocateIdsRequest request) { + return allocateIdsCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Allocates IDs for the given keys, which is useful for referencing an entity before it is + * inserted. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   AllocateIdsRequest request =
+   *       AllocateIdsRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .addAllKeys(new ArrayList())
+   *           .build();
+   *   ApiFuture future =
+   *       datastoreClient.allocateIdsCallable().futureCall(request);
+   *   // Do something.
+   *   AllocateIdsResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable allocateIdsCallable() { + return stub.allocateIdsCallable(); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Prevents the supplied keys' IDs from being auto-allocated by Cloud Datastore. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   String projectId = "projectId-894832108";
+   *   List keys = new ArrayList<>();
+   *   ReserveIdsResponse response = datastoreClient.reserveIds(projectId, keys);
+   * }
+   * }
+ * + * @param projectId Required. The ID of the project against which to make the request. + * @param keys Required. A list of keys with complete key paths whose numeric IDs should not be + * auto-allocated. + * @throws com.google.api.gax.rpc.ApiException if the remote call fails + */ + public final ReserveIdsResponse reserveIds(String projectId, List keys) { + ReserveIdsRequest request = + ReserveIdsRequest.newBuilder().setProjectId(projectId).addAllKeys(keys).build(); + return reserveIds(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Prevents the supplied keys' IDs from being auto-allocated by Cloud Datastore. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   ReserveIdsRequest request =
+   *       ReserveIdsRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .addAllKeys(new ArrayList())
+   *           .build();
+   *   ReserveIdsResponse response = datastoreClient.reserveIds(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 ReserveIdsResponse reserveIds(ReserveIdsRequest request) { + return reserveIdsCallable().call(request); + } + + // AUTO-GENERATED DOCUMENTATION AND METHOD. + /** + * Prevents the supplied keys' IDs from being auto-allocated by Cloud Datastore. + * + *

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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+   *   ReserveIdsRequest request =
+   *       ReserveIdsRequest.newBuilder()
+   *           .setProjectId("projectId-894832108")
+   *           .setDatabaseId("databaseId1688905718")
+   *           .addAllKeys(new ArrayList())
+   *           .build();
+   *   ApiFuture future =
+   *       datastoreClient.reserveIdsCallable().futureCall(request);
+   *   // Do something.
+   *   ReserveIdsResponse response = future.get();
+   * }
+   * }
+ */ + public final UnaryCallable reserveIdsCallable() { + return stub.reserveIdsCallable(); + } + + @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/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/DatastoreSettings.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/DatastoreSettings.java new file mode 100644 index 000000000..74054341e --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/DatastoreSettings.java @@ -0,0 +1,304 @@ +/* + * 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.cloud.datastore.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.TransportChannelProvider; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.cloud.datastore.v1.stub.DatastoreStubSettings; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +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 DatastoreClient}. + * + *

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

    + *
  • The default service address (datastore.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 lookup: + * + *

{@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
+ * DatastoreSettings.Builder datastoreSettingsBuilder = DatastoreSettings.newBuilder();
+ * datastoreSettingsBuilder
+ *     .lookupSettings()
+ *     .setRetrySettings(
+ *         datastoreSettingsBuilder
+ *             .lookupSettings()
+ *             .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());
+ * DatastoreSettings datastoreSettings = datastoreSettingsBuilder.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 DatastoreSettings extends ClientSettings { + + /** Returns the object with the settings used for calls to lookup. */ + public UnaryCallSettings lookupSettings() { + return ((DatastoreStubSettings) getStubSettings()).lookupSettings(); + } + + /** Returns the object with the settings used for calls to runQuery. */ + public UnaryCallSettings runQuerySettings() { + return ((DatastoreStubSettings) getStubSettings()).runQuerySettings(); + } + + /** Returns the object with the settings used for calls to runAggregationQuery. */ + public UnaryCallSettings + runAggregationQuerySettings() { + return ((DatastoreStubSettings) getStubSettings()).runAggregationQuerySettings(); + } + + /** Returns the object with the settings used for calls to beginTransaction. */ + public UnaryCallSettings + beginTransactionSettings() { + return ((DatastoreStubSettings) getStubSettings()).beginTransactionSettings(); + } + + /** Returns the object with the settings used for calls to commit. */ + public UnaryCallSettings commitSettings() { + return ((DatastoreStubSettings) getStubSettings()).commitSettings(); + } + + /** Returns the object with the settings used for calls to rollback. */ + public UnaryCallSettings rollbackSettings() { + return ((DatastoreStubSettings) getStubSettings()).rollbackSettings(); + } + + /** Returns the object with the settings used for calls to allocateIds. */ + public UnaryCallSettings allocateIdsSettings() { + return ((DatastoreStubSettings) getStubSettings()).allocateIdsSettings(); + } + + /** Returns the object with the settings used for calls to reserveIds. */ + public UnaryCallSettings reserveIdsSettings() { + return ((DatastoreStubSettings) getStubSettings()).reserveIdsSettings(); + } + + public static final DatastoreSettings create(DatastoreStubSettings stub) throws IOException { + return new DatastoreSettings.Builder(stub.toBuilder()).build(); + } + + /** Returns a builder for the default ExecutorProvider for this service. */ + public static InstantiatingExecutorProvider.Builder defaultExecutorProviderBuilder() { + return DatastoreStubSettings.defaultExecutorProviderBuilder(); + } + + /** Returns the default service endpoint. */ + public static String getDefaultEndpoint() { + return DatastoreStubSettings.getDefaultEndpoint(); + } + + /** Returns the default service scopes. */ + public static List getDefaultServiceScopes() { + return DatastoreStubSettings.getDefaultServiceScopes(); + } + + /** Returns a builder for the default credentials for this service. */ + public static GoogleCredentialsProvider.Builder defaultCredentialsProviderBuilder() { + return DatastoreStubSettings.defaultCredentialsProviderBuilder(); + } + + /** Returns a builder for the default gRPC ChannelProvider for this service. */ + public static InstantiatingGrpcChannelProvider.Builder defaultGrpcTransportProviderBuilder() { + return DatastoreStubSettings.defaultGrpcTransportProviderBuilder(); + } + + /** Returns a builder for the default REST ChannelProvider for this service. */ + @BetaApi + public static InstantiatingHttpJsonChannelProvider.Builder + defaultHttpJsonTransportProviderBuilder() { + return DatastoreStubSettings.defaultHttpJsonTransportProviderBuilder(); + } + + public static TransportChannelProvider defaultTransportChannelProvider() { + return DatastoreStubSettings.defaultTransportChannelProvider(); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return DatastoreStubSettings.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 DatastoreSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + } + + /** Builder for DatastoreSettings. */ + public static class Builder extends ClientSettings.Builder { + + protected Builder() throws IOException { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(DatastoreStubSettings.newBuilder(clientContext)); + } + + protected Builder(DatastoreSettings settings) { + super(settings.getStubSettings().toBuilder()); + } + + protected Builder(DatastoreStubSettings.Builder stubSettings) { + super(stubSettings); + } + + private static Builder createDefault() { + return new Builder(DatastoreStubSettings.newBuilder()); + } + + private static Builder createHttpJsonDefault() { + return new Builder(DatastoreStubSettings.newHttpJsonBuilder()); + } + + public DatastoreStubSettings.Builder getStubSettingsBuilder() { + return ((DatastoreStubSettings.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 lookup. */ + public UnaryCallSettings.Builder lookupSettings() { + return getStubSettingsBuilder().lookupSettings(); + } + + /** Returns the builder for the settings used for calls to runQuery. */ + public UnaryCallSettings.Builder runQuerySettings() { + return getStubSettingsBuilder().runQuerySettings(); + } + + /** Returns the builder for the settings used for calls to runAggregationQuery. */ + public UnaryCallSettings.Builder + runAggregationQuerySettings() { + return getStubSettingsBuilder().runAggregationQuerySettings(); + } + + /** Returns the builder for the settings used for calls to beginTransaction. */ + public UnaryCallSettings.Builder + beginTransactionSettings() { + return getStubSettingsBuilder().beginTransactionSettings(); + } + + /** Returns the builder for the settings used for calls to commit. */ + public UnaryCallSettings.Builder commitSettings() { + return getStubSettingsBuilder().commitSettings(); + } + + /** Returns the builder for the settings used for calls to rollback. */ + public UnaryCallSettings.Builder rollbackSettings() { + return getStubSettingsBuilder().rollbackSettings(); + } + + /** Returns the builder for the settings used for calls to allocateIds. */ + public UnaryCallSettings.Builder + allocateIdsSettings() { + return getStubSettingsBuilder().allocateIdsSettings(); + } + + /** Returns the builder for the settings used for calls to reserveIds. */ + public UnaryCallSettings.Builder reserveIdsSettings() { + return getStubSettingsBuilder().reserveIdsSettings(); + } + + @Override + public DatastoreSettings build() throws IOException { + return new DatastoreSettings(this); + } + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/gapic_metadata.json b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/gapic_metadata.json new file mode 100644 index 000000000..02196d36e --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/gapic_metadata.json @@ -0,0 +1,42 @@ +{ + "schema": "1.0", + "comment": "This file maps proto services/RPCs to the corresponding library clients/methods", + "language": "java", + "protoPackage": "google.datastore.v1", + "libraryPackage": "com.google.cloud.datastore.v1", + "services": { + "Datastore": { + "clients": { + "grpc": { + "libraryClient": "DatastoreClient", + "rpcs": { + "AllocateIds": { + "methods": ["allocateIds", "allocateIds", "allocateIdsCallable"] + }, + "BeginTransaction": { + "methods": ["beginTransaction", "beginTransaction", "beginTransactionCallable"] + }, + "Commit": { + "methods": ["commit", "commit", "commit", "commitCallable"] + }, + "Lookup": { + "methods": ["lookup", "lookup", "lookupCallable"] + }, + "ReserveIds": { + "methods": ["reserveIds", "reserveIds", "reserveIdsCallable"] + }, + "Rollback": { + "methods": ["rollback", "rollback", "rollbackCallable"] + }, + "RunAggregationQuery": { + "methods": ["runAggregationQuery", "runAggregationQueryCallable"] + }, + "RunQuery": { + "methods": ["runQuery", "runQueryCallable"] + } + } + } + } + } + } +} \ No newline at end of file diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/package-info.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/package-info.java new file mode 100644 index 000000000..0484a7c04 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/package-info.java @@ -0,0 +1,49 @@ +/* + * 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 Datastore API + * + *

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

======================= DatastoreClient ======================= + * + *

Service Description: Each RPC normalizes the partition IDs of the keys in its input entities, + * and always returns entities with keys with normalized partition IDs. This applies to all keys and + * entities, including those in values, except keys with both an empty path and an empty or unset + * partition ID. Normalization of input keys sets the project ID (if not already set) to the project + * ID from the request. + * + *

Sample for DatastoreClient: + * + *

{@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 (DatastoreClient datastoreClient = DatastoreClient.create()) {
+ *   String projectId = "projectId-894832108";
+ *   ReadOptions readOptions = ReadOptions.newBuilder().build();
+ *   List keys = new ArrayList<>();
+ *   LookupResponse response = datastoreClient.lookup(projectId, readOptions, keys);
+ * }
+ * }
+ */ +@Generated("by gapic-generator-java") +package com.google.cloud.datastore.v1; + +import javax.annotation.Generated; diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/DatastoreStub.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/DatastoreStub.java new file mode 100644 index 000000000..231289f18 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/DatastoreStub.java @@ -0,0 +1,84 @@ +/* + * 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.cloud.datastore.v1.stub; + +import com.google.api.gax.core.BackgroundResource; +import com.google.api.gax.rpc.UnaryCallable; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import javax.annotation.Generated; + +// AUTO-GENERATED DOCUMENTATION AND CLASS. +/** + * Base stub class for the Datastore service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public abstract class DatastoreStub implements BackgroundResource { + + public UnaryCallable lookupCallable() { + throw new UnsupportedOperationException("Not implemented: lookupCallable()"); + } + + public UnaryCallable runQueryCallable() { + throw new UnsupportedOperationException("Not implemented: runQueryCallable()"); + } + + public UnaryCallable + runAggregationQueryCallable() { + throw new UnsupportedOperationException("Not implemented: runAggregationQueryCallable()"); + } + + public UnaryCallable + beginTransactionCallable() { + throw new UnsupportedOperationException("Not implemented: beginTransactionCallable()"); + } + + public UnaryCallable commitCallable() { + throw new UnsupportedOperationException("Not implemented: commitCallable()"); + } + + public UnaryCallable rollbackCallable() { + throw new UnsupportedOperationException("Not implemented: rollbackCallable()"); + } + + public UnaryCallable allocateIdsCallable() { + throw new UnsupportedOperationException("Not implemented: allocateIdsCallable()"); + } + + public UnaryCallable reserveIdsCallable() { + throw new UnsupportedOperationException("Not implemented: reserveIdsCallable()"); + } + + @Override + public abstract void close(); +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/DatastoreStubSettings.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/DatastoreStubSettings.java new file mode 100644 index 000000000..a4554339d --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/DatastoreStubSettings.java @@ -0,0 +1,535 @@ +/* + * 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.cloud.datastore.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.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.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +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 DatastoreStub}. + * + *

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

    + *
  • The default service address (datastore.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 lookup: + * + *

{@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
+ * DatastoreStubSettings.Builder datastoreSettingsBuilder = DatastoreStubSettings.newBuilder();
+ * datastoreSettingsBuilder
+ *     .lookupSettings()
+ *     .setRetrySettings(
+ *         datastoreSettingsBuilder
+ *             .lookupSettings()
+ *             .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());
+ * DatastoreStubSettings datastoreSettings = datastoreSettingsBuilder.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 DatastoreStubSettings 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/datastore") + .build(); + + private final UnaryCallSettings lookupSettings; + private final UnaryCallSettings runQuerySettings; + private final UnaryCallSettings + runAggregationQuerySettings; + private final UnaryCallSettings + beginTransactionSettings; + private final UnaryCallSettings commitSettings; + private final UnaryCallSettings rollbackSettings; + private final UnaryCallSettings allocateIdsSettings; + private final UnaryCallSettings reserveIdsSettings; + + /** Returns the object with the settings used for calls to lookup. */ + public UnaryCallSettings lookupSettings() { + return lookupSettings; + } + + /** Returns the object with the settings used for calls to runQuery. */ + public UnaryCallSettings runQuerySettings() { + return runQuerySettings; + } + + /** Returns the object with the settings used for calls to runAggregationQuery. */ + public UnaryCallSettings + runAggregationQuerySettings() { + return runAggregationQuerySettings; + } + + /** Returns the object with the settings used for calls to beginTransaction. */ + public UnaryCallSettings + beginTransactionSettings() { + return beginTransactionSettings; + } + + /** Returns the object with the settings used for calls to commit. */ + public UnaryCallSettings commitSettings() { + return commitSettings; + } + + /** Returns the object with the settings used for calls to rollback. */ + public UnaryCallSettings rollbackSettings() { + return rollbackSettings; + } + + /** Returns the object with the settings used for calls to allocateIds. */ + public UnaryCallSettings allocateIdsSettings() { + return allocateIdsSettings; + } + + /** Returns the object with the settings used for calls to reserveIds. */ + public UnaryCallSettings reserveIdsSettings() { + return reserveIdsSettings; + } + + public DatastoreStub createStub() throws IOException { + if (getTransportChannelProvider() + .getTransportName() + .equals(GrpcTransportChannel.getGrpcTransportName())) { + return GrpcDatastoreStub.create(this); + } + if (getTransportChannelProvider() + .getTransportName() + .equals(HttpJsonTransportChannel.getHttpJsonTransportName())) { + return HttpJsonDatastoreStub.create(this); + } + throw new UnsupportedOperationException( + String.format( + "Transport not supported: %s", getTransportChannelProvider().getTransportName())); + } + + /** Returns the default service name. */ + @Override + public String getServiceName() { + return "datastore"; + } + + /** 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 "datastore.googleapis.com:443"; + } + + /** Returns the default mTLS service endpoint. */ + public static String getDefaultMtlsEndpoint() { + return "datastore.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(DatastoreStubSettings.class)) + .setTransportToken( + GaxGrpcProperties.getGrpcTokenName(), GaxGrpcProperties.getGrpcVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultHttpJsonApiClientHeaderProviderBuilder() { + return ApiClientHeaderProvider.newBuilder() + .setGeneratedLibToken("gapic", GaxProperties.getLibraryVersion(DatastoreStubSettings.class)) + .setTransportToken( + GaxHttpJsonProperties.getHttpJsonTokenName(), + GaxHttpJsonProperties.getHttpJsonVersion()); + } + + public static ApiClientHeaderProvider.Builder defaultApiClientHeaderProviderBuilder() { + return DatastoreStubSettings.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 DatastoreStubSettings(Builder settingsBuilder) throws IOException { + super(settingsBuilder); + + lookupSettings = settingsBuilder.lookupSettings().build(); + runQuerySettings = settingsBuilder.runQuerySettings().build(); + runAggregationQuerySettings = settingsBuilder.runAggregationQuerySettings().build(); + beginTransactionSettings = settingsBuilder.beginTransactionSettings().build(); + commitSettings = settingsBuilder.commitSettings().build(); + rollbackSettings = settingsBuilder.rollbackSettings().build(); + allocateIdsSettings = settingsBuilder.allocateIdsSettings().build(); + reserveIdsSettings = settingsBuilder.reserveIdsSettings().build(); + } + + /** Builder for DatastoreStubSettings. */ + public static class Builder extends StubSettings.Builder { + private final ImmutableList> unaryMethodSettingsBuilders; + private final UnaryCallSettings.Builder lookupSettings; + private final UnaryCallSettings.Builder runQuerySettings; + private final UnaryCallSettings.Builder + runAggregationQuerySettings; + private final UnaryCallSettings.Builder + beginTransactionSettings; + private final UnaryCallSettings.Builder commitSettings; + private final UnaryCallSettings.Builder rollbackSettings; + private final UnaryCallSettings.Builder + allocateIdsSettings; + private final UnaryCallSettings.Builder + reserveIdsSettings; + private static final ImmutableMap> + RETRYABLE_CODE_DEFINITIONS; + + static { + ImmutableMap.Builder> definitions = + ImmutableMap.builder(); + definitions.put( + "retry_policy_0_codes", + ImmutableSet.copyOf( + Lists.newArrayList( + StatusCode.Code.UNAVAILABLE, StatusCode.Code.DEADLINE_EXCEEDED))); + definitions.put( + "no_retry_1_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(100L)) + .setRetryDelayMultiplier(1.3) + .setMaxRetryDelayDuration(Duration.ofMillis(60000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("retry_policy_0_params", settings); + settings = + RetrySettings.newBuilder() + .setInitialRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setRpcTimeoutMultiplier(1.0) + .setMaxRpcTimeoutDuration(Duration.ofMillis(60000L)) + .setTotalTimeoutDuration(Duration.ofMillis(60000L)) + .build(); + definitions.put("no_retry_1_params", settings); + RETRY_PARAM_DEFINITIONS = definitions.build(); + } + + protected Builder() { + this(((ClientContext) null)); + } + + protected Builder(ClientContext clientContext) { + super(clientContext); + + lookupSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + runQuerySettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + runAggregationQuerySettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + beginTransactionSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + commitSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + rollbackSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + allocateIdsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + reserveIdsSettings = UnaryCallSettings.newUnaryCallSettingsBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + lookupSettings, + runQuerySettings, + runAggregationQuerySettings, + beginTransactionSettings, + commitSettings, + rollbackSettings, + allocateIdsSettings, + reserveIdsSettings); + initDefaults(this); + } + + protected Builder(DatastoreStubSettings settings) { + super(settings); + + lookupSettings = settings.lookupSettings.toBuilder(); + runQuerySettings = settings.runQuerySettings.toBuilder(); + runAggregationQuerySettings = settings.runAggregationQuerySettings.toBuilder(); + beginTransactionSettings = settings.beginTransactionSettings.toBuilder(); + commitSettings = settings.commitSettings.toBuilder(); + rollbackSettings = settings.rollbackSettings.toBuilder(); + allocateIdsSettings = settings.allocateIdsSettings.toBuilder(); + reserveIdsSettings = settings.reserveIdsSettings.toBuilder(); + + unaryMethodSettingsBuilders = + ImmutableList.>of( + lookupSettings, + runQuerySettings, + runAggregationQuerySettings, + beginTransactionSettings, + commitSettings, + rollbackSettings, + allocateIdsSettings, + reserveIdsSettings); + } + + 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 + .lookupSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .runQuerySettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .runAggregationQuerySettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_0_params")); + + builder + .beginTransactionSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_1_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_1_params")); + + builder + .commitSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_1_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_1_params")); + + builder + .rollbackSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_1_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_1_params")); + + builder + .allocateIdsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("no_retry_1_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("no_retry_1_params")); + + builder + .reserveIdsSettings() + .setRetryableCodes(RETRYABLE_CODE_DEFINITIONS.get("retry_policy_0_codes")) + .setRetrySettings(RETRY_PARAM_DEFINITIONS.get("retry_policy_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 lookup. */ + public UnaryCallSettings.Builder lookupSettings() { + return lookupSettings; + } + + /** Returns the builder for the settings used for calls to runQuery. */ + public UnaryCallSettings.Builder runQuerySettings() { + return runQuerySettings; + } + + /** Returns the builder for the settings used for calls to runAggregationQuery. */ + public UnaryCallSettings.Builder + runAggregationQuerySettings() { + return runAggregationQuerySettings; + } + + /** Returns the builder for the settings used for calls to beginTransaction. */ + public UnaryCallSettings.Builder + beginTransactionSettings() { + return beginTransactionSettings; + } + + /** Returns the builder for the settings used for calls to commit. */ + public UnaryCallSettings.Builder commitSettings() { + return commitSettings; + } + + /** Returns the builder for the settings used for calls to rollback. */ + public UnaryCallSettings.Builder rollbackSettings() { + return rollbackSettings; + } + + /** Returns the builder for the settings used for calls to allocateIds. */ + public UnaryCallSettings.Builder + allocateIdsSettings() { + return allocateIdsSettings; + } + + /** Returns the builder for the settings used for calls to reserveIds. */ + public UnaryCallSettings.Builder reserveIdsSettings() { + return reserveIdsSettings; + } + + @Override + public DatastoreStubSettings build() throws IOException { + return new DatastoreStubSettings(this); + } + } +} diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/GrpcDatastoreCallableFactory.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/GrpcDatastoreCallableFactory.java new file mode 100644 index 000000000..ffe225259 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/GrpcDatastoreCallableFactory.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.cloud.datastore.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 Datastore service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class GrpcDatastoreCallableFactory 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/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/GrpcDatastoreStub.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/GrpcDatastoreStub.java new file mode 100644 index 000000000..487413816 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/GrpcDatastoreStub.java @@ -0,0 +1,429 @@ +/* + * 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.cloud.datastore.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.UnaryCallable; +import com.google.api.pathtemplate.PathTemplate; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import com.google.longrunning.stub.GrpcOperationsStub; +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 Datastore service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class GrpcDatastoreStub extends DatastoreStub { + private static final MethodDescriptor lookupMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.datastore.v1.Datastore/Lookup") + .setRequestMarshaller(ProtoUtils.marshaller(LookupRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(LookupResponse.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + runQueryMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.datastore.v1.Datastore/RunQuery") + .setRequestMarshaller(ProtoUtils.marshaller(RunQueryRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(RunQueryResponse.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + runAggregationQueryMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.datastore.v1.Datastore/RunAggregationQuery") + .setRequestMarshaller( + ProtoUtils.marshaller(RunAggregationQueryRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(RunAggregationQueryResponse.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + beginTransactionMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.datastore.v1.Datastore/BeginTransaction") + .setRequestMarshaller( + ProtoUtils.marshaller(BeginTransactionRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(BeginTransactionResponse.getDefaultInstance())) + .build(); + + private static final MethodDescriptor commitMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.datastore.v1.Datastore/Commit") + .setRequestMarshaller(ProtoUtils.marshaller(CommitRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(CommitResponse.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + rollbackMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.datastore.v1.Datastore/Rollback") + .setRequestMarshaller(ProtoUtils.marshaller(RollbackRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(RollbackResponse.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + allocateIdsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.datastore.v1.Datastore/AllocateIds") + .setRequestMarshaller(ProtoUtils.marshaller(AllocateIdsRequest.getDefaultInstance())) + .setResponseMarshaller( + ProtoUtils.marshaller(AllocateIdsResponse.getDefaultInstance())) + .build(); + + private static final MethodDescriptor + reserveIdsMethodDescriptor = + MethodDescriptor.newBuilder() + .setType(MethodDescriptor.MethodType.UNARY) + .setFullMethodName("google.datastore.v1.Datastore/ReserveIds") + .setRequestMarshaller(ProtoUtils.marshaller(ReserveIdsRequest.getDefaultInstance())) + .setResponseMarshaller(ProtoUtils.marshaller(ReserveIdsResponse.getDefaultInstance())) + .build(); + + private final UnaryCallable lookupCallable; + private final UnaryCallable runQueryCallable; + private final UnaryCallable + runAggregationQueryCallable; + private final UnaryCallable + beginTransactionCallable; + private final UnaryCallable commitCallable; + private final UnaryCallable rollbackCallable; + private final UnaryCallable allocateIdsCallable; + private final UnaryCallable reserveIdsCallable; + + private final BackgroundResource backgroundResources; + private final GrpcOperationsStub operationsStub; + private final GrpcStubCallableFactory callableFactory; + + private static final PathTemplate LOOKUP_0_PATH_TEMPLATE = PathTemplate.create("{project_id=**}"); + private static final PathTemplate LOOKUP_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate RUN_QUERY_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate RUN_QUERY_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate RUN_AGGREGATION_QUERY_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate RUN_AGGREGATION_QUERY_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate BEGIN_TRANSACTION_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate BEGIN_TRANSACTION_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate COMMIT_0_PATH_TEMPLATE = PathTemplate.create("{project_id=**}"); + private static final PathTemplate COMMIT_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate ROLLBACK_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate ROLLBACK_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate ALLOCATE_IDS_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate ALLOCATE_IDS_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate RESERVE_IDS_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate RESERVE_IDS_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + + public static final GrpcDatastoreStub create(DatastoreStubSettings settings) throws IOException { + return new GrpcDatastoreStub(settings, ClientContext.create(settings)); + } + + public static final GrpcDatastoreStub create(ClientContext clientContext) throws IOException { + return new GrpcDatastoreStub(DatastoreStubSettings.newBuilder().build(), clientContext); + } + + public static final GrpcDatastoreStub create( + ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException { + return new GrpcDatastoreStub( + DatastoreStubSettings.newBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of GrpcDatastoreStub, 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 GrpcDatastoreStub(DatastoreStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new GrpcDatastoreCallableFactory()); + } + + /** + * Constructs an instance of GrpcDatastoreStub, 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 GrpcDatastoreStub( + DatastoreStubSettings settings, + ClientContext clientContext, + GrpcStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + this.operationsStub = GrpcOperationsStub.create(clientContext, callableFactory); + + GrpcCallSettings lookupTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(lookupMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", LOOKUP_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", LOOKUP_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + GrpcCallSettings runQueryTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(runQueryMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", RUN_QUERY_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", RUN_QUERY_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + GrpcCallSettings + runAggregationQueryTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(runAggregationQueryMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add( + request.getProjectId(), + "project_id", + RUN_AGGREGATION_QUERY_0_PATH_TEMPLATE); + builder.add( + request.getDatabaseId(), + "database_id", + RUN_AGGREGATION_QUERY_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + GrpcCallSettings + beginTransactionTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(beginTransactionMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add( + request.getProjectId(), "project_id", BEGIN_TRANSACTION_0_PATH_TEMPLATE); + builder.add( + request.getDatabaseId(), + "database_id", + BEGIN_TRANSACTION_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + GrpcCallSettings commitTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(commitMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", COMMIT_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", COMMIT_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + GrpcCallSettings rollbackTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(rollbackMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", ROLLBACK_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", ROLLBACK_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + GrpcCallSettings allocateIdsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(allocateIdsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", ALLOCATE_IDS_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", ALLOCATE_IDS_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + GrpcCallSettings reserveIdsTransportSettings = + GrpcCallSettings.newBuilder() + .setMethodDescriptor(reserveIdsMethodDescriptor) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", RESERVE_IDS_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", RESERVE_IDS_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + + this.lookupCallable = + callableFactory.createUnaryCallable( + lookupTransportSettings, settings.lookupSettings(), clientContext); + this.runQueryCallable = + callableFactory.createUnaryCallable( + runQueryTransportSettings, settings.runQuerySettings(), clientContext); + this.runAggregationQueryCallable = + callableFactory.createUnaryCallable( + runAggregationQueryTransportSettings, + settings.runAggregationQuerySettings(), + clientContext); + this.beginTransactionCallable = + callableFactory.createUnaryCallable( + beginTransactionTransportSettings, settings.beginTransactionSettings(), clientContext); + this.commitCallable = + callableFactory.createUnaryCallable( + commitTransportSettings, settings.commitSettings(), clientContext); + this.rollbackCallable = + callableFactory.createUnaryCallable( + rollbackTransportSettings, settings.rollbackSettings(), clientContext); + this.allocateIdsCallable = + callableFactory.createUnaryCallable( + allocateIdsTransportSettings, settings.allocateIdsSettings(), clientContext); + this.reserveIdsCallable = + callableFactory.createUnaryCallable( + reserveIdsTransportSettings, settings.reserveIdsSettings(), clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + public GrpcOperationsStub getOperationsStub() { + return operationsStub; + } + + @Override + public UnaryCallable lookupCallable() { + return lookupCallable; + } + + @Override + public UnaryCallable runQueryCallable() { + return runQueryCallable; + } + + @Override + public UnaryCallable + runAggregationQueryCallable() { + return runAggregationQueryCallable; + } + + @Override + public UnaryCallable + beginTransactionCallable() { + return beginTransactionCallable; + } + + @Override + public UnaryCallable commitCallable() { + return commitCallable; + } + + @Override + public UnaryCallable rollbackCallable() { + return rollbackCallable; + } + + @Override + public UnaryCallable allocateIdsCallable() { + return allocateIdsCallable; + } + + @Override + public UnaryCallable reserveIdsCallable() { + return reserveIdsCallable; + } + + @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/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/HttpJsonDatastoreCallableFactory.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/HttpJsonDatastoreCallableFactory.java new file mode 100644 index 000000000..b12560ab1 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/HttpJsonDatastoreCallableFactory.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.cloud.datastore.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 Datastore service API. + * + *

This class is for advanced usage. + */ +@Generated("by gapic-generator-java") +public class HttpJsonDatastoreCallableFactory + 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/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/HttpJsonDatastoreStub.java b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/HttpJsonDatastoreStub.java new file mode 100644 index 000000000..4d77fcac2 --- /dev/null +++ b/google-cloud-datastore/src/main/java/com/google/cloud/datastore/v1/stub/HttpJsonDatastoreStub.java @@ -0,0 +1,676 @@ +/* + * 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.cloud.datastore.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.UnaryCallable; +import com.google.api.pathtemplate.PathTemplate; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import com.google.protobuf.TypeRegistry; +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 Datastore service API. + * + *

This class is for advanced usage and reflects the underlying API directly. + */ +@Generated("by gapic-generator-java") +public class HttpJsonDatastoreStub extends DatastoreStub { + private static final TypeRegistry typeRegistry = TypeRegistry.newBuilder().build(); + + private static final ApiMethodDescriptor lookupMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.datastore.v1.Datastore/Lookup") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}:lookup", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + 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().clearProjectId().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(LookupResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + runQueryMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.datastore.v1.Datastore/RunQuery") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}:runQuery", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + 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().clearProjectId().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(RunQueryResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + runAggregationQueryMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.datastore.v1.Datastore/RunAggregationQuery") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}:runAggregationQuery", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + 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().clearProjectId().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(RunAggregationQueryResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + beginTransactionMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.datastore.v1.Datastore/BeginTransaction") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}:beginTransaction", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + 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().clearProjectId().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(BeginTransactionResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor commitMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.datastore.v1.Datastore/Commit") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}:commit", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + 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().clearProjectId().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(CommitResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + rollbackMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.datastore.v1.Datastore/Rollback") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}:rollback", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + 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().clearProjectId().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(RollbackResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + allocateIdsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.datastore.v1.Datastore/AllocateIds") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}:allocateIds", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + 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().clearProjectId().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(AllocateIdsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private static final ApiMethodDescriptor + reserveIdsMethodDescriptor = + ApiMethodDescriptor.newBuilder() + .setFullMethodName("google.datastore.v1.Datastore/ReserveIds") + .setHttpMethod("POST") + .setType(ApiMethodDescriptor.MethodType.UNARY) + .setRequestFormatter( + ProtoMessageRequestFormatter.newBuilder() + .setPath( + "/v1/projects/{projectId}:reserveIds", + request -> { + Map fields = new HashMap<>(); + ProtoRestSerializer serializer = + ProtoRestSerializer.create(); + serializer.putPathParam(fields, "projectId", request.getProjectId()); + 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().clearProjectId().build(), true)) + .build()) + .setResponseParser( + ProtoMessageResponseParser.newBuilder() + .setDefaultInstance(ReserveIdsResponse.getDefaultInstance()) + .setDefaultTypeRegistry(typeRegistry) + .build()) + .build(); + + private final UnaryCallable lookupCallable; + private final UnaryCallable runQueryCallable; + private final UnaryCallable + runAggregationQueryCallable; + private final UnaryCallable + beginTransactionCallable; + private final UnaryCallable commitCallable; + private final UnaryCallable rollbackCallable; + private final UnaryCallable allocateIdsCallable; + private final UnaryCallable reserveIdsCallable; + + private final BackgroundResource backgroundResources; + private final HttpJsonStubCallableFactory callableFactory; + + private static final PathTemplate LOOKUP_0_PATH_TEMPLATE = PathTemplate.create("{project_id=**}"); + private static final PathTemplate LOOKUP_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate RUN_QUERY_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate RUN_QUERY_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate RUN_AGGREGATION_QUERY_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate RUN_AGGREGATION_QUERY_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate BEGIN_TRANSACTION_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate BEGIN_TRANSACTION_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate COMMIT_0_PATH_TEMPLATE = PathTemplate.create("{project_id=**}"); + private static final PathTemplate COMMIT_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate ROLLBACK_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate ROLLBACK_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate ALLOCATE_IDS_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate ALLOCATE_IDS_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + private static final PathTemplate RESERVE_IDS_0_PATH_TEMPLATE = + PathTemplate.create("{project_id=**}"); + private static final PathTemplate RESERVE_IDS_1_PATH_TEMPLATE = + PathTemplate.create("{database_id=**}"); + + public static final HttpJsonDatastoreStub create(DatastoreStubSettings settings) + throws IOException { + return new HttpJsonDatastoreStub(settings, ClientContext.create(settings)); + } + + public static final HttpJsonDatastoreStub create(ClientContext clientContext) throws IOException { + return new HttpJsonDatastoreStub( + DatastoreStubSettings.newHttpJsonBuilder().build(), clientContext); + } + + public static final HttpJsonDatastoreStub create( + ClientContext clientContext, HttpJsonStubCallableFactory callableFactory) throws IOException { + return new HttpJsonDatastoreStub( + DatastoreStubSettings.newHttpJsonBuilder().build(), clientContext, callableFactory); + } + + /** + * Constructs an instance of HttpJsonDatastoreStub, 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 HttpJsonDatastoreStub(DatastoreStubSettings settings, ClientContext clientContext) + throws IOException { + this(settings, clientContext, new HttpJsonDatastoreCallableFactory()); + } + + /** + * Constructs an instance of HttpJsonDatastoreStub, 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 HttpJsonDatastoreStub( + DatastoreStubSettings settings, + ClientContext clientContext, + HttpJsonStubCallableFactory callableFactory) + throws IOException { + this.callableFactory = callableFactory; + + HttpJsonCallSettings lookupTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(lookupMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", LOOKUP_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", LOOKUP_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + HttpJsonCallSettings runQueryTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(runQueryMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", RUN_QUERY_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", RUN_QUERY_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + runAggregationQueryTransportSettings = + HttpJsonCallSettings + .newBuilder() + .setMethodDescriptor(runAggregationQueryMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add( + request.getProjectId(), + "project_id", + RUN_AGGREGATION_QUERY_0_PATH_TEMPLATE); + builder.add( + request.getDatabaseId(), + "database_id", + RUN_AGGREGATION_QUERY_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + HttpJsonCallSettings + beginTransactionTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(beginTransactionMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add( + request.getProjectId(), "project_id", BEGIN_TRANSACTION_0_PATH_TEMPLATE); + builder.add( + request.getDatabaseId(), + "database_id", + BEGIN_TRANSACTION_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + HttpJsonCallSettings commitTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(commitMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", COMMIT_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", COMMIT_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + HttpJsonCallSettings rollbackTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(rollbackMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", ROLLBACK_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", ROLLBACK_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + HttpJsonCallSettings allocateIdsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(allocateIdsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", ALLOCATE_IDS_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", ALLOCATE_IDS_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + HttpJsonCallSettings reserveIdsTransportSettings = + HttpJsonCallSettings.newBuilder() + .setMethodDescriptor(reserveIdsMethodDescriptor) + .setTypeRegistry(typeRegistry) + .setParamsExtractor( + request -> { + RequestParamsBuilder builder = RequestParamsBuilder.create(); + builder.add(request.getProjectId(), "project_id", RESERVE_IDS_0_PATH_TEMPLATE); + builder.add(request.getDatabaseId(), "database_id", RESERVE_IDS_1_PATH_TEMPLATE); + return builder.build(); + }) + .build(); + + this.lookupCallable = + callableFactory.createUnaryCallable( + lookupTransportSettings, settings.lookupSettings(), clientContext); + this.runQueryCallable = + callableFactory.createUnaryCallable( + runQueryTransportSettings, settings.runQuerySettings(), clientContext); + this.runAggregationQueryCallable = + callableFactory.createUnaryCallable( + runAggregationQueryTransportSettings, + settings.runAggregationQuerySettings(), + clientContext); + this.beginTransactionCallable = + callableFactory.createUnaryCallable( + beginTransactionTransportSettings, settings.beginTransactionSettings(), clientContext); + this.commitCallable = + callableFactory.createUnaryCallable( + commitTransportSettings, settings.commitSettings(), clientContext); + this.rollbackCallable = + callableFactory.createUnaryCallable( + rollbackTransportSettings, settings.rollbackSettings(), clientContext); + this.allocateIdsCallable = + callableFactory.createUnaryCallable( + allocateIdsTransportSettings, settings.allocateIdsSettings(), clientContext); + this.reserveIdsCallable = + callableFactory.createUnaryCallable( + reserveIdsTransportSettings, settings.reserveIdsSettings(), clientContext); + + this.backgroundResources = + new BackgroundResourceAggregation(clientContext.getBackgroundResources()); + } + + @InternalApi + public static List getMethodDescriptors() { + List methodDescriptors = new ArrayList<>(); + methodDescriptors.add(lookupMethodDescriptor); + methodDescriptors.add(runQueryMethodDescriptor); + methodDescriptors.add(runAggregationQueryMethodDescriptor); + methodDescriptors.add(beginTransactionMethodDescriptor); + methodDescriptors.add(commitMethodDescriptor); + methodDescriptors.add(rollbackMethodDescriptor); + methodDescriptors.add(allocateIdsMethodDescriptor); + methodDescriptors.add(reserveIdsMethodDescriptor); + return methodDescriptors; + } + + @Override + public UnaryCallable lookupCallable() { + return lookupCallable; + } + + @Override + public UnaryCallable runQueryCallable() { + return runQueryCallable; + } + + @Override + public UnaryCallable + runAggregationQueryCallable() { + return runAggregationQueryCallable; + } + + @Override + public UnaryCallable + beginTransactionCallable() { + return beginTransactionCallable; + } + + @Override + public UnaryCallable commitCallable() { + return commitCallable; + } + + @Override + public UnaryCallable rollbackCallable() { + return rollbackCallable; + } + + @Override + public UnaryCallable allocateIdsCallable() { + return allocateIdsCallable; + } + + @Override + public UnaryCallable reserveIdsCallable() { + return reserveIdsCallable; + } + + @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/google-cloud-datastore/src/main/resources/META-INF/native-image/com.google.cloud.datastore.admin.v1/reflect-config.json b/google-cloud-datastore/src/main/resources/META-INF/native-image/com.google.cloud.datastore.admin.v1/reflect-config.json index 5ed5e01e5..dfe000730 100644 --- a/google-cloud-datastore/src/main/resources/META-INF/native-image/com.google.cloud.datastore.admin.v1/reflect-config.json +++ b/google-cloud-datastore/src/main/resources/META-INF/native-image/com.google.cloud.datastore.admin.v1/reflect-config.json @@ -305,6 +305,24 @@ "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, @@ -377,6 +395,24 @@ "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.datastore.admin.v1.CommonMetadata", "queryAllDeclaredConstructors": true, diff --git a/google-cloud-datastore/src/main/resources/META-INF/native-image/com.google.cloud.datastore.v1/reflect-config.json b/google-cloud-datastore/src/main/resources/META-INF/native-image/com.google.cloud.datastore.v1/reflect-config.json new file mode 100644 index 000000000..475f7690c --- /dev/null +++ b/google-cloud-datastore/src/main/resources/META-INF/native-image/com.google.cloud.datastore.v1/reflect-config.json @@ -0,0 +1,2522 @@ +[ + { + "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.RoutingParameter", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.RoutingParameter$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.RoutingRule", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.api.RoutingRule$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.datastore.v1.AggregationQuery", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Aggregation", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Aggregation$Avg", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Aggregation$Avg$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Aggregation$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Aggregation$Count", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Aggregation$Count$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Aggregation$Sum", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Aggregation$Sum$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationQuery$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationResult", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationResult$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationResultBatch", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AggregationResultBatch$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AllocateIdsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AllocateIdsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AllocateIdsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.AllocateIdsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ArrayValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ArrayValue$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.BeginTransactionRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.BeginTransactionRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.BeginTransactionResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.BeginTransactionResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.CommitRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.CommitRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.CommitRequest$Mode", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.CommitResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.CommitResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.CompositeFilter", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.CompositeFilter$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.CompositeFilter$Operator", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Entity", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Entity$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.EntityResult", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.EntityResult$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.EntityResult$ResultType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ExecutionStats", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ExecutionStats$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ExplainMetrics", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ExplainMetrics$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ExplainOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ExplainOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Filter", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Filter$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.FindNearest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.FindNearest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.FindNearest$DistanceMeasure", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.GqlQuery", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.GqlQuery$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.GqlQueryParameter", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.GqlQueryParameter$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Key", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Key$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Key$PathElement", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Key$PathElement$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.KindExpression", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.KindExpression$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.LookupRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.LookupRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.LookupResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.LookupResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Mutation", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Mutation$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Mutation$ConflictResolutionStrategy", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.MutationResult", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.MutationResult$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PartitionId", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PartitionId$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PlanSummary", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PlanSummary$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Projection", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Projection$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyFilter", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyFilter$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyFilter$Operator", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyMask", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyMask$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyOrder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyOrder$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyOrder$Direction", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyReference", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyReference$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyTransform", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyTransform$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.PropertyTransform$ServerValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Query", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Query$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.QueryResultBatch", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.QueryResultBatch$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.QueryResultBatch$MoreResultsType", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ReadOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ReadOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ReadOptions$ReadConsistency", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ReserveIdsRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ReserveIdsRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ReserveIdsResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.ReserveIdsResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RollbackRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RollbackRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RollbackResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RollbackResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RunAggregationQueryRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RunAggregationQueryRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RunAggregationQueryResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RunAggregationQueryResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RunQueryRequest", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RunQueryRequest$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RunQueryResponse", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.RunQueryResponse$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.TransactionOptions", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.TransactionOptions$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.TransactionOptions$ReadOnly", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.TransactionOptions$ReadOnly$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.TransactionOptions$ReadWrite", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.TransactionOptions$ReadWrite$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Value", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.datastore.v1.Value$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.BoolValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.BoolValue$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.BytesValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.BytesValue$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.DoubleValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.DoubleValue$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.protobuf.FloatValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.FloatValue$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Int32Value", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Int32Value$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Int64Value", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Int64Value$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.ListValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.ListValue$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.NullValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.StringValue", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.StringValue$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Struct", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Struct$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Timestamp", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Timestamp$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.UInt32Value", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.UInt32Value$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.UInt64Value", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.UInt64Value$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Value", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.protobuf.Value$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.type.LatLng", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + }, + { + "name": "com.google.type.LatLng$Builder", + "queryAllDeclaredConstructors": true, + "queryAllPublicConstructors": true, + "queryAllDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredClasses": true, + "allPublicClasses": true + } +] \ No newline at end of file diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/AbstractDatastoreTest.java similarity index 98% rename from google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTest.java rename to google-cloud-datastore/src/test/java/com/google/cloud/datastore/AbstractDatastoreTest.java index cd768f986..9d4ecac57 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/AbstractDatastoreTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Google LLC + * 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. @@ -67,7 +67,6 @@ import com.google.datastore.v1.RunQueryResponse; import com.google.datastore.v1.TransactionOptions; import com.google.protobuf.ByteString; -import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -77,24 +76,20 @@ import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.TimeoutException; import java.util.function.Predicate; import org.easymock.EasyMock; -import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.threeten.bp.Duration; @RunWith(JUnit4.class) -public class DatastoreTest { +public abstract class AbstractDatastoreTest { - private static LocalDatastoreHelper helper = LocalDatastoreHelper.create(1.0); - private static final DatastoreOptions options = helper.getOptions(); - private static final Datastore datastore = options.getService(); + private static final LocalDatastoreHelper helper = LocalDatastoreHelper.create(1.0, 9090); + protected static DatastoreOptions options = helper.getOptions(); + protected static Datastore datastore; private static final String PROJECT_ID = options.getProjectId(); private static final String KIND1 = "kind1"; private static final String KIND2 = "kind2"; @@ -167,18 +162,19 @@ public class DatastoreTest { private DatastoreRpcFactory rpcFactoryMock; private DatastoreRpc rpcMock; - @BeforeClass - public static void beforeClass() throws IOException, InterruptedException { - helper.start(); + public AbstractDatastoreTest(DatastoreOptions options, Datastore datastore) { + this.options = options; + this.datastore = datastore; } @Before public void setUp() { rpcFactoryMock = EasyMock.createStrictMock(DatastoreRpcFactory.class); rpcMock = EasyMock.createStrictMock(DatastoreRpc.class); + DatastoreOpenTelemetryOptions.Builder otelOptionsBuilder = + DatastoreOpenTelemetryOptions.newBuilder(); rpcMockOptions = - options - .toBuilder() + options.toBuilder() .setRetrySettings(ServiceOptions.getDefaultRetrySettings()) .setServiceRpcFactory(rpcFactoryMock) .build(); @@ -189,11 +185,6 @@ public void setUp() { datastore.add(ENTITY1, ENTITY2); } - @AfterClass - public static void afterClass() throws IOException, InterruptedException, TimeoutException { - helper.stop(Duration.ofMinutes(1)); - } - @Test public void testGetOptions() { assertSame(options, datastore.getOptions()); @@ -648,6 +639,7 @@ private List buildResponsesForQueryPagination() { List responses = new ArrayList<>(); RecordQuery query = Query.newKeyQueryBuilder().build(); RunQueryRequest.Builder requestPb = RunQueryRequest.newBuilder(); + requestPb.setProjectId(PROJECT_ID); query.populatePb(requestPb); QueryResultBatch queryResultBatchPb = RunQueryResponse.newBuilder() @@ -757,6 +749,7 @@ private List buildResponsesForQueryPaginationWithLimit() { List responses = new ArrayList<>(); RecordQuery query = Query.newEntityQueryBuilder().build(); RunQueryRequest.Builder requestPb = RunQueryRequest.newBuilder(); + requestPb.setProjectId(PROJECT_ID); query.populatePb(requestPb); QueryResultBatch queryResultBatchPb = RunQueryResponse.newBuilder() diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreExceptionTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreExceptionTest.java index 12b99c966..8c52b5519 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreExceptionTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreExceptionTest.java @@ -97,7 +97,7 @@ public void testTranslateAndThrow() { cause = new IllegalArgumentException("message"); exceptionMock = createMock(RetryHelper.RetryHelperException.class); expect(exceptionMock.getMessage()).andReturn("message").times(1); - expect(exceptionMock.getCause()).andReturn(cause).times(2); + expect(exceptionMock.getCause()).andReturn(cause).times(4); replay(exceptionMock); try { DatastoreException.translateAndThrow(exceptionMock); diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java index a545580e2..c6a26d05d 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Google LLC + * 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. @@ -16,15 +16,21 @@ package com.google.cloud.datastore; +import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; -import com.google.cloud.TransportOptions; +import com.google.api.gax.grpc.ChannelPoolSettings; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; +import com.google.cloud.NoCredentials; import com.google.cloud.datastore.spi.DatastoreRpcFactory; import com.google.cloud.datastore.spi.v1.DatastoreRpc; +import com.google.cloud.datastore.v1.DatastoreSettings; +import com.google.cloud.grpc.GrpcTransportOptions; +import com.google.cloud.http.HttpTransportOptions; +import com.google.datastore.v1.client.DatastoreFactory; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Before; @@ -48,7 +54,9 @@ public void setUp() { .setServiceRpcFactory(datastoreRpcFactory) .setProjectId(PROJECT_ID) .setDatabaseId(DATABASE_ID) + .setCredentials(NoCredentials.getInstance()) .setHost("http://localhost:" + PORT); + EasyMock.expect(datastoreRpcFactory.create(EasyMock.anyObject(DatastoreOptions.class))) .andReturn(datastoreRpc) .anyTimes(); @@ -70,6 +78,20 @@ public void testHost() { assertEquals("http://localhost:" + PORT, options.build().getHost()); } + @Test + public void testOpenTelemetryOptionsEnabled() { + options.setOpenTelemetryOptions( + DatastoreOpenTelemetryOptions.newBuilder().setTracingEnabled(true).build()); + assertTrue(options.build().getOpenTelemetryOptions().isEnabled()); + } + + @Test + public void testOpenTelemetryOptionsDisabled() { + options.setOpenTelemetryOptions( + DatastoreOpenTelemetryOptions.newBuilder().setTracingEnabled(false).build()); + assertTrue(!options.build().getOpenTelemetryOptions().isEnabled()); + } + @Test public void testNamespace() { assertTrue(options.build().getNamespace().isEmpty()); @@ -81,12 +103,130 @@ public void testDatastore() { assertSame(datastoreRpc, options.build().getRpc()); } + @Test + public void testGrpcDefaultChannelConfigurations() { + DatastoreOptions datastoreOptions = + DatastoreOptions.newBuilder() + .setServiceRpcFactory(datastoreRpcFactory) + .setProjectId(PROJECT_ID) + .setDatabaseId(DATABASE_ID) + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .setCredentials(NoCredentials.getInstance()) + .setHost("http://localhost:" + PORT) + .build(); + ChannelPoolSettings channelPoolSettings = + ((InstantiatingGrpcChannelProvider) datastoreOptions.getTransportChannelProvider()) + .getChannelPoolSettings(); + assertEquals(channelPoolSettings.getInitialChannelCount(), DatastoreOptions.INIT_CHANNEL_COUNT); + assertEquals(channelPoolSettings.getMinChannelCount(), DatastoreOptions.MIN_CHANNEL_COUNT); + assertEquals(channelPoolSettings.getMaxChannelCount(), DatastoreOptions.MAX_CHANNEL_COUNT); + } + + @Test + public void testCustomChannelAndCredentials() { + InstantiatingGrpcChannelProvider channelProvider = + DatastoreSettings.defaultGrpcTransportProviderBuilder() + .setChannelPoolSettings( + ChannelPoolSettings.builder() + .setInitialChannelCount(10) + .setMaxChannelCount(20) + .build()) + .build(); + DatastoreOptions datastoreOptions = + DatastoreOptions.newBuilder() + .setServiceRpcFactory(datastoreRpcFactory) + .setProjectId(PROJECT_ID) + .setDatabaseId(DATABASE_ID) + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .setChannelProvider(channelProvider) + .setCredentials(NoCredentials.getInstance()) + .setHost("http://localhost:" + PORT) + .build(); + assertEquals(datastoreOptions.getTransportChannelProvider(), channelProvider); + } + + @Test + public void testInvalidConfigForHttp() { + DatastoreOptions.Builder options = + DatastoreOptions.newBuilder() + .setServiceRpcFactory(datastoreRpcFactory) + .setProjectId(PROJECT_ID) + .setDatabaseId(DATABASE_ID) + .setTransportOptions(HttpTransportOptions.newBuilder().build()) + .setChannelProvider( + DatastoreSettings.defaultGrpcTransportProviderBuilder() + .setChannelPoolSettings( + ChannelPoolSettings.builder() + .setInitialChannelCount(10) + .setMaxChannelCount(20) + .build()) + .build()) + .setCredentials(NoCredentials.getInstance()) + .setHost("http://localhost:" + PORT); + Assert.assertThrows(IllegalArgumentException.class, options::build); + } + + @Test + public void testTransport() { + // default http transport + assertThat(options.build().getTransportOptions()).isInstanceOf(HttpTransportOptions.class); + + // custom grpc transport + DatastoreOptions grpcTransportOptions = + DatastoreOptions.newBuilder() + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .setProjectId(PROJECT_ID) + .setCredentials(NoCredentials.getInstance()) + .build(); + assertThat(grpcTransportOptions.getTransportOptions()).isInstanceOf(GrpcTransportOptions.class); + assertThat(grpcTransportOptions.getTransportChannelProvider()) + .isInstanceOf(InstantiatingGrpcChannelProvider.class); + } + + @Test + public void testHostWithGrpcAndHttp() { + DatastoreOptions grpcTransportOptions = + DatastoreOptions.newBuilder() + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .setProjectId(PROJECT_ID) + .setCredentials(NoCredentials.getInstance()) + .build(); + assertThat(grpcTransportOptions.getHost()).isEqualTo(DatastoreSettings.getDefaultEndpoint()); + assertThat(grpcTransportOptions.getHost()).isEqualTo("datastore.googleapis.com:443"); + + String customHost = "http://localhost:" + PORT; + DatastoreOptions grpcTransportOptionsCustomHost = + DatastoreOptions.newBuilder() + .setTransportOptions(GrpcTransportOptions.newBuilder().build()) + .setHost(customHost) + .setProjectId(PROJECT_ID) + .setCredentials(NoCredentials.getInstance()) + .build(); + assertThat(grpcTransportOptionsCustomHost.getHost()).isEqualTo(customHost); + + DatastoreOptions httpTransportOptions = + DatastoreOptions.newBuilder() + .setProjectId(PROJECT_ID) + .setCredentials(NoCredentials.getInstance()) + .build(); + assertThat(httpTransportOptions.getHost()).isEqualTo(DatastoreFactory.DEFAULT_HOST); + + DatastoreOptions httpTransportOptionsCustomHost = + DatastoreOptions.newBuilder() + .setHost(customHost) + .setProjectId(PROJECT_ID) + .setCredentials(NoCredentials.getInstance()) + .build(); + assertThat(httpTransportOptionsCustomHost.getHost()).isEqualTo(customHost); + } + @Test public void testToBuilder() { DatastoreOptions original = options.setNamespace("ns1").build(); DatastoreOptions copy = original.toBuilder().build(); assertEquals(original.getProjectId(), copy.getProjectId()); assertEquals(original.getNamespace(), copy.getNamespace()); + assertEquals(original.getDatabaseId(), copy.getDatabaseId()); assertEquals(original.getHost(), copy.getHost()); assertEquals(original.getRetrySettings(), copy.getRetrySettings()); assertEquals(original.getCredentials(), copy.getCredentials()); @@ -97,15 +237,4 @@ public void testToBuilder() { assertNotEquals(original, newOptions); assertNotEquals(original.hashCode(), newOptions.hashCode()); } - - @Test - public void testInvalidTransport() { - try { - DatastoreOptions.newBuilder() - .setTransportOptions(EasyMock.createMock(TransportOptions.class)); - Assert.fail(); - } catch (IllegalArgumentException ex) { - assertNotNull(ex.getMessage()); - } - } } diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTestGrpc.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTestGrpc.java new file mode 100644 index 000000000..cb242f2af --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTestGrpc.java @@ -0,0 +1,61 @@ +/* + * 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. + */ + +package com.google.cloud.datastore; + +import com.google.cloud.datastore.testing.LocalDatastoreHelper; +import com.google.cloud.grpc.GrpcTransportOptions; +import com.google.common.truth.Truth; +import java.io.IOException; +import java.time.Duration; +import java.util.Arrays; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class DatastoreTestGrpc extends AbstractDatastoreTest { + + private static final LocalDatastoreHelper helper = LocalDatastoreHelper.create(1.0, 9090); + + private static DatastoreOptions options = + helper.getGrpcTransportOptions(GrpcTransportOptions.newBuilder().build()); + private static Datastore datastore = options.getService(); + + public DatastoreTestGrpc(DatastoreOptions options, Datastore datastore) { + super(options, datastore); + } + + @Parameterized.Parameters(name = "data options: {0}") + public static Iterable data() { + return Arrays.asList(new Object[][] {{options, datastore}}); + } + + @BeforeClass + public static void beforeClass() throws IOException, InterruptedException { + helper.start(); + options = helper.getGrpcTransportOptions(GrpcTransportOptions.newBuilder().build()); + datastore = options.getService(); + } + + @AfterClass + public static void afterClass() throws Exception { + datastore.close(); + Truth.assertThat(datastore.isClosed()).isTrue(); + helper.stopDuration(Duration.ofMinutes(1)); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTestHttp.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTestHttp.java new file mode 100644 index 000000000..a73cae8e4 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreTestHttp.java @@ -0,0 +1,57 @@ +/* + * Copyright 2015 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.datastore; + +import com.google.cloud.datastore.testing.LocalDatastoreHelper; +import com.google.cloud.grpc.GrpcTransportOptions; +import java.io.IOException; +import java.time.Duration; +import java.util.Arrays; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class DatastoreTestHttp extends AbstractDatastoreTest { + + private static final LocalDatastoreHelper helper = LocalDatastoreHelper.create(1.0, 9090); + + private static DatastoreOptions options = helper.getOptions(); + private static Datastore datastore = options.getService(); + + public DatastoreTestHttp(DatastoreOptions options, Datastore datastore) { + super(options, datastore); + } + + @Parameterized.Parameters(name = "data options: {0}") + public static Iterable data() { + return Arrays.asList(new Object[][] {{options, datastore}}); + } + + @BeforeClass + public static void beforeClass() throws IOException, InterruptedException { + helper.start(); + options = helper.getGrpcTransportOptions(GrpcTransportOptions.newBuilder().build()); + datastore = options.getService(); + } + + @AfterClass + public static void afterClass() throws Exception { + helper.stopDuration(Duration.ofMinutes(1)); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreUtilsTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreUtilsTest.java new file mode 100644 index 000000000..74d7e9d28 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreUtilsTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.datastore; + +import static com.google.cloud.datastore.DatastoreUtils.isLocalHost; +import static com.google.cloud.datastore.DatastoreUtils.removeScheme; +import static com.google.common.truth.Truth.assertThat; + +import org.junit.Test; + +public class DatastoreUtilsTest { + + @Test + public void testIsLocalHost() { + assertThat(isLocalHost(null)).isFalse(); + assertThat(isLocalHost("")).isFalse(); + assertThat(isLocalHost("http://localhost:9090")).isTrue(); + assertThat(isLocalHost("https://localhost:9090")).isTrue(); + assertThat(isLocalHost("10.10.10.10:9090")).isFalse(); + } + + @Test + public void testRemoveScheme() { + assertThat(removeScheme("http://localhost:9090")).isEqualTo("localhost:9090"); + assertThat(removeScheme("https://localhost:9090")).isEqualTo("localhost:9090"); + assertThat(removeScheme("https://localhost:9090")).isEqualTo("localhost:9090"); + assertThat(removeScheme("Https://localhost:9090")).isEqualTo("localhost:9090"); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/GrpcToDatastoreCodeTranslationTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/GrpcToDatastoreCodeTranslationTest.java new file mode 100644 index 000000000..3f297989f --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/GrpcToDatastoreCodeTranslationTest.java @@ -0,0 +1,53 @@ +/* + * 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. + */ +package com.google.cloud.datastore; + +import static com.google.common.truth.Truth.assertThat; + +import io.grpc.Status.Code; +import java.util.EnumMap; +import org.junit.Test; + +public class GrpcToDatastoreCodeTranslationTest { + @Test + public void grpcCodeToDatastoreCode_expectedMapping() { + EnumMap expected = new EnumMap<>(Code.class); + expected.put(Code.OK, com.google.rpc.Code.OK.getNumber()); + expected.put(Code.INVALID_ARGUMENT, com.google.rpc.Code.INVALID_ARGUMENT.getNumber()); + expected.put(Code.OUT_OF_RANGE, com.google.rpc.Code.OUT_OF_RANGE.getNumber()); + expected.put(Code.UNAUTHENTICATED, com.google.rpc.Code.UNAUTHENTICATED.getNumber()); + expected.put(Code.PERMISSION_DENIED, com.google.rpc.Code.PERMISSION_DENIED.getNumber()); + expected.put(Code.NOT_FOUND, com.google.rpc.Code.NOT_FOUND.getNumber()); + expected.put(Code.FAILED_PRECONDITION, com.google.rpc.Code.FAILED_PRECONDITION.getNumber()); + expected.put(Code.ALREADY_EXISTS, com.google.rpc.Code.ALREADY_EXISTS.getNumber()); + expected.put(Code.RESOURCE_EXHAUSTED, com.google.rpc.Code.RESOURCE_EXHAUSTED.getNumber()); + expected.put(Code.INTERNAL, com.google.rpc.Code.INTERNAL.getNumber()); + expected.put(Code.UNIMPLEMENTED, com.google.rpc.Code.UNIMPLEMENTED.getNumber()); + expected.put(Code.UNAVAILABLE, com.google.rpc.Code.UNAVAILABLE.getNumber()); + expected.put(Code.ABORTED, com.google.rpc.Code.ABORTED.getNumber()); + expected.put(Code.CANCELLED, com.google.rpc.Code.CANCELLED.getNumber()); + expected.put(Code.UNKNOWN, com.google.rpc.Code.UNKNOWN.getNumber()); + expected.put(Code.DEADLINE_EXCEEDED, com.google.rpc.Code.DEADLINE_EXCEEDED.getNumber()); + expected.put(Code.DATA_LOSS, com.google.rpc.Code.DATA_LOSS.getNumber()); + + EnumMap actual = new EnumMap<>(Code.class); + for (Code c : Code.values()) { + actual.put(c, GrpcToDatastoreCodeTranslation.grpcCodeToDatastoreStatusCode(c)); + } + + assertThat(actual).isEqualTo(expected); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/IncompleteKeyTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/IncompleteKeyTest.java index a1f8956b5..75549e5ea 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/IncompleteKeyTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/IncompleteKeyTest.java @@ -25,15 +25,17 @@ public class IncompleteKeyTest { - private static IncompleteKey pk1, pk2, pk4; - private static Key parent1; + private static IncompleteKey pk1, pk2, pk4, pk5; + private static Key parent1, parent2; @Before public void setUp() { pk1 = IncompleteKey.newBuilder("ds", "kind1").build(); parent1 = Key.newBuilder("ds", "kind2", 10).setNamespace("ns").build(); + parent2 = Key.newBuilder("ds", "kind2", 10, "test-db").setNamespace("ns").build(); pk2 = IncompleteKey.newBuilder(parent1, "kind3").build(); pk4 = IncompleteKey.newBuilderWithDatabaseId("ds", "kind3", "test-db").build(); + pk5 = IncompleteKey.newBuilder(parent2, "kind4").build(); } @Test @@ -59,12 +61,18 @@ public void testBuilders() { assertEquals("test-db", pk4.getDatabaseId()); assertEquals("kind3", pk4.getKind()); assertTrue(pk4.getAncestors().isEmpty()); + + assertEquals("ds", pk5.getProjectId()); + assertEquals("test-db", pk5.getDatabaseId()); + assertEquals("kind4", pk5.getKind()); + assertEquals(parent2.getPath(), pk5.getAncestors()); } @Test public void testParent() { assertNull(pk1.getParent()); assertEquals(parent1, pk2.getParent()); + assertEquals(parent2, pk5.getParent()); Key parent2 = Key.newBuilder("ds", "kind3", "name").setNamespace("ns").build(); IncompleteKey pk3 = IncompleteKey.newBuilder(parent2, "kind3").build(); assertEquals(parent2, pk3.getParent()); diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/RetryAndTraceDatastoreRpcDecoratorTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/RetryAndTraceDatastoreRpcDecoratorTest.java deleted file mode 100644 index b86355afa..000000000 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/RetryAndTraceDatastoreRpcDecoratorTest.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2022 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.cloud.datastore; - -import static com.google.cloud.datastore.TraceUtil.END_SPAN_OPTIONS; -import static com.google.cloud.datastore.TraceUtil.SPAN_NAME_RUN_AGGREGATION_QUERY; -import static com.google.common.truth.Truth.assertThat; -import static com.google.rpc.Code.UNAVAILABLE; -import static org.easymock.EasyMock.createNiceMock; -import static org.easymock.EasyMock.createStrictMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; - -import com.google.api.gax.retrying.RetrySettings; -import com.google.cloud.datastore.spi.v1.DatastoreRpc; -import com.google.datastore.v1.RunAggregationQueryRequest; -import com.google.datastore.v1.RunAggregationQueryResponse; -import io.opencensus.trace.Span; -import io.opencensus.trace.Tracer; -import org.junit.Before; -import org.junit.Test; - -public class RetryAndTraceDatastoreRpcDecoratorTest { - - public static final int MAX_ATTEMPTS = 3; - private DatastoreRpc mockDatastoreRpc; - private TraceUtil mockTraceUtil; - private DatastoreOptions datastoreOptions = - DatastoreOptions.newBuilder().setProjectId("project-id").build(); - private RetrySettings retrySettings = - RetrySettings.newBuilder().setMaxAttempts(MAX_ATTEMPTS).build(); - - private RetryAndTraceDatastoreRpcDecorator datastoreRpcDecorator; - - @Before - public void setUp() throws Exception { - mockDatastoreRpc = createStrictMock(DatastoreRpc.class); - mockTraceUtil = createStrictMock(TraceUtil.class); - datastoreRpcDecorator = - new RetryAndTraceDatastoreRpcDecorator( - mockDatastoreRpc, mockTraceUtil, retrySettings, datastoreOptions); - } - - @Test - public void testRunAggregationQuery() { - Span mockSpan = createStrictMock(Span.class); - RunAggregationQueryRequest aggregationQueryRequest = - RunAggregationQueryRequest.getDefaultInstance(); - RunAggregationQueryResponse aggregationQueryResponse = - RunAggregationQueryResponse.getDefaultInstance(); - - expect(mockDatastoreRpc.runAggregationQuery(aggregationQueryRequest)) - .andThrow( - new DatastoreException( - UNAVAILABLE.getNumber(), "API not accessible currently", UNAVAILABLE.name())) - .times(2) - .andReturn(aggregationQueryResponse); - expect(mockTraceUtil.startSpan(SPAN_NAME_RUN_AGGREGATION_QUERY)).andReturn(mockSpan); - expect(mockTraceUtil.getTracer()).andReturn(createNiceMock(Tracer.class)); - mockSpan.end(END_SPAN_OPTIONS); - - replay(mockDatastoreRpc, mockTraceUtil, mockSpan); - - RunAggregationQueryResponse actualAggregationQueryResponse = - datastoreRpcDecorator.runAggregationQuery(aggregationQueryRequest); - - assertThat(actualAggregationQueryResponse).isSameInstanceAs(aggregationQueryResponse); - verify(mockDatastoreRpc, mockTraceUtil, mockSpan); - } -} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClientHttpJsonTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClientHttpJsonTest.java index eff9e6b3a..60e786eb9 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClientHttpJsonTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClientHttpJsonTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClientTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClientTest.java index 0632151c6..e279f543e 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClientTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/DatastoreAdminClientTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/MockDatastoreAdmin.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/MockDatastoreAdmin.java index ab9b5b1fb..ab02d565b 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/MockDatastoreAdmin.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/MockDatastoreAdmin.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/MockDatastoreAdminImpl.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/MockDatastoreAdminImpl.java index cc63d5248..7ac63a381 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/MockDatastoreAdminImpl.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/admin/v1/MockDatastoreAdminImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/AbstractITDatastoreTest.java similarity index 96% rename from google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java rename to google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/AbstractITDatastoreTest.java index 09dcd2116..53a858cae 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/AbstractITDatastoreTest.java @@ -16,6 +16,11 @@ package com.google.cloud.datastore.it; +import static com.google.api.gax.rpc.StatusCode.Code.ALREADY_EXISTS; +import static com.google.api.gax.rpc.StatusCode.Code.DEADLINE_EXCEEDED; +import static com.google.api.gax.rpc.StatusCode.Code.FAILED_PRECONDITION; +import static com.google.api.gax.rpc.StatusCode.Code.INVALID_ARGUMENT; +import static com.google.api.gax.rpc.StatusCode.Code.NOT_FOUND; import static com.google.cloud.datastore.aggregation.Aggregation.avg; import static com.google.cloud.datastore.aggregation.Aggregation.count; import static com.google.cloud.datastore.aggregation.Aggregation.sum; @@ -27,8 +32,8 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import com.google.cloud.Timestamp; import com.google.cloud.Tuple; @@ -74,15 +79,14 @@ import com.google.cloud.datastore.models.ExplainMetrics; import com.google.cloud.datastore.models.ExplainOptions; import com.google.cloud.datastore.models.PlanSummary; -import com.google.cloud.datastore.testing.RemoteDatastoreHelper; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.Range; import com.google.common.truth.Truth; import com.google.datastore.v1.TransactionOptions; import com.google.datastore.v1.TransactionOptions.ReadOnly; +import java.time.Duration; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; @@ -96,29 +100,19 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import org.junit.After; -import org.junit.AfterClass; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.Timeout; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import org.threeten.bp.Duration; @RunWith(Parameterized.class) -public class ITDatastoreTest { +public abstract class AbstractITDatastoreTest { + protected static final String CUSTOM_DB_ID = "test-db"; - private static final RemoteDatastoreHelper HELPER = RemoteDatastoreHelper.create(); - private static final DatastoreOptions OPTIONS_1 = HELPER.getOptions(); - private static final Datastore DATASTORE_1 = OPTIONS_1.getService(); - - private static final String CUSTOM_DB_ID = "test-db"; - private static final RemoteDatastoreHelper HELPER2 = RemoteDatastoreHelper.create(CUSTOM_DB_ID); - private static final DatastoreOptions OPTIONS_2 = HELPER2.getOptions(); - private static final Datastore DATASTORE_2 = OPTIONS_2.getService(); - - private final DatastoreOptions options; - private final Datastore datastore; + protected DatastoreOptions options; + protected Datastore datastore; private static String PROJECT_ID; private static String NAMESPACE; @@ -144,6 +138,7 @@ public class ITDatastoreTest { private static Key KEY3; private static Key KEY4; private static Key KEY5; + private static Key KEY6; private static final String MARKS_KIND = "Marks"; private static FullEntity PARTIAL_ENTITY1; private static FullEntity PARTIAL_ENTITY2; @@ -160,12 +155,21 @@ public class ITDatastoreTest { @Rule public MultipleAttemptsRule multipleAttemptsRule = new MultipleAttemptsRule(3); - @AfterClass - public static void afterClass() { - HELPER.deleteNamespace(); + @Before + public void setUp() { + datastore.put(ENTITY1, ENTITY2); } - public ITDatastoreTest( + @After + public void tearDown() { + EntityQuery allEntitiesQuery = Query.newEntityQueryBuilder().build(); + QueryResults allEntities = datastore.run(allEntitiesQuery); + Key[] keysToDelete = + ImmutableList.copyOf(allEntities).stream().map(Entity::getKey).toArray(Key[]::new); + datastore.delete(keysToDelete); + } + + public AbstractITDatastoreTest( DatastoreOptions options, Datastore datastore, // databaseType is unused as a variable, but used as a parameterized label when running tests @@ -193,6 +197,10 @@ public ITDatastoreTest( KEY3 = Key.newBuilder(KEY2).setName("bla").setNamespace(NAMESPACE).build(); KEY4 = Key.newBuilder(KEY2).setName("newName1").setNamespace(NAMESPACE).build(); KEY5 = Key.newBuilder(KEY2).setName("newName2").setNamespace(NAMESPACE).build(); + KEY6 = + Key.newBuilder(options.getProjectId(), KIND2, 100, options.getDatabaseId()) + .setNamespace(NAMESPACE) + .build(); LIST_VALUE2 = ListValue.of(Collections.singletonList(KeyValue.of(KEY1))); @@ -267,26 +275,6 @@ public ITDatastoreTest( .build(); } - @Before - public void setUp() { - datastore.put(ENTITY1, ENTITY2); - } - - @After - public void tearDown() { - EntityQuery allEntitiesQuery = Query.newEntityQueryBuilder().build(); - QueryResults allEntities = datastore.run(allEntitiesQuery); - Key[] keysToDelete = - ImmutableList.copyOf(allEntities).stream().map(Entity::getKey).toArray(Key[]::new); - datastore.delete(keysToDelete); - } - - @Parameterized.Parameters(name = "database: {2}") - public static Iterable data() { - return Arrays.asList( - new Object[][] {{OPTIONS_1, DATASTORE_1, "default"}, {OPTIONS_2, DATASTORE_2, "test-db"}}); - } - private Iterator getStronglyConsistentResults(Query scQuery, Query query) throws InterruptedException { // scQuery is equivalent to query, but with an ancestor filter in it @@ -491,19 +479,11 @@ public void testNewTransactionCommit() { assertEquals(ENTITY3, list.get(2)); assertEquals(3, list.size()); - try { - transaction.commit(); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException(expected, "FAILED_PRECONDITION", 0); - } + DatastoreException expected = assertThrows(DatastoreException.class, transaction::commit); + assertDatastoreException(expected, FAILED_PRECONDITION.name(), 0); - try { - transaction.rollback(); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException(expected, "FAILED_PRECONDITION", 0); - } + DatastoreException expected2 = assertThrows(DatastoreException.class, transaction::rollback); + assertDatastoreException(expected2, FAILED_PRECONDITION.name(), 0); } @Test @@ -669,7 +649,7 @@ private void assertExecutionStats( Truth.assertThat(debugStats.get("index_entries_scanned")) .isEqualTo(expectedIndexEntriesScanned); - Duration executionDuration = executionStats.getExecutionDuration(); + Duration executionDuration = executionStats.getExecutionDurationJavaTime(); Truth.assertThat(executionDuration).isIn(Range.greaterThan(Duration.ofMillis(0))); long readOperations = executionStats.getReadOperations(); @@ -694,12 +674,8 @@ public void testNewTransactionRollback() { transaction.rollback(); transaction.rollback(); // should be safe to repeat rollback calls - try { - transaction.commit(); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException(expected, "FAILED_PRECONDITION", 0); - } + DatastoreException expected = assertThrows(DatastoreException.class, transaction::commit); + assertDatastoreException(expected, FAILED_PRECONDITION.name(), 0); List list = datastore.fetch(KEY1, KEY2, KEY3); assertEquals(ENTITY1, list.get(0)); @@ -746,12 +722,8 @@ public void testNewBatch() { assertEquals(PARTIAL_ENTITY3.getNames(), datastore.get(generatedKeys.get(0)).getNames()); assertEquals(PARTIAL_ENTITY3.getKey(), IncompleteKey.newBuilder(generatedKeys.get(0)).build()); - try { - batch.submit(); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException(expected, "FAILED_PRECONDITION", 0); - } + DatastoreException expected = assertThrows(DatastoreException.class, batch::submit); + assertDatastoreException(expected, FAILED_PRECONDITION.name(), 0); batch = datastore.newBatch(); batch.delete(entity4.getKey(), entity5.getKey(), entity6.getKey()); @@ -1787,6 +1759,21 @@ public void testGet() { assertFalse(entity.contains("bla")); } + @Test + public void testIncompleteKey() { + Key parentKey = null; + try { + IncompleteKey incompleteKey = IncompleteKey.newBuilder(KEY6, KIND1).build(); + parentKey = incompleteKey.getParent(); + Entity entity = Entity.newBuilder(parentKey).set("name", "val").build(); + datastore.put(entity); + Entity retrievedEntity = datastore.get(parentKey); + assertThat(retrievedEntity).isEqualTo(entity); + } finally { + datastore.delete(parentKey); + } + } + @Test public void testGetWithReadTime() throws InterruptedException { Key key = @@ -1837,12 +1824,11 @@ public void testGetArrayNoDeferredResults() { assertEquals(EMPTY_LIST_VALUE, entity3.getValue("emptyList")); assertEquals(8, entity3.getNames().size()); assertFalse(entity3.contains("bla")); - try { - entity3.getString("str"); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException(expected, "FAILED_PRECONDITION", 0); - } + + DatastoreException expected = + assertThrows(DatastoreException.class, () -> entity3.getString("str")); + assertDatastoreException(expected, FAILED_PRECONDITION.name(), 0); + assertFalse(result.hasNext()); datastore.delete(ENTITY3.getKey()); } @@ -1854,12 +1840,9 @@ public void testAddEntity() { assertNull(keys.get(1)); assertEquals(2, keys.size()); - try { - datastore.add(ENTITY1); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException(expected, "ALREADY_EXISTS", 6); - } + DatastoreException expected = + assertThrows(DatastoreException.class, () -> datastore.add(ENTITY1)); + assertDatastoreException(expected, ALREADY_EXISTS.name(), 6); List entities = datastore.add(ENTITY3, PARTIAL_ENTITY1, PARTIAL_ENTITY2); assertEquals(ENTITY3, datastore.get(ENTITY3.getKey())); @@ -1882,12 +1865,10 @@ public void testUpdate() { assertNull(keys.get(1)); assertEquals(2, keys.size()); - try { - datastore.update(ENTITY3); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException(expected, "NOT_FOUND", 5); - } + DatastoreException expected = + assertThrows(DatastoreException.class, () -> datastore.update(ENTITY3)); + assertDatastoreException(expected, NOT_FOUND.name(), 5); + datastore.add(ENTITY3); assertEquals(ENTITY3, datastore.get(ENTITY3.getKey())); Entity entity3 = Entity.newBuilder(ENTITY3).clear().set("bla", new NullValue()).build(); @@ -1897,6 +1878,12 @@ public void testUpdate() { datastore.delete(ENTITY3.getKey()); } + private void assertDatastoreException( + DatastoreException expected, String reason, int datastoreStatusCode) { + Truth.assertThat(expected.getReason()).isEqualTo(reason); + Truth.assertThat(expected.getCode()).isEqualTo(datastoreStatusCode); + } + @Test public void testPut() { Entity updatedEntity = Entity.newBuilder(ENTITY1).set("new_property", 42L).build(); @@ -1973,12 +1960,9 @@ public Integer run(DatastoreReaderWriter transaction) { } }; - try { - datastore.runInTransaction(callable2); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException((DatastoreException) expected.getCause(), "DEADLINE_EXCEEDED", 4); - } + DatastoreException expected = + assertThrows(DatastoreException.class, () -> datastore.runInTransaction(callable2)); + assertDatastoreException((DatastoreException) expected.getCause(), DEADLINE_EXCEEDED.name(), 4); } @Test @@ -2027,12 +2011,10 @@ public Integer run(DatastoreReaderWriter transaction) { .setReadOnly(TransactionOptions.ReadOnly.getDefaultInstance()) .build(); - try { - datastore.runInTransaction(callable2, readOnlyOptions); - fail("Expecting a failure"); - } catch (DatastoreException expected) { - assertDatastoreException((DatastoreException) expected.getCause(), "INVALID_ARGUMENT", 3); - } + DatastoreException expected = + assertThrows( + DatastoreException.class, () -> datastore.runInTransaction(callable2, readOnlyOptions)); + assertDatastoreException((DatastoreException) expected.getCause(), INVALID_ARGUMENT.name(), 3); } @Test @@ -2147,10 +2129,4 @@ public void testQueryWithReadTime() throws InterruptedException { datastore.delete(entity1.getKey(), entity2.getKey(), entity3.getKey()); } } - - private void assertDatastoreException( - DatastoreException expected, String reason, int statusCode) { - assertEquals(reason, expected.getReason()); - assertEquals(statusCode, expected.getCode()); - } } diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreConceptsTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreConceptsTest.java index 770065778..1d6b2f838 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreConceptsTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreConceptsTest.java @@ -68,6 +68,7 @@ import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; /* @@ -77,7 +78,7 @@ public class ITDatastoreConceptsTest { private static final RemoteDatastoreHelper HELPER = RemoteDatastoreHelper.create(); private static final DatastoreOptions OPTIONS = HELPER.getOptions(); private static final FullEntity TEST_FULL_ENTITY = FullEntity.newBuilder().build(); - private Datastore datastore; + private static Datastore datastore; private KeyFactory keyFactory; private Key taskKey; private Entity testEntity; @@ -87,13 +88,15 @@ public class ITDatastoreConceptsTest { private static final String TASK_CONCEPTS = "TaskConcepts"; - /** - * Initializes Datastore and cleans out any residual values. Also initializes global variables - * used for testing. - */ + /** Initializes Datastore for testing. */ + @BeforeClass + public static void beforeClass() throws Exception { + datastore = OPTIONS.getService(); + } + + /** Cleans out any residual values. Also initializes global variables used for testing. */ @Before public void setUp() { - datastore = OPTIONS.getService(); StructuredQuery query = Query.newKeyQueryBuilder().build(); QueryResults result = datastore.run(query); datastore.delete(Iterators.toArray(result, Key.class)); diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTestGrpc.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTestGrpc.java new file mode 100644 index 000000000..7bb809997 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTestGrpc.java @@ -0,0 +1,64 @@ +/* + * 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. + */ +package com.google.cloud.datastore.it; + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.testing.RemoteDatastoreHelper; +import com.google.cloud.grpc.GrpcTransportOptions; +import com.google.common.truth.Truth; +import java.util.Arrays; +import org.junit.AfterClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class ITDatastoreTestGrpc extends AbstractITDatastoreTest { + // setup for default db, grpc transport + protected static final RemoteDatastoreHelper HELPER_DEFAULT_GRPC = + RemoteDatastoreHelper.create(GrpcTransportOptions.newBuilder().build()); + private static final DatastoreOptions OPTIONS_DEFAULT_GRPC = HELPER_DEFAULT_GRPC.getOptions(); + private static final Datastore DATASTORE_DEFAULT_GRPC = OPTIONS_DEFAULT_GRPC.getService(); + + // setup for custom db, grpc transport + private static final RemoteDatastoreHelper HELPER_CUSTOM_DB_GRPC = + RemoteDatastoreHelper.create(CUSTOM_DB_ID, GrpcTransportOptions.newBuilder().build()); + private static final DatastoreOptions OPTIONS_CUSTOM_DB_GRPC = HELPER_CUSTOM_DB_GRPC.getOptions(); + private static final Datastore DATASTORE_CUSTOM_DB_GRPC = OPTIONS_CUSTOM_DB_GRPC.getService(); + + public ITDatastoreTestGrpc(DatastoreOptions options, Datastore datastore, String databaseType) { + super(options, datastore, databaseType); + } + + @Parameterized.Parameters(name = "database: {2}") + public static Iterable data() { + return Arrays.asList( + new Object[][] { + {OPTIONS_DEFAULT_GRPC, DATASTORE_DEFAULT_GRPC, "default"}, + {OPTIONS_CUSTOM_DB_GRPC, DATASTORE_CUSTOM_DB_GRPC, CUSTOM_DB_ID}, + }); + } + + @AfterClass + public static void afterClass() throws Exception { + HELPER_DEFAULT_GRPC.deleteNamespace(); + HELPER_CUSTOM_DB_GRPC.deleteNamespace(); + DATASTORE_DEFAULT_GRPC.close(); + DATASTORE_CUSTOM_DB_GRPC.close(); + Truth.assertThat(DATASTORE_DEFAULT_GRPC.isClosed()).isTrue(); + Truth.assertThat(DATASTORE_CUSTOM_DB_GRPC.isClosed()).isTrue(); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTestHttp.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTestHttp.java new file mode 100644 index 000000000..3546bfcaf --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITDatastoreTestHttp.java @@ -0,0 +1,58 @@ +/* + * 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. + */ +package com.google.cloud.datastore.it; + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.testing.RemoteDatastoreHelper; +import java.util.Arrays; +import org.junit.AfterClass; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) +public class ITDatastoreTestHttp extends AbstractITDatastoreTest { + // setup for default db, http transport + private static final RemoteDatastoreHelper HELPER_DEFAULT_HTTP = RemoteDatastoreHelper.create(); + + private static final DatastoreOptions OPTIONS_DEFAULT_HTTP = HELPER_DEFAULT_HTTP.getOptions(); + private static final Datastore DATASTORE_DEFAULT_HTTP = OPTIONS_DEFAULT_HTTP.getService(); + + // setup for custom db, http transport + private static final RemoteDatastoreHelper HELPER_CUSTOM_DB_HTTP = + RemoteDatastoreHelper.create(CUSTOM_DB_ID); + private static final DatastoreOptions OPTIONS_CUSTOM_DB_HTTP = HELPER_CUSTOM_DB_HTTP.getOptions(); + private static final Datastore DATASTORE_CUSTOM_DB_HTTP = OPTIONS_CUSTOM_DB_HTTP.getService(); + + public ITDatastoreTestHttp(DatastoreOptions options, Datastore datastore, String databaseType) { + super(options, datastore, databaseType); + } + + @Parameterized.Parameters(name = "database: {2}") + public static Iterable data() { + return Arrays.asList( + new Object[][] { + {OPTIONS_DEFAULT_HTTP, DATASTORE_DEFAULT_HTTP, "default"}, + {OPTIONS_CUSTOM_DB_HTTP, DATASTORE_CUSTOM_DB_HTTP, CUSTOM_DB_ID}, + }); + } + + @AfterClass + public static void afterClass() throws Exception { + HELPER_DEFAULT_HTTP.deleteNamespace(); + HELPER_CUSTOM_DB_HTTP.deleteNamespace(); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITE2ETracingTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITE2ETracingTest.java new file mode 100644 index 000000000..d0631f51a --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITE2ETracingTest.java @@ -0,0 +1,1009 @@ +/* + * 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. + */ + +package com.google.cloud.datastore.it; + +import static com.google.cloud.datastore.aggregation.Aggregation.count; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_ALLOCATE_IDS; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_BEGIN_TRANSACTION; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_COMMIT; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_LOOKUP; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_RESERVE_IDS; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_ROLLBACK; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_RUN_AGGREGATION_QUERY; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_RUN_QUERY; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_COMMIT; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_LOOKUP; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_RUN; +import static com.google.cloud.datastore.telemetry.TraceUtil.SPAN_NAME_TRANSACTION_RUN_QUERY; +import static com.google.common.truth.Truth.assertThat; +import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.SERVICE_NAME; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import com.google.api.gax.rpc.NotFoundException; +import com.google.cloud.datastore.AggregationQuery; +import com.google.cloud.datastore.AggregationResult; +import com.google.cloud.datastore.AggregationResults; +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.IncompleteKey; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.KeyFactory; +import com.google.cloud.datastore.Query; +import com.google.cloud.datastore.QueryResults; +import com.google.cloud.datastore.ReadOption; +import com.google.cloud.datastore.StructuredQuery; +import com.google.cloud.datastore.StructuredQuery.PropertyFilter; +import com.google.cloud.datastore.Transaction; +import com.google.cloud.datastore.testing.RemoteDatastoreHelper; +import com.google.cloud.opentelemetry.trace.TraceConfiguration; +import com.google.cloud.opentelemetry.trace.TraceExporter; +import com.google.cloud.trace.v1.TraceServiceClient; +import com.google.common.base.Preconditions; +import com.google.devtools.cloudtrace.v1.Trace; +import com.google.devtools.cloudtrace.v1.TraceSpan; +import com.google.testing.junit.testparameterinjector.TestParameter; +import com.google.testing.junit.testparameterinjector.TestParameterInjector; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.TraceFlags; +import io.opentelemetry.api.trace.TraceState; +import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.context.Context; +import io.opentelemetry.context.Scope; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.common.CompletableResultCode; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.TreeMap; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +// This End-to-End test verifies Client-side Tracing Functionality instrumented using the +// OpenTelemetry API. +// The test depends on the following external APIs/Services: +// 1. Java OpenTelemetry SDK +// 2. Cloud Trace Exporter +// 3. TraceServiceClient from Cloud Trace API v1. +// +// Permissions required to run this test (https://cloud.google.com/trace/docs/iam#trace-roles): +// 1. gcloud auth application-default login must be run with the test user. +// 2. To write traces, test user must have one of roles/cloudtrace.[admin|agent|user] roles. +// 3. To read traces, test user must have one of roles/cloudtrace.[admin|user] roles. +// +// Each test-case has the following workflow: +// 1. OpenTelemetry SDK is initialized with Cloud Trace Exporter and 100% Trace Sampling +// 2. On initialization, Datastore client is provided the OpenTelemetry SDK object from (1) +// 3. A custom TraceID is generated and injected using a custom SpanContext +// 4. Datastore operations are run inside a root TraceSpan created using the custom SpanContext from +// (3). +// 5. Traces are read-back using TraceServiceClient and verified against expected Call Stacks. +@RunWith(TestParameterInjector.class) +public class ITE2ETracingTest { + + protected boolean isUsingGlobalOpenTelemetrySDK() { + return useGlobalOpenTelemetrySDK; + } + + protected String datastoreNamedDatabase() { + return datastoreNamedDatabase; + } + + // Helper class to track call-stacks in a trace + protected static class TraceContainer { + + // Maps Span ID to TraceSpan + private final Map idSpanMap; + + // Maps Parent Span ID to a list of Child SpanIDs, useful for top-down traversal + private final Map> parentChildIdMap; + + // Tracks the Root Span ID + private long rootId; + + public TraceContainer(String rootSpanName, Trace trace) { + idSpanMap = new TreeMap<>(); + parentChildIdMap = new TreeMap<>(); + for (TraceSpan span : trace.getSpansList()) { + long spanId = span.getSpanId(); + idSpanMap.put(spanId, span); + if (rootSpanName.equals(span.getName())) { + rootId = span.getSpanId(); + } + + // Add self as a child of the parent span + if (!parentChildIdMap.containsKey(span.getParentSpanId())) { + parentChildIdMap.put(span.getParentSpanId(), new ArrayList<>()); + } + parentChildIdMap.get(span.getParentSpanId()).add(spanId); + } + } + + String spanName(long spanId) { + return idSpanMap.get(spanId).getName(); + } + + List childSpans(long spanId) { + return parentChildIdMap.get(spanId); + } + + // This method only works for matching call stacks with traces which have children of distinct + // type at all levels. This is good enough as the intention is to validate if the e2e path is + // WAI - the intention is not to validate Cloud Trace's correctness w.r.t. durability of all + // kinds of traces. + boolean containsCallStack(String... callStack) throws RuntimeException { + List expectedCallStack = Arrays.asList(callStack); + if (expectedCallStack.isEmpty()) { + throw new RuntimeException("Input callStack is empty"); + } + return dfsContainsCallStack(rootId, expectedCallStack); + } + + // Depth-first check for call stack in the trace + private boolean dfsContainsCallStack(long spanId, List expectedCallStack) { + logger.info( + "span=" + + spanName(spanId) + + ", expectedCallStack[0]=" + + (expectedCallStack.isEmpty() ? "null" : expectedCallStack.get(0))); + if (expectedCallStack.isEmpty()) { + return false; + } + if (spanName(spanId).equals(expectedCallStack.get(0))) { + // Recursion termination + if (childSpans(spanId) == null) { + logger.info("No more children for " + spanName(spanId)); + return expectedCallStack.size() <= 1; + } else { + // Examine the child spans + for (Long childSpan : childSpans(spanId)) { + int callStackListSize = expectedCallStack.size(); + logger.info( + "childSpan=" + + spanName(childSpan) + + ", expectedCallStackSize=" + + callStackListSize); + if (dfsContainsCallStack( + childSpan, + expectedCallStack.subList( + /* fromIndexInclusive= */ 1, /*toIndexExclusive*/ callStackListSize))) { + return true; + } + } + } + } else { + logger.info(spanName(spanId) + " didn't match " + expectedCallStack.get(0)); + } + return false; + } + } + + private static final Logger logger = Logger.getLogger(ITE2ETracingTest.class.getName()); + + private static final String RUN_AGGREGATION_QUERY_RPC_NAME = "RunAggregationQuery"; + + private static final String RUN_QUERY_RPC_NAME = "RunQuery"; + + private static final int NUM_TRACE_ID_BYTES = 32; + + private static final int NUM_SPAN_ID_BYTES = 16; + + private static final int GET_TRACE_RETRY_COUNT = 60; + + private static final int GET_TRACE_RETRY_BACKOFF_MILLIS = 1000; + + private static final int TRACE_FORCE_FLUSH_MILLIS = 5000; + + private static final int TRACE_PROVIDER_SHUTDOWN_MILLIS = 1000; + + private static Key KEY1; + + private static Key KEY2; + + private static Key KEY3; + + private static Key KEY4; + + // Random int generator for trace ID and span ID + private static Random random; + + private static TraceExporter traceExporter; + + // Required for reading back traces from Cloud Trace for validation + private static TraceServiceClient traceClient_v1; + + // Custom SpanContext for each test, required for TraceID injection + private static SpanContext customSpanContext; + + // Trace read back from Cloud Trace using traceClient_v1 for verification + private static Trace retrievedTrace; + + private static String rootSpanName; + private static Tracer tracer; + + // Required to set custom-root span + private static OpenTelemetrySdk openTelemetrySdk; + + private static String projectId; + + private static DatastoreOptions options; + + private static Datastore datastore; + + private static RemoteDatastoreHelper remoteDatastoreHelper; + + @TestParameter boolean useGlobalOpenTelemetrySDK; + + @TestParameter({ + /*(default)*/ + "", + "test-db" + }) + String datastoreNamedDatabase; + + @BeforeClass + public static void setup() throws IOException { + projectId = DatastoreOptions.getDefaultProjectId(); + traceExporter = + TraceExporter.createWithConfiguration( + TraceConfiguration.builder().setProjectId(projectId).build()); + traceClient_v1 = TraceServiceClient.create(); + random = new Random(); + } + + @Before + public void before() throws Exception { + // Set up OTel SDK + Resource resource = + Resource.getDefault().merge(Resource.builder().put(SERVICE_NAME, "Sparky").build()); + + if (isUsingGlobalOpenTelemetrySDK()) { + openTelemetrySdk = + OpenTelemetrySdk.builder() + .setTracerProvider( + SdkTracerProvider.builder() + .setResource(resource) + .addSpanProcessor(BatchSpanProcessor.builder(traceExporter).build()) + .setSampler(Sampler.alwaysOn()) + .build()) + .buildAndRegisterGlobal(); + } else { + openTelemetrySdk = + OpenTelemetrySdk.builder() + .setTracerProvider( + SdkTracerProvider.builder() + .setResource(resource) + .addSpanProcessor(BatchSpanProcessor.builder(traceExporter).build()) + .setSampler(Sampler.alwaysOn()) + .build()) + .build(); + } + + // Initialize the Datastore DB w/ the OTel SDK. Ideally we'd do this is the @BeforeAll method + // but because gRPC traces need to be deterministically force-flushed for every test + String namedDb = datastoreNamedDatabase(); + logger.log(Level.INFO, "Integration test using named database " + namedDb); + remoteDatastoreHelper = RemoteDatastoreHelper.create(namedDb, openTelemetrySdk); + options = remoteDatastoreHelper.getOptions(); + datastore = options.getService(); + + Preconditions.checkNotNull( + datastore, + "Error instantiating Datastore. Check that the service account credentials " + + "were properly set."); + + String projectId = options.getProjectId(); + String kind1 = "kind1"; + KEY1 = + Key.newBuilder(projectId, kind1, "key1", options.getDatabaseId()) + .setNamespace(options.getNamespace()) + .build(); + KEY2 = + Key.newBuilder(projectId, kind1, "key2", options.getDatabaseId()) + .setNamespace(options.getNamespace()) + .build(); + KEY3 = + Key.newBuilder(projectId, kind1, "key3", options.getDatabaseId()) + .setNamespace(options.getNamespace()) + .build(); + KEY4 = + Key.newBuilder(projectId, kind1, "key4", options.getDatabaseId()) + .setNamespace(options.getNamespace()) + .build(); + // Set up the tracer for custom TraceID injection + rootSpanName = + String.format("%s%d", this.getClass().getSimpleName(), System.currentTimeMillis()); + if (isUsingGlobalOpenTelemetrySDK()) { + tracer = GlobalOpenTelemetry.getTracer(rootSpanName); + } else { + tracer = + datastore + .getOptions() + .getOpenTelemetryOptions() + .getOpenTelemetry() + .getTracer(rootSpanName); + } + + // Get up a new SpanContext (ergo TraceId) for each test + customSpanContext = getNewSpanContext(); + assertNotNull(customSpanContext); + assertNull(retrievedTrace); + } + + @After + public void after() throws Exception { + if (isUsingGlobalOpenTelemetrySDK()) { + GlobalOpenTelemetry.resetForTest(); + } + remoteDatastoreHelper.deleteNamespace(); + rootSpanName = null; + tracer = null; + retrievedTrace = null; + customSpanContext = null; + openTelemetrySdk = null; + } + + @AfterClass + public static void teardown() throws Exception { + traceClient_v1.close(); + } + + // Generates a random hex string of length `numBytes` + private String generateRandomHexString(int numBytes) { + StringBuilder newTraceId = new StringBuilder(); + while (newTraceId.length() < numBytes) { + newTraceId.append(Integer.toHexString(random.nextInt())); + } + return newTraceId.substring(0, numBytes); + } + + protected String generateNewTraceId() { + return generateRandomHexString(NUM_TRACE_ID_BYTES); + } + + // Generates a random 16-byte hex string + protected String generateNewSpanId() { + return generateRandomHexString(NUM_SPAN_ID_BYTES); + } + + // Generates a new SpanContext w/ random traceId,spanId + protected SpanContext getNewSpanContext() { + String traceId = generateNewTraceId(); + String spanId = generateNewSpanId(); + logger.info("traceId=" + traceId + ", spanId=" + spanId); + + return SpanContext.create(traceId, spanId, TraceFlags.getSampled(), TraceState.getDefault()); + } + + protected Span getNewRootSpanWithContext() { + // Execute the DB operation in the context of the custom root span. + return tracer + .spanBuilder(rootSpanName) + .setParent(Context.root().with(Span.wrap(customSpanContext))) + .startSpan(); + } + + protected void waitForTracesToComplete() throws Exception { + logger.info("Flushing traces..."); + CompletableResultCode completableResultCode = + openTelemetrySdk.getSdkTracerProvider().forceFlush(); + completableResultCode.join(TRACE_FORCE_FLUSH_MILLIS, TimeUnit.MILLISECONDS); + } + + // Validates `retrievedTrace`. Cloud Trace indexes traces w/ eventual consistency, even when + // indexing traceId, therefore the test must retry a few times before the complete trace is + // available. + // For Transaction traces, there may be more spans than in the trace than specified in + // `callStack`. So `numExpectedSpans` is the expected total number of spans (and not just the + // spans in `callStack`) + protected void fetchAndValidateTrace( + String traceId, int numExpectedSpans, List> callStackList) + throws InterruptedException { + // Large enough count to accommodate eventually consistent Cloud Trace backend + int numRetries = GET_TRACE_RETRY_COUNT; + // Account for rootSpanName + numExpectedSpans++; + + // Fetch traces + do { + try { + retrievedTrace = traceClient_v1.getTrace(projectId, traceId); + assertEquals(traceId, retrievedTrace.getTraceId()); + + logger.info( + "expectedSpanCount=" + + numExpectedSpans + + ", retrievedSpanCount=" + + retrievedTrace.getSpansCount()); + } catch (NotFoundException notFound) { + logger.info("Trace not found, retrying in " + GET_TRACE_RETRY_BACKOFF_MILLIS + " ms"); + } catch (IndexOutOfBoundsException outOfBoundsException) { + logger.info("Call stack not found in trace. Retrying."); + } + if (retrievedTrace == null || numExpectedSpans != retrievedTrace.getSpansCount()) { + Thread.sleep(GET_TRACE_RETRY_BACKOFF_MILLIS); + } + } while (numRetries-- > 0 + && (retrievedTrace == null || numExpectedSpans != retrievedTrace.getSpansCount())); + + if (retrievedTrace == null || numExpectedSpans != retrievedTrace.getSpansCount()) { + throw new RuntimeException( + "Expected number of spans: " + + numExpectedSpans + + ", Actual number of spans: " + + (retrievedTrace != null + ? retrievedTrace.getSpansList().toString() + : "Trace NOT_FOUND")); + } + + TraceContainer traceContainer = new TraceContainer(rootSpanName, retrievedTrace); + + for (List callStack : callStackList) { + // Update all call stacks to be rooted at rootSpanName + ArrayList expectedCallStack = new ArrayList<>(callStack); + + // numExpectedSpans should account for rootSpanName (not passed in callStackList) + expectedCallStack.add(0, rootSpanName); + + // *May be* the full trace was returned + logger.info("Checking if TraceContainer contains the callStack"); + String[] expectedCallList = new String[expectedCallStack.size()]; + if (!traceContainer.containsCallStack(expectedCallStack.toArray(expectedCallList))) { + throw new RuntimeException( + "Expected spans: " + + Arrays.toString(expectedCallList) + + ", Actual spans: " + + (retrievedTrace != null + ? retrievedTrace.getSpansList().toString() + : "Trace NOT_FOUND")); + } + logger.severe("CallStack not found in TraceContainer."); + } + } + + // Validates `retrievedTrace`. Cloud Trace indexes traces w/ eventual consistency, even when + // indexing traceId, therefore the test must retry a few times before the complete trace is + // available. + // For Non-Transaction traces, there is a 1:1 ratio of spans in `spanNames` and in the trace. + protected void fetchAndValidateTrace(String traceId, String... spanNames) + throws InterruptedException { + fetchAndValidateTrace(traceId, spanNames.length, Arrays.asList(Arrays.asList(spanNames))); + } + + @Test + public void traceContainerTest() throws Exception { + // Make sure the test has a new SpanContext (and TraceId for injection) + assertNotNull(customSpanContext); + + // Inject new trace ID + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + Entity entity = datastore.get(KEY1); + assertNull(entity); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + Trace traceResp = null; + int expectedSpanCount = 2; + + int numRetries = GET_TRACE_RETRY_COUNT; + do { + try { + traceResp = traceClient_v1.getTrace(projectId, customSpanContext.getTraceId()); + if (traceResp.getSpansCount() == expectedSpanCount) { + logger.info("Success: Got " + expectedSpanCount + " spans."); + break; + } + } catch (NotFoundException notFoundException) { + Thread.sleep(GET_TRACE_RETRY_BACKOFF_MILLIS); + logger.info("Trace not found, retrying in " + GET_TRACE_RETRY_BACKOFF_MILLIS + " ms"); + } + logger.info( + "Trace Found. The trace did not contain " + + expectedSpanCount + + " spans. Going to retry."); + numRetries--; + } while (numRetries > 0); + + // Make sure we got as many spans as we expected. + assertNotNull(traceResp); + assertEquals(expectedSpanCount, traceResp.getSpansCount()); + + TraceContainer traceCont = new TraceContainer(rootSpanName, traceResp); + + // Contains exact path + assertTrue(traceCont.containsCallStack(rootSpanName, SPAN_NAME_LOOKUP)); + + // Top-level mismatch + assertFalse(traceCont.containsCallStack(SPAN_NAME_LOOKUP, RUN_QUERY_RPC_NAME)); + + // Leaf-level mismatch/missing + assertFalse( + traceCont.containsCallStack( + rootSpanName, SPAN_NAME_LOOKUP, RUN_AGGREGATION_QUERY_RPC_NAME)); + } + + @Test + public void lookupTraceTest() throws Exception { + // Make sure the test has a new SpanContext (and TraceId for injection) + assertNotNull(customSpanContext); + + // Inject new trace ID + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + Entity entity = datastore.get(KEY1); + assertNull(entity); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_LOOKUP); + } + + @Test + public void allocateIdsTraceTest() throws Exception { + assertNotNull(customSpanContext); + + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + String kind1 = "kind1"; + KeyFactory keyFactory = datastore.newKeyFactory().setKind(kind1); + IncompleteKey pk1 = keyFactory.newKey(); + Key key1 = datastore.allocateId(pk1); + assertEquals(key1.getProjectId(), pk1.getProjectId()); + assertEquals(key1.getNamespace(), pk1.getNamespace()); + assertEquals(key1.getAncestors(), pk1.getAncestors()); + assertEquals(key1.getKind(), pk1.getKind()); + assertTrue(key1.hasId()); + assertFalse(key1.hasName()); + assertEquals(Key.newBuilder(pk1, key1.getId()).build(), key1); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_ALLOCATE_IDS); + } + + @Test + public void reserveIdsTraceTest() throws Exception { + assertNotNull(customSpanContext); + + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + KeyFactory keyFactory = datastore.newKeyFactory().setKind("MyKind"); + Key key1 = keyFactory.newKey(10); + Key key2 = keyFactory.newKey("name"); + List keyList = datastore.reserveIds(key1, key2); + assertEquals(2, keyList.size()); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_RESERVE_IDS); + } + + @Test + public void commitTraceTest() throws Exception { + assertNotNull(customSpanContext); + + Span rootSpan = getNewRootSpanWithContext(); + + Entity entity1 = Entity.newBuilder(KEY1).set("test_key", "test_value").build(); + try (Scope ignored = rootSpan.makeCurrent()) { + Entity response = datastore.add(entity1); + assertEquals(entity1, response); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_COMMIT); + } + + @Test + public void putTraceTest() throws Exception { + assertNotNull(customSpanContext); + + Span rootSpan = getNewRootSpanWithContext(); + + Entity entity1 = Entity.newBuilder(KEY1).set("test_key", "test_value").build(); + try (Scope ignored = rootSpan.makeCurrent()) { + Entity response = datastore.put(entity1); + assertEquals(entity1, response); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_COMMIT); + } + + @Test + public void updateTraceTest() throws Exception { + assertNotNull(customSpanContext); + + Entity entity1 = Entity.newBuilder(KEY1).set("test_field", "test_value1").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("test_field", "test_value2").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + Entity entity1_update = + Entity.newBuilder(entity1).set("test_field", "new_test_value1").build(); + Entity entity2_update = + Entity.newBuilder(entity2).set("test_field", "new_test_value1").build(); + datastore.update(entity1_update, entity2_update); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_COMMIT); + } + + @Test + public void deleteTraceTest() throws Exception { + assertNotNull(customSpanContext); + + Entity entity1 = Entity.newBuilder(KEY1).set("test_key", "test_value").build(); + Entity response = datastore.put(entity1); + assertEquals(entity1, response); + + Span rootSpan = getNewRootSpanWithContext(); + + try (Scope ignored = rootSpan.makeCurrent()) { + datastore.delete(entity1.getKey()); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_COMMIT); + } + + @Test + public void runQueryTraceTest() throws Exception { + Entity entity1 = Entity.newBuilder(KEY1).set("test_field", "test_value1").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("test_field", "test_value2").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + PropertyFilter filter = PropertyFilter.eq("test_field", entity1.getValue("test_field")); + Query query = + Query.newEntityQueryBuilder().setKind(KEY1.getKind()).setFilter(filter).build(); + QueryResults queryResults = datastore.run(query); + assertTrue(queryResults.hasNext()); + assertEquals(entity1, queryResults.next()); + assertFalse(queryResults.hasNext()); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_RUN_QUERY); + } + + @Test + public void runAggregationQueryTraceTest() throws Exception { + Entity entity1 = + Entity.newBuilder(KEY1) + .set("pepper_name", "jalapeno") + .set("max_scoville_level", 10000) + .build(); + Entity entity2 = + Entity.newBuilder(KEY2) + .set("pepper_name", "serrano") + .set("max_scoville_level", 25000) + .build(); + Entity entity3 = + Entity.newBuilder(KEY3) + .set("pepper_name", "habanero") + .set("max_scoville_level", 350000) + .build(); + Entity entity4 = + Entity.newBuilder(KEY4) + .set("pepper_name", "ghost") + .set("max_scoville_level", 1500000) + .build(); + + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + entityList.add(entity3); + entityList.add(entity4); + + List response = datastore.add(entity1, entity2, entity3, entity4); + assertEquals(entityList, response); + + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + PropertyFilter mediumSpicyFilters = PropertyFilter.lt("max_scoville_level", 100000); + StructuredQuery mediumSpicyQuery = + Query.newEntityQueryBuilder() + .setKind(KEY1.getKind()) + .setFilter(mediumSpicyFilters) + .build(); + AggregationQuery countSpicyPeppers = + Query.newAggregationQueryBuilder() + .addAggregation(count().as("count")) + .over(mediumSpicyQuery) + .build(); + AggregationResults results = datastore.runAggregation(countSpicyPeppers); + assertThat(results.size()).isEqualTo(1); + AggregationResult result = results.get(0); + assertThat(result.getLong("count")).isEqualTo(2L); + } finally { + rootSpan.end(); + } + + waitForTracesToComplete(); + + fetchAndValidateTrace(customSpanContext.getTraceId(), SPAN_NAME_RUN_AGGREGATION_QUERY); + } + + @Test + public void newTransactionReadTest() throws Exception { + assertNotNull(customSpanContext); + + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + Transaction transaction = datastore.newTransaction(); + Entity entity = datastore.get(KEY1, ReadOption.transactionId(transaction.getTransactionId())); + transaction.commit(); + assertNull(entity); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace( + customSpanContext.getTraceId(), + /* numExpectedSpans= */ 3, + Arrays.asList( + Collections.singletonList(SPAN_NAME_BEGIN_TRANSACTION), + Collections.singletonList(SPAN_NAME_TRANSACTION_LOOKUP), + Collections.singletonList(SPAN_NAME_TRANSACTION_COMMIT))); + } + + @Test + public void newTransactionQueryTest() throws Exception { + // Set up + Entity entity1 = Entity.newBuilder(KEY1).set("test_field", "test_value1").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("test_field", "test_value2").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + assertNotNull(customSpanContext); + + // Test + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + Transaction transaction = datastore.newTransaction(); + PropertyFilter filter = PropertyFilter.eq("test_field", entity1.getValue("test_field")); + Query query = + Query.newEntityQueryBuilder().setKind(KEY1.getKind()).setFilter(filter).build(); + QueryResults queryResults = transaction.run(query); + transaction.commit(); + assertTrue(queryResults.hasNext()); + assertEquals(entity1, queryResults.next()); + assertFalse(queryResults.hasNext()); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace( + customSpanContext.getTraceId(), + /* numExpectedSpans= */ 3, + Arrays.asList( + Collections.singletonList(SPAN_NAME_BEGIN_TRANSACTION), + Collections.singletonList(SPAN_NAME_TRANSACTION_RUN_QUERY), + Collections.singletonList(SPAN_NAME_TRANSACTION_COMMIT))); + } + + @Test + public void newTransactionReadWriteTraceTest() throws Exception { + // Set up + Entity entity1 = Entity.newBuilder(KEY1).set("pepper_type", "jalapeno").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("pepper_type", "habanero").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + String simplified_spice_level = "not_spicy"; + Entity entity1update = + Entity.newBuilder(entity1).set("spice_level", simplified_spice_level).build(); + + assertNotNull(customSpanContext); + + // Test + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + Transaction transaction = datastore.newTransaction(); + entity1 = transaction.get(KEY1); + switch (entity1.getString("pepper_type")) { + case "jalapeno": + simplified_spice_level = "mild"; + break; + + case "habanero": + simplified_spice_level = "hot"; + break; + } + transaction.update(entity1update); + transaction.delete(KEY2); + transaction.commit(); + assertFalse(transaction.isActive()); + } finally { + rootSpan.end(); + } + + waitForTracesToComplete(); + + List list = datastore.fetch(KEY1, KEY2); + assertEquals(list.get(0), entity1update); + assertNull(list.get(1)); + + fetchAndValidateTrace( + customSpanContext.getTraceId(), + /* numExpectedSpans= */ 3, + Arrays.asList( + Collections.singletonList(SPAN_NAME_BEGIN_TRANSACTION), + Collections.singletonList(SPAN_NAME_TRANSACTION_LOOKUP), + Collections.singletonList(SPAN_NAME_TRANSACTION_COMMIT))); + } + + @Test + public void newTransactionRollbackTest() throws Exception { + // Set up + Entity entity1 = Entity.newBuilder(KEY1).set("pepper_type", "jalapeno").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("pepper_type", "habanero").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + String simplified_spice_level = "not_spicy"; + Entity entity1update = + Entity.newBuilder(entity1).set("spice_level", simplified_spice_level).build(); + + assertNotNull(customSpanContext); + + // Test + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + Transaction transaction = datastore.newTransaction(); + entity1 = transaction.get(KEY1); + switch (entity1.getString("pepper_type")) { + case "jalapeno": + simplified_spice_level = "mild"; + break; + + case "habanero": + simplified_spice_level = "hot"; + break; + } + transaction.update(entity1update); + transaction.delete(KEY2); + transaction.rollback(); + assertFalse(transaction.isActive()); + } finally { + rootSpan.end(); + } + + waitForTracesToComplete(); + + List list = datastore.fetch(KEY1, KEY2); + assertEquals(list.get(0), entity1); + assertEquals(list.get(1), entity2); + + fetchAndValidateTrace( + customSpanContext.getTraceId(), + /* numExpectedSpans= */ 3, + Arrays.asList( + Collections.singletonList(SPAN_NAME_BEGIN_TRANSACTION), + Collections.singletonList(SPAN_NAME_TRANSACTION_LOOKUP), + Collections.singletonList(SPAN_NAME_ROLLBACK))); + } + + @Test + public void runInTransactionQueryTest() throws Exception { + // Set up + Entity entity1 = Entity.newBuilder(KEY1).set("test_field", "test_value1").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("test_field", "test_value2").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + assertNotNull(customSpanContext); + + Span rootSpan = getNewRootSpanWithContext(); + try (Scope ignored = rootSpan.makeCurrent()) { + PropertyFilter filter = PropertyFilter.eq("test_field", entity1.getValue("test_field")); + Query query = + Query.newEntityQueryBuilder().setKind(KEY1.getKind()).setFilter(filter).build(); + Datastore.TransactionCallable callable = + transaction -> { + QueryResults queryResults = datastore.run(query); + assertTrue(queryResults.hasNext()); + assertEquals(entity1, queryResults.next()); + assertFalse(queryResults.hasNext()); + return true; + }; + datastore.runInTransaction(callable); + } finally { + rootSpan.end(); + } + waitForTracesToComplete(); + + fetchAndValidateTrace( + customSpanContext.getTraceId(), + /* numExpectedSpans= */ 4, + Arrays.asList( + Arrays.asList(SPAN_NAME_TRANSACTION_RUN, SPAN_NAME_BEGIN_TRANSACTION), + Arrays.asList(SPAN_NAME_TRANSACTION_RUN, SPAN_NAME_RUN_QUERY), + Arrays.asList(SPAN_NAME_TRANSACTION_RUN, SPAN_NAME_TRANSACTION_COMMIT))); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITTracingTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITTracingTest.java new file mode 100644 index 000000000..aefb51352 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/ITTracingTest.java @@ -0,0 +1,849 @@ +/* + * 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. + */ + +package com.google.cloud.datastore.it; + +import static com.google.cloud.datastore.aggregation.Aggregation.count; +import static com.google.cloud.datastore.telemetry.TraceUtil.*; +import static com.google.common.truth.Truth.assertThat; +import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.SERVICE_NAME; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import com.google.cloud.datastore.AggregationQuery; +import com.google.cloud.datastore.AggregationResult; +import com.google.cloud.datastore.AggregationResults; +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOpenTelemetryOptions; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.IncompleteKey; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.KeyFactory; +import com.google.cloud.datastore.Query; +import com.google.cloud.datastore.QueryResults; +import com.google.cloud.datastore.ReadOption; +import com.google.cloud.datastore.StructuredQuery; +import com.google.cloud.datastore.StructuredQuery.PropertyFilter; +import com.google.cloud.datastore.Transaction; +import com.google.cloud.datastore.testing.RemoteDatastoreHelper; +import com.google.common.base.Preconditions; +import com.google.testing.junit.testparameterinjector.TestParameter; +import com.google.testing.junit.testparameterinjector.TestParameterInjector; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import io.opentelemetry.sdk.OpenTelemetrySdkBuilder; +import io.opentelemetry.sdk.common.CompletableResultCode; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter; +import io.opentelemetry.sdk.trace.SdkTracerProvider; +import io.opentelemetry.sdk.trace.SpanProcessor; +import io.opentelemetry.sdk.trace.data.EventData; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor; +import io.opentelemetry.sdk.trace.samplers.Sampler; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.Nullable; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; +import org.junit.runner.RunWith; + +@RunWith(TestParameterInjector.class) +public class ITTracingTest { + protected boolean isUsingGlobalOpenTelemetrySDK() { + return useGlobalOpenTelemetrySDK; + } + + protected String datastoreNamedDatabase() { + return datastoreNamedDatabase; + } + + private static final Logger logger = + Logger.getLogger(com.google.cloud.datastore.it.ITTracingTest.class.getName()); + + private static final int TRACE_FORCE_FLUSH_MILLIS = 1000; + private static final int TRACE_PROVIDER_SHUTDOWN_MILLIS = 1000; + private static final int IN_MEMORY_SPAN_EXPORTER_DELAY_MILLIS = 50; + private static final String SERVICE = "google.datastore.v1.Datastore/"; + + private static Key KEY1; + + private static Key KEY2; + + private static Key KEY3; + + private static Key KEY4; + + private static OpenTelemetrySdk openTelemetrySdk; + + // We use an InMemorySpanExporter for testing which keeps all generated trace spans + // in memory so that we can check their correctness. + protected InMemorySpanExporter inMemorySpanExporter; + private static DatastoreOptions options; + + protected Datastore datastore; + private static RemoteDatastoreHelper remoteDatastoreHelper; + + @TestParameter boolean useGlobalOpenTelemetrySDK; + + @TestParameter({ + /*(default)*/ + "", + "test-db" + }) + String datastoreNamedDatabase; + + Map spanNameToSpanId = new HashMap<>(); + Map spanIdToParentSpanId = new HashMap<>(); + Map spanNameToSpanData = new HashMap<>(); + + @Rule public TestName testName = new TestName(); + + @Before + public void before() { + inMemorySpanExporter = InMemorySpanExporter.create(); + + Resource resource = + Resource.getDefault().merge(Resource.builder().put(SERVICE_NAME, "Sparky").build()); + SpanProcessor inMemorySpanProcessor = SimpleSpanProcessor.create(inMemorySpanExporter); + DatastoreOptions.Builder optionsBuilder = DatastoreOptions.newBuilder(); + DatastoreOpenTelemetryOptions.Builder otelOptionsBuilder = + DatastoreOpenTelemetryOptions.newBuilder(); + OpenTelemetrySdkBuilder openTelemetrySdkBuilder = + OpenTelemetrySdk.builder() + .setTracerProvider( + SdkTracerProvider.builder() + .setResource(resource) + .addSpanProcessor(inMemorySpanProcessor) + .setSampler(Sampler.alwaysOn()) + .build()); + + if (isUsingGlobalOpenTelemetrySDK()) { + GlobalOpenTelemetry.resetForTest(); + openTelemetrySdk = openTelemetrySdkBuilder.buildAndRegisterGlobal(); + optionsBuilder.setOpenTelemetryOptions(otelOptionsBuilder.setTracingEnabled(true).build()); + } else { + openTelemetrySdk = openTelemetrySdkBuilder.build(); + optionsBuilder.setOpenTelemetryOptions( + otelOptionsBuilder.setTracingEnabled(true).setOpenTelemetry(openTelemetrySdk).build()); + } + + String namedDb = datastoreNamedDatabase(); + logger.log(Level.INFO, "Integration test using named database " + namedDb); + remoteDatastoreHelper = RemoteDatastoreHelper.create(namedDb, openTelemetrySdk); + options = remoteDatastoreHelper.getOptions(); + datastore = options.getService(); + + Preconditions.checkNotNull( + datastore, + "Error instantiating Datastore. Check that the service account credentials " + + "were properly set."); + + String projectId = options.getProjectId(); + String kind1 = "kind1"; + KEY1 = + Key.newBuilder(projectId, kind1, "key1", options.getDatabaseId()) + .setNamespace(options.getNamespace()) + .build(); + KEY2 = + Key.newBuilder(projectId, kind1, "key2", options.getDatabaseId()) + .setNamespace(options.getNamespace()) + .build(); + KEY3 = + Key.newBuilder(projectId, kind1, "key3", options.getDatabaseId()) + .setNamespace(options.getNamespace()) + .build(); + KEY4 = + Key.newBuilder(projectId, kind1, "key4", options.getDatabaseId()) + .setNamespace(options.getNamespace()) + .build(); + cleanupTestSpanContext(); + } + + @After + public void after() throws Exception { + if (isUsingGlobalOpenTelemetrySDK()) { + GlobalOpenTelemetry.resetForTest(); + } + remoteDatastoreHelper.deleteNamespace(); + inMemorySpanExporter.reset(); + CompletableResultCode completableResultCode = + openTelemetrySdk.getSdkTracerProvider().shutdown(); + completableResultCode.join(TRACE_PROVIDER_SHUTDOWN_MILLIS, TimeUnit.MILLISECONDS); + openTelemetrySdk = null; + } + + @AfterClass + public static void teardown() {} + + void waitForTracesToComplete() throws Exception { + // The same way that querying the Cloud Trace backend may not give us the + // full trace on the first try, querying the in-memory traces may not result + // in the full trace immediately. Note that performing the `flush` is not + // enough. This doesn't pose an issue in practice, but can make tests flaky. + // Therefore, we're adding a delay to make sure we avoid any flakiness. + inMemorySpanExporter.flush().join(IN_MEMORY_SPAN_EXPORTER_DELAY_MILLIS, TimeUnit.MILLISECONDS); + TimeUnit.MILLISECONDS.sleep(IN_MEMORY_SPAN_EXPORTER_DELAY_MILLIS); + + CompletableResultCode completableResultCode = + openTelemetrySdk.getSdkTracerProvider().forceFlush(); + completableResultCode.join(TRACE_FORCE_FLUSH_MILLIS, TimeUnit.MILLISECONDS); + } + + // Prepares all the spans in memory for inspection. + List prepareSpans() throws Exception { + waitForTracesToComplete(); + List spans = inMemorySpanExporter.getFinishedSpanItems(); + buildSpanMaps(spans); + printSpans(); + return spans; + } + + void buildSpanMaps(List spans) { + for (SpanData spanData : spans) { + spanNameToSpanData.put(spanData.getName(), spanData); + spanNameToSpanId.put(spanData.getName(), spanData.getSpanId()); + spanIdToParentSpanId.put(spanData.getSpanId(), spanData.getParentSpanId()); + } + } + + // Returns the SpanData object for the span with the given name. + // Returns null if no span with the given name exists. + @Nullable + SpanData getSpanByName(String spanName) { + return spanNameToSpanData.get(spanName); + } + + // Returns the SpanData object for the gRPC span with the given RPC name. + // Returns null if no such span exists. + @Nullable + SpanData getGrpcSpanByName(String rpcName) { + return getSpanByName(SERVICE + rpcName); + } + + String grpcSpanName(String rpcName) { + return SERVICE + rpcName; + } + + void assertSameTrace(SpanData... spans) { + if (spans.length > 1) { + String traceId = spans[0].getTraceId(); + for (SpanData spanData : spans) { + assertEquals(traceId, spanData.getTraceId()); + } + } + } + + // Helper to see the spans in standard output while developing tests + void printSpans() { + for (SpanData spanData : spanNameToSpanData.values()) { + logger.log( + Level.FINE, + String.format( + "SPAN ID:%s, ParentID:%s, KIND:%s, TRACE ID:%s, NAME:%s, ATTRIBUTES:%s, EVENTS:%s\n", + spanData.getSpanId(), + spanData.getParentSpanId(), + spanData.getKind(), + spanData.getTraceId(), + spanData.getName(), + spanData.getAttributes().toString(), + spanData.getEvents().toString())); + } + } + + // Asserts that the span hierarchy exists for the given span names. The hierarchy starts with the + // root span, followed + // by the child span, grandchild span, and so on. It also asserts that all the given spans belong + // to the same trace, + // and that datastore-generated spans contain the expected datastore attributes. + void assertSpanHierarchy(String... spanNamesHierarchy) { + List spanNames = Arrays.asList(spanNamesHierarchy); + + for (int i = 0; i + 1 < spanNames.size(); ++i) { + String parentSpanName = spanNames.get(i); + String childSpanName = spanNames.get(i + 1); + SpanData parentSpan = getSpanByName(parentSpanName); + SpanData childSpan = getSpanByName(childSpanName); + assertNotNull(parentSpan); + assertNotNull(childSpan); + assertEquals(childSpan.getParentSpanId(), parentSpan.getSpanId()); + assertSameTrace(childSpan, parentSpan); + // gRPC spans do not have datastore attributes. + if (!parentSpanName.startsWith(SERVICE)) { + assertHasExpectedAttributes(parentSpan); + } + if (!childSpanName.startsWith(SERVICE)) { + assertHasExpectedAttributes(childSpan); + } + } + } + + void assertHasExpectedAttributes(SpanData spanData, String... additionalExpectedAttributes) { + // All datastore-generated spans have the settings attributes. + List expectedAttributes = + Arrays.asList( + "gcp.datastore.memoryUtilization", + "gcp.datastore.settings.host", + "gcp.datastore.settings.databaseId", + "gcp.datastore.settings.retrySettings.maxRpcTimeout", + "gcp.datastore.settings.retrySettings.retryDelayMultiplier", + "gcp.datastore.settings.retrySettings.initialRetryDelay", + "gcp.datastore.settings.credentials.authenticationType", + "gcp.datastore.settings.retrySettings.maxAttempts", + "gcp.datastore.settings.retrySettings.maxRetryDelay", + "gcp.datastore.settings.retrySettings.rpcTimeoutMultiplier", + "gcp.datastore.settings.retrySettings.totalTimeout", + "gcp.datastore.settings.retrySettings.initialRpcTimeout"); + + expectedAttributes.addAll(Arrays.asList(additionalExpectedAttributes)); + + Attributes spanAttributes = spanData.getAttributes(); + for (String expectedAttribute : expectedAttributes) { + assertNotNull(spanAttributes.get(AttributeKey.stringKey(expectedAttribute))); + } + } + + // Returns true if and only if the given span data contains an event with the given name and the + // given expected + // attributes. + boolean hasEvent(SpanData spanData, String eventName, @Nullable Attributes expectedAttributes) { + if (spanData == null) { + return false; + } + + logger.log( + Level.INFO, + String.format( + "Checking if span named '%s' (ID='%s') contains an event named '%s'", + spanData.getName(), spanData.getSpanId(), eventName)); + + List events = spanData.getEvents(); + for (EventData event : events) { + if (event.getName().equals(eventName)) { + if (expectedAttributes == null) { + return true; + } + + // Make sure attributes also match. + Attributes eventAttributes = event.getAttributes(); + return expectedAttributes.equals(eventAttributes); + } + } + return false; + } + + void cleanupTestSpanContext() { + inMemorySpanExporter.reset(); + spanNameToSpanId.clear(); + spanIdToParentSpanId.clear(); + spanNameToSpanData.clear(); + } + + // This is a POJO used for testing APIs that take a POJO. + public static class Pojo { + public int bar; + + public Pojo() { + bar = 0; + } + + public Pojo(int bar) { + this.bar = bar; + } + + public int getBar() { + return bar; + } + + public void setBar(int bar) { + this.bar = bar; + } + } + + @Test + public void lookupTraceTest() throws Exception { + Entity entity = datastore.get(KEY1); + assertNull(entity); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_LOOKUP); + SpanData span = getSpanByName(SPAN_NAME_LOOKUP); + assertTrue( + hasEvent( + span, + SPAN_NAME_LOOKUP + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_RECEIVED, 0) + .put(ATTRIBUTES_KEY_MISSING, 1) + .put(ATTRIBUTES_KEY_DEFERRED, 0) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, false) + .put(ATTRIBUTES_KEY_TRANSACTION_ID, "") + .build())); + } + + @Test + public void allocateIdsTraceTest() throws Exception { + String kind1 = "kind1"; + KeyFactory keyFactory = datastore.newKeyFactory().setKind(kind1); + IncompleteKey pk1 = keyFactory.newKey(); + Key key1 = datastore.allocateId(pk1); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_ALLOCATE_IDS); + } + + @Test + public void reserveIdsTraceTest() throws Exception { + KeyFactory keyFactory = datastore.newKeyFactory().setKind("MyKind"); + Key key1 = keyFactory.newKey(10); + Key key2 = keyFactory.newKey("name"); + List keyList = datastore.reserveIds(key1, key2); + assertEquals(2, keyList.size()); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_RESERVE_IDS); + } + + @Test + public void commitTraceTest() throws Exception { + Entity entity1 = Entity.newBuilder(KEY1).set("test_key", "test_value").build(); + Entity response = datastore.add(entity1); + assertEquals(entity1, response); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_COMMIT); + } + + @Test + public void putTraceTest() throws Exception { + Entity entity1 = Entity.newBuilder(KEY1).set("test_key", "test_value").build(); + Entity response = datastore.put(entity1); + assertEquals(entity1, response); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_COMMIT); + } + + @Test + public void updateTraceTest() throws Exception { + Entity entity1 = Entity.newBuilder(KEY1).set("test_field", "test_value1").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("test_field", "test_value2").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_COMMIT); + + SpanData spanData = getSpanByName(SPAN_NAME_COMMIT); + assertTrue( + hasEvent( + spanData, + SPAN_NAME_COMMIT + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_DOCUMENT_COUNT, response.size()) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, false) + .put(ATTRIBUTES_KEY_TRANSACTION_ID, "") + .build())); + + // Clean Up test span context to verify update spans + cleanupTestSpanContext(); + + Entity entity1_update = Entity.newBuilder(entity1).set("test_field", "new_test_value1").build(); + Entity entity2_update = Entity.newBuilder(entity2).set("test_field", "new_test_value1").build(); + datastore.update(entity1_update, entity2_update); + + waitForTracesToComplete(); + + spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_COMMIT); + } + + @Test + public void deleteTraceTest() throws Exception { + Entity entity1 = Entity.newBuilder(KEY1).set("test_key", "test_value").build(); + Entity response = datastore.put(entity1); + assertEquals(entity1, response); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_COMMIT); + + SpanData spanData = getSpanByName(SPAN_NAME_COMMIT); + assertTrue( + hasEvent( + spanData, + SPAN_NAME_COMMIT + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_DOCUMENT_COUNT, 1) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, false) + .put(ATTRIBUTES_KEY_TRANSACTION_ID, "") + .build())); + + // Clean Up test span context to verify update spans + cleanupTestSpanContext(); + + datastore.delete(entity1.getKey()); + + waitForTracesToComplete(); + + spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_COMMIT); + + spanData = getSpanByName(SPAN_NAME_COMMIT); + assertTrue( + hasEvent( + spanData, + SPAN_NAME_COMMIT + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_DOCUMENT_COUNT, 1) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, false) + .put(ATTRIBUTES_KEY_TRANSACTION_ID, "") + .build())); + } + + @Test + public void runQueryTraceTest() throws Exception { + Entity entity1 = Entity.newBuilder(KEY1).set("test_field", "test_value1").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("test_field", "test_value2").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + // Clean Up test span context to verify RunQuery spans + cleanupTestSpanContext(); + + PropertyFilter filter = PropertyFilter.eq("test_field", entity1.getValue("test_field")); + Query query = + Query.newEntityQueryBuilder().setKind(KEY1.getKind()).setFilter(filter).build(); + QueryResults queryResults = datastore.run(query); + assertTrue(queryResults.hasNext()); + assertEquals(entity1, queryResults.next()); + assertFalse(queryResults.hasNext()); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_RUN_QUERY); + + SpanData span = getSpanByName(SPAN_NAME_RUN_QUERY); + assertTrue( + hasEvent( + span, + SPAN_NAME_RUN_QUERY + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_DOCUMENT_COUNT, 1) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, false) + .put(ATTRIBUTES_KEY_READ_CONSISTENCY, "READ_CONSISTENCY_UNSPECIFIED") + .put(ATTRIBUTES_KEY_MORE_RESULTS, "NO_MORE_RESULTS") + .put(ATTRIBUTES_KEY_TRANSACTION_ID, "") + .build())); + } + + @Test + public void runAggregationQueryTraceTest() throws Exception { + Entity entity1 = + Entity.newBuilder(KEY1) + .set("pepper_name", "jalapeno") + .set("max_scoville_level", 10000) + .build(); + Entity entity2 = + Entity.newBuilder(KEY2) + .set("pepper_name", "serrano") + .set("max_scoville_level", 25000) + .build(); + Entity entity3 = + Entity.newBuilder(KEY3) + .set("pepper_name", "habanero") + .set("max_scoville_level", 350000) + .build(); + Entity entity4 = + Entity.newBuilder(KEY4) + .set("pepper_name", "ghost") + .set("max_scoville_level", 1500000) + .build(); + + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + entityList.add(entity3); + entityList.add(entity4); + + List response = datastore.add(entity1, entity2, entity3, entity4); + assertEquals(entityList, response); + + // Clean Up test span context to verify RunAggregationQuery spans + cleanupTestSpanContext(); + + PropertyFilter mediumSpicyFilters = PropertyFilter.lt("max_scoville_level", 100000); + StructuredQuery mediumSpicyQuery = + Query.newEntityQueryBuilder().setKind(KEY1.getKind()).setFilter(mediumSpicyFilters).build(); + AggregationQuery countSpicyPeppers = + Query.newAggregationQueryBuilder() + .addAggregation(count().as("count")) + .over(mediumSpicyQuery) + .build(); + AggregationResults results = datastore.runAggregation(countSpicyPeppers); + assertThat(results.size()).isEqualTo(1); + AggregationResult result = results.get(0); + assertThat(result.getLong("count")).isEqualTo(2L); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(1, spans.size()); + assertSpanHierarchy(SPAN_NAME_RUN_AGGREGATION_QUERY); + } + + @Test + public void newTransactionReadWriteTraceTest() throws Exception { + // Transaction.Begin + Transaction transaction = datastore.newTransaction(); + + // Transaction.Lookup + Entity entity = datastore.get(KEY1, ReadOption.transactionId(transaction.getTransactionId())); + assertNull(entity); + + Entity updatedEntity = Entity.newBuilder(KEY1).set("test_field", "new_test_value1").build(); + transaction.put(updatedEntity); + + // Transaction.Commit + transaction.commit(); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(3, spans.size()); + + assertSpanHierarchy(SPAN_NAME_BEGIN_TRANSACTION); + assertSpanHierarchy(SPAN_NAME_TRANSACTION_LOOKUP); + SpanData span = getSpanByName(SPAN_NAME_TRANSACTION_LOOKUP); + assertTrue( + hasEvent( + span, + SPAN_NAME_TRANSACTION_LOOKUP + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_DEFERRED, 0) + .put(ATTRIBUTES_KEY_MISSING, 1) + .put(ATTRIBUTES_KEY_RECEIVED, 0) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, true) + .put(ATTRIBUTES_KEY_TRANSACTION_ID, transaction.getTransactionId().toStringUtf8()) + .build())); + + assertSpanHierarchy(SPAN_NAME_TRANSACTION_COMMIT); + span = getSpanByName(SPAN_NAME_TRANSACTION_COMMIT); + assertTrue( + hasEvent( + span, + SPAN_NAME_TRANSACTION_COMMIT + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_DOCUMENT_COUNT, 1) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, true) + .put(ATTRIBUTES_KEY_TRANSACTION_ID, transaction.getTransactionId().toStringUtf8()) + .build())); + } + + @Test + public void newTransactionQueryTest() throws Exception { + Entity entity1 = Entity.newBuilder(KEY1).set("test_field", "test_value1").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("test_field", "test_value2").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + // Clean Up test span context to verify Transaction RunQuery spans + cleanupTestSpanContext(); + + Transaction transaction = datastore.newTransaction(); + PropertyFilter filter = PropertyFilter.eq("test_field", entity1.getValue("test_field")); + Query query = + Query.newEntityQueryBuilder().setKind(KEY1.getKind()).setFilter(filter).build(); + QueryResults queryResults = transaction.run(query); + transaction.commit(); + assertTrue(queryResults.hasNext()); + assertEquals(entity1, queryResults.next()); + assertFalse(queryResults.hasNext()); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(3, spans.size()); + + assertSpanHierarchy(SPAN_NAME_BEGIN_TRANSACTION); + assertSpanHierarchy(SPAN_NAME_TRANSACTION_RUN_QUERY); + assertSpanHierarchy(SPAN_NAME_TRANSACTION_COMMIT); + SpanData span = getSpanByName(SPAN_NAME_TRANSACTION_RUN_QUERY); + assertTrue( + hasEvent( + span, + SPAN_NAME_TRANSACTION_RUN_QUERY + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_DOCUMENT_COUNT, 1) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, true) + .put(ATTRIBUTES_KEY_READ_CONSISTENCY, "READ_CONSISTENCY_UNSPECIFIED") + .put(ATTRIBUTES_KEY_MORE_RESULTS, "NO_MORE_RESULTS") + .put(ATTRIBUTES_KEY_TRANSACTION_ID, transaction.getTransactionId().toStringUtf8()) + .build())); + } + + @Test + public void newTransactionRollbackTest() throws Exception { + Entity entity1 = Entity.newBuilder(KEY1).set("pepper_type", "jalapeno").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("pepper_type", "habanero").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + // Clean Up test span context to verify Transaction Rollback spans + cleanupTestSpanContext(); + + String simplified_spice_level = "not_spicy"; + Entity entity1update = + Entity.newBuilder(entity1).set("spice_level", simplified_spice_level).build(); + Transaction transaction = datastore.newTransaction(); + entity1 = transaction.get(KEY1); + switch (entity1.getString("pepper_type")) { + case "jalapeno": + simplified_spice_level = "mild"; + break; + + case "habanero": + simplified_spice_level = "hot"; + break; + } + transaction.update(entity1update); + transaction.delete(KEY2); + transaction.rollback(); + assertFalse(transaction.isActive()); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(3, spans.size()); + + assertSpanHierarchy(SPAN_NAME_BEGIN_TRANSACTION); + assertSpanHierarchy(SPAN_NAME_TRANSACTION_LOOKUP); + SpanData span = getSpanByName(SPAN_NAME_TRANSACTION_LOOKUP); + assertTrue( + hasEvent( + span, + SPAN_NAME_TRANSACTION_LOOKUP + " complete.", + Attributes.builder() + .put(ATTRIBUTES_KEY_DEFERRED, 0) + .put(ATTRIBUTES_KEY_MISSING, 0) + .put(ATTRIBUTES_KEY_RECEIVED, 1) + .put(ATTRIBUTES_KEY_TRANSACTIONAL, true) + .put(ATTRIBUTES_KEY_TRANSACTION_ID, transaction.getTransactionId().toStringUtf8()) + .build())); + + assertSpanHierarchy(SPAN_NAME_ROLLBACK); + span = getSpanByName(SPAN_NAME_ROLLBACK); + assertTrue( + hasEvent( + span, + SPAN_NAME_ROLLBACK, + Attributes.builder() + .put(ATTRIBUTES_KEY_TRANSACTION_ID, transaction.getTransactionId().toStringUtf8()) + .build())); + } + + @Test + public void runInTransactionQueryTest() throws Exception { + // Set up + Entity entity1 = Entity.newBuilder(KEY1).set("test_field", "test_value1").build(); + Entity entity2 = Entity.newBuilder(KEY2).set("test_field", "test_value2").build(); + List entityList = new ArrayList<>(); + entityList.add(entity1); + entityList.add(entity2); + + List response = datastore.add(entity1, entity2); + assertEquals(entityList, response); + + // Clean Up test span context to verify Transaction Rollback spans + cleanupTestSpanContext(); + + PropertyFilter filter = PropertyFilter.eq("test_field", entity1.getValue("test_field")); + Query query = + Query.newEntityQueryBuilder().setKind(KEY1.getKind()).setFilter(filter).build(); + Datastore.TransactionCallable callable = + transaction -> { + QueryResults queryResults = datastore.run(query); + assertTrue(queryResults.hasNext()); + assertEquals(entity1, queryResults.next()); + assertFalse(queryResults.hasNext()); + return true; + }; + datastore.runInTransaction(callable); + + waitForTracesToComplete(); + + List spans = prepareSpans(); + assertEquals(4, spans.size()); + + // Since the runInTransaction method runs the TransactionCallable opaquely in a transaction + // there is no way for the API user to know the transaction ID, so we will not validate it here. + assertSpanHierarchy(SPAN_NAME_TRANSACTION_RUN, SPAN_NAME_BEGIN_TRANSACTION); + assertSpanHierarchy(SPAN_NAME_TRANSACTION_RUN, SPAN_NAME_RUN_QUERY); + assertSpanHierarchy(SPAN_NAME_TRANSACTION_RUN, SPAN_NAME_TRANSACTION_COMMIT); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/MultipleAttemptsRule.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/MultipleAttemptsRule.java index 8472f3131..ce9a226a6 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/MultipleAttemptsRule.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/MultipleAttemptsRule.java @@ -37,7 +37,7 @@ public final class MultipleAttemptsRule implements TestRule { this(attemptCount, 1000L); } - MultipleAttemptsRule(int attemptCount, long initialBackoffMillis) { + public MultipleAttemptsRule(int attemptCount, long initialBackoffMillis) { checkState(attemptCount > 0, "attemptCount must be > 0"); checkState(initialBackoffMillis > 0, "initialBackoffMillis must be > 0"); this.initialBackoffMillis = initialBackoffMillis; diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/StatementExecutor.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/StatementExecutor.java index c8ded3d89..f2209be9c 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/StatementExecutor.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/it/StatementExecutor.java @@ -80,9 +80,10 @@ private boolean transactionConflict(Exception exception) { } return exception instanceof ExecutionException && exception.getCause().getClass() == DatastoreException.class - && exception - .getMessage() - .contains("contention"); // exception raise coz of optimistic concurrency + && (exception.getMessage().contains("contention") + || exception + .getMessage() + .contains("Conflict")); // exception raise coz of optimistic concurrency } interface Statement { diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExecutionStatsTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExecutionStatsTest.java index 4706e3b86..a0e778cee 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExecutionStatsTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/models/ExecutionStatsTest.java @@ -41,8 +41,8 @@ public class ExecutionStatsTest { @Test public void testModel() { Truth.assertThat(executionStats.getDebugStats()).isEqualTo(Structs.asMap(struct)); - Truth.assertThat(executionStats.getExecutionDuration()) - .isEqualTo(org.threeten.bp.Duration.ofNanos(duration.getNanos())); + Truth.assertThat(executionStats.getExecutionDurationJavaTime()) + .isEqualTo(java.time.Duration.ofNanos(duration.getNanos())); Truth.assertThat(executionStats.getReadOperations()).isEqualTo(2); Truth.assertThat(executionStats.getResultsReturned()).isEqualTo(3); } diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/spi/v1/RpcUtilsTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/spi/v1/RpcUtilsTest.java new file mode 100644 index 000000000..f81348257 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/spi/v1/RpcUtilsTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.datastore.spi.v1; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.api.gax.retrying.RetrySettings; +import com.google.api.gax.rpc.UnaryCallSettings; +import com.google.cloud.datastore.DatastoreOptions; +import java.time.Duration; +import org.junit.Test; + +public class RpcUtilsTest { + + @Test + public void testRetrySettingSetter() { + UnaryCallSettings.Builder builder = + UnaryCallSettings.newUnaryCallSettingsBuilder(); + + // datastoreOptions with default retry settings + DatastoreOptions datastoreOptions = + DatastoreOptions.newBuilder().setProjectId("project-id").build(); + RpcUtils.retrySettingSetter(datastoreOptions).apply(builder); + assertThat(builder.getRetrySettings()).isEqualTo(datastoreOptions.getRetrySettings()); + + // datastoreOptions with custom retry settings + RetrySettings customRetrySettings = + RetrySettings.newBuilder() + .setTotalTimeoutDuration(Duration.ofMinutes(2)) + .setInitialRpcTimeoutDuration(Duration.ofSeconds(5)) + .setMaxRpcTimeoutDuration(Duration.ofSeconds(10)) + .setRetryDelayMultiplier(1.5) + .setMaxAttempts(5) + .build(); + DatastoreOptions datastoreOptionsWithCustomRetrySettings = + DatastoreOptions.newBuilder() + .setProjectId("project-id") + .setRetrySettings(customRetrySettings) + .build(); + RpcUtils.retrySettingSetter(datastoreOptionsWithCustomRetrySettings).apply(builder); + assertThat(builder.getRetrySettings()).isEqualTo(customRetrySettings); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/DisabledTraceUtilTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/DisabledTraceUtilTest.java new file mode 100644 index 000000000..c80ef9353 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/DisabledTraceUtilTest.java @@ -0,0 +1,54 @@ +/* + * 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. + */ +package com.google.cloud.datastore.telemetry; + +import static com.google.common.truth.Truth.assertThat; + +import org.junit.Test; + +public class DisabledTraceUtilTest { + @Test + public void disabledTraceUtilDoesNotProvideChannelConfigurator() { + DisabledTraceUtil traceUtil = new DisabledTraceUtil(); + assertThat(traceUtil.getChannelConfigurator()).isNull(); + } + + @Test + public void usesDisabledContext() { + DisabledTraceUtil traceUtil = new DisabledTraceUtil(); + assertThat(traceUtil.getCurrentContext() instanceof DisabledTraceUtil.Context).isTrue(); + } + + @Test + public void usesDisabledSpan() { + DisabledTraceUtil traceUtil = new DisabledTraceUtil(); + assertThat(traceUtil.getCurrentSpan() instanceof DisabledTraceUtil.Span).isTrue(); + assertThat(traceUtil.startSpan("foo") instanceof DisabledTraceUtil.Span).isTrue(); + assertThat( + traceUtil.startSpan("foo", traceUtil.getCurrentSpan()) + instanceof DisabledTraceUtil.Span) + .isTrue(); + } + + @Test + public void usesDisabledScope() { + DisabledTraceUtil traceUtil = new DisabledTraceUtil(); + assertThat(traceUtil.getCurrentContext().makeCurrent() instanceof DisabledTraceUtil.Scope) + .isTrue(); + assertThat(traceUtil.getCurrentSpan().makeCurrent() instanceof DisabledTraceUtil.Scope) + .isTrue(); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/EnabledTraceUtilTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/EnabledTraceUtilTest.java new file mode 100644 index 000000000..50d7b6820 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/EnabledTraceUtilTest.java @@ -0,0 +1,106 @@ +/* + * 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. + */ +package com.google.cloud.datastore.telemetry; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.NoCredentials; +import com.google.cloud.datastore.DatastoreOpenTelemetryOptions; +import com.google.cloud.datastore.DatastoreOptions; +import io.opentelemetry.api.GlobalOpenTelemetry; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import org.junit.Before; +import org.junit.Test; + +public class EnabledTraceUtilTest { + @Before + public void setUp() { + GlobalOpenTelemetry.resetForTest(); + } + + DatastoreOptions.Builder getBaseOptions() { + return DatastoreOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()); + } + + DatastoreOptions getTracingEnabledOptions() { + return getBaseOptions() + .setOpenTelemetryOptions( + DatastoreOpenTelemetryOptions.newBuilder().setTracingEnabled(true).build()) + .build(); + } + + EnabledTraceUtil newEnabledTraceUtil() { + return new EnabledTraceUtil(getTracingEnabledOptions()); + } + + @Test + public void usesOpenTelemetryFromOptions() { + OpenTelemetrySdk myOpenTelemetrySdk = OpenTelemetrySdk.builder().build(); + DatastoreOptions firestoreOptions = + getBaseOptions() + .setOpenTelemetryOptions( + DatastoreOpenTelemetryOptions.newBuilder() + .setTracingEnabled(true) + .setOpenTelemetry(myOpenTelemetrySdk) + .build()) + .build(); + EnabledTraceUtil traceUtil = new EnabledTraceUtil(firestoreOptions); + assertThat(traceUtil.getOpenTelemetry()).isEqualTo(myOpenTelemetrySdk); + } + + @Test + public void usesGlobalOpenTelemetryIfOpenTelemetryInstanceNotProvided() { + OpenTelemetrySdk ignored = OpenTelemetrySdk.builder().buildAndRegisterGlobal(); + DatastoreOptions firestoreOptions = + getBaseOptions() + .setOpenTelemetryOptions( + DatastoreOpenTelemetryOptions.newBuilder().setTracingEnabled(true).build()) + .build(); + EnabledTraceUtil traceUtil = new EnabledTraceUtil(firestoreOptions); + assertThat(traceUtil.getOpenTelemetry()).isEqualTo(GlobalOpenTelemetry.get()); + } + + @Test + public void enabledTraceUtilProvidesChannelConfigurator() { + assertThat(newEnabledTraceUtil().getChannelConfigurator()).isNull(); + } + + @Test + public void usesEnabledContext() { + assertThat(newEnabledTraceUtil().getCurrentContext() instanceof EnabledTraceUtil.Context) + .isTrue(); + } + + @Test + public void usesEnabledSpan() { + EnabledTraceUtil traceUtil = newEnabledTraceUtil(); + assertThat(traceUtil.getCurrentSpan() instanceof EnabledTraceUtil.Span).isTrue(); + assertThat(traceUtil.startSpan("foo") != null).isTrue(); + assertThat( + traceUtil.startSpan("foo", traceUtil.getCurrentSpan()) instanceof EnabledTraceUtil.Span) + .isTrue(); + } + + @Test + public void usesEnabledScope() { + EnabledTraceUtil traceUtil = newEnabledTraceUtil(); + assertThat(traceUtil.getCurrentContext().makeCurrent() instanceof EnabledTraceUtil.Scope) + .isTrue(); + assertThat(traceUtil.getCurrentSpan().makeCurrent() instanceof EnabledTraceUtil.Scope).isTrue(); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/TraceUtilTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/TraceUtilTest.java new file mode 100644 index 000000000..f1cce8006 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/telemetry/TraceUtilTest.java @@ -0,0 +1,62 @@ +/* + * 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. + */ +package com.google.cloud.datastore.telemetry; + +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.NoCredentials; +import com.google.cloud.datastore.DatastoreOpenTelemetryOptions; +import com.google.cloud.datastore.DatastoreOptions; +import org.junit.Test; + +public class TraceUtilTest { + @Test + public void defaultOptionsUseDisabledTraceUtil() { + TraceUtil traceUtil = + TraceUtil.getInstance( + DatastoreOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .build()); + assertThat(traceUtil instanceof DisabledTraceUtil).isTrue(); + } + + @Test + public void tracingDisabledOptionsUseDisabledTraceUtil() { + TraceUtil traceUtil = + TraceUtil.getInstance( + DatastoreOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .setOpenTelemetryOptions( + DatastoreOpenTelemetryOptions.newBuilder().setTracingEnabled(false).build()) + .build()); + assertThat(traceUtil instanceof DisabledTraceUtil).isTrue(); + } + + @Test + public void tracingEnabledOptionsUseEnabledTraceUtil() { + TraceUtil traceUtil = + TraceUtil.getInstance( + DatastoreOptions.newBuilder() + .setProjectId("test-project") + .setCredentials(NoCredentials.getInstance()) + .setOpenTelemetryOptions( + DatastoreOpenTelemetryOptions.newBuilder().setTracingEnabled(true).build()) + .build()); + assertThat(traceUtil instanceof EnabledTraceUtil).isTrue(); + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/ITLocalDatastoreHelperTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/ITLocalDatastoreHelperTest.java index 3ebd3ef4a..3b07254d7 100644 --- a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/ITLocalDatastoreHelperTest.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/ITLocalDatastoreHelperTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Google LLC + * 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. @@ -16,6 +16,7 @@ package com.google.cloud.datastore.testing; +import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -23,15 +24,19 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.cloud.NoCredentials; import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreException; import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Entity; import com.google.cloud.datastore.Key; +import com.google.cloud.grpc.GrpcTransportOptions; +import com.google.cloud.http.HttpTransportOptions; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.time.Duration; import java.util.concurrent.TimeoutException; import org.junit.After; import org.junit.Assert; @@ -39,7 +44,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.threeten.bp.Duration; @RunWith(JUnit4.class) public class ITLocalDatastoreHelperTest { @@ -76,11 +80,13 @@ public void testCreateWithBuilder() { .setConsistency(0.75) .setPort(8081) .setStoreOnDisk(false) + .setFirestoreInDatastoreMode(true) .setDataDir(dataDir) .build(); assertTrue(Math.abs(0.75 - helper.getConsistency()) < TOLERANCE); assertTrue(helper.getProjectId().startsWith(PROJECT_ID_PREFIX)); assertFalse(helper.isStoreOnDisk()); + assertTrue(helper.isFirestoreInDatastoreMode()); assertEquals(8081, helper.getPort()); assertEquals(dataDir, helper.getGcdPath()); LocalDatastoreHelper incompleteHelper = LocalDatastoreHelper.newBuilder().build(); @@ -103,26 +109,29 @@ public void testCreateWithToBuilder() throws IOException { .setConsistency(0.75) .setPort(8081) .setStoreOnDisk(false) + .setFirestoreInDatastoreMode(true) .setDataDir(dataDir) .build(); assertTrue(Math.abs(0.75 - helper.getConsistency()) < TOLERANCE); assertTrue(helper.getProjectId().startsWith(PROJECT_ID_PREFIX)); assertFalse(helper.isStoreOnDisk()); + assertTrue(helper.isFirestoreInDatastoreMode()); assertEquals(8081, helper.getPort()); assertEquals(dataDir, helper.getGcdPath()); LocalDatastoreHelper actualHelper = helper.toBuilder().build(); assertLocalDatastoreHelpersEquivelent(helper, actualHelper); Path dataDir = Files.createTempDirectory("gcd_data_dir"); actualHelper = - helper - .toBuilder() + helper.toBuilder() .setConsistency(0.85) .setPort(9091) .setStoreOnDisk(true) + .setFirestoreInDatastoreMode(false) .setDataDir(dataDir) .build(); assertTrue(Math.abs(0.85 - actualHelper.getConsistency()) < TOLERANCE); assertTrue(actualHelper.isStoreOnDisk()); + assertFalse(actualHelper.isFirestoreInDatastoreMode()); assertEquals(9091, actualHelper.getPort()); assertEquals(dataDir, actualHelper.getGcdPath()); LocalDatastoreHelper.deleteRecursively(dataDir); @@ -167,6 +176,23 @@ public void testOptions() { assertEquals(NAMESPACE, options.getNamespace()); } + @Test + public void testDefaultHttpTransportOptions() { + LocalDatastoreHelper helper = LocalDatastoreHelper.create(); + DatastoreOptions options = helper.getOptions(); + assertThat(options.getTransportOptions()).isInstanceOf(HttpTransportOptions.class); + } + + @Test + public void testSetGrpcTransportOptions() { + LocalDatastoreHelper helper = LocalDatastoreHelper.create(); + DatastoreOptions options = + helper.getGrpcTransportOptions(GrpcTransportOptions.newBuilder().build()); + assertThat(options.getTransportOptions()).isInstanceOf(GrpcTransportOptions.class); + assertThat(options.getTransportChannelProvider()) + .isInstanceOf(InstantiatingGrpcChannelProvider.class); + } + @Test public void testStartStopReset() throws IOException, InterruptedException, TimeoutException { try { @@ -178,7 +204,7 @@ public void testStartStopReset() throws IOException, InterruptedException, Timeo assertNotNull(datastore.get(key)); helper.reset(); assertNull(datastore.get(key)); - helper.stop(Duration.ofMinutes(1)); + helper.stopDuration(Duration.ofMinutes(1)); datastore.get(key); Assert.fail(); } catch (DatastoreException ex) { @@ -198,7 +224,7 @@ public void testStartStopResetWithBuilder() assertNotNull(datastore.get(key)); helper.reset(); assertNull(datastore.get(key)); - helper.stop(Duration.ofMinutes(1)); + helper.stopDuration(Duration.ofMinutes(1)); datastore.get(key); Assert.fail(); } catch (DatastoreException ex) { @@ -206,10 +232,28 @@ public void testStartStopResetWithBuilder() } } + @Test + public void testCreateWithFirestoreInDatastoreMode() + throws IOException, InterruptedException, TimeoutException { + LocalDatastoreHelper helper = + LocalDatastoreHelper.newBuilder().setFirestoreInDatastoreMode(true).build(); + assertTrue(helper.isFirestoreInDatastoreMode()); + helper.start(); + Datastore datastore = helper.getOptions().getService(); + Key key = datastore.newKeyFactory().setKind("kind").newKey("name"); + Entity expected = Entity.newBuilder(key).build(); + datastore.put(expected); + assertNotNull(datastore.get(key)); + Entity actual = datastore.get(key); + assertEquals(expected, actual); + helper.stop(); + } + public void assertLocalDatastoreHelpersEquivelent( LocalDatastoreHelper expected, LocalDatastoreHelper actual) { assertEquals(expected.getConsistency(), actual.getConsistency(), 0); assertEquals(expected.isStoreOnDisk(), actual.isStoreOnDisk()); + assertEquals(expected.isFirestoreInDatastoreMode(), actual.isFirestoreInDatastoreMode()); assertEquals(expected.getGcdPath(), actual.getGcdPath()); } } diff --git a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/RemoteDatastoreHelper.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/RemoteDatastoreHelper.java similarity index 58% rename from google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/RemoteDatastoreHelper.java rename to google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/RemoteDatastoreHelper.java index 596ce96d8..412af667a 100644 --- a/google-cloud-datastore/src/main/java/com/google/cloud/datastore/testing/RemoteDatastoreHelper.java +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/testing/RemoteDatastoreHelper.java @@ -18,15 +18,20 @@ import com.google.api.core.InternalApi; import com.google.api.gax.retrying.RetrySettings; +import com.google.cloud.TransportOptions; import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOpenTelemetryOptions; import com.google.cloud.datastore.DatastoreOptions; import com.google.cloud.datastore.Key; import com.google.cloud.datastore.Query; import com.google.cloud.datastore.QueryResults; import com.google.cloud.datastore.StructuredQuery; +import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.http.HttpTransportOptions; +import io.opentelemetry.sdk.OpenTelemetrySdk; +import java.time.Duration; import java.util.UUID; -import org.threeten.bp.Duration; +import javax.annotation.Nullable; /** * Utility to create a remote datastore configuration for testing. Datastore options can be obtained @@ -38,13 +43,13 @@ * RetrySettings#getTotalTimeout()} is {@code 120000} and {@link * RetrySettings#getInitialRetryDelay()} is {@code 250}. {@link * HttpTransportOptions#getConnectTimeout()} and {@link HttpTransportOptions#getReadTimeout()} are - * both both set to {@code 60000}. + * both both set to {@code 60000}. If an OpenTelemetrySdk object is passed in, OpenTelemetry Trace + * collection will be enabled for the Client application. * *

Internal testing use only */ @InternalApi public class RemoteDatastoreHelper { - private final DatastoreOptions options; private final Datastore datastore; private final String namespace; @@ -74,34 +79,67 @@ public void deleteNamespace() { /** Creates a {@code RemoteStorageHelper} object. */ public static RemoteDatastoreHelper create() { - return create(""); + return create( + "", DatastoreOptions.getDefaultHttpTransportOptions(), /* openTelemetrySdk= */ null); } - /** Creates a {@code RemoteStorageHelper} object. */ public static RemoteDatastoreHelper create(String databaseId) { - HttpTransportOptions transportOptions = DatastoreOptions.getDefaultHttpTransportOptions(); - transportOptions = - transportOptions.toBuilder().setConnectTimeout(60000).setReadTimeout(60000).build(); - DatastoreOptions datastoreOption = + return create( + databaseId, + DatastoreOptions.getDefaultHttpTransportOptions(), + /* openTelemetrySdk= */ null); + } + + public static RemoteDatastoreHelper create(TransportOptions transportOptions) { + return create("", transportOptions, /* openTelemetrySdk= */ null); + } + + public static RemoteDatastoreHelper create( + String databaseId, @Nullable OpenTelemetrySdk openTelemetrySdk) { + return create(databaseId, DatastoreOptions.getDefaultHttpTransportOptions(), openTelemetrySdk); + } + + public static RemoteDatastoreHelper create(String databaseId, TransportOptions transportOptions) { + return create(databaseId, transportOptions, /* openTelemetrySdk= */ null); + } + + /** Creates a {@code RemoteStorageHelper} object. */ + public static RemoteDatastoreHelper create( + String databaseId, + TransportOptions transportOptions, + @Nullable OpenTelemetrySdk openTelemetrySdk) { + DatastoreOptions.Builder datastoreOptionBuilder = DatastoreOptions.newBuilder() .setDatabaseId(databaseId) .setNamespace(UUID.randomUUID().toString()) - .setRetrySettings(retrySettings()) - .setTransportOptions(transportOptions) - .build(); - return new RemoteDatastoreHelper(datastoreOption); + .setRetrySettings(retrySettings()); + if (transportOptions instanceof GrpcTransportOptions) { + datastoreOptionBuilder = + datastoreOptionBuilder.setTransportOptions((GrpcTransportOptions) transportOptions); + } else { + datastoreOptionBuilder = datastoreOptionBuilder.setTransportOptions(transportOptions); + } + + if (openTelemetrySdk != null) { + datastoreOptionBuilder.setOpenTelemetryOptions( + DatastoreOpenTelemetryOptions.newBuilder() + .setOpenTelemetry(openTelemetrySdk) + .setTracingEnabled(true) + .build()); + } + return new RemoteDatastoreHelper(datastoreOptionBuilder.build()); } private static RetrySettings retrySettings() { return RetrySettings.newBuilder() .setMaxAttempts(10) - .setMaxRetryDelay(Duration.ofMillis(30000L)) - .setTotalTimeout(Duration.ofMillis(120000L)) - .setInitialRetryDelay(Duration.ofMillis(250L)) + .setMaxRetryDelayDuration(Duration.ofMillis(30000L)) + .setTotalTimeoutDuration(Duration.ofMillis(120000L)) + .setInitialRetryDelayDuration(Duration.ofMillis(250L)) .setRetryDelayMultiplier(1.0) - .setInitialRpcTimeout(Duration.ofMillis(120000L)) + .setInitialRpcTimeoutDuration(Duration.ofMillis(120000L)) .setRpcTimeoutMultiplier(1.0) - .setMaxRpcTimeout(Duration.ofMillis(120000L)) + .setMaxRpcTimeoutDuration(Duration.ofMillis(120000L)) .build(); } } diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/DatastoreClientHttpJsonTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/DatastoreClientHttpJsonTest.java new file mode 100644 index 000000000..293c904b9 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/DatastoreClientHttpJsonTest.java @@ -0,0 +1,549 @@ +/* + * 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.cloud.datastore.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.cloud.datastore.v1.stub.HttpJsonDatastoreStub; +import com.google.datastore.v1.AggregationQuery; +import com.google.datastore.v1.AggregationResultBatch; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.EntityResult; +import com.google.datastore.v1.ExplainMetrics; +import com.google.datastore.v1.ExplainOptions; +import com.google.datastore.v1.Key; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.Mutation; +import com.google.datastore.v1.MutationResult; +import com.google.datastore.v1.PartitionId; +import com.google.datastore.v1.PropertyMask; +import com.google.datastore.v1.Query; +import com.google.datastore.v1.QueryResultBatch; +import com.google.datastore.v1.ReadOptions; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import com.google.protobuf.ByteString; +import com.google.protobuf.Timestamp; +import java.io.IOException; +import java.util.ArrayList; +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 DatastoreClientHttpJsonTest { + private static MockHttpService mockService; + private static DatastoreClient client; + + @BeforeClass + public static void startStaticServer() throws IOException { + mockService = + new MockHttpService( + HttpJsonDatastoreStub.getMethodDescriptors(), DatastoreSettings.getDefaultEndpoint()); + DatastoreSettings settings = + DatastoreSettings.newHttpJsonBuilder() + .setTransportChannelProvider( + DatastoreSettings.defaultHttpJsonTransportProviderBuilder() + .setHttpTransport(mockService) + .build()) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = DatastoreClient.create(settings); + } + + @AfterClass + public static void stopServer() { + client.close(); + } + + @Before + public void setUp() {} + + @After + public void tearDown() throws Exception { + mockService.reset(); + } + + @Test + public void lookupTest() throws Exception { + LookupResponse expectedResponse = + LookupResponse.newBuilder() + .addAllFound(new ArrayList()) + .addAllMissing(new ArrayList()) + .addAllDeferred(new ArrayList()) + .setTransaction(ByteString.EMPTY) + .setReadTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + ReadOptions readOptions = ReadOptions.newBuilder().build(); + List keys = new ArrayList<>(); + + LookupResponse actualResponse = client.lookup(projectId, readOptions, keys); + 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 lookupExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + ReadOptions readOptions = ReadOptions.newBuilder().build(); + List keys = new ArrayList<>(); + client.lookup(projectId, readOptions, keys); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void runQueryTest() throws Exception { + RunQueryResponse expectedResponse = + RunQueryResponse.newBuilder() + .setBatch(QueryResultBatch.newBuilder().build()) + .setQuery(Query.newBuilder().build()) + .setTransaction(ByteString.EMPTY) + .setExplainMetrics(ExplainMetrics.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + RunQueryRequest request = + RunQueryRequest.newBuilder() + .setProjectId("projectId-1530") + .setDatabaseId("databaseId1688905718") + .setPartitionId(PartitionId.newBuilder().build()) + .setReadOptions(ReadOptions.newBuilder().build()) + .setPropertyMask(PropertyMask.newBuilder().build()) + .setExplainOptions(ExplainOptions.newBuilder().build()) + .build(); + + RunQueryResponse actualResponse = client.runQuery(request); + 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 runQueryExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + RunQueryRequest request = + RunQueryRequest.newBuilder() + .setProjectId("projectId-1530") + .setDatabaseId("databaseId1688905718") + .setPartitionId(PartitionId.newBuilder().build()) + .setReadOptions(ReadOptions.newBuilder().build()) + .setPropertyMask(PropertyMask.newBuilder().build()) + .setExplainOptions(ExplainOptions.newBuilder().build()) + .build(); + client.runQuery(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void runAggregationQueryTest() throws Exception { + RunAggregationQueryResponse expectedResponse = + RunAggregationQueryResponse.newBuilder() + .setBatch(AggregationResultBatch.newBuilder().build()) + .setQuery(AggregationQuery.newBuilder().build()) + .setTransaction(ByteString.EMPTY) + .setExplainMetrics(ExplainMetrics.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + RunAggregationQueryRequest request = + RunAggregationQueryRequest.newBuilder() + .setProjectId("projectId-1530") + .setDatabaseId("databaseId1688905718") + .setPartitionId(PartitionId.newBuilder().build()) + .setReadOptions(ReadOptions.newBuilder().build()) + .setExplainOptions(ExplainOptions.newBuilder().build()) + .build(); + + RunAggregationQueryResponse actualResponse = client.runAggregationQuery(request); + 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 runAggregationQueryExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + RunAggregationQueryRequest request = + RunAggregationQueryRequest.newBuilder() + .setProjectId("projectId-1530") + .setDatabaseId("databaseId1688905718") + .setPartitionId(PartitionId.newBuilder().build()) + .setReadOptions(ReadOptions.newBuilder().build()) + .setExplainOptions(ExplainOptions.newBuilder().build()) + .build(); + client.runAggregationQuery(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void beginTransactionTest() throws Exception { + BeginTransactionResponse expectedResponse = + BeginTransactionResponse.newBuilder().setTransaction(ByteString.EMPTY).build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + + BeginTransactionResponse actualResponse = client.beginTransaction(projectId); + 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 beginTransactionExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + client.beginTransaction(projectId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void commitTest() throws Exception { + CommitResponse expectedResponse = + CommitResponse.newBuilder() + .addAllMutationResults(new ArrayList()) + .setIndexUpdates(-1425228195) + .setCommitTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0); + List mutations = new ArrayList<>(); + + CommitResponse actualResponse = client.commit(projectId, mode, mutations); + 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 commitExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0); + List mutations = new ArrayList<>(); + client.commit(projectId, mode, mutations); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void commitTest2() throws Exception { + CommitResponse expectedResponse = + CommitResponse.newBuilder() + .addAllMutationResults(new ArrayList()) + .setIndexUpdates(-1425228195) + .setCommitTime(Timestamp.newBuilder().build()) + .build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0); + ByteString transaction = ByteString.EMPTY; + List mutations = new ArrayList<>(); + + CommitResponse actualResponse = client.commit(projectId, mode, transaction, mutations); + 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 commitExceptionTest2() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0); + ByteString transaction = ByteString.EMPTY; + List mutations = new ArrayList<>(); + client.commit(projectId, mode, transaction, mutations); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void rollbackTest() throws Exception { + RollbackResponse expectedResponse = RollbackResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + ByteString transaction = ByteString.EMPTY; + + RollbackResponse actualResponse = client.rollback(projectId, transaction); + 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 rollbackExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + ByteString transaction = ByteString.EMPTY; + client.rollback(projectId, transaction); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void allocateIdsTest() throws Exception { + AllocateIdsResponse expectedResponse = + AllocateIdsResponse.newBuilder().addAllKeys(new ArrayList()).build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + List keys = new ArrayList<>(); + + AllocateIdsResponse actualResponse = client.allocateIds(projectId, keys); + 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 allocateIdsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + List keys = new ArrayList<>(); + client.allocateIds(projectId, keys); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void reserveIdsTest() throws Exception { + ReserveIdsResponse expectedResponse = ReserveIdsResponse.newBuilder().build(); + mockService.addResponse(expectedResponse); + + String projectId = "projectId-1530"; + List keys = new ArrayList<>(); + + ReserveIdsResponse actualResponse = client.reserveIds(projectId, keys); + 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 reserveIdsExceptionTest() throws Exception { + ApiException exception = + ApiExceptionFactory.createException( + new Exception(), FakeStatusCode.of(StatusCode.Code.INVALID_ARGUMENT), false); + mockService.addException(exception); + + try { + String projectId = "projectId-1530"; + List keys = new ArrayList<>(); + client.reserveIds(projectId, keys); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/DatastoreClientTest.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/DatastoreClientTest.java new file mode 100644 index 000000000..909330b51 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/DatastoreClientTest.java @@ -0,0 +1,528 @@ +/* + * 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.cloud.datastore.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.rpc.ApiClientHeaderProvider; +import com.google.api.gax.rpc.InvalidArgumentException; +import com.google.datastore.v1.AggregationQuery; +import com.google.datastore.v1.AggregationResultBatch; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.EntityResult; +import com.google.datastore.v1.ExplainMetrics; +import com.google.datastore.v1.ExplainOptions; +import com.google.datastore.v1.Key; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.Mutation; +import com.google.datastore.v1.MutationResult; +import com.google.datastore.v1.PartitionId; +import com.google.datastore.v1.PropertyMask; +import com.google.datastore.v1.Query; +import com.google.datastore.v1.QueryResultBatch; +import com.google.datastore.v1.ReadOptions; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import com.google.protobuf.AbstractMessage; +import com.google.protobuf.ByteString; +import com.google.protobuf.Timestamp; +import io.grpc.StatusRuntimeException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +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 DatastoreClientTest { + private static MockDatastore mockDatastore; + private static MockServiceHelper mockServiceHelper; + private LocalChannelProvider channelProvider; + private DatastoreClient client; + + @BeforeClass + public static void startStaticServer() { + mockDatastore = new MockDatastore(); + mockServiceHelper = + new MockServiceHelper( + UUID.randomUUID().toString(), Arrays.asList(mockDatastore)); + mockServiceHelper.start(); + } + + @AfterClass + public static void stopServer() { + mockServiceHelper.stop(); + } + + @Before + public void setUp() throws IOException { + mockServiceHelper.reset(); + channelProvider = mockServiceHelper.createChannelProvider(); + DatastoreSettings settings = + DatastoreSettings.newBuilder() + .setTransportChannelProvider(channelProvider) + .setCredentialsProvider(NoCredentialsProvider.create()) + .build(); + client = DatastoreClient.create(settings); + } + + @After + public void tearDown() throws Exception { + client.close(); + } + + @Test + public void lookupTest() throws Exception { + LookupResponse expectedResponse = + LookupResponse.newBuilder() + .addAllFound(new ArrayList()) + .addAllMissing(new ArrayList()) + .addAllDeferred(new ArrayList()) + .setTransaction(ByteString.EMPTY) + .setReadTime(Timestamp.newBuilder().build()) + .build(); + mockDatastore.addResponse(expectedResponse); + + String projectId = "projectId-894832108"; + ReadOptions readOptions = ReadOptions.newBuilder().build(); + List keys = new ArrayList<>(); + + LookupResponse actualResponse = client.lookup(projectId, readOptions, keys); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + LookupRequest actualRequest = ((LookupRequest) actualRequests.get(0)); + + Assert.assertEquals(projectId, actualRequest.getProjectId()); + Assert.assertEquals(readOptions, actualRequest.getReadOptions()); + Assert.assertEquals(keys, actualRequest.getKeysList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void lookupExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + String projectId = "projectId-894832108"; + ReadOptions readOptions = ReadOptions.newBuilder().build(); + List keys = new ArrayList<>(); + client.lookup(projectId, readOptions, keys); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void runQueryTest() throws Exception { + RunQueryResponse expectedResponse = + RunQueryResponse.newBuilder() + .setBatch(QueryResultBatch.newBuilder().build()) + .setQuery(Query.newBuilder().build()) + .setTransaction(ByteString.EMPTY) + .setExplainMetrics(ExplainMetrics.newBuilder().build()) + .build(); + mockDatastore.addResponse(expectedResponse); + + RunQueryRequest request = + RunQueryRequest.newBuilder() + .setProjectId("projectId-894832108") + .setDatabaseId("databaseId1688905718") + .setPartitionId(PartitionId.newBuilder().build()) + .setReadOptions(ReadOptions.newBuilder().build()) + .setPropertyMask(PropertyMask.newBuilder().build()) + .setExplainOptions(ExplainOptions.newBuilder().build()) + .build(); + + RunQueryResponse actualResponse = client.runQuery(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + RunQueryRequest actualRequest = ((RunQueryRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getProjectId(), actualRequest.getProjectId()); + Assert.assertEquals(request.getDatabaseId(), actualRequest.getDatabaseId()); + Assert.assertEquals(request.getPartitionId(), actualRequest.getPartitionId()); + Assert.assertEquals(request.getReadOptions(), actualRequest.getReadOptions()); + Assert.assertEquals(request.getQuery(), actualRequest.getQuery()); + Assert.assertEquals(request.getGqlQuery(), actualRequest.getGqlQuery()); + Assert.assertEquals(request.getPropertyMask(), actualRequest.getPropertyMask()); + Assert.assertEquals(request.getExplainOptions(), actualRequest.getExplainOptions()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void runQueryExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + RunQueryRequest request = + RunQueryRequest.newBuilder() + .setProjectId("projectId-894832108") + .setDatabaseId("databaseId1688905718") + .setPartitionId(PartitionId.newBuilder().build()) + .setReadOptions(ReadOptions.newBuilder().build()) + .setPropertyMask(PropertyMask.newBuilder().build()) + .setExplainOptions(ExplainOptions.newBuilder().build()) + .build(); + client.runQuery(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void runAggregationQueryTest() throws Exception { + RunAggregationQueryResponse expectedResponse = + RunAggregationQueryResponse.newBuilder() + .setBatch(AggregationResultBatch.newBuilder().build()) + .setQuery(AggregationQuery.newBuilder().build()) + .setTransaction(ByteString.EMPTY) + .setExplainMetrics(ExplainMetrics.newBuilder().build()) + .build(); + mockDatastore.addResponse(expectedResponse); + + RunAggregationQueryRequest request = + RunAggregationQueryRequest.newBuilder() + .setProjectId("projectId-894832108") + .setDatabaseId("databaseId1688905718") + .setPartitionId(PartitionId.newBuilder().build()) + .setReadOptions(ReadOptions.newBuilder().build()) + .setExplainOptions(ExplainOptions.newBuilder().build()) + .build(); + + RunAggregationQueryResponse actualResponse = client.runAggregationQuery(request); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + RunAggregationQueryRequest actualRequest = ((RunAggregationQueryRequest) actualRequests.get(0)); + + Assert.assertEquals(request.getProjectId(), actualRequest.getProjectId()); + Assert.assertEquals(request.getDatabaseId(), actualRequest.getDatabaseId()); + Assert.assertEquals(request.getPartitionId(), actualRequest.getPartitionId()); + Assert.assertEquals(request.getReadOptions(), actualRequest.getReadOptions()); + Assert.assertEquals(request.getAggregationQuery(), actualRequest.getAggregationQuery()); + Assert.assertEquals(request.getGqlQuery(), actualRequest.getGqlQuery()); + Assert.assertEquals(request.getExplainOptions(), actualRequest.getExplainOptions()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void runAggregationQueryExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + RunAggregationQueryRequest request = + RunAggregationQueryRequest.newBuilder() + .setProjectId("projectId-894832108") + .setDatabaseId("databaseId1688905718") + .setPartitionId(PartitionId.newBuilder().build()) + .setReadOptions(ReadOptions.newBuilder().build()) + .setExplainOptions(ExplainOptions.newBuilder().build()) + .build(); + client.runAggregationQuery(request); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void beginTransactionTest() throws Exception { + BeginTransactionResponse expectedResponse = + BeginTransactionResponse.newBuilder().setTransaction(ByteString.EMPTY).build(); + mockDatastore.addResponse(expectedResponse); + + String projectId = "projectId-894832108"; + + BeginTransactionResponse actualResponse = client.beginTransaction(projectId); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + BeginTransactionRequest actualRequest = ((BeginTransactionRequest) actualRequests.get(0)); + + Assert.assertEquals(projectId, actualRequest.getProjectId()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void beginTransactionExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + String projectId = "projectId-894832108"; + client.beginTransaction(projectId); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void commitTest() throws Exception { + CommitResponse expectedResponse = + CommitResponse.newBuilder() + .addAllMutationResults(new ArrayList()) + .setIndexUpdates(-1425228195) + .setCommitTime(Timestamp.newBuilder().build()) + .build(); + mockDatastore.addResponse(expectedResponse); + + String projectId = "projectId-894832108"; + CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0); + List mutations = new ArrayList<>(); + + CommitResponse actualResponse = client.commit(projectId, mode, mutations); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CommitRequest actualRequest = ((CommitRequest) actualRequests.get(0)); + + Assert.assertEquals(projectId, actualRequest.getProjectId()); + Assert.assertEquals(mode, actualRequest.getMode()); + Assert.assertEquals(mutations, actualRequest.getMutationsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void commitExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + String projectId = "projectId-894832108"; + CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0); + List mutations = new ArrayList<>(); + client.commit(projectId, mode, mutations); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void commitTest2() throws Exception { + CommitResponse expectedResponse = + CommitResponse.newBuilder() + .addAllMutationResults(new ArrayList()) + .setIndexUpdates(-1425228195) + .setCommitTime(Timestamp.newBuilder().build()) + .build(); + mockDatastore.addResponse(expectedResponse); + + String projectId = "projectId-894832108"; + CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0); + ByteString transaction = ByteString.EMPTY; + List mutations = new ArrayList<>(); + + CommitResponse actualResponse = client.commit(projectId, mode, transaction, mutations); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + CommitRequest actualRequest = ((CommitRequest) actualRequests.get(0)); + + Assert.assertEquals(projectId, actualRequest.getProjectId()); + Assert.assertEquals(mode, actualRequest.getMode()); + Assert.assertEquals(transaction, actualRequest.getTransaction()); + Assert.assertEquals(mutations, actualRequest.getMutationsList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void commitExceptionTest2() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + String projectId = "projectId-894832108"; + CommitRequest.Mode mode = CommitRequest.Mode.forNumber(0); + ByteString transaction = ByteString.EMPTY; + List mutations = new ArrayList<>(); + client.commit(projectId, mode, transaction, mutations); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void rollbackTest() throws Exception { + RollbackResponse expectedResponse = RollbackResponse.newBuilder().build(); + mockDatastore.addResponse(expectedResponse); + + String projectId = "projectId-894832108"; + ByteString transaction = ByteString.EMPTY; + + RollbackResponse actualResponse = client.rollback(projectId, transaction); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + RollbackRequest actualRequest = ((RollbackRequest) actualRequests.get(0)); + + Assert.assertEquals(projectId, actualRequest.getProjectId()); + Assert.assertEquals(transaction, actualRequest.getTransaction()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void rollbackExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + String projectId = "projectId-894832108"; + ByteString transaction = ByteString.EMPTY; + client.rollback(projectId, transaction); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void allocateIdsTest() throws Exception { + AllocateIdsResponse expectedResponse = + AllocateIdsResponse.newBuilder().addAllKeys(new ArrayList()).build(); + mockDatastore.addResponse(expectedResponse); + + String projectId = "projectId-894832108"; + List keys = new ArrayList<>(); + + AllocateIdsResponse actualResponse = client.allocateIds(projectId, keys); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + AllocateIdsRequest actualRequest = ((AllocateIdsRequest) actualRequests.get(0)); + + Assert.assertEquals(projectId, actualRequest.getProjectId()); + Assert.assertEquals(keys, actualRequest.getKeysList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void allocateIdsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + String projectId = "projectId-894832108"; + List keys = new ArrayList<>(); + client.allocateIds(projectId, keys); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } + + @Test + public void reserveIdsTest() throws Exception { + ReserveIdsResponse expectedResponse = ReserveIdsResponse.newBuilder().build(); + mockDatastore.addResponse(expectedResponse); + + String projectId = "projectId-894832108"; + List keys = new ArrayList<>(); + + ReserveIdsResponse actualResponse = client.reserveIds(projectId, keys); + Assert.assertEquals(expectedResponse, actualResponse); + + List actualRequests = mockDatastore.getRequests(); + Assert.assertEquals(1, actualRequests.size()); + ReserveIdsRequest actualRequest = ((ReserveIdsRequest) actualRequests.get(0)); + + Assert.assertEquals(projectId, actualRequest.getProjectId()); + Assert.assertEquals(keys, actualRequest.getKeysList()); + Assert.assertTrue( + channelProvider.isHeaderSent( + ApiClientHeaderProvider.getDefaultApiClientHeaderKey(), + GaxGrpcProperties.getDefaultApiClientHeaderPattern())); + } + + @Test + public void reserveIdsExceptionTest() throws Exception { + StatusRuntimeException exception = new StatusRuntimeException(io.grpc.Status.INVALID_ARGUMENT); + mockDatastore.addException(exception); + + try { + String projectId = "projectId-894832108"; + List keys = new ArrayList<>(); + client.reserveIds(projectId, keys); + Assert.fail("No exception raised"); + } catch (InvalidArgumentException e) { + // Expected exception. + } + } +} diff --git a/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/MockDatastore.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/MockDatastore.java new file mode 100644 index 000000000..e64c68018 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/MockDatastore.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.cloud.datastore.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 MockDatastore implements MockGrpcService { + private final MockDatastoreImpl serviceImpl; + + public MockDatastore() { + serviceImpl = new MockDatastoreImpl(); + } + + @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/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/MockDatastoreImpl.java b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/MockDatastoreImpl.java new file mode 100644 index 000000000..e37eac6c0 --- /dev/null +++ b/google-cloud-datastore/src/test/java/com/google/cloud/datastore/v1/MockDatastoreImpl.java @@ -0,0 +1,241 @@ +/* + * 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.cloud.datastore.v1; + +import com.google.api.core.BetaApi; +import com.google.datastore.v1.AllocateIdsRequest; +import com.google.datastore.v1.AllocateIdsResponse; +import com.google.datastore.v1.BeginTransactionRequest; +import com.google.datastore.v1.BeginTransactionResponse; +import com.google.datastore.v1.CommitRequest; +import com.google.datastore.v1.CommitResponse; +import com.google.datastore.v1.DatastoreGrpc.DatastoreImplBase; +import com.google.datastore.v1.LookupRequest; +import com.google.datastore.v1.LookupResponse; +import com.google.datastore.v1.ReserveIdsRequest; +import com.google.datastore.v1.ReserveIdsResponse; +import com.google.datastore.v1.RollbackRequest; +import com.google.datastore.v1.RollbackResponse; +import com.google.datastore.v1.RunAggregationQueryRequest; +import com.google.datastore.v1.RunAggregationQueryResponse; +import com.google.datastore.v1.RunQueryRequest; +import com.google.datastore.v1.RunQueryResponse; +import com.google.protobuf.AbstractMessage; +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 MockDatastoreImpl extends DatastoreImplBase { + private List requests; + private Queue responses; + + public MockDatastoreImpl() { + 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 lookup(LookupRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof LookupResponse) { + requests.add(request); + responseObserver.onNext(((LookupResponse) 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 Lookup, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + LookupResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void runQuery(RunQueryRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof RunQueryResponse) { + requests.add(request); + responseObserver.onNext(((RunQueryResponse) 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 RunQuery, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + RunQueryResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void runAggregationQuery( + RunAggregationQueryRequest request, + StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof RunAggregationQueryResponse) { + requests.add(request); + responseObserver.onNext(((RunAggregationQueryResponse) 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 RunAggregationQuery, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + RunAggregationQueryResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void beginTransaction( + BeginTransactionRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof BeginTransactionResponse) { + requests.add(request); + responseObserver.onNext(((BeginTransactionResponse) 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 BeginTransaction, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + BeginTransactionResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void commit(CommitRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof CommitResponse) { + requests.add(request); + responseObserver.onNext(((CommitResponse) 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 Commit, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + CommitResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void rollback(RollbackRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof RollbackResponse) { + requests.add(request); + responseObserver.onNext(((RollbackResponse) 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 Rollback, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + RollbackResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void allocateIds( + AllocateIdsRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof AllocateIdsResponse) { + requests.add(request); + responseObserver.onNext(((AllocateIdsResponse) 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 AllocateIds, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + AllocateIdsResponse.class.getName(), + Exception.class.getName()))); + } + } + + @Override + public void reserveIds( + ReserveIdsRequest request, StreamObserver responseObserver) { + Object response = responses.poll(); + if (response instanceof ReserveIdsResponse) { + requests.add(request); + responseObserver.onNext(((ReserveIdsResponse) 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 ReserveIds, expected %s or %s", + response == null ? "null" : response.getClass().getName(), + ReserveIdsResponse.class.getName(), + Exception.class.getName()))); + } + } +} diff --git a/grpc-google-cloud-datastore-admin-v1/pom.xml b/grpc-google-cloud-datastore-admin-v1/pom.xml index 150832cde..98b13c80d 100644 --- a/grpc-google-cloud-datastore-admin-v1/pom.xml +++ b/grpc-google-cloud-datastore-admin-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-datastore-admin-v1 - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT grpc-google-cloud-datastore-admin-v1 GRPC library for google-cloud-datastore com.google.cloud google-cloud-datastore-parent - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT diff --git a/grpc-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminGrpc.java b/grpc-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminGrpc.java index 3e36d55f5..f331aba0e 100644 --- a/grpc-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminGrpc.java +++ b/grpc-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminGrpc.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -344,6 +344,19 @@ public DatastoreAdminStub newStub( return DatastoreAdminStub.newStub(factory, channel); } + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static DatastoreAdminBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DatastoreAdminBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreAdminBlockingV2Stub(channel, callOptions); + } + }; + return DatastoreAdminBlockingV2Stub.newStub(factory, channel); + } + /** * Creates a new blocking-style stub that supports unary and streaming output calls on the service */ @@ -813,6 +826,173 @@ public void listIndexes( * service google.longrunning.Operations. * */ + public static final class DatastoreAdminBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private DatastoreAdminBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DatastoreAdminBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreAdminBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
+     * Exports a copy of all or a subset of entities from Google Cloud Datastore
+     * to another storage system, such as Google Cloud Storage. Recent updates to
+     * entities may not be reflected in the export. The export occurs in the
+     * background and its progress can be monitored and managed via the
+     * Operation resource that is created. The output of an export may only be
+     * used once the associated operation is done. If an export operation is
+     * cancelled before completion it may leave partial data behind in Google
+     * Cloud Storage.
+     * 
+ */ + public com.google.longrunning.Operation exportEntities( + com.google.datastore.admin.v1.ExportEntitiesRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getExportEntitiesMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Imports entities into Google Cloud Datastore. Existing entities with the
+     * same key are overwritten. The import occurs in the background and its
+     * progress can be monitored and managed via the Operation resource that is
+     * created. If an ImportEntities operation is cancelled, it is possible
+     * that a subset of the data has already been imported to Cloud Datastore.
+     * 
+ */ + public com.google.longrunning.Operation importEntities( + com.google.datastore.admin.v1.ImportEntitiesRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getImportEntitiesMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Creates the specified index.
+     * A newly created index's initial state is `CREATING`. On completion of the
+     * returned [google.longrunning.Operation][google.longrunning.Operation], the
+     * state will be `READY`. If the index already exists, the call will return an
+     * `ALREADY_EXISTS` status.
+     * During index creation, the process could result in an error, in which
+     * case the index will move to the `ERROR` state. The process can be recovered
+     * by fixing the data that caused the error, removing the index with
+     * [delete][google.datastore.admin.v1.DatastoreAdmin.DeleteIndex], then
+     * re-creating the index with [create]
+     * [google.datastore.admin.v1.DatastoreAdmin.CreateIndex].
+     * Indexes with a single property cannot be created.
+     * 
+ */ + public com.google.longrunning.Operation createIndex( + com.google.datastore.admin.v1.CreateIndexRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCreateIndexMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Deletes an existing index.
+     * An index can only be deleted if it is in a `READY` or `ERROR` state. On
+     * successful execution of the request, the index will be in a `DELETING`
+     * [state][google.datastore.admin.v1.Index.State]. And on completion of the
+     * returned [google.longrunning.Operation][google.longrunning.Operation], the
+     * index will be removed.
+     * During index deletion, the process could result in an error, in which
+     * case the index will move to the `ERROR` state. The process can be recovered
+     * by fixing the data that caused the error, followed by calling
+     * [delete][google.datastore.admin.v1.DatastoreAdmin.DeleteIndex] again.
+     * 
+ */ + public com.google.longrunning.Operation deleteIndex( + com.google.datastore.admin.v1.DeleteIndexRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getDeleteIndexMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Gets an index.
+     * 
+ */ + public com.google.datastore.admin.v1.Index getIndex( + com.google.datastore.admin.v1.GetIndexRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getGetIndexMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Lists the indexes that match the specified filters.  Datastore uses an
+     * eventually consistent query to fetch the list of indexes and may
+     * occasionally return stale results.
+     * 
+ */ + public com.google.datastore.admin.v1.ListIndexesResponse listIndexes( + com.google.datastore.admin.v1.ListIndexesRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getListIndexesMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service DatastoreAdmin. + * + *
+   * Google Cloud Datastore Admin API
+   * The Datastore Admin API provides several admin services for Cloud Datastore.
+   * Concepts: Project, namespace, kind, and entity as defined in the Google Cloud
+   * Datastore API.
+   * Operation: An Operation represents work being performed in the background.
+   * EntityFilter: Allows specifying a subset of entities in a project. This is
+   * specified as a combination of kinds and namespaces (either or both of which
+   * may be all).
+   * Export/Import Service:
+   * - The Export/Import service provides the ability to copy all or a subset of
+   * entities to/from Google Cloud Storage.
+   * - Exported data may be imported into Cloud Datastore for any Google Cloud
+   * Platform project. It is not restricted to the export source project. It is
+   * possible to export from one project and then import into another.
+   * - Exported data can also be loaded into Google BigQuery for analysis.
+   * - Exports and imports are performed asynchronously. An Operation resource is
+   * created for each export/import. The state (including any errors encountered)
+   * of the export/import may be queried via the Operation resource.
+   * Index Service:
+   * - The index service manages Cloud Datastore composite indexes.
+   * - Index creation and deletion are performed asynchronously.
+   * An Operation resource is created for each such asynchronous operation.
+   * The state of the operation (including any errors encountered)
+   * may be queried via the Operation resource.
+   * Operation Service:
+   * - The Operations collection provides a record of actions performed for the
+   * specified project (including any operations in progress). Operations are not
+   * created directly but through calls on other collections or resources.
+   * - An operation that is not yet done may be cancelled. The request to cancel
+   * is asynchronous and the operation may continue to run for some time after the
+   * request to cancel is made.
+   * - An operation that is done may be deleted so that it is no longer listed as
+   * part of the Operation collection.
+   * - ListOperations returns all pending operations, but not completed
+   * operations.
+   * - Operations are created by service DatastoreAdmin, but are accessed via
+   * service google.longrunning.Operations.
+   * 
+ */ public static final class DatastoreAdminBlockingStub extends io.grpc.stub.AbstractBlockingStub { private DatastoreAdminBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { diff --git a/grpc-google-cloud-datastore-v1/pom.xml b/grpc-google-cloud-datastore-v1/pom.xml new file mode 100644 index 000000000..98832894e --- /dev/null +++ b/grpc-google-cloud-datastore-v1/pom.xml @@ -0,0 +1,72 @@ + + 4.0.0 + com.google.api.grpc + grpc-google-cloud-datastore-v1 + 2.28.2-SNAPSHOT + grpc-google-cloud-datastore-v1 + GRPC library for google-cloud-datastore + + com.google.cloud + google-cloud-datastore-parent + 2.28.2-SNAPSHOT + + + + io.grpc + grpc-api + + + io.grpc + grpc-stub + + + io.grpc + grpc-protobuf + + + com.google.protobuf + protobuf-java + + + com.google.api.grpc + proto-google-cloud-datastore-v1 + + + com.google.guava + guava + + + + + + java9 + + [9,) + + + + javax.annotation + javax.annotation-api + + + + + + + + + org.codehaus.mojo + flatten-maven-plugin + + + org.codehaus.mojo + clirr-maven-plugin + + true + + + + + \ No newline at end of file diff --git a/grpc-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreGrpc.java b/grpc-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreGrpc.java new file mode 100644 index 000000000..8feee8ad9 --- /dev/null +++ b/grpc-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreGrpc.java @@ -0,0 +1,1339 @@ +/* + * 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.datastore.v1; + +import static io.grpc.MethodDescriptor.generateFullMethodName; + +/** + * + * + *
+ * Each RPC normalizes the partition IDs of the keys in its input entities,
+ * and always returns entities with keys with normalized partition IDs.
+ * This applies to all keys and entities, including those in values, except keys
+ * with both an empty path and an empty or unset partition ID. Normalization of
+ * input keys sets the project ID (if not already set) to the project ID from
+ * the request.
+ * 
+ */ +@javax.annotation.Generated( + value = "by gRPC proto compiler", + comments = "Source: google/datastore/v1/datastore.proto") +@io.grpc.stub.annotations.GrpcGenerated +public final class DatastoreGrpc { + + private DatastoreGrpc() {} + + public static final java.lang.String SERVICE_NAME = "google.datastore.v1.Datastore"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor< + com.google.datastore.v1.LookupRequest, com.google.datastore.v1.LookupResponse> + getLookupMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Lookup", + requestType = com.google.datastore.v1.LookupRequest.class, + responseType = com.google.datastore.v1.LookupResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.datastore.v1.LookupRequest, com.google.datastore.v1.LookupResponse> + getLookupMethod() { + io.grpc.MethodDescriptor< + com.google.datastore.v1.LookupRequest, com.google.datastore.v1.LookupResponse> + getLookupMethod; + if ((getLookupMethod = DatastoreGrpc.getLookupMethod) == null) { + synchronized (DatastoreGrpc.class) { + if ((getLookupMethod = DatastoreGrpc.getLookupMethod) == null) { + DatastoreGrpc.getLookupMethod = + getLookupMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Lookup")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.LookupRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.LookupResponse.getDefaultInstance())) + .setSchemaDescriptor(new DatastoreMethodDescriptorSupplier("Lookup")) + .build(); + } + } + } + return getLookupMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.datastore.v1.RunQueryRequest, com.google.datastore.v1.RunQueryResponse> + getRunQueryMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "RunQuery", + requestType = com.google.datastore.v1.RunQueryRequest.class, + responseType = com.google.datastore.v1.RunQueryResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.datastore.v1.RunQueryRequest, com.google.datastore.v1.RunQueryResponse> + getRunQueryMethod() { + io.grpc.MethodDescriptor< + com.google.datastore.v1.RunQueryRequest, com.google.datastore.v1.RunQueryResponse> + getRunQueryMethod; + if ((getRunQueryMethod = DatastoreGrpc.getRunQueryMethod) == null) { + synchronized (DatastoreGrpc.class) { + if ((getRunQueryMethod = DatastoreGrpc.getRunQueryMethod) == null) { + DatastoreGrpc.getRunQueryMethod = + getRunQueryMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RunQuery")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.RunQueryRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.RunQueryResponse.getDefaultInstance())) + .setSchemaDescriptor(new DatastoreMethodDescriptorSupplier("RunQuery")) + .build(); + } + } + } + return getRunQueryMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.datastore.v1.RunAggregationQueryRequest, + com.google.datastore.v1.RunAggregationQueryResponse> + getRunAggregationQueryMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "RunAggregationQuery", + requestType = com.google.datastore.v1.RunAggregationQueryRequest.class, + responseType = com.google.datastore.v1.RunAggregationQueryResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.datastore.v1.RunAggregationQueryRequest, + com.google.datastore.v1.RunAggregationQueryResponse> + getRunAggregationQueryMethod() { + io.grpc.MethodDescriptor< + com.google.datastore.v1.RunAggregationQueryRequest, + com.google.datastore.v1.RunAggregationQueryResponse> + getRunAggregationQueryMethod; + if ((getRunAggregationQueryMethod = DatastoreGrpc.getRunAggregationQueryMethod) == null) { + synchronized (DatastoreGrpc.class) { + if ((getRunAggregationQueryMethod = DatastoreGrpc.getRunAggregationQueryMethod) == null) { + DatastoreGrpc.getRunAggregationQueryMethod = + getRunAggregationQueryMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName( + generateFullMethodName(SERVICE_NAME, "RunAggregationQuery")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.RunAggregationQueryRequest + .getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.RunAggregationQueryResponse + .getDefaultInstance())) + .setSchemaDescriptor( + new DatastoreMethodDescriptorSupplier("RunAggregationQuery")) + .build(); + } + } + } + return getRunAggregationQueryMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.datastore.v1.BeginTransactionRequest, + com.google.datastore.v1.BeginTransactionResponse> + getBeginTransactionMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "BeginTransaction", + requestType = com.google.datastore.v1.BeginTransactionRequest.class, + responseType = com.google.datastore.v1.BeginTransactionResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.datastore.v1.BeginTransactionRequest, + com.google.datastore.v1.BeginTransactionResponse> + getBeginTransactionMethod() { + io.grpc.MethodDescriptor< + com.google.datastore.v1.BeginTransactionRequest, + com.google.datastore.v1.BeginTransactionResponse> + getBeginTransactionMethod; + if ((getBeginTransactionMethod = DatastoreGrpc.getBeginTransactionMethod) == null) { + synchronized (DatastoreGrpc.class) { + if ((getBeginTransactionMethod = DatastoreGrpc.getBeginTransactionMethod) == null) { + DatastoreGrpc.getBeginTransactionMethod = + getBeginTransactionMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "BeginTransaction")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.BeginTransactionRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.BeginTransactionResponse + .getDefaultInstance())) + .setSchemaDescriptor( + new DatastoreMethodDescriptorSupplier("BeginTransaction")) + .build(); + } + } + } + return getBeginTransactionMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.datastore.v1.CommitRequest, com.google.datastore.v1.CommitResponse> + getCommitMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Commit", + requestType = com.google.datastore.v1.CommitRequest.class, + responseType = com.google.datastore.v1.CommitResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.datastore.v1.CommitRequest, com.google.datastore.v1.CommitResponse> + getCommitMethod() { + io.grpc.MethodDescriptor< + com.google.datastore.v1.CommitRequest, com.google.datastore.v1.CommitResponse> + getCommitMethod; + if ((getCommitMethod = DatastoreGrpc.getCommitMethod) == null) { + synchronized (DatastoreGrpc.class) { + if ((getCommitMethod = DatastoreGrpc.getCommitMethod) == null) { + DatastoreGrpc.getCommitMethod = + getCommitMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Commit")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.CommitRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.CommitResponse.getDefaultInstance())) + .setSchemaDescriptor(new DatastoreMethodDescriptorSupplier("Commit")) + .build(); + } + } + } + return getCommitMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.datastore.v1.RollbackRequest, com.google.datastore.v1.RollbackResponse> + getRollbackMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "Rollback", + requestType = com.google.datastore.v1.RollbackRequest.class, + responseType = com.google.datastore.v1.RollbackResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.datastore.v1.RollbackRequest, com.google.datastore.v1.RollbackResponse> + getRollbackMethod() { + io.grpc.MethodDescriptor< + com.google.datastore.v1.RollbackRequest, com.google.datastore.v1.RollbackResponse> + getRollbackMethod; + if ((getRollbackMethod = DatastoreGrpc.getRollbackMethod) == null) { + synchronized (DatastoreGrpc.class) { + if ((getRollbackMethod = DatastoreGrpc.getRollbackMethod) == null) { + DatastoreGrpc.getRollbackMethod = + getRollbackMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "Rollback")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.RollbackRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.RollbackResponse.getDefaultInstance())) + .setSchemaDescriptor(new DatastoreMethodDescriptorSupplier("Rollback")) + .build(); + } + } + } + return getRollbackMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.datastore.v1.AllocateIdsRequest, com.google.datastore.v1.AllocateIdsResponse> + getAllocateIdsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "AllocateIds", + requestType = com.google.datastore.v1.AllocateIdsRequest.class, + responseType = com.google.datastore.v1.AllocateIdsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.datastore.v1.AllocateIdsRequest, com.google.datastore.v1.AllocateIdsResponse> + getAllocateIdsMethod() { + io.grpc.MethodDescriptor< + com.google.datastore.v1.AllocateIdsRequest, com.google.datastore.v1.AllocateIdsResponse> + getAllocateIdsMethod; + if ((getAllocateIdsMethod = DatastoreGrpc.getAllocateIdsMethod) == null) { + synchronized (DatastoreGrpc.class) { + if ((getAllocateIdsMethod = DatastoreGrpc.getAllocateIdsMethod) == null) { + DatastoreGrpc.getAllocateIdsMethod = + getAllocateIdsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "AllocateIds")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.AllocateIdsRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.AllocateIdsResponse.getDefaultInstance())) + .setSchemaDescriptor(new DatastoreMethodDescriptorSupplier("AllocateIds")) + .build(); + } + } + } + return getAllocateIdsMethod; + } + + private static volatile io.grpc.MethodDescriptor< + com.google.datastore.v1.ReserveIdsRequest, com.google.datastore.v1.ReserveIdsResponse> + getReserveIdsMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ReserveIds", + requestType = com.google.datastore.v1.ReserveIdsRequest.class, + responseType = com.google.datastore.v1.ReserveIdsResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor< + com.google.datastore.v1.ReserveIdsRequest, com.google.datastore.v1.ReserveIdsResponse> + getReserveIdsMethod() { + io.grpc.MethodDescriptor< + com.google.datastore.v1.ReserveIdsRequest, com.google.datastore.v1.ReserveIdsResponse> + getReserveIdsMethod; + if ((getReserveIdsMethod = DatastoreGrpc.getReserveIdsMethod) == null) { + synchronized (DatastoreGrpc.class) { + if ((getReserveIdsMethod = DatastoreGrpc.getReserveIdsMethod) == null) { + DatastoreGrpc.getReserveIdsMethod = + getReserveIdsMethod = + io.grpc.MethodDescriptor + . + newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ReserveIds")) + .setSampledToLocalTracing(true) + .setRequestMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.ReserveIdsRequest.getDefaultInstance())) + .setResponseMarshaller( + io.grpc.protobuf.ProtoUtils.marshaller( + com.google.datastore.v1.ReserveIdsResponse.getDefaultInstance())) + .setSchemaDescriptor(new DatastoreMethodDescriptorSupplier("ReserveIds")) + .build(); + } + } + } + return getReserveIdsMethod; + } + + /** Creates a new async stub that supports all call types for the service */ + public static DatastoreStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DatastoreStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreStub(channel, callOptions); + } + }; + return DatastoreStub.newStub(factory, channel); + } + + /** Creates a new blocking-style stub that supports all types of calls on the service */ + public static DatastoreBlockingV2Stub newBlockingV2Stub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DatastoreBlockingV2Stub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreBlockingV2Stub(channel, callOptions); + } + }; + return DatastoreBlockingV2Stub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static DatastoreBlockingStub newBlockingStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DatastoreBlockingStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreBlockingStub(channel, callOptions); + } + }; + return DatastoreBlockingStub.newStub(factory, channel); + } + + /** Creates a new ListenableFuture-style stub that supports unary calls on the service */ + public static DatastoreFutureStub newFutureStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public DatastoreFutureStub newStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreFutureStub(channel, callOptions); + } + }; + return DatastoreFutureStub.newStub(factory, channel); + } + + /** + * + * + *
+   * Each RPC normalizes the partition IDs of the keys in its input entities,
+   * and always returns entities with keys with normalized partition IDs.
+   * This applies to all keys and entities, including those in values, except keys
+   * with both an empty path and an empty or unset partition ID. Normalization of
+   * input keys sets the project ID (if not already set) to the project ID from
+   * the request.
+   * 
+ */ + public interface AsyncService { + + /** + * + * + *
+     * Looks up entities by key.
+     * 
+ */ + default void lookup( + com.google.datastore.v1.LookupRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getLookupMethod(), responseObserver); + } + + /** + * + * + *
+     * Queries for entities.
+     * 
+ */ + default void runQuery( + com.google.datastore.v1.RunQueryRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRunQueryMethod(), responseObserver); + } + + /** + * + * + *
+     * Runs an aggregation query.
+     * 
+ */ + default void runAggregationQuery( + com.google.datastore.v1.RunAggregationQueryRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getRunAggregationQueryMethod(), responseObserver); + } + + /** + * + * + *
+     * Begins a new transaction.
+     * 
+ */ + default void beginTransaction( + com.google.datastore.v1.BeginTransactionRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getBeginTransactionMethod(), responseObserver); + } + + /** + * + * + *
+     * Commits a transaction, optionally creating, deleting or modifying some
+     * entities.
+     * 
+ */ + default void commit( + com.google.datastore.v1.CommitRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCommitMethod(), responseObserver); + } + + /** + * + * + *
+     * Rolls back a transaction.
+     * 
+ */ + default void rollback( + com.google.datastore.v1.RollbackRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRollbackMethod(), responseObserver); + } + + /** + * + * + *
+     * Allocates IDs for the given keys, which is useful for referencing an entity
+     * before it is inserted.
+     * 
+ */ + default void allocateIds( + com.google.datastore.v1.AllocateIdsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall( + getAllocateIdsMethod(), responseObserver); + } + + /** + * + * + *
+     * Prevents the supplied keys' IDs from being auto-allocated by Cloud
+     * Datastore.
+     * 
+ */ + default void reserveIds( + com.google.datastore.v1.ReserveIdsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getReserveIdsMethod(), responseObserver); + } + } + + /** + * Base class for the server implementation of the service Datastore. + * + *
+   * Each RPC normalizes the partition IDs of the keys in its input entities,
+   * and always returns entities with keys with normalized partition IDs.
+   * This applies to all keys and entities, including those in values, except keys
+   * with both an empty path and an empty or unset partition ID. Normalization of
+   * input keys sets the project ID (if not already set) to the project ID from
+   * the request.
+   * 
+ */ + public abstract static class DatastoreImplBase implements io.grpc.BindableService, AsyncService { + + @java.lang.Override + public final io.grpc.ServerServiceDefinition bindService() { + return DatastoreGrpc.bindService(this); + } + } + + /** + * A stub to allow clients to do asynchronous rpc calls to service Datastore. + * + *
+   * Each RPC normalizes the partition IDs of the keys in its input entities,
+   * and always returns entities with keys with normalized partition IDs.
+   * This applies to all keys and entities, including those in values, except keys
+   * with both an empty path and an empty or unset partition ID. Normalization of
+   * input keys sets the project ID (if not already set) to the project ID from
+   * the request.
+   * 
+ */ + public static final class DatastoreStub extends io.grpc.stub.AbstractAsyncStub { + private DatastoreStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DatastoreStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreStub(channel, callOptions); + } + + /** + * + * + *
+     * Looks up entities by key.
+     * 
+ */ + public void lookup( + com.google.datastore.v1.LookupRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getLookupMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Queries for entities.
+     * 
+ */ + public void runQuery( + com.google.datastore.v1.RunQueryRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getRunQueryMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Runs an aggregation query.
+     * 
+ */ + public void runAggregationQuery( + com.google.datastore.v1.RunAggregationQueryRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getRunAggregationQueryMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Begins a new transaction.
+     * 
+ */ + public void beginTransaction( + com.google.datastore.v1.BeginTransactionRequest request, + io.grpc.stub.StreamObserver + responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getBeginTransactionMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Commits a transaction, optionally creating, deleting or modifying some
+     * entities.
+     * 
+ */ + public void commit( + com.google.datastore.v1.CommitRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getCommitMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Rolls back a transaction.
+     * 
+ */ + public void rollback( + com.google.datastore.v1.RollbackRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getRollbackMethod(), getCallOptions()), request, responseObserver); + } + + /** + * + * + *
+     * Allocates IDs for the given keys, which is useful for referencing an entity
+     * before it is inserted.
+     * 
+ */ + public void allocateIds( + com.google.datastore.v1.AllocateIdsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getAllocateIdsMethod(), getCallOptions()), + request, + responseObserver); + } + + /** + * + * + *
+     * Prevents the supplied keys' IDs from being auto-allocated by Cloud
+     * Datastore.
+     * 
+ */ + public void reserveIds( + com.google.datastore.v1.ReserveIdsRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getReserveIdsMethod(), getCallOptions()), request, responseObserver); + } + } + + /** + * A stub to allow clients to do synchronous rpc calls to service Datastore. + * + *
+   * Each RPC normalizes the partition IDs of the keys in its input entities,
+   * and always returns entities with keys with normalized partition IDs.
+   * This applies to all keys and entities, including those in values, except keys
+   * with both an empty path and an empty or unset partition ID. Normalization of
+   * input keys sets the project ID (if not already set) to the project ID from
+   * the request.
+   * 
+ */ + public static final class DatastoreBlockingV2Stub + extends io.grpc.stub.AbstractBlockingStub { + private DatastoreBlockingV2Stub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DatastoreBlockingV2Stub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreBlockingV2Stub(channel, callOptions); + } + + /** + * + * + *
+     * Looks up entities by key.
+     * 
+ */ + public com.google.datastore.v1.LookupResponse lookup( + com.google.datastore.v1.LookupRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getLookupMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Queries for entities.
+     * 
+ */ + public com.google.datastore.v1.RunQueryResponse runQuery( + com.google.datastore.v1.RunQueryRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRunQueryMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Runs an aggregation query.
+     * 
+ */ + public com.google.datastore.v1.RunAggregationQueryResponse runAggregationQuery( + com.google.datastore.v1.RunAggregationQueryRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRunAggregationQueryMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Begins a new transaction.
+     * 
+ */ + public com.google.datastore.v1.BeginTransactionResponse beginTransaction( + com.google.datastore.v1.BeginTransactionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getBeginTransactionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Commits a transaction, optionally creating, deleting or modifying some
+     * entities.
+     * 
+ */ + public com.google.datastore.v1.CommitResponse commit( + com.google.datastore.v1.CommitRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCommitMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Rolls back a transaction.
+     * 
+ */ + public com.google.datastore.v1.RollbackResponse rollback( + com.google.datastore.v1.RollbackRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRollbackMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Allocates IDs for the given keys, which is useful for referencing an entity
+     * before it is inserted.
+     * 
+ */ + public com.google.datastore.v1.AllocateIdsResponse allocateIds( + com.google.datastore.v1.AllocateIdsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getAllocateIdsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Prevents the supplied keys' IDs from being auto-allocated by Cloud
+     * Datastore.
+     * 
+ */ + public com.google.datastore.v1.ReserveIdsResponse reserveIds( + com.google.datastore.v1.ReserveIdsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getReserveIdsMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do limited synchronous rpc calls to service Datastore. + * + *
+   * Each RPC normalizes the partition IDs of the keys in its input entities,
+   * and always returns entities with keys with normalized partition IDs.
+   * This applies to all keys and entities, including those in values, except keys
+   * with both an empty path and an empty or unset partition ID. Normalization of
+   * input keys sets the project ID (if not already set) to the project ID from
+   * the request.
+   * 
+ */ + public static final class DatastoreBlockingStub + extends io.grpc.stub.AbstractBlockingStub { + private DatastoreBlockingStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DatastoreBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreBlockingStub(channel, callOptions); + } + + /** + * + * + *
+     * Looks up entities by key.
+     * 
+ */ + public com.google.datastore.v1.LookupResponse lookup( + com.google.datastore.v1.LookupRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getLookupMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Queries for entities.
+     * 
+ */ + public com.google.datastore.v1.RunQueryResponse runQuery( + com.google.datastore.v1.RunQueryRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRunQueryMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Runs an aggregation query.
+     * 
+ */ + public com.google.datastore.v1.RunAggregationQueryResponse runAggregationQuery( + com.google.datastore.v1.RunAggregationQueryRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRunAggregationQueryMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Begins a new transaction.
+     * 
+ */ + public com.google.datastore.v1.BeginTransactionResponse beginTransaction( + com.google.datastore.v1.BeginTransactionRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getBeginTransactionMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Commits a transaction, optionally creating, deleting or modifying some
+     * entities.
+     * 
+ */ + public com.google.datastore.v1.CommitResponse commit( + com.google.datastore.v1.CommitRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getCommitMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Rolls back a transaction.
+     * 
+ */ + public com.google.datastore.v1.RollbackResponse rollback( + com.google.datastore.v1.RollbackRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getRollbackMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Allocates IDs for the given keys, which is useful for referencing an entity
+     * before it is inserted.
+     * 
+ */ + public com.google.datastore.v1.AllocateIdsResponse allocateIds( + com.google.datastore.v1.AllocateIdsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getAllocateIdsMethod(), getCallOptions(), request); + } + + /** + * + * + *
+     * Prevents the supplied keys' IDs from being auto-allocated by Cloud
+     * Datastore.
+     * 
+ */ + public com.google.datastore.v1.ReserveIdsResponse reserveIds( + com.google.datastore.v1.ReserveIdsRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getReserveIdsMethod(), getCallOptions(), request); + } + } + + /** + * A stub to allow clients to do ListenableFuture-style rpc calls to service Datastore. + * + *
+   * Each RPC normalizes the partition IDs of the keys in its input entities,
+   * and always returns entities with keys with normalized partition IDs.
+   * This applies to all keys and entities, including those in values, except keys
+   * with both an empty path and an empty or unset partition ID. Normalization of
+   * input keys sets the project ID (if not already set) to the project ID from
+   * the request.
+   * 
+ */ + public static final class DatastoreFutureStub + extends io.grpc.stub.AbstractFutureStub { + private DatastoreFutureStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected DatastoreFutureStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new DatastoreFutureStub(channel, callOptions); + } + + /** + * + * + *
+     * Looks up entities by key.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.datastore.v1.LookupResponse> + lookup(com.google.datastore.v1.LookupRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getLookupMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Queries for entities.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.datastore.v1.RunQueryResponse> + runQuery(com.google.datastore.v1.RunQueryRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getRunQueryMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Runs an aggregation query.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.datastore.v1.RunAggregationQueryResponse> + runAggregationQuery(com.google.datastore.v1.RunAggregationQueryRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getRunAggregationQueryMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Begins a new transaction.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.datastore.v1.BeginTransactionResponse> + beginTransaction(com.google.datastore.v1.BeginTransactionRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getBeginTransactionMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Commits a transaction, optionally creating, deleting or modifying some
+     * entities.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.datastore.v1.CommitResponse> + commit(com.google.datastore.v1.CommitRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getCommitMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Rolls back a transaction.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.datastore.v1.RollbackResponse> + rollback(com.google.datastore.v1.RollbackRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getRollbackMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Allocates IDs for the given keys, which is useful for referencing an entity
+     * before it is inserted.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.datastore.v1.AllocateIdsResponse> + allocateIds(com.google.datastore.v1.AllocateIdsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getAllocateIdsMethod(), getCallOptions()), request); + } + + /** + * + * + *
+     * Prevents the supplied keys' IDs from being auto-allocated by Cloud
+     * Datastore.
+     * 
+ */ + public com.google.common.util.concurrent.ListenableFuture< + com.google.datastore.v1.ReserveIdsResponse> + reserveIds(com.google.datastore.v1.ReserveIdsRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getReserveIdsMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_LOOKUP = 0; + private static final int METHODID_RUN_QUERY = 1; + private static final int METHODID_RUN_AGGREGATION_QUERY = 2; + private static final int METHODID_BEGIN_TRANSACTION = 3; + private static final int METHODID_COMMIT = 4; + private static final int METHODID_ROLLBACK = 5; + private static final int METHODID_ALLOCATE_IDS = 6; + private static final int METHODID_RESERVE_IDS = 7; + + 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_LOOKUP: + serviceImpl.lookup( + (com.google.datastore.v1.LookupRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_RUN_QUERY: + serviceImpl.runQuery( + (com.google.datastore.v1.RunQueryRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_RUN_AGGREGATION_QUERY: + serviceImpl.runAggregationQuery( + (com.google.datastore.v1.RunAggregationQueryRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_BEGIN_TRANSACTION: + serviceImpl.beginTransaction( + (com.google.datastore.v1.BeginTransactionRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_COMMIT: + serviceImpl.commit( + (com.google.datastore.v1.CommitRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_ROLLBACK: + serviceImpl.rollback( + (com.google.datastore.v1.RollbackRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_ALLOCATE_IDS: + serviceImpl.allocateIds( + (com.google.datastore.v1.AllocateIdsRequest) request, + (io.grpc.stub.StreamObserver) + responseObserver); + break; + case METHODID_RESERVE_IDS: + serviceImpl.reserveIds( + (com.google.datastore.v1.ReserveIdsRequest) 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( + getLookupMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.datastore.v1.LookupRequest, com.google.datastore.v1.LookupResponse>( + service, METHODID_LOOKUP))) + .addMethod( + getRunQueryMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.datastore.v1.RunQueryRequest, + com.google.datastore.v1.RunQueryResponse>(service, METHODID_RUN_QUERY))) + .addMethod( + getRunAggregationQueryMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.datastore.v1.RunAggregationQueryRequest, + com.google.datastore.v1.RunAggregationQueryResponse>( + service, METHODID_RUN_AGGREGATION_QUERY))) + .addMethod( + getBeginTransactionMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.datastore.v1.BeginTransactionRequest, + com.google.datastore.v1.BeginTransactionResponse>( + service, METHODID_BEGIN_TRANSACTION))) + .addMethod( + getCommitMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.datastore.v1.CommitRequest, com.google.datastore.v1.CommitResponse>( + service, METHODID_COMMIT))) + .addMethod( + getRollbackMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.datastore.v1.RollbackRequest, + com.google.datastore.v1.RollbackResponse>(service, METHODID_ROLLBACK))) + .addMethod( + getAllocateIdsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.datastore.v1.AllocateIdsRequest, + com.google.datastore.v1.AllocateIdsResponse>(service, METHODID_ALLOCATE_IDS))) + .addMethod( + getReserveIdsMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + com.google.datastore.v1.ReserveIdsRequest, + com.google.datastore.v1.ReserveIdsResponse>(service, METHODID_RESERVE_IDS))) + .build(); + } + + private abstract static class DatastoreBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, + io.grpc.protobuf.ProtoServiceDescriptorSupplier { + DatastoreBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return com.google.datastore.v1.DatastoreProto.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("Datastore"); + } + } + + private static final class DatastoreFileDescriptorSupplier + extends DatastoreBaseDescriptorSupplier { + DatastoreFileDescriptorSupplier() {} + } + + private static final class DatastoreMethodDescriptorSupplier + extends DatastoreBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final java.lang.String methodName; + + DatastoreMethodDescriptorSupplier(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 (DatastoreGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = + result = + io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new DatastoreFileDescriptorSupplier()) + .addMethod(getLookupMethod()) + .addMethod(getRunQueryMethod()) + .addMethod(getRunAggregationQueryMethod()) + .addMethod(getBeginTransactionMethod()) + .addMethod(getCommitMethod()) + .addMethod(getRollbackMethod()) + .addMethod(getAllocateIdsMethod()) + .addMethod(getReserveIdsMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/owlbot.py b/owlbot.py index aa74153f9..a858b7366 100644 --- a/owlbot.py +++ b/owlbot.py @@ -46,6 +46,7 @@ s.remove_staging_dirs() java.common_templates(excludes=[ + '.kokoro/build.sh', '.kokoro/presubmit/integration.cfg', '.kokoro/presubmit/graalvm-native.cfg', '.kokoro/presubmit/graalvm-native-17.cfg', @@ -53,5 +54,6 @@ '.kokoro/nightly/java11-integration.cfg', '.kokoro/requirements.in', '.kokoro/requirements.txt', - '.github/dependabot.yml' + '.github/dependabot.yml', + '.github/workflows/ci.yaml' ]) diff --git a/pom.xml b/pom.xml index eeb20ad87..0d80b0fe4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-datastore-parent pom - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT Google Cloud Datastore Parent https://github.com/googleapis/java-datastore @@ -14,7 +14,7 @@ com.google.cloud sdk-platform-java-config - 3.29.0 + 3.47.0 @@ -143,7 +143,7 @@ github google-cloud-datastore-parent https://googleapis.dev/java/google-api-grpc/latest - 2.27.0 + 2.31.0 @@ -159,27 +159,37 @@ com.google.api.grpc proto-google-cloud-datastore-admin-v1 - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-datastore-admin-v1 - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT com.google.cloud google-cloud-datastore - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT com.google.api.grpc proto-google-cloud-datastore-v1 - 0.110.2-SNAPSHOT + 0.119.2-SNAPSHOT + + + com.google.api.grpc + grpc-google-cloud-datastore-v1 + 2.28.2-SNAPSHOT + + + com.google.cloud + google-cloud-datastore-utils + 2.28.1 com.google.cloud.datastore datastore-v1-proto-client - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT com.google.api.grpc @@ -197,7 +207,7 @@ org.easymock easymock - 5.2.0 + 5.5.0 test
@@ -232,7 +242,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 UTF-8 true @@ -269,8 +279,10 @@ grpc-google-cloud-datastore-admin-v1 proto-google-cloud-datastore-v1 proto-google-cloud-datastore-admin-v1 + grpc-google-cloud-datastore-v1 datastore-v1-proto-client google-cloud-datastore-bom + google-cloud-datastore-utils diff --git a/proto-google-cloud-datastore-admin-v1/clirr-ignored-differences.xml b/proto-google-cloud-datastore-admin-v1/clirr-ignored-differences.xml index c384c422e..7cf3ac808 100644 --- a/proto-google-cloud-datastore-admin-v1/clirr-ignored-differences.xml +++ b/proto-google-cloud-datastore-admin-v1/clirr-ignored-differences.xml @@ -16,4 +16,66 @@ com/google/datastore/admin/v1/*OrBuilder boolean has*(*) + + + + 7006 + com/google/datastore/admin/v1/** + * getDefaultInstanceForType() + ** + + + 7006 + com/google/datastore/admin/v1/** + * addRepeatedField(*) + ** + + + 7006 + com/google/datastore/admin/v1/** + * clear() + ** + + + 7006 + com/google/datastore/admin/v1/** + * clearField(*) + ** + + + 7006 + com/google/datastore/admin/v1/** + * clearOneof(*) + ** + + + 7006 + com/google/datastore/admin/v1/** + * clone() + ** + + + 7006 + com/google/datastore/admin/v1/** + * mergeUnknownFields(*) + ** + + + 7006 + com/google/datastore/admin/v1/** + * setField(*) + ** + + + 7006 + com/google/datastore/admin/v1/** + * setRepeatedField(*) + ** + + + 7006 + com/google/datastore/admin/v1/** + * setUnknownFields(*) + ** + diff --git a/proto-google-cloud-datastore-admin-v1/pom.xml b/proto-google-cloud-datastore-admin-v1/pom.xml index 58e80a474..eeee39bc6 100644 --- a/proto-google-cloud-datastore-admin-v1/pom.xml +++ b/proto-google-cloud-datastore-admin-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-datastore-admin-v1 - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT proto-google-cloud-datastore-admin-v1 Proto library for google-cloud-datastore com.google.cloud google-cloud-datastore-parent - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadata.java index 2c078756d..d7c5167a1 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadata.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -33,6 +33,7 @@ public final class CommonMetadata extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.CommonMetadata) CommonMetadataOrBuilder { private static final long serialVersionUID = 0L; + // Use CommonMetadata.newBuilder() to construct. private CommonMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -181,6 +182,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * STATE_UNSPECIFIED = 0; */ public static final int STATE_UNSPECIFIED_VALUE = 0; + /** * * @@ -191,6 +193,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * INITIALIZING = 1; */ public static final int INITIALIZING_VALUE = 1; + /** * * @@ -201,6 +204,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * PROCESSING = 2; */ public static final int PROCESSING_VALUE = 2; + /** * * @@ -212,6 +216,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * CANCELLING = 3; */ public static final int CANCELLING_VALUE = 3; + /** * * @@ -222,6 +227,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * FINALIZING = 4; */ public static final int FINALIZING_VALUE = 4; + /** * * @@ -232,6 +238,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * SUCCESSFUL = 5; */ public static final int SUCCESSFUL_VALUE = 5; + /** * * @@ -242,6 +249,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * FAILED = 6; */ public static final int FAILED_VALUE = 6; + /** * * @@ -350,6 +358,7 @@ private State(int value) { private int bitField0_; public static final int START_TIME_FIELD_NUMBER = 1; private com.google.protobuf.Timestamp startTime_; + /** * * @@ -365,6 +374,7 @@ private State(int value) { public boolean hasStartTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -380,6 +390,7 @@ public boolean hasStartTime() { public com.google.protobuf.Timestamp getStartTime() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } + /** * * @@ -396,6 +407,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public static final int END_TIME_FIELD_NUMBER = 2; private com.google.protobuf.Timestamp endTime_; + /** * * @@ -411,6 +423,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -426,6 +439,7 @@ public boolean hasEndTime() { public com.google.protobuf.Timestamp getEndTime() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } + /** * * @@ -442,6 +456,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public static final int OPERATION_TYPE_FIELD_NUMBER = 3; private int operationType_ = 0; + /** * * @@ -458,6 +473,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public int getOperationTypeValue() { return operationType_; } + /** * * @@ -503,6 +519,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -520,12 +537,14 @@ public boolean containsLabels(java.lang.String key) { } return internalGetLabels().getMap().containsKey(key); } + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getLabels() { return getLabelsMap(); } + /** * * @@ -540,6 +559,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -561,6 +581,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -585,6 +606,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public static final int STATE_FIELD_NUMBER = 5; private int state_ = 0; + /** * * @@ -600,6 +622,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public int getStateValue() { return state_; } + /** * * @@ -837,6 +860,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -1125,6 +1149,7 @@ public Builder mergeFrom( com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> startTimeBuilder_; + /** * * @@ -1139,6 +1164,7 @@ public Builder mergeFrom( public boolean hasStartTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1157,6 +1183,7 @@ public com.google.protobuf.Timestamp getStartTime() { return startTimeBuilder_.getMessage(); } } + /** * * @@ -1179,6 +1206,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1198,6 +1226,7 @@ public Builder setStartTime(com.google.protobuf.Timestamp.Builder builderForValu onChanged(); return this; } + /** * * @@ -1225,6 +1254,7 @@ public Builder mergeStartTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1244,6 +1274,7 @@ public Builder clearStartTime() { onChanged(); return this; } + /** * * @@ -1258,6 +1289,7 @@ public com.google.protobuf.Timestamp.Builder getStartTimeBuilder() { onChanged(); return getStartTimeFieldBuilder().getBuilder(); } + /** * * @@ -1274,6 +1306,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { return startTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : startTime_; } } + /** * * @@ -1306,6 +1339,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> endTimeBuilder_; + /** * * @@ -1320,6 +1354,7 @@ public com.google.protobuf.TimestampOrBuilder getStartTimeOrBuilder() { public boolean hasEndTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1338,6 +1373,7 @@ public com.google.protobuf.Timestamp getEndTime() { return endTimeBuilder_.getMessage(); } } + /** * * @@ -1360,6 +1396,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1379,6 +1416,7 @@ public Builder setEndTime(com.google.protobuf.Timestamp.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1406,6 +1444,7 @@ public Builder mergeEndTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1425,6 +1464,7 @@ public Builder clearEndTime() { onChanged(); return this; } + /** * * @@ -1439,6 +1479,7 @@ public com.google.protobuf.Timestamp.Builder getEndTimeBuilder() { onChanged(); return getEndTimeFieldBuilder().getBuilder(); } + /** * * @@ -1455,6 +1496,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { return endTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : endTime_; } } + /** * * @@ -1482,6 +1524,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { } private int operationType_ = 0; + /** * * @@ -1498,6 +1541,7 @@ public com.google.protobuf.TimestampOrBuilder getEndTimeOrBuilder() { public int getOperationTypeValue() { return operationType_; } + /** * * @@ -1517,6 +1561,7 @@ public Builder setOperationTypeValue(int value) { onChanged(); return this; } + /** * * @@ -1535,6 +1580,7 @@ public com.google.datastore.admin.v1.OperationType getOperationType() { com.google.datastore.admin.v1.OperationType.forNumber(operationType_); return result == null ? com.google.datastore.admin.v1.OperationType.UNRECOGNIZED : result; } + /** * * @@ -1557,6 +1603,7 @@ public Builder setOperationType(com.google.datastore.admin.v1.OperationType valu onChanged(); return this; } + /** * * @@ -1601,6 +1648,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -1618,12 +1666,14 @@ public boolean containsLabels(java.lang.String key) { } return internalGetLabels().getMap().containsKey(key); } + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getLabels() { return getLabelsMap(); } + /** * * @@ -1638,6 +1688,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -1659,6 +1710,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -1686,6 +1738,7 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * @@ -1703,12 +1756,14 @@ public Builder removeLabels(java.lang.String key) { internalGetMutableLabels().getMutableMap().remove(key); return this; } + /** Use alternate mutation accessors instead. */ @java.lang.Deprecated public java.util.Map getMutableLabels() { bitField0_ |= 0x00000008; return internalGetMutableLabels().getMutableMap(); } + /** * * @@ -1730,6 +1785,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000008; return this; } + /** * * @@ -1747,6 +1803,7 @@ public Builder putAllLabels(java.util.Map va } private int state_ = 0; + /** * * @@ -1762,6 +1819,7 @@ public Builder putAllLabels(java.util.Map va public int getStateValue() { return state_; } + /** * * @@ -1780,6 +1838,7 @@ public Builder setStateValue(int value) { onChanged(); return this; } + /** * * @@ -1799,6 +1858,7 @@ public com.google.datastore.admin.v1.CommonMetadata.State getState() { ? com.google.datastore.admin.v1.CommonMetadata.State.UNRECOGNIZED : result; } + /** * * @@ -1820,6 +1880,7 @@ public Builder setState(com.google.datastore.admin.v1.CommonMetadata.State value onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadataOrBuilder.java index fa127dc7c..29e4383cb 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadataOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CommonMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface CommonMetadataOrBuilder @@ -36,6 +36,7 @@ public interface CommonMetadataOrBuilder * @return Whether the startTime field is set. */ boolean hasStartTime(); + /** * * @@ -48,6 +49,7 @@ public interface CommonMetadataOrBuilder * @return The startTime. */ com.google.protobuf.Timestamp getStartTime(); + /** * * @@ -71,6 +73,7 @@ public interface CommonMetadataOrBuilder * @return Whether the endTime field is set. */ boolean hasEndTime(); + /** * * @@ -83,6 +86,7 @@ public interface CommonMetadataOrBuilder * @return The endTime. */ com.google.protobuf.Timestamp getEndTime(); + /** * * @@ -107,6 +111,7 @@ public interface CommonMetadataOrBuilder * @return The enum numeric value on the wire for operationType. */ int getOperationTypeValue(); + /** * * @@ -132,6 +137,7 @@ public interface CommonMetadataOrBuilder * map<string, string> labels = 4; */ int getLabelsCount(); + /** * * @@ -143,9 +149,11 @@ public interface CommonMetadataOrBuilder * map<string, string> labels = 4; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * @@ -157,6 +165,7 @@ public interface CommonMetadataOrBuilder * map<string, string> labels = 4; */ java.util.Map getLabelsMap(); + /** * * @@ -172,6 +181,7 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * @@ -196,6 +206,7 @@ java.lang.String getLabelsOrDefault( * @return The enum numeric value on the wire for state. */ int getStateValue(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequest.java index c86b9a967..bff6b84a3 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequest.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -34,6 +34,7 @@ public final class CreateIndexRequest extends com.google.protobuf.GeneratedMessa // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.CreateIndexRequest) CreateIndexRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use CreateIndexRequest.newBuilder() to construct. private CreateIndexRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -69,6 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -92,6 +94,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -118,6 +121,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { public static final int INDEX_FIELD_NUMBER = 3; private com.google.datastore.admin.v1.Index index_; + /** * * @@ -134,6 +138,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { public boolean hasIndex() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -150,6 +155,7 @@ public boolean hasIndex() { public com.google.datastore.admin.v1.Index getIndex() { return index_ == null ? com.google.datastore.admin.v1.Index.getDefaultInstance() : index_; } + /** * * @@ -338,6 +344,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -552,6 +559,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -574,6 +582,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -596,6 +605,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -617,6 +627,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -634,6 +645,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -663,6 +675,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { com.google.datastore.admin.v1.Index.Builder, com.google.datastore.admin.v1.IndexOrBuilder> indexBuilder_; + /** * * @@ -678,6 +691,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { public boolean hasIndex() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -697,6 +711,7 @@ public com.google.datastore.admin.v1.Index getIndex() { return indexBuilder_.getMessage(); } } + /** * * @@ -720,6 +735,7 @@ public Builder setIndex(com.google.datastore.admin.v1.Index value) { onChanged(); return this; } + /** * * @@ -740,6 +756,7 @@ public Builder setIndex(com.google.datastore.admin.v1.Index.Builder builderForVa onChanged(); return this; } + /** * * @@ -768,6 +785,7 @@ public Builder mergeIndex(com.google.datastore.admin.v1.Index value) { } return this; } + /** * * @@ -788,6 +806,7 @@ public Builder clearIndex() { onChanged(); return this; } + /** * * @@ -803,6 +822,7 @@ public com.google.datastore.admin.v1.Index.Builder getIndexBuilder() { onChanged(); return getIndexFieldBuilder().getBuilder(); } + /** * * @@ -820,6 +840,7 @@ public com.google.datastore.admin.v1.IndexOrBuilder getIndexOrBuilder() { return index_ == null ? com.google.datastore.admin.v1.Index.getDefaultInstance() : index_; } } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequestOrBuilder.java index 537fb10b9..a3de2d745 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequestOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/CreateIndexRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface CreateIndexRequestOrBuilder @@ -36,6 +36,7 @@ public interface CreateIndexRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -62,6 +63,7 @@ public interface CreateIndexRequestOrBuilder * @return Whether the index field is set. */ boolean hasIndex(); + /** * * @@ -75,6 +77,7 @@ public interface CreateIndexRequestOrBuilder * @return The index. */ com.google.datastore.admin.v1.Index getIndex(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminProto.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminProto.java index 9a4bb925f..cf104bfb7 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminProto.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreAdminProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public final class DatastoreAdminProto { @@ -109,119 +109,134 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n/google/datastore/admin/v1/datastore_ad" + "\n" + + "/google/datastore/admin/v1/datastore_ad" + "min.proto\022\031google.datastore.admin.v1\032\034go" + "ogle/api/annotations.proto\032\027google/api/c" + "lient.proto\032\037google/api/field_behavior.p" - + "roto\032%google/datastore/admin/v1/index.pr" - + "oto\032)google/datastore/admin/v1/migration" - + ".proto\032#google/longrunning/operations.pr" - + "oto\032\037google/protobuf/timestamp.proto\"\364\003\n" - + "\016CommonMetadata\022.\n\nstart_time\030\001 \001(\0132\032.go" - + "ogle.protobuf.Timestamp\022,\n\010end_time\030\002 \001(" - + "\0132\032.google.protobuf.Timestamp\022@\n\016operati" - + "on_type\030\003 \001(\0162(.google.datastore.admin.v" - + "1.OperationType\022E\n\006labels\030\004 \003(\01325.google" - + ".datastore.admin.v1.CommonMetadata.Label" - + "sEntry\022>\n\005state\030\005 \001(\0162/.google.datastore" - + ".admin.v1.CommonMetadata.State\032-\n\013Labels" - + "Entry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\213\001" - + "\n\005State\022\025\n\021STATE_UNSPECIFIED\020\000\022\020\n\014INITIA" - + "LIZING\020\001\022\016\n\nPROCESSING\020\002\022\016\n\nCANCELLING\020\003" - + "\022\016\n\nFINALIZING\020\004\022\016\n\nSUCCESSFUL\020\005\022\n\n\006FAIL" - + "ED\020\006\022\r\n\tCANCELLED\020\007\":\n\010Progress\022\026\n\016work_" - + "completed\030\001 \001(\003\022\026\n\016work_estimated\030\002 \001(\003\"" - + "\215\002\n\025ExportEntitiesRequest\022\027\n\nproject_id\030" - + "\001 \001(\tB\003\340A\002\022L\n\006labels\030\002 \003(\0132<.google.data" - + "store.admin.v1.ExportEntitiesRequest.Lab" - + "elsEntry\022>\n\rentity_filter\030\003 \001(\0132\'.google" - + ".datastore.admin.v1.EntityFilter\022\036\n\021outp" - + "ut_url_prefix\030\004 \001(\tB\003\340A\002\032-\n\013LabelsEntry\022" - + "\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"\205\002\n\025Impo" - + "rtEntitiesRequest\022\027\n\nproject_id\030\001 \001(\tB\003\340" - + "A\002\022L\n\006labels\030\002 \003(\0132<.google.datastore.ad" - + "min.v1.ImportEntitiesRequest.LabelsEntry" - + "\022\026\n\tinput_url\030\003 \001(\tB\003\340A\002\022>\n\rentity_filte" - + "r\030\004 \001(\0132\'.google.datastore.admin.v1.Enti" - + "tyFilter\032-\n\013LabelsEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005" - + "value\030\002 \001(\t:\0028\001\",\n\026ExportEntitiesRespons" - + "e\022\022\n\noutput_url\030\001 \001(\t\"\253\002\n\026ExportEntities" - + "Metadata\0229\n\006common\030\001 \001(\0132).google.datast" - + "ore.admin.v1.CommonMetadata\022>\n\021progress_" - + "entities\030\002 \001(\0132#.google.datastore.admin." - + "v1.Progress\022;\n\016progress_bytes\030\003 \001(\0132#.go" - + "ogle.datastore.admin.v1.Progress\022>\n\renti" - + "ty_filter\030\004 \001(\0132\'.google.datastore.admin" - + ".v1.EntityFilter\022\031\n\021output_url_prefix\030\005 " - + "\001(\t\"\243\002\n\026ImportEntitiesMetadata\0229\n\006common" - + "\030\001 \001(\0132).google.datastore.admin.v1.Commo" - + "nMetadata\022>\n\021progress_entities\030\002 \001(\0132#.g" - + "oogle.datastore.admin.v1.Progress\022;\n\016pro" - + "gress_bytes\030\003 \001(\0132#.google.datastore.adm" - + "in.v1.Progress\022>\n\rentity_filter\030\004 \001(\0132\'." - + "google.datastore.admin.v1.EntityFilter\022\021" - + "\n\tinput_url\030\005 \001(\t\"4\n\014EntityFilter\022\r\n\005kin" - + "ds\030\001 \003(\t\022\025\n\rnamespace_ids\030\002 \003(\t\"Y\n\022Creat" - + "eIndexRequest\022\022\n\nproject_id\030\001 \001(\t\022/\n\005ind" - + "ex\030\003 \001(\0132 .google.datastore.admin.v1.Ind" - + "ex\":\n\022DeleteIndexRequest\022\022\n\nproject_id\030\001" - + " \001(\t\022\020\n\010index_id\030\003 \001(\t\"7\n\017GetIndexReques" - + "t\022\022\n\nproject_id\030\001 \001(\t\022\020\n\010index_id\030\003 \001(\t\"" - + "_\n\022ListIndexesRequest\022\022\n\nproject_id\030\001 \001(" - + "\t\022\016\n\006filter\030\003 \001(\t\022\021\n\tpage_size\030\004 \001(\005\022\022\n\n" - + "page_token\030\005 \001(\t\"a\n\023ListIndexesResponse\022" - + "1\n\007indexes\030\001 \003(\0132 .google.datastore.admi" - + "n.v1.Index\022\027\n\017next_page_token\030\002 \001(\t\"\245\001\n\026" - + "IndexOperationMetadata\0229\n\006common\030\001 \001(\0132)" - + ".google.datastore.admin.v1.CommonMetadat" - + "a\022>\n\021progress_entities\030\002 \001(\0132#.google.da" - + "tastore.admin.v1.Progress\022\020\n\010index_id\030\003 " - + "\001(\t\"\253\001\n#DatastoreFirestoreMigrationMetad" - + "ata\022B\n\017migration_state\030\001 \001(\0162).google.da" - + "tastore.admin.v1.MigrationState\022@\n\016migra" - + "tion_step\030\002 \001(\0162(.google.datastore.admin" - + ".v1.MigrationStep*}\n\rOperationType\022\036\n\032OP" - + "ERATION_TYPE_UNSPECIFIED\020\000\022\023\n\017EXPORT_ENT" - + "ITIES\020\001\022\023\n\017IMPORT_ENTITIES\020\002\022\020\n\014CREATE_I" - + "NDEX\020\003\022\020\n\014DELETE_INDEX\020\0042\204\n\n\016DatastoreAd" - + "min\022\366\001\n\016ExportEntities\0220.google.datastor" - + "e.admin.v1.ExportEntitiesRequest\032\035.googl" - + "e.longrunning.Operation\"\222\001\312A0\n\026ExportEnt" - + "itiesResponse\022\026ExportEntitiesMetadata\332A1" - + "project_id,labels,entity_filter,output_u" - + "rl_prefix\202\323\344\223\002%\" /v1/projects/{project_i" - + "d}:export:\001*\022\355\001\n\016ImportEntities\0220.google" - + ".datastore.admin.v1.ImportEntitiesReques" - + "t\032\035.google.longrunning.Operation\"\211\001\312A/\n\025" - + "google.protobuf.Empty\022\026ImportEntitiesMet" - + "adata\332A)project_id,labels,input_url,enti" - + "ty_filter\202\323\344\223\002%\" /v1/projects/{project_i" - + "d}:import:\001*\022\257\001\n\013CreateIndex\022-.google.da" - + "tastore.admin.v1.CreateIndexRequest\032\035.go" - + "ogle.longrunning.Operation\"R\312A\037\n\005Index\022\026" - + "IndexOperationMetadata\202\323\344\223\002*\"!/v1/projec" - + "ts/{project_id}/indexes:\005index\022\263\001\n\013Delet" - + "eIndex\022-.google.datastore.admin.v1.Delet" - + "eIndexRequest\032\035.google.longrunning.Opera" - + "tion\"V\312A\037\n\005Index\022\026IndexOperationMetadata" - + "\202\323\344\223\002.*,/v1/projects/{project_id}/indexe" - + "s/{index_id}\022\216\001\n\010GetIndex\022*.google.datas" - + "tore.admin.v1.GetIndexRequest\032 .google.d" + + "roto\032%google/datastore/admin/v1/index.proto\032)google/datastore/admin/v1/migration" + + ".proto\032#google/longrunning/operations.proto\032\037google/protobuf/timestamp.proto\"\364\003\n" + + "\016CommonMetadata\022.\n\n" + + "start_time\030\001 \001(\0132\032.google.protobuf.Timestamp\022,\n" + + "\010end_time\030\002 \001(\0132\032.google.protobuf.Timestamp\022@\n" + + "\016operation_type\030\003 \001(\0162(.google.datastore.admin.v1.OperationType\022E\n" + + "\006labels\030\004 \003(\01325.google" + + ".datastore.admin.v1.CommonMetadata.LabelsEntry\022>\n" + + "\005state\030\005 \001(\0162/.google.datastore.admin.v1.CommonMetadata.State\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"\213\001\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\020\n" + + "\014INITIALIZING\020\001\022\016\n\n" + + "PROCESSING\020\002\022\016\n\n" + + "CANCELLING\020\003\022\016\n\n" + + "FINALIZING\020\004\022\016\n\n" + + "SUCCESSFUL\020\005\022\n\n" + + "\006FAILED\020\006\022\r\n" + + "\tCANCELLED\020\007\":\n" + + "\010Progress\022\026\n" + + "\016work_completed\030\001 \001(\003\022\026\n" + + "\016work_estimated\030\002 \001(\003\"\215\002\n" + + "\025ExportEntitiesRequest\022\027\n\n" + + "project_id\030\001 \001(\tB\003\340A\002\022L\n" + + "\006labels\030\002 \003(\0132<.google.data" + + "store.admin.v1.ExportEntitiesRequest.LabelsEntry\022>\n\r" + + "entity_filter\030\003 \001(\0132\'.google.datastore.admin.v1.EntityFilter\022\036\n" + + "\021output_url_prefix\030\004 \001(\tB\003\340A\002\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\"\205\002\n" + + "\025ImportEntitiesRequest\022\027\n\n" + + "project_id\030\001 \001(\tB\003\340A\002\022L\n" + + "\006labels\030\002 \003(\0132<.google.datastore.ad" + + "min.v1.ImportEntitiesRequest.LabelsEntry\022\026\n" + + "\tinput_url\030\003 \001(\tB\003\340A\002\022>\n\r" + + "entity_filter\030\004 \001(\0132\'.google.datastore.admin.v1.EntityFilter\032-\n" + + "\013LabelsEntry\022\013\n" + + "\003key\030\001 \001(\t\022\r\n" + + "\005value\030\002 \001(\t:\0028\001\",\n" + + "\026ExportEntitiesResponse\022\022\n\n" + + "output_url\030\001 \001(\t\"\253\002\n" + + "\026ExportEntitiesMetadata\0229\n" + + "\006common\030\001 \001(\0132).google.datastore.admin.v1.CommonMetadata\022>\n" + + "\021progress_entities\030\002 \001(\0132#.google.datastore.admin.v1.Progress\022;\n" + + "\016progress_bytes\030\003 \001(\0132#.google.datastore.admin.v1.Progress\022>\n\r" + + "entity_filter\030\004 \001(\0132\'.google.datastore.admin.v1.EntityFilter\022\031\n" + + "\021output_url_prefix\030\005 \001(\t\"\243\002\n" + + "\026ImportEntitiesMetadata\0229\n" + + "\006common\030\001 \001(\0132).google.datastore.admin.v1.CommonMetadata\022>\n" + + "\021progress_entities\030\002 \001(\0132#.google.datastore.admin.v1.Progress\022;\n" + + "\016progress_bytes\030\003 \001(\0132#.google.datastore.admin.v1.Progress\022>\n\r" + + "entity_filter\030\004 \001(\0132\'.google.datastore.admin.v1.EntityFilter\022\021\n" + + "\tinput_url\030\005 \001(\t\"4\n" + + "\014EntityFilter\022\r\n" + + "\005kinds\030\001 \003(\t\022\025\n\r" + + "namespace_ids\030\002 \003(\t\"Y\n" + + "\022CreateIndexRequest\022\022\n\n" + + "project_id\030\001 \001(\t\022/\n" + + "\005index\030\003 \001(\0132 .google.datastore.admin.v1.Index\":\n" + + "\022DeleteIndexRequest\022\022\n\n" + + "project_id\030\001 \001(\t\022\020\n" + + "\010index_id\030\003 \001(\t\"7\n" + + "\017GetIndexRequest\022\022\n\n" + + "project_id\030\001 \001(\t\022\020\n" + + "\010index_id\030\003 \001(\t\"_\n" + + "\022ListIndexesRequest\022\022\n\n" + + "project_id\030\001 \001(\t\022\016\n" + + "\006filter\030\003 \001(\t\022\021\n" + + "\tpage_size\030\004 \001(\005\022\022\n\n" + + "page_token\030\005 \001(\t\"a\n" + + "\023ListIndexesResponse\0221\n" + + "\007indexes\030\001 \003(\0132 .google.datastore.admin.v1.Index\022\027\n" + + "\017next_page_token\030\002 \001(\t\"\245\001\n" + + "\026IndexOperationMetadata\0229\n" + + "\006common\030\001 \001(\0132).google.datastore.admin.v1.CommonMetadata\022>\n" + + "\021progress_entities\030\002 \001(\0132#.google.datastore.admin.v1.Progress\022\020\n" + + "\010index_id\030\003 \001(\t\"\253\001\n" + + "#DatastoreFirestoreMigrationMetadata\022B\n" + + "\017migration_state\030\001" + + " \001(\0162).google.datastore.admin.v1.MigrationState\022@\n" + + "\016migration_step\030\002 \001(\0162(.google.datastore.admin.v1.MigrationStep*}\n\r" + + "OperationType\022\036\n" + + "\032OPERATION_TYPE_UNSPECIFIED\020\000\022\023\n" + + "\017EXPORT_ENTITIES\020\001\022\023\n" + + "\017IMPORT_ENTITIES\020\002\022\020\n" + + "\014CREATE_INDEX\020\003\022\020\n" + + "\014DELETE_INDEX\020\0042\204\n\n" + + "\016DatastoreAdmin\022\366\001\n" + + "\016ExportEntities\0220.google.datastor" + + "e.admin.v1.ExportEntitiesRequest\032\035.google.longrunning.Operation\"\222\001\312A0\n" + + "\026ExportEntitiesResponse\022\026ExportEntitiesMetadata\332A1" + + "project_id,labels,entity_filter,output_url_prefix\202\323\344\223\002%\"" + + " /v1/projects/{project_id}:export:\001*\022\355\001\n" + + "\016ImportEntities\0220.google" + + ".datastore.admin.v1.ImportEntitiesRequest\032\035.google.longrunning.Operation\"\211\001\312A/\n" + + "\025google.protobuf.Empty\022\026ImportEntitiesMet" + + "adata\332A)project_id,labels,input_url,entity_filter\202\323\344\223\002%\"" + + " /v1/projects/{project_id}:import:\001*\022\257\001\n" + + "\013CreateIndex\022-.google.da" + + "tastore.admin.v1.CreateIndexRequest\032\035.google.longrunning.Operation\"R\312A\037\n" + + "\005Index\022\026" + + "IndexOperationMetadata\202\323\344\223\002*\"!/v1/projects/{project_id}/indexes:\005index\022\263\001\n" + + "\013DeleteIndex\022-.google.datastore.admin.v1.Delet" + + "eIndexRequest\032\035.google.longrunning.Operation\"V\312A\037\n" + + "\005Index\022\026IndexOperationMetadata" + + "\202\323\344\223\002.*,/v1/projects/{project_id}/indexes/{index_id}\022\216\001\n" + + "\010GetIndex\022*.google.datastore.admin.v1.GetIndexRequest\032 .google.d" + "atastore.admin.v1.Index\"4\202\323\344\223\002.\022,/v1/pro" - + "jects/{project_id}/indexes/{index_id}\022\227\001" - + "\n\013ListIndexes\022-.google.datastore.admin.v" + + "jects/{project_id}/indexes/{index_id}\022\227\001\n" + + "\013ListIndexes\022-.google.datastore.admin.v" + "1.ListIndexesRequest\032..google.datastore." + "admin.v1.ListIndexesResponse\")\202\323\344\223\002#\022!/v" + "1/projects/{project_id}/indexes\032v\312A\030data" + "store.googleapis.com\322AXhttps://www.googl" - + "eapis.com/auth/cloud-platform,https://ww" - + "w.googleapis.com/auth/datastoreB\333\001\n\035com." - + "google.datastore.admin.v1B\023DatastoreAdmi" + + "eapis.com/auth/cloud-platform,https://www.googleapis.com/auth/datastoreB\333\001\n" + + "\035com.google.datastore.admin.v1B\023DatastoreAdmi" + "nProtoP\001Z9cloud.google.com/go/datastore/" + "admin/apiv1/adminpb;adminpb\252\002\037Google.Clo" + "ud.Datastore.Admin.V1\312\002\037Google\\Cloud\\Dat" - + "astore\\Admin\\V1\352\002#Google::Cloud::Datasto" - + "re::Admin::V1b\006proto3" + + "astore\\Admin\\V1\352\002#Google::Cloud::Datastore::Admin::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadata.java index a0695ffd0..fe3a7cf43 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadata.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -41,6 +41,7 @@ public final class DatastoreFirestoreMigrationMetadata // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.DatastoreFirestoreMigrationMetadata) DatastoreFirestoreMigrationMetadataOrBuilder { private static final long serialVersionUID = 0L; + // Use DatastoreFirestoreMigrationMetadata.newBuilder() to construct. private DatastoreFirestoreMigrationMetadata( com.google.protobuf.GeneratedMessageV3.Builder builder) { @@ -75,6 +76,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int MIGRATION_STATE_FIELD_NUMBER = 1; private int migrationState_ = 0; + /** * * @@ -91,6 +93,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getMigrationStateValue() { return migrationState_; } + /** * * @@ -112,6 +115,7 @@ public com.google.datastore.admin.v1.MigrationState getMigrationState() { public static final int MIGRATION_STEP_FIELD_NUMBER = 2; private int migrationStep_ = 0; + /** * * @@ -128,6 +132,7 @@ public com.google.datastore.admin.v1.MigrationState getMigrationState() { public int getMigrationStepValue() { return migrationStep_; } + /** * * @@ -321,6 +326,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -528,6 +534,7 @@ public Builder mergeFrom( private int bitField0_; private int migrationState_ = 0; + /** * * @@ -544,6 +551,7 @@ public Builder mergeFrom( public int getMigrationStateValue() { return migrationState_; } + /** * * @@ -563,6 +571,7 @@ public Builder setMigrationStateValue(int value) { onChanged(); return this; } + /** * * @@ -581,6 +590,7 @@ public com.google.datastore.admin.v1.MigrationState getMigrationState() { com.google.datastore.admin.v1.MigrationState.forNumber(migrationState_); return result == null ? com.google.datastore.admin.v1.MigrationState.UNRECOGNIZED : result; } + /** * * @@ -603,6 +613,7 @@ public Builder setMigrationState(com.google.datastore.admin.v1.MigrationState va onChanged(); return this; } + /** * * @@ -623,6 +634,7 @@ public Builder clearMigrationState() { } private int migrationStep_ = 0; + /** * * @@ -639,6 +651,7 @@ public Builder clearMigrationState() { public int getMigrationStepValue() { return migrationStep_; } + /** * * @@ -658,6 +671,7 @@ public Builder setMigrationStepValue(int value) { onChanged(); return this; } + /** * * @@ -676,6 +690,7 @@ public com.google.datastore.admin.v1.MigrationStep getMigrationStep() { com.google.datastore.admin.v1.MigrationStep.forNumber(migrationStep_); return result == null ? com.google.datastore.admin.v1.MigrationStep.UNRECOGNIZED : result; } + /** * * @@ -698,6 +713,7 @@ public Builder setMigrationStep(com.google.datastore.admin.v1.MigrationStep valu onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadataOrBuilder.java index 3bf3c03f8..dd1e0884d 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadataOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DatastoreFirestoreMigrationMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface DatastoreFirestoreMigrationMetadataOrBuilder @@ -37,6 +37,7 @@ public interface DatastoreFirestoreMigrationMetadataOrBuilder * @return The enum numeric value on the wire for migrationState. */ int getMigrationStateValue(); + /** * * @@ -64,6 +65,7 @@ public interface DatastoreFirestoreMigrationMetadataOrBuilder * @return The enum numeric value on the wire for migrationStep. */ int getMigrationStepValue(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequest.java index 0b82ce7cc..e2e7ae6de 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequest.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -34,6 +34,7 @@ public final class DeleteIndexRequest extends com.google.protobuf.GeneratedMessa // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.DeleteIndexRequest) DeleteIndexRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use DeleteIndexRequest.newBuilder() to construct. private DeleteIndexRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -69,6 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -92,6 +94,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -120,6 +123,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object indexId_ = ""; + /** * * @@ -143,6 +147,7 @@ public java.lang.String getIndexId() { return s; } } + /** * * @@ -335,6 +340,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -535,6 +541,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -557,6 +564,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -579,6 +587,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -600,6 +609,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -617,6 +627,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -641,6 +652,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object indexId_ = ""; + /** * * @@ -663,6 +675,7 @@ public java.lang.String getIndexId() { return (java.lang.String) ref; } } + /** * * @@ -685,6 +698,7 @@ public com.google.protobuf.ByteString getIndexIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -706,6 +720,7 @@ public Builder setIndexId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -723,6 +738,7 @@ public Builder clearIndexId() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequestOrBuilder.java index 9ac5d5411..860bbcc27 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequestOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/DeleteIndexRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface DeleteIndexRequestOrBuilder @@ -36,6 +36,7 @@ public interface DeleteIndexRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +62,7 @@ public interface DeleteIndexRequestOrBuilder * @return The indexId. */ java.lang.String getIndexId(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilter.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilter.java index a4c6617c3..35db5e1f2 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilter.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -51,6 +51,7 @@ public final class EntityFilter extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.EntityFilter) EntityFilterOrBuilder { private static final long serialVersionUID = 0L; + // Use EntityFilter.newBuilder() to construct. private EntityFilter(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -87,6 +88,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList kinds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -101,6 +103,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public com.google.protobuf.ProtocolStringList getKindsList() { return kinds_; } + /** * * @@ -115,6 +118,7 @@ public com.google.protobuf.ProtocolStringList getKindsList() { public int getKindsCount() { return kinds_.size(); } + /** * * @@ -130,6 +134,7 @@ public int getKindsCount() { public java.lang.String getKinds(int index) { return kinds_.get(index); } + /** * * @@ -151,6 +156,7 @@ public com.google.protobuf.ByteString getKindsBytes(int index) { @SuppressWarnings("serial") private com.google.protobuf.LazyStringArrayList namespaceIds_ = com.google.protobuf.LazyStringArrayList.emptyList(); + /** * * @@ -171,6 +177,7 @@ public com.google.protobuf.ByteString getKindsBytes(int index) { public com.google.protobuf.ProtocolStringList getNamespaceIdsList() { return namespaceIds_; } + /** * * @@ -191,6 +198,7 @@ public com.google.protobuf.ProtocolStringList getNamespaceIdsList() { public int getNamespaceIdsCount() { return namespaceIds_.size(); } + /** * * @@ -212,6 +220,7 @@ public int getNamespaceIdsCount() { public java.lang.String getNamespaceIds(int index) { return namespaceIds_.get(index); } + /** * * @@ -416,6 +425,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -654,6 +664,7 @@ private void ensureKindsIsMutable() { } bitField0_ |= 0x00000001; } + /** * * @@ -669,6 +680,7 @@ public com.google.protobuf.ProtocolStringList getKindsList() { kinds_.makeImmutable(); return kinds_; } + /** * * @@ -683,6 +695,7 @@ public com.google.protobuf.ProtocolStringList getKindsList() { public int getKindsCount() { return kinds_.size(); } + /** * * @@ -698,6 +711,7 @@ public int getKindsCount() { public java.lang.String getKinds(int index) { return kinds_.get(index); } + /** * * @@ -713,6 +727,7 @@ public java.lang.String getKinds(int index) { public com.google.protobuf.ByteString getKindsBytes(int index) { return kinds_.getByteString(index); } + /** * * @@ -736,6 +751,7 @@ public Builder setKinds(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -758,6 +774,7 @@ public Builder addKinds(java.lang.String value) { onChanged(); return this; } + /** * * @@ -777,6 +794,7 @@ public Builder addAllKinds(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -795,6 +813,7 @@ public Builder clearKinds() { onChanged(); return this; } + /** * * @@ -828,6 +847,7 @@ private void ensureNamespaceIdsIsMutable() { } bitField0_ |= 0x00000002; } + /** * * @@ -849,6 +869,7 @@ public com.google.protobuf.ProtocolStringList getNamespaceIdsList() { namespaceIds_.makeImmutable(); return namespaceIds_; } + /** * * @@ -869,6 +890,7 @@ public com.google.protobuf.ProtocolStringList getNamespaceIdsList() { public int getNamespaceIdsCount() { return namespaceIds_.size(); } + /** * * @@ -890,6 +912,7 @@ public int getNamespaceIdsCount() { public java.lang.String getNamespaceIds(int index) { return namespaceIds_.get(index); } + /** * * @@ -911,6 +934,7 @@ public java.lang.String getNamespaceIds(int index) { public com.google.protobuf.ByteString getNamespaceIdsBytes(int index) { return namespaceIds_.getByteString(index); } + /** * * @@ -940,6 +964,7 @@ public Builder setNamespaceIds(int index, java.lang.String value) { onChanged(); return this; } + /** * * @@ -968,6 +993,7 @@ public Builder addNamespaceIds(java.lang.String value) { onChanged(); return this; } + /** * * @@ -993,6 +1019,7 @@ public Builder addAllNamespaceIds(java.lang.Iterable values) { onChanged(); return this; } + /** * * @@ -1017,6 +1044,7 @@ public Builder clearNamespaceIds() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilterOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilterOrBuilder.java index 59fff0657..381e1e38d 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilterOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/EntityFilterOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface EntityFilterOrBuilder @@ -36,6 +36,7 @@ public interface EntityFilterOrBuilder * @return A list containing the kinds. */ java.util.List getKindsList(); + /** * * @@ -48,6 +49,7 @@ public interface EntityFilterOrBuilder * @return The count of kinds. */ int getKindsCount(); + /** * * @@ -61,6 +63,7 @@ public interface EntityFilterOrBuilder * @return The kinds at the given index. */ java.lang.String getKinds(int index); + /** * * @@ -93,6 +96,7 @@ public interface EntityFilterOrBuilder * @return A list containing the namespaceIds. */ java.util.List getNamespaceIdsList(); + /** * * @@ -111,6 +115,7 @@ public interface EntityFilterOrBuilder * @return The count of namespaceIds. */ int getNamespaceIdsCount(); + /** * * @@ -130,6 +135,7 @@ public interface EntityFilterOrBuilder * @return The namespaceIds at the given index. */ java.lang.String getNamespaceIds(int index); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadata.java index 360a2c5c6..946dd9d6b 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadata.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -33,6 +33,7 @@ public final class ExportEntitiesMetadata extends com.google.protobuf.GeneratedM // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.ExportEntitiesMetadata) ExportEntitiesMetadataOrBuilder { private static final long serialVersionUID = 0L; + // Use ExportEntitiesMetadata.newBuilder() to construct. private ExportEntitiesMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -66,6 +67,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int COMMON_FIELD_NUMBER = 1; private com.google.datastore.admin.v1.CommonMetadata common_; + /** * * @@ -81,6 +83,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasCommon() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +101,7 @@ public com.google.datastore.admin.v1.CommonMetadata getCommon() { ? com.google.datastore.admin.v1.CommonMetadata.getDefaultInstance() : common_; } + /** * * @@ -116,6 +120,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public static final int PROGRESS_ENTITIES_FIELD_NUMBER = 2; private com.google.datastore.admin.v1.Progress progressEntities_; + /** * * @@ -131,6 +136,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public boolean hasProgressEntities() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -148,6 +154,7 @@ public com.google.datastore.admin.v1.Progress getProgressEntities() { ? com.google.datastore.admin.v1.Progress.getDefaultInstance() : progressEntities_; } + /** * * @@ -166,6 +173,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil public static final int PROGRESS_BYTES_FIELD_NUMBER = 3; private com.google.datastore.admin.v1.Progress progressBytes_; + /** * * @@ -181,6 +189,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil public boolean hasProgressBytes() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -198,6 +207,7 @@ public com.google.datastore.admin.v1.Progress getProgressBytes() { ? com.google.datastore.admin.v1.Progress.getDefaultInstance() : progressBytes_; } + /** * * @@ -216,6 +226,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder public static final int ENTITY_FILTER_FIELD_NUMBER = 4; private com.google.datastore.admin.v1.EntityFilter entityFilter_; + /** * * @@ -231,6 +242,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder public boolean hasEntityFilter() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -248,6 +260,7 @@ public com.google.datastore.admin.v1.EntityFilter getEntityFilter() { ? com.google.datastore.admin.v1.EntityFilter.getDefaultInstance() : entityFilter_; } + /** * * @@ -268,6 +281,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil @SuppressWarnings("serial") private volatile java.lang.Object outputUrlPrefix_ = ""; + /** * * @@ -295,6 +309,7 @@ public java.lang.String getOutputUrlPrefix() { return s; } } + /** * * @@ -538,6 +553,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -817,6 +833,7 @@ public Builder mergeFrom( com.google.datastore.admin.v1.CommonMetadata.Builder, com.google.datastore.admin.v1.CommonMetadataOrBuilder> commonBuilder_; + /** * * @@ -831,6 +848,7 @@ public Builder mergeFrom( public boolean hasCommon() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -851,6 +869,7 @@ public com.google.datastore.admin.v1.CommonMetadata getCommon() { return commonBuilder_.getMessage(); } } + /** * * @@ -873,6 +892,7 @@ public Builder setCommon(com.google.datastore.admin.v1.CommonMetadata value) { onChanged(); return this; } + /** * * @@ -892,6 +912,7 @@ public Builder setCommon(com.google.datastore.admin.v1.CommonMetadata.Builder bu onChanged(); return this; } + /** * * @@ -919,6 +940,7 @@ public Builder mergeCommon(com.google.datastore.admin.v1.CommonMetadata value) { } return this; } + /** * * @@ -938,6 +960,7 @@ public Builder clearCommon() { onChanged(); return this; } + /** * * @@ -952,6 +975,7 @@ public com.google.datastore.admin.v1.CommonMetadata.Builder getCommonBuilder() { onChanged(); return getCommonFieldBuilder().getBuilder(); } + /** * * @@ -970,6 +994,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( : common_; } } + /** * * @@ -1002,6 +1027,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( com.google.datastore.admin.v1.Progress.Builder, com.google.datastore.admin.v1.ProgressOrBuilder> progressEntitiesBuilder_; + /** * * @@ -1016,6 +1042,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public boolean hasProgressEntities() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1036,6 +1063,7 @@ public com.google.datastore.admin.v1.Progress getProgressEntities() { return progressEntitiesBuilder_.getMessage(); } } + /** * * @@ -1058,6 +1086,7 @@ public Builder setProgressEntities(com.google.datastore.admin.v1.Progress value) onChanged(); return this; } + /** * * @@ -1078,6 +1107,7 @@ public Builder setProgressEntities( onChanged(); return this; } + /** * * @@ -1105,6 +1135,7 @@ public Builder mergeProgressEntities(com.google.datastore.admin.v1.Progress valu } return this; } + /** * * @@ -1124,6 +1155,7 @@ public Builder clearProgressEntities() { onChanged(); return this; } + /** * * @@ -1138,6 +1170,7 @@ public com.google.datastore.admin.v1.Progress.Builder getProgressEntitiesBuilder onChanged(); return getProgressEntitiesFieldBuilder().getBuilder(); } + /** * * @@ -1156,6 +1189,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil : progressEntities_; } } + /** * * @@ -1188,6 +1222,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil com.google.datastore.admin.v1.Progress.Builder, com.google.datastore.admin.v1.ProgressOrBuilder> progressBytesBuilder_; + /** * * @@ -1202,6 +1237,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil public boolean hasProgressBytes() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1222,6 +1258,7 @@ public com.google.datastore.admin.v1.Progress getProgressBytes() { return progressBytesBuilder_.getMessage(); } } + /** * * @@ -1244,6 +1281,7 @@ public Builder setProgressBytes(com.google.datastore.admin.v1.Progress value) { onChanged(); return this; } + /** * * @@ -1264,6 +1302,7 @@ public Builder setProgressBytes( onChanged(); return this; } + /** * * @@ -1291,6 +1330,7 @@ public Builder mergeProgressBytes(com.google.datastore.admin.v1.Progress value) } return this; } + /** * * @@ -1310,6 +1350,7 @@ public Builder clearProgressBytes() { onChanged(); return this; } + /** * * @@ -1324,6 +1365,7 @@ public com.google.datastore.admin.v1.Progress.Builder getProgressBytesBuilder() onChanged(); return getProgressBytesFieldBuilder().getBuilder(); } + /** * * @@ -1342,6 +1384,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder : progressBytes_; } } + /** * * @@ -1374,6 +1417,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder com.google.datastore.admin.v1.EntityFilter.Builder, com.google.datastore.admin.v1.EntityFilterOrBuilder> entityFilterBuilder_; + /** * * @@ -1388,6 +1432,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder public boolean hasEntityFilter() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1408,6 +1453,7 @@ public com.google.datastore.admin.v1.EntityFilter getEntityFilter() { return entityFilterBuilder_.getMessage(); } } + /** * * @@ -1430,6 +1476,7 @@ public Builder setEntityFilter(com.google.datastore.admin.v1.EntityFilter value) onChanged(); return this; } + /** * * @@ -1450,6 +1497,7 @@ public Builder setEntityFilter( onChanged(); return this; } + /** * * @@ -1477,6 +1525,7 @@ public Builder mergeEntityFilter(com.google.datastore.admin.v1.EntityFilter valu } return this; } + /** * * @@ -1496,6 +1545,7 @@ public Builder clearEntityFilter() { onChanged(); return this; } + /** * * @@ -1510,6 +1560,7 @@ public com.google.datastore.admin.v1.EntityFilter.Builder getEntityFilterBuilder onChanged(); return getEntityFilterFieldBuilder().getBuilder(); } + /** * * @@ -1528,6 +1579,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil : entityFilter_; } } + /** * * @@ -1555,6 +1607,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil } private java.lang.Object outputUrlPrefix_ = ""; + /** * * @@ -1581,6 +1634,7 @@ public java.lang.String getOutputUrlPrefix() { return (java.lang.String) ref; } } + /** * * @@ -1607,6 +1661,7 @@ public com.google.protobuf.ByteString getOutputUrlPrefixBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1632,6 +1687,7 @@ public Builder setOutputUrlPrefix(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1653,6 +1709,7 @@ public Builder clearOutputUrlPrefix() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadataOrBuilder.java index a65dedc9c..d6e626eea 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadataOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface ExportEntitiesMetadataOrBuilder @@ -36,6 +36,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return Whether the common field is set. */ boolean hasCommon(); + /** * * @@ -48,6 +49,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return The common. */ com.google.datastore.admin.v1.CommonMetadata getCommon(); + /** * * @@ -71,6 +73,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return Whether the progressEntities field is set. */ boolean hasProgressEntities(); + /** * * @@ -83,6 +86,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return The progressEntities. */ com.google.datastore.admin.v1.Progress getProgressEntities(); + /** * * @@ -106,6 +110,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return Whether the progressBytes field is set. */ boolean hasProgressBytes(); + /** * * @@ -118,6 +123,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return The progressBytes. */ com.google.datastore.admin.v1.Progress getProgressBytes(); + /** * * @@ -141,6 +147,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return Whether the entityFilter field is set. */ boolean hasEntityFilter(); + /** * * @@ -153,6 +160,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return The entityFilter. */ com.google.datastore.admin.v1.EntityFilter getEntityFilter(); + /** * * @@ -180,6 +188,7 @@ public interface ExportEntitiesMetadataOrBuilder * @return The outputUrlPrefix. */ java.lang.String getOutputUrlPrefix(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequest.java index acad36a3e..ae1047177 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequest.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -34,6 +34,7 @@ public final class ExportEntitiesRequest extends com.google.protobuf.GeneratedMe // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.ExportEntitiesRequest) ExportEntitiesRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use ExportEntitiesRequest.newBuilder() to construct. private ExportEntitiesRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -82,6 +83,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -105,6 +107,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -155,6 +158,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -171,12 +175,14 @@ public boolean containsLabels(java.lang.String key) { } return internalGetLabels().getMap().containsKey(key); } + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getLabels() { return getLabelsMap(); } + /** * * @@ -190,6 +196,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -210,6 +217,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -233,6 +241,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public static final int ENTITY_FILTER_FIELD_NUMBER = 3; private com.google.datastore.admin.v1.EntityFilter entityFilter_; + /** * * @@ -248,6 +257,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { public boolean hasEntityFilter() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -265,6 +275,7 @@ public com.google.datastore.admin.v1.EntityFilter getEntityFilter() { ? com.google.datastore.admin.v1.EntityFilter.getDefaultInstance() : entityFilter_; } + /** * * @@ -285,6 +296,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil @SuppressWarnings("serial") private volatile java.lang.Object outputUrlPrefix_ = ""; + /** * * @@ -325,6 +337,7 @@ public java.lang.String getOutputUrlPrefix() { return s; } } + /** * * @@ -565,6 +578,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -836,6 +850,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -858,6 +873,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -880,6 +896,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -901,6 +918,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -918,6 +936,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -966,6 +985,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -982,12 +1002,14 @@ public boolean containsLabels(java.lang.String key) { } return internalGetLabels().getMap().containsKey(key); } + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getLabels() { return getLabelsMap(); } + /** * * @@ -1001,6 +1023,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -1021,6 +1044,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -1047,6 +1071,7 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * @@ -1063,12 +1088,14 @@ public Builder removeLabels(java.lang.String key) { internalGetMutableLabels().getMutableMap().remove(key); return this; } + /** Use alternate mutation accessors instead. */ @java.lang.Deprecated public java.util.Map getMutableLabels() { bitField0_ |= 0x00000002; return internalGetMutableLabels().getMutableMap(); } + /** * * @@ -1089,6 +1116,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000002; return this; } + /** * * @@ -1110,6 +1138,7 @@ public Builder putAllLabels(java.util.Map va com.google.datastore.admin.v1.EntityFilter.Builder, com.google.datastore.admin.v1.EntityFilterOrBuilder> entityFilterBuilder_; + /** * * @@ -1124,6 +1153,7 @@ public Builder putAllLabels(java.util.Map va public boolean hasEntityFilter() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1144,6 +1174,7 @@ public com.google.datastore.admin.v1.EntityFilter getEntityFilter() { return entityFilterBuilder_.getMessage(); } } + /** * * @@ -1166,6 +1197,7 @@ public Builder setEntityFilter(com.google.datastore.admin.v1.EntityFilter value) onChanged(); return this; } + /** * * @@ -1186,6 +1218,7 @@ public Builder setEntityFilter( onChanged(); return this; } + /** * * @@ -1213,6 +1246,7 @@ public Builder mergeEntityFilter(com.google.datastore.admin.v1.EntityFilter valu } return this; } + /** * * @@ -1232,6 +1266,7 @@ public Builder clearEntityFilter() { onChanged(); return this; } + /** * * @@ -1246,6 +1281,7 @@ public com.google.datastore.admin.v1.EntityFilter.Builder getEntityFilterBuilder onChanged(); return getEntityFilterFieldBuilder().getBuilder(); } + /** * * @@ -1264,6 +1300,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil : entityFilter_; } } + /** * * @@ -1291,6 +1328,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil } private java.lang.Object outputUrlPrefix_ = ""; + /** * * @@ -1330,6 +1368,7 @@ public java.lang.String getOutputUrlPrefix() { return (java.lang.String) ref; } } + /** * * @@ -1369,6 +1408,7 @@ public com.google.protobuf.ByteString getOutputUrlPrefixBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1407,6 +1447,7 @@ public Builder setOutputUrlPrefix(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1441,6 +1482,7 @@ public Builder clearOutputUrlPrefix() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequestOrBuilder.java index 01f5ec35d..0b9dae2e6 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequestOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface ExportEntitiesRequestOrBuilder @@ -36,6 +36,7 @@ public interface ExportEntitiesRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -59,6 +60,7 @@ public interface ExportEntitiesRequestOrBuilder * map<string, string> labels = 2; */ int getLabelsCount(); + /** * * @@ -69,9 +71,11 @@ public interface ExportEntitiesRequestOrBuilder * map<string, string> labels = 2; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * @@ -82,6 +86,7 @@ public interface ExportEntitiesRequestOrBuilder * map<string, string> labels = 2; */ java.util.Map getLabelsMap(); + /** * * @@ -96,6 +101,7 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * @@ -119,6 +125,7 @@ java.lang.String getLabelsOrDefault( * @return Whether the entityFilter field is set. */ boolean hasEntityFilter(); + /** * * @@ -131,6 +138,7 @@ java.lang.String getLabelsOrDefault( * @return The entityFilter. */ com.google.datastore.admin.v1.EntityFilter getEntityFilter(); + /** * * @@ -171,6 +179,7 @@ java.lang.String getLabelsOrDefault( * @return The outputUrlPrefix. */ java.lang.String getOutputUrlPrefix(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponse.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponse.java index fd3350685..8916b5572 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponse.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -34,6 +34,7 @@ public final class ExportEntitiesResponse extends com.google.protobuf.GeneratedM // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.ExportEntitiesResponse) ExportEntitiesResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use ExportEntitiesResponse.newBuilder() to construct. private ExportEntitiesResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -68,6 +69,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object outputUrl_ = ""; + /** * * @@ -94,6 +96,7 @@ public java.lang.String getOutputUrl() { return s; } } + /** * * @@ -280,6 +283,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -465,6 +469,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object outputUrl_ = ""; + /** * * @@ -490,6 +495,7 @@ public java.lang.String getOutputUrl() { return (java.lang.String) ref; } } + /** * * @@ -515,6 +521,7 @@ public com.google.protobuf.ByteString getOutputUrlBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -539,6 +546,7 @@ public Builder setOutputUrl(java.lang.String value) { onChanged(); return this; } + /** * * @@ -559,6 +567,7 @@ public Builder clearOutputUrl() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponseOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponseOrBuilder.java index 77bf913fb..9d515855d 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponseOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ExportEntitiesResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface ExportEntitiesResponseOrBuilder @@ -39,6 +39,7 @@ public interface ExportEntitiesResponseOrBuilder * @return The outputUrl. */ java.lang.String getOutputUrl(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequest.java index 00fb79822..4d7406fd1 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequest.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -34,6 +34,7 @@ public final class GetIndexRequest extends com.google.protobuf.GeneratedMessageV // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.GetIndexRequest) GetIndexRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use GetIndexRequest.newBuilder() to construct. private GetIndexRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -69,6 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -92,6 +94,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -120,6 +123,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object indexId_ = ""; + /** * * @@ -143,6 +147,7 @@ public java.lang.String getIndexId() { return s; } } + /** * * @@ -335,6 +340,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -534,6 +540,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -556,6 +563,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -578,6 +586,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -599,6 +608,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -616,6 +626,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -640,6 +651,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object indexId_ = ""; + /** * * @@ -662,6 +674,7 @@ public java.lang.String getIndexId() { return (java.lang.String) ref; } } + /** * * @@ -684,6 +697,7 @@ public com.google.protobuf.ByteString getIndexIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -705,6 +719,7 @@ public Builder setIndexId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -722,6 +737,7 @@ public Builder clearIndexId() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequestOrBuilder.java index e33a2bd2e..2b49cfd61 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequestOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/GetIndexRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface GetIndexRequestOrBuilder @@ -36,6 +36,7 @@ public interface GetIndexRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +62,7 @@ public interface GetIndexRequestOrBuilder * @return The indexId. */ java.lang.String getIndexId(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadata.java index f89135ebd..da2ab3e73 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadata.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -33,6 +33,7 @@ public final class ImportEntitiesMetadata extends com.google.protobuf.GeneratedM // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.ImportEntitiesMetadata) ImportEntitiesMetadataOrBuilder { private static final long serialVersionUID = 0L; + // Use ImportEntitiesMetadata.newBuilder() to construct. private ImportEntitiesMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -66,6 +67,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int COMMON_FIELD_NUMBER = 1; private com.google.datastore.admin.v1.CommonMetadata common_; + /** * * @@ -81,6 +83,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasCommon() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +101,7 @@ public com.google.datastore.admin.v1.CommonMetadata getCommon() { ? com.google.datastore.admin.v1.CommonMetadata.getDefaultInstance() : common_; } + /** * * @@ -116,6 +120,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public static final int PROGRESS_ENTITIES_FIELD_NUMBER = 2; private com.google.datastore.admin.v1.Progress progressEntities_; + /** * * @@ -131,6 +136,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public boolean hasProgressEntities() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -148,6 +154,7 @@ public com.google.datastore.admin.v1.Progress getProgressEntities() { ? com.google.datastore.admin.v1.Progress.getDefaultInstance() : progressEntities_; } + /** * * @@ -166,6 +173,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil public static final int PROGRESS_BYTES_FIELD_NUMBER = 3; private com.google.datastore.admin.v1.Progress progressBytes_; + /** * * @@ -181,6 +189,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil public boolean hasProgressBytes() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -198,6 +207,7 @@ public com.google.datastore.admin.v1.Progress getProgressBytes() { ? com.google.datastore.admin.v1.Progress.getDefaultInstance() : progressBytes_; } + /** * * @@ -216,6 +226,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder public static final int ENTITY_FILTER_FIELD_NUMBER = 4; private com.google.datastore.admin.v1.EntityFilter entityFilter_; + /** * * @@ -231,6 +242,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder public boolean hasEntityFilter() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -248,6 +260,7 @@ public com.google.datastore.admin.v1.EntityFilter getEntityFilter() { ? com.google.datastore.admin.v1.EntityFilter.getDefaultInstance() : entityFilter_; } + /** * * @@ -268,6 +281,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil @SuppressWarnings("serial") private volatile java.lang.Object inputUrl_ = ""; + /** * * @@ -294,6 +308,7 @@ public java.lang.String getInputUrl() { return s; } } + /** * * @@ -536,6 +551,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -815,6 +831,7 @@ public Builder mergeFrom( com.google.datastore.admin.v1.CommonMetadata.Builder, com.google.datastore.admin.v1.CommonMetadataOrBuilder> commonBuilder_; + /** * * @@ -829,6 +846,7 @@ public Builder mergeFrom( public boolean hasCommon() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -849,6 +867,7 @@ public com.google.datastore.admin.v1.CommonMetadata getCommon() { return commonBuilder_.getMessage(); } } + /** * * @@ -871,6 +890,7 @@ public Builder setCommon(com.google.datastore.admin.v1.CommonMetadata value) { onChanged(); return this; } + /** * * @@ -890,6 +910,7 @@ public Builder setCommon(com.google.datastore.admin.v1.CommonMetadata.Builder bu onChanged(); return this; } + /** * * @@ -917,6 +938,7 @@ public Builder mergeCommon(com.google.datastore.admin.v1.CommonMetadata value) { } return this; } + /** * * @@ -936,6 +958,7 @@ public Builder clearCommon() { onChanged(); return this; } + /** * * @@ -950,6 +973,7 @@ public com.google.datastore.admin.v1.CommonMetadata.Builder getCommonBuilder() { onChanged(); return getCommonFieldBuilder().getBuilder(); } + /** * * @@ -968,6 +992,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( : common_; } } + /** * * @@ -1000,6 +1025,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( com.google.datastore.admin.v1.Progress.Builder, com.google.datastore.admin.v1.ProgressOrBuilder> progressEntitiesBuilder_; + /** * * @@ -1014,6 +1040,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public boolean hasProgressEntities() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -1034,6 +1061,7 @@ public com.google.datastore.admin.v1.Progress getProgressEntities() { return progressEntitiesBuilder_.getMessage(); } } + /** * * @@ -1056,6 +1084,7 @@ public Builder setProgressEntities(com.google.datastore.admin.v1.Progress value) onChanged(); return this; } + /** * * @@ -1076,6 +1105,7 @@ public Builder setProgressEntities( onChanged(); return this; } + /** * * @@ -1103,6 +1133,7 @@ public Builder mergeProgressEntities(com.google.datastore.admin.v1.Progress valu } return this; } + /** * * @@ -1122,6 +1153,7 @@ public Builder clearProgressEntities() { onChanged(); return this; } + /** * * @@ -1136,6 +1168,7 @@ public com.google.datastore.admin.v1.Progress.Builder getProgressEntitiesBuilder onChanged(); return getProgressEntitiesFieldBuilder().getBuilder(); } + /** * * @@ -1154,6 +1187,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil : progressEntities_; } } + /** * * @@ -1186,6 +1220,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil com.google.datastore.admin.v1.Progress.Builder, com.google.datastore.admin.v1.ProgressOrBuilder> progressBytesBuilder_; + /** * * @@ -1200,6 +1235,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil public boolean hasProgressBytes() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1220,6 +1256,7 @@ public com.google.datastore.admin.v1.Progress getProgressBytes() { return progressBytesBuilder_.getMessage(); } } + /** * * @@ -1242,6 +1279,7 @@ public Builder setProgressBytes(com.google.datastore.admin.v1.Progress value) { onChanged(); return this; } + /** * * @@ -1262,6 +1300,7 @@ public Builder setProgressBytes( onChanged(); return this; } + /** * * @@ -1289,6 +1328,7 @@ public Builder mergeProgressBytes(com.google.datastore.admin.v1.Progress value) } return this; } + /** * * @@ -1308,6 +1348,7 @@ public Builder clearProgressBytes() { onChanged(); return this; } + /** * * @@ -1322,6 +1363,7 @@ public com.google.datastore.admin.v1.Progress.Builder getProgressBytesBuilder() onChanged(); return getProgressBytesFieldBuilder().getBuilder(); } + /** * * @@ -1340,6 +1382,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder : progressBytes_; } } + /** * * @@ -1372,6 +1415,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder com.google.datastore.admin.v1.EntityFilter.Builder, com.google.datastore.admin.v1.EntityFilterOrBuilder> entityFilterBuilder_; + /** * * @@ -1386,6 +1430,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressBytesOrBuilder public boolean hasEntityFilter() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1406,6 +1451,7 @@ public com.google.datastore.admin.v1.EntityFilter getEntityFilter() { return entityFilterBuilder_.getMessage(); } } + /** * * @@ -1428,6 +1474,7 @@ public Builder setEntityFilter(com.google.datastore.admin.v1.EntityFilter value) onChanged(); return this; } + /** * * @@ -1448,6 +1495,7 @@ public Builder setEntityFilter( onChanged(); return this; } + /** * * @@ -1475,6 +1523,7 @@ public Builder mergeEntityFilter(com.google.datastore.admin.v1.EntityFilter valu } return this; } + /** * * @@ -1494,6 +1543,7 @@ public Builder clearEntityFilter() { onChanged(); return this; } + /** * * @@ -1508,6 +1558,7 @@ public com.google.datastore.admin.v1.EntityFilter.Builder getEntityFilterBuilder onChanged(); return getEntityFilterFieldBuilder().getBuilder(); } + /** * * @@ -1526,6 +1577,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil : entityFilter_; } } + /** * * @@ -1553,6 +1605,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil } private java.lang.Object inputUrl_ = ""; + /** * * @@ -1578,6 +1631,7 @@ public java.lang.String getInputUrl() { return (java.lang.String) ref; } } + /** * * @@ -1603,6 +1657,7 @@ public com.google.protobuf.ByteString getInputUrlBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1627,6 +1682,7 @@ public Builder setInputUrl(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1647,6 +1703,7 @@ public Builder clearInputUrl() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadataOrBuilder.java index 71c6928af..f814d500e 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadataOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface ImportEntitiesMetadataOrBuilder @@ -36,6 +36,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return Whether the common field is set. */ boolean hasCommon(); + /** * * @@ -48,6 +49,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return The common. */ com.google.datastore.admin.v1.CommonMetadata getCommon(); + /** * * @@ -71,6 +73,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return Whether the progressEntities field is set. */ boolean hasProgressEntities(); + /** * * @@ -83,6 +86,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return The progressEntities. */ com.google.datastore.admin.v1.Progress getProgressEntities(); + /** * * @@ -106,6 +110,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return Whether the progressBytes field is set. */ boolean hasProgressBytes(); + /** * * @@ -118,6 +123,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return The progressBytes. */ com.google.datastore.admin.v1.Progress getProgressBytes(); + /** * * @@ -141,6 +147,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return Whether the entityFilter field is set. */ boolean hasEntityFilter(); + /** * * @@ -153,6 +160,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return The entityFilter. */ com.google.datastore.admin.v1.EntityFilter getEntityFilter(); + /** * * @@ -179,6 +187,7 @@ public interface ImportEntitiesMetadataOrBuilder * @return The inputUrl. */ java.lang.String getInputUrl(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequest.java index 596bbfa1a..66d1fdb0b 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequest.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -34,6 +34,7 @@ public final class ImportEntitiesRequest extends com.google.protobuf.GeneratedMe // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.ImportEntitiesRequest) ImportEntitiesRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use ImportEntitiesRequest.newBuilder() to construct. private ImportEntitiesRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -82,6 +83,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -105,6 +107,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -155,6 +158,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -171,12 +175,14 @@ public boolean containsLabels(java.lang.String key) { } return internalGetLabels().getMap().containsKey(key); } + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getLabels() { return getLabelsMap(); } + /** * * @@ -190,6 +196,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -210,6 +217,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -235,6 +243,7 @@ public java.lang.String getLabelsOrThrow(java.lang.String key) { @SuppressWarnings("serial") private volatile java.lang.Object inputUrl_ = ""; + /** * * @@ -271,6 +280,7 @@ public java.lang.String getInputUrl() { return s; } } + /** * * @@ -310,6 +320,7 @@ public com.google.protobuf.ByteString getInputUrlBytes() { public static final int ENTITY_FILTER_FIELD_NUMBER = 4; private com.google.datastore.admin.v1.EntityFilter entityFilter_; + /** * * @@ -328,6 +339,7 @@ public com.google.protobuf.ByteString getInputUrlBytes() { public boolean hasEntityFilter() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -348,6 +360,7 @@ public com.google.datastore.admin.v1.EntityFilter getEntityFilter() { ? com.google.datastore.admin.v1.EntityFilter.getDefaultInstance() : entityFilter_; } + /** * * @@ -566,6 +579,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -837,6 +851,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -859,6 +874,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -881,6 +897,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -902,6 +919,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -919,6 +937,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -967,6 +986,7 @@ private com.google.protobuf.MapField interna public int getLabelsCount() { return internalGetLabels().getMap().size(); } + /** * * @@ -983,12 +1003,14 @@ public boolean containsLabels(java.lang.String key) { } return internalGetLabels().getMap().containsKey(key); } + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getLabels() { return getLabelsMap(); } + /** * * @@ -1002,6 +1024,7 @@ public java.util.Map getLabels() { public java.util.Map getLabelsMap() { return internalGetLabels().getMap(); } + /** * * @@ -1022,6 +1045,7 @@ public java.util.Map getLabelsMap() { java.util.Map map = internalGetLabels().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -1048,6 +1072,7 @@ public Builder clearLabels() { internalGetMutableLabels().getMutableMap().clear(); return this; } + /** * * @@ -1064,12 +1089,14 @@ public Builder removeLabels(java.lang.String key) { internalGetMutableLabels().getMutableMap().remove(key); return this; } + /** Use alternate mutation accessors instead. */ @java.lang.Deprecated public java.util.Map getMutableLabels() { bitField0_ |= 0x00000002; return internalGetMutableLabels().getMutableMap(); } + /** * * @@ -1090,6 +1117,7 @@ public Builder putLabels(java.lang.String key, java.lang.String value) { bitField0_ |= 0x00000002; return this; } + /** * * @@ -1106,6 +1134,7 @@ public Builder putAllLabels(java.util.Map va } private java.lang.Object inputUrl_ = ""; + /** * * @@ -1141,6 +1170,7 @@ public java.lang.String getInputUrl() { return (java.lang.String) ref; } } + /** * * @@ -1176,6 +1206,7 @@ public com.google.protobuf.ByteString getInputUrlBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1210,6 +1241,7 @@ public Builder setInputUrl(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1240,6 +1272,7 @@ public Builder clearInputUrl() { onChanged(); return this; } + /** * * @@ -1282,6 +1315,7 @@ public Builder setInputUrlBytes(com.google.protobuf.ByteString value) { com.google.datastore.admin.v1.EntityFilter.Builder, com.google.datastore.admin.v1.EntityFilterOrBuilder> entityFilterBuilder_; + /** * * @@ -1299,6 +1333,7 @@ public Builder setInputUrlBytes(com.google.protobuf.ByteString value) { public boolean hasEntityFilter() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1322,6 +1357,7 @@ public com.google.datastore.admin.v1.EntityFilter getEntityFilter() { return entityFilterBuilder_.getMessage(); } } + /** * * @@ -1347,6 +1383,7 @@ public Builder setEntityFilter(com.google.datastore.admin.v1.EntityFilter value) onChanged(); return this; } + /** * * @@ -1370,6 +1407,7 @@ public Builder setEntityFilter( onChanged(); return this; } + /** * * @@ -1400,6 +1438,7 @@ public Builder mergeEntityFilter(com.google.datastore.admin.v1.EntityFilter valu } return this; } + /** * * @@ -1422,6 +1461,7 @@ public Builder clearEntityFilter() { onChanged(); return this; } + /** * * @@ -1439,6 +1479,7 @@ public com.google.datastore.admin.v1.EntityFilter.Builder getEntityFilterBuilder onChanged(); return getEntityFilterFieldBuilder().getBuilder(); } + /** * * @@ -1460,6 +1501,7 @@ public com.google.datastore.admin.v1.EntityFilterOrBuilder getEntityFilterOrBuil : entityFilter_; } } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequestOrBuilder.java index 922616586..6bde8cc3c 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequestOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ImportEntitiesRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface ImportEntitiesRequestOrBuilder @@ -36,6 +36,7 @@ public interface ImportEntitiesRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -59,6 +60,7 @@ public interface ImportEntitiesRequestOrBuilder * map<string, string> labels = 2; */ int getLabelsCount(); + /** * * @@ -69,9 +71,11 @@ public interface ImportEntitiesRequestOrBuilder * map<string, string> labels = 2; */ boolean containsLabels(java.lang.String key); + /** Use {@link #getLabelsMap()} instead. */ @java.lang.Deprecated java.util.Map getLabels(); + /** * * @@ -82,6 +86,7 @@ public interface ImportEntitiesRequestOrBuilder * map<string, string> labels = 2; */ java.util.Map getLabelsMap(); + /** * * @@ -96,6 +101,7 @@ java.lang.String getLabelsOrDefault( java.lang.String key, /* nullable */ java.lang.String defaultValue); + /** * * @@ -132,6 +138,7 @@ java.lang.String getLabelsOrDefault( * @return The inputUrl. */ java.lang.String getInputUrl(); + /** * * @@ -173,6 +180,7 @@ java.lang.String getLabelsOrDefault( * @return Whether the entityFilter field is set. */ boolean hasEntityFilter(); + /** * * @@ -188,6 +196,7 @@ java.lang.String getLabelsOrDefault( * @return The entityFilter. */ com.google.datastore.admin.v1.EntityFilter getEntityFilter(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Index.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Index.java index 7244182dc..0f2721672 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Index.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Index.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/index.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -33,6 +33,7 @@ public final class Index extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.Index) IndexOrBuilder { private static final long serialVersionUID = 0L; + // Use Index.newBuilder() to construct. private Index(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -122,6 +123,7 @@ public enum AncestorMode implements com.google.protobuf.ProtocolMessageEnum { * ANCESTOR_MODE_UNSPECIFIED = 0; */ public static final int ANCESTOR_MODE_UNSPECIFIED_VALUE = 0; + /** * * @@ -132,6 +134,7 @@ public enum AncestorMode implements com.google.protobuf.ProtocolMessageEnum { * NONE = 1; */ public static final int NONE_VALUE = 1; + /** * * @@ -281,6 +284,7 @@ public enum Direction implements com.google.protobuf.ProtocolMessageEnum { * DIRECTION_UNSPECIFIED = 0; */ public static final int DIRECTION_UNSPECIFIED_VALUE = 0; + /** * * @@ -292,6 +296,7 @@ public enum Direction implements com.google.protobuf.ProtocolMessageEnum { * ASCENDING = 1; */ public static final int ASCENDING_VALUE = 1; + /** * * @@ -473,6 +478,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * STATE_UNSPECIFIED = 0; */ public static final int STATE_UNSPECIFIED_VALUE = 0; + /** * * @@ -486,6 +492,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * CREATING = 1; */ public static final int CREATING_VALUE = 1; + /** * * @@ -498,6 +505,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * READY = 2; */ public static final int READY_VALUE = 2; + /** * * @@ -511,6 +519,7 @@ public enum State implements com.google.protobuf.ProtocolMessageEnum { * DELETING = 3; */ public static final int DELETING_VALUE = 3; + /** * * @@ -631,6 +640,7 @@ public interface IndexedPropertyOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -659,6 +669,7 @@ public interface IndexedPropertyOrBuilder * @return The enum numeric value on the wire for direction. */ int getDirectionValue(); + /** * * @@ -675,6 +686,7 @@ public interface IndexedPropertyOrBuilder */ com.google.datastore.admin.v1.Index.Direction getDirection(); } + /** * * @@ -689,6 +701,7 @@ public static final class IndexedProperty extends com.google.protobuf.GeneratedM // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.Index.IndexedProperty) IndexedPropertyOrBuilder { private static final long serialVersionUID = 0L; + // Use IndexedProperty.newBuilder() to construct. private IndexedProperty(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -724,6 +737,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -747,6 +761,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -773,6 +788,7 @@ public com.google.protobuf.ByteString getNameBytes() { public static final int DIRECTION_FIELD_NUMBER = 2; private int direction_ = 0; + /** * * @@ -791,6 +807,7 @@ public com.google.protobuf.ByteString getNameBytes() { public int getDirectionValue() { return direction_; } + /** * * @@ -984,6 +1001,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -1184,6 +1202,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -1206,6 +1225,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1228,6 +1248,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1249,6 +1270,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1266,6 +1288,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * @@ -1290,6 +1313,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { } private int direction_ = 0; + /** * * @@ -1308,6 +1332,7 @@ public Builder setNameBytes(com.google.protobuf.ByteString value) { public int getDirectionValue() { return direction_; } + /** * * @@ -1329,6 +1354,7 @@ public Builder setDirectionValue(int value) { onChanged(); return this; } + /** * * @@ -1349,6 +1375,7 @@ public com.google.datastore.admin.v1.Index.Direction getDirection() { com.google.datastore.admin.v1.Index.Direction.forNumber(direction_); return result == null ? com.google.datastore.admin.v1.Index.Direction.UNRECOGNIZED : result; } + /** * * @@ -1373,6 +1400,7 @@ public Builder setDirection(com.google.datastore.admin.v1.Index.Direction value) onChanged(); return this; } + /** * * @@ -1462,6 +1490,7 @@ public com.google.datastore.admin.v1.Index.IndexedProperty getDefaultInstanceFor @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -1485,6 +1514,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -1513,6 +1543,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object indexId_ = ""; + /** * * @@ -1536,6 +1567,7 @@ public java.lang.String getIndexId() { return s; } } + /** * * @@ -1564,6 +1596,7 @@ public com.google.protobuf.ByteString getIndexIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object kind_ = ""; + /** * * @@ -1587,6 +1620,7 @@ public java.lang.String getKind() { return s; } } + /** * * @@ -1613,6 +1647,7 @@ public com.google.protobuf.ByteString getKindBytes() { public static final int ANCESTOR_FIELD_NUMBER = 5; private int ancestor_ = 0; + /** * * @@ -1631,6 +1666,7 @@ public com.google.protobuf.ByteString getKindBytes() { public int getAncestorValue() { return ancestor_; } + /** * * @@ -1656,6 +1692,7 @@ public com.google.datastore.admin.v1.Index.AncestorMode getAncestor() { @SuppressWarnings("serial") private java.util.List properties_; + /** * * @@ -1675,6 +1712,7 @@ public com.google.datastore.admin.v1.Index.AncestorMode getAncestor() { public java.util.List getPropertiesList() { return properties_; } + /** * * @@ -1695,6 +1733,7 @@ public java.util.List getPr getPropertiesOrBuilderList() { return properties_; } + /** * * @@ -1714,6 +1753,7 @@ public java.util.List getPr public int getPropertiesCount() { return properties_.size(); } + /** * * @@ -1733,6 +1773,7 @@ public int getPropertiesCount() { public com.google.datastore.admin.v1.Index.IndexedProperty getProperties(int index) { return properties_.get(index); } + /** * * @@ -1756,6 +1797,7 @@ public com.google.datastore.admin.v1.Index.IndexedPropertyOrBuilder getPropertie public static final int STATE_FIELD_NUMBER = 7; private int state_ = 0; + /** * * @@ -1773,6 +1815,7 @@ public com.google.datastore.admin.v1.Index.IndexedPropertyOrBuilder getPropertie public int getStateValue() { return state_; } + /** * * @@ -1999,6 +2042,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -2298,6 +2342,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -2320,6 +2365,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -2342,6 +2388,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2363,6 +2410,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2380,6 +2428,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -2404,6 +2453,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object indexId_ = ""; + /** * * @@ -2426,6 +2476,7 @@ public java.lang.String getIndexId() { return (java.lang.String) ref; } } + /** * * @@ -2448,6 +2499,7 @@ public com.google.protobuf.ByteString getIndexIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2469,6 +2521,7 @@ public Builder setIndexId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2486,6 +2539,7 @@ public Builder clearIndexId() { onChanged(); return this; } + /** * * @@ -2510,6 +2564,7 @@ public Builder setIndexIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object kind_ = ""; + /** * * @@ -2532,6 +2587,7 @@ public java.lang.String getKind() { return (java.lang.String) ref; } } + /** * * @@ -2554,6 +2610,7 @@ public com.google.protobuf.ByteString getKindBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2575,6 +2632,7 @@ public Builder setKind(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2592,6 +2650,7 @@ public Builder clearKind() { onChanged(); return this; } + /** * * @@ -2616,6 +2675,7 @@ public Builder setKindBytes(com.google.protobuf.ByteString value) { } private int ancestor_ = 0; + /** * * @@ -2634,6 +2694,7 @@ public Builder setKindBytes(com.google.protobuf.ByteString value) { public int getAncestorValue() { return ancestor_; } + /** * * @@ -2655,6 +2716,7 @@ public Builder setAncestorValue(int value) { onChanged(); return this; } + /** * * @@ -2677,6 +2739,7 @@ public com.google.datastore.admin.v1.Index.AncestorMode getAncestor() { ? com.google.datastore.admin.v1.Index.AncestorMode.UNRECOGNIZED : result; } + /** * * @@ -2701,6 +2764,7 @@ public Builder setAncestor(com.google.datastore.admin.v1.Index.AncestorMode valu onChanged(); return this; } + /** * * @@ -2762,6 +2826,7 @@ public java.util.List getPr return propertiesBuilder_.getMessageList(); } } + /** * * @@ -2784,6 +2849,7 @@ public int getPropertiesCount() { return propertiesBuilder_.getCount(); } } + /** * * @@ -2806,6 +2872,7 @@ public com.google.datastore.admin.v1.Index.IndexedProperty getProperties(int ind return propertiesBuilder_.getMessage(index); } } + /** * * @@ -2835,6 +2902,7 @@ public Builder setProperties( } return this; } + /** * * @@ -2861,6 +2929,7 @@ public Builder setProperties( } return this; } + /** * * @@ -2889,6 +2958,7 @@ public Builder addProperties(com.google.datastore.admin.v1.Index.IndexedProperty } return this; } + /** * * @@ -2918,6 +2988,7 @@ public Builder addProperties( } return this; } + /** * * @@ -2944,6 +3015,7 @@ public Builder addProperties( } return this; } + /** * * @@ -2970,6 +3042,7 @@ public Builder addProperties( } return this; } + /** * * @@ -2996,6 +3069,7 @@ public Builder addAllProperties( } return this; } + /** * * @@ -3021,6 +3095,7 @@ public Builder clearProperties() { } return this; } + /** * * @@ -3046,6 +3121,7 @@ public Builder removeProperties(int index) { } return this; } + /** * * @@ -3065,6 +3141,7 @@ public com.google.datastore.admin.v1.Index.IndexedProperty.Builder getProperties int index) { return getPropertiesFieldBuilder().getBuilder(index); } + /** * * @@ -3088,6 +3165,7 @@ public com.google.datastore.admin.v1.Index.IndexedPropertyOrBuilder getPropertie return propertiesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -3111,6 +3189,7 @@ public com.google.datastore.admin.v1.Index.IndexedPropertyOrBuilder getPropertie return java.util.Collections.unmodifiableList(properties_); } } + /** * * @@ -3130,6 +3209,7 @@ public com.google.datastore.admin.v1.Index.IndexedProperty.Builder addProperties return getPropertiesFieldBuilder() .addBuilder(com.google.datastore.admin.v1.Index.IndexedProperty.getDefaultInstance()); } + /** * * @@ -3151,6 +3231,7 @@ public com.google.datastore.admin.v1.Index.IndexedProperty.Builder addProperties .addBuilder( index, com.google.datastore.admin.v1.Index.IndexedProperty.getDefaultInstance()); } + /** * * @@ -3189,6 +3270,7 @@ public com.google.datastore.admin.v1.Index.IndexedProperty.Builder addProperties } private int state_ = 0; + /** * * @@ -3206,6 +3288,7 @@ public com.google.datastore.admin.v1.Index.IndexedProperty.Builder addProperties public int getStateValue() { return state_; } + /** * * @@ -3226,6 +3309,7 @@ public Builder setStateValue(int value) { onChanged(); return this; } + /** * * @@ -3245,6 +3329,7 @@ public com.google.datastore.admin.v1.Index.State getState() { com.google.datastore.admin.v1.Index.State.forNumber(state_); return result == null ? com.google.datastore.admin.v1.Index.State.UNRECOGNIZED : result; } + /** * * @@ -3268,6 +3353,7 @@ public Builder setState(com.google.datastore.admin.v1.Index.State value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadata.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadata.java index 96b2a12ac..c66aa37d4 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadata.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -33,6 +33,7 @@ public final class IndexOperationMetadata extends com.google.protobuf.GeneratedM // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.IndexOperationMetadata) IndexOperationMetadataOrBuilder { private static final long serialVersionUID = 0L; + // Use IndexOperationMetadata.newBuilder() to construct. private IndexOperationMetadata(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -66,6 +67,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int COMMON_FIELD_NUMBER = 1; private com.google.datastore.admin.v1.CommonMetadata common_; + /** * * @@ -81,6 +83,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasCommon() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -98,6 +101,7 @@ public com.google.datastore.admin.v1.CommonMetadata getCommon() { ? com.google.datastore.admin.v1.CommonMetadata.getDefaultInstance() : common_; } + /** * * @@ -116,6 +120,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public static final int PROGRESS_ENTITIES_FIELD_NUMBER = 2; private com.google.datastore.admin.v1.Progress progressEntities_; + /** * * @@ -131,6 +136,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public boolean hasProgressEntities() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -148,6 +154,7 @@ public com.google.datastore.admin.v1.Progress getProgressEntities() { ? com.google.datastore.admin.v1.Progress.getDefaultInstance() : progressEntities_; } + /** * * @@ -168,6 +175,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil @SuppressWarnings("serial") private volatile java.lang.Object indexId_ = ""; + /** * * @@ -191,6 +199,7 @@ public java.lang.String getIndexId() { return s; } } + /** * * @@ -402,6 +411,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -641,6 +651,7 @@ public Builder mergeFrom( com.google.datastore.admin.v1.CommonMetadata.Builder, com.google.datastore.admin.v1.CommonMetadataOrBuilder> commonBuilder_; + /** * * @@ -655,6 +666,7 @@ public Builder mergeFrom( public boolean hasCommon() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -675,6 +687,7 @@ public com.google.datastore.admin.v1.CommonMetadata getCommon() { return commonBuilder_.getMessage(); } } + /** * * @@ -697,6 +710,7 @@ public Builder setCommon(com.google.datastore.admin.v1.CommonMetadata value) { onChanged(); return this; } + /** * * @@ -716,6 +730,7 @@ public Builder setCommon(com.google.datastore.admin.v1.CommonMetadata.Builder bu onChanged(); return this; } + /** * * @@ -743,6 +758,7 @@ public Builder mergeCommon(com.google.datastore.admin.v1.CommonMetadata value) { } return this; } + /** * * @@ -762,6 +778,7 @@ public Builder clearCommon() { onChanged(); return this; } + /** * * @@ -776,6 +793,7 @@ public com.google.datastore.admin.v1.CommonMetadata.Builder getCommonBuilder() { onChanged(); return getCommonFieldBuilder().getBuilder(); } + /** * * @@ -794,6 +812,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( : common_; } } + /** * * @@ -826,6 +845,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( com.google.datastore.admin.v1.Progress.Builder, com.google.datastore.admin.v1.ProgressOrBuilder> progressEntitiesBuilder_; + /** * * @@ -840,6 +860,7 @@ public com.google.datastore.admin.v1.CommonMetadataOrBuilder getCommonOrBuilder( public boolean hasProgressEntities() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -860,6 +881,7 @@ public com.google.datastore.admin.v1.Progress getProgressEntities() { return progressEntitiesBuilder_.getMessage(); } } + /** * * @@ -882,6 +904,7 @@ public Builder setProgressEntities(com.google.datastore.admin.v1.Progress value) onChanged(); return this; } + /** * * @@ -902,6 +925,7 @@ public Builder setProgressEntities( onChanged(); return this; } + /** * * @@ -929,6 +953,7 @@ public Builder mergeProgressEntities(com.google.datastore.admin.v1.Progress valu } return this; } + /** * * @@ -948,6 +973,7 @@ public Builder clearProgressEntities() { onChanged(); return this; } + /** * * @@ -962,6 +988,7 @@ public com.google.datastore.admin.v1.Progress.Builder getProgressEntitiesBuilder onChanged(); return getProgressEntitiesFieldBuilder().getBuilder(); } + /** * * @@ -980,6 +1007,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil : progressEntities_; } } + /** * * @@ -1007,6 +1035,7 @@ public com.google.datastore.admin.v1.ProgressOrBuilder getProgressEntitiesOrBuil } private java.lang.Object indexId_ = ""; + /** * * @@ -1029,6 +1058,7 @@ public java.lang.String getIndexId() { return (java.lang.String) ref; } } + /** * * @@ -1051,6 +1081,7 @@ public com.google.protobuf.ByteString getIndexIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1072,6 +1103,7 @@ public Builder setIndexId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1089,6 +1121,7 @@ public Builder clearIndexId() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadataOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadataOrBuilder.java index 20348e044..ba34cbf02 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadataOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOperationMetadataOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface IndexOperationMetadataOrBuilder @@ -36,6 +36,7 @@ public interface IndexOperationMetadataOrBuilder * @return Whether the common field is set. */ boolean hasCommon(); + /** * * @@ -48,6 +49,7 @@ public interface IndexOperationMetadataOrBuilder * @return The common. */ com.google.datastore.admin.v1.CommonMetadata getCommon(); + /** * * @@ -71,6 +73,7 @@ public interface IndexOperationMetadataOrBuilder * @return Whether the progressEntities field is set. */ boolean hasProgressEntities(); + /** * * @@ -83,6 +86,7 @@ public interface IndexOperationMetadataOrBuilder * @return The progressEntities. */ com.google.datastore.admin.v1.Progress getProgressEntities(); + /** * * @@ -106,6 +110,7 @@ public interface IndexOperationMetadataOrBuilder * @return The indexId. */ java.lang.String getIndexId(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOrBuilder.java index 25373353b..a786ec0c3 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/index.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface IndexOrBuilder @@ -36,6 +36,7 @@ public interface IndexOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -61,6 +62,7 @@ public interface IndexOrBuilder * @return The indexId. */ java.lang.String getIndexId(); + /** * * @@ -86,6 +88,7 @@ public interface IndexOrBuilder * @return The kind. */ java.lang.String getKind(); + /** * * @@ -114,6 +117,7 @@ public interface IndexOrBuilder * @return The enum numeric value on the wire for ancestor. */ int getAncestorValue(); + /** * * @@ -146,6 +150,7 @@ public interface IndexOrBuilder * */ java.util.List getPropertiesList(); + /** * * @@ -162,6 +167,7 @@ public interface IndexOrBuilder * */ com.google.datastore.admin.v1.Index.IndexedProperty getProperties(int index); + /** * * @@ -178,6 +184,7 @@ public interface IndexOrBuilder * */ int getPropertiesCount(); + /** * * @@ -195,6 +202,7 @@ public interface IndexOrBuilder */ java.util.List getPropertiesOrBuilderList(); + /** * * @@ -226,6 +234,7 @@ public interface IndexOrBuilder * @return The enum numeric value on the wire for state. */ int getStateValue(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexProto.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexProto.java index 9dbdecdf1..e66e42843 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexProto.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/IndexProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/index.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public final class IndexProto { @@ -45,30 +45,42 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n%google/datastore/admin/v1/index.proto\022" - + "\031google.datastore.admin.v1\032\037google/api/f" - + "ield_behavior.proto\"\346\004\n\005Index\022\027\n\nproject" - + "_id\030\001 \001(\tB\003\340A\003\022\025\n\010index_id\030\003 \001(\tB\003\340A\003\022\021\n" - + "\004kind\030\004 \001(\tB\003\340A\002\022D\n\010ancestor\030\005 \001(\0162-.goo" - + "gle.datastore.admin.v1.Index.AncestorMod" - + "eB\003\340A\002\022I\n\nproperties\030\006 \003(\01320.google.data" - + "store.admin.v1.Index.IndexedPropertyB\003\340A" - + "\002\022:\n\005state\030\007 \001(\0162&.google.datastore.admi" - + "n.v1.Index.StateB\003\340A\003\032h\n\017IndexedProperty" - + "\022\021\n\004name\030\001 \001(\tB\003\340A\002\022B\n\tdirection\030\002 \001(\0162*" - + ".google.datastore.admin.v1.Index.Directi" - + "onB\003\340A\002\"J\n\014AncestorMode\022\035\n\031ANCESTOR_MODE" - + "_UNSPECIFIED\020\000\022\010\n\004NONE\020\001\022\021\n\rALL_ANCESTOR" - + "S\020\002\"E\n\tDirection\022\031\n\025DIRECTION_UNSPECIFIE" - + "D\020\000\022\r\n\tASCENDING\020\001\022\016\n\nDESCENDING\020\002\"P\n\005St" - + "ate\022\025\n\021STATE_UNSPECIFIED\020\000\022\014\n\010CREATING\020\001" - + "\022\t\n\005READY\020\002\022\014\n\010DELETING\020\003\022\t\n\005ERROR\020\004B\322\001\n" - + "\035com.google.datastore.admin.v1B\nIndexPro" - + "toP\001Z9cloud.google.com/go/datastore/admi" + "\n" + + "%google/datastore/admin/v1/index.proto\022" + + "\031google.datastore.admin.v1\032\037google/api/field_behavior.proto\"\346\004\n" + + "\005Index\022\027\n\n" + + "project_id\030\001 \001(\tB\003\340A\003\022\025\n" + + "\010index_id\030\003 \001(\tB\003\340A\003\022\021\n" + + "\004kind\030\004 \001(\tB\003\340A\002\022D\n" + + "\010ancestor\030\005 \001(\0162-.goo" + + "gle.datastore.admin.v1.Index.AncestorModeB\003\340A\002\022I\n\n" + + "properties\030\006 \003(\01320.google.data" + + "store.admin.v1.Index.IndexedPropertyB\003\340A\002\022:\n" + + "\005state\030\007" + + " \001(\0162&.google.datastore.admin.v1.Index.StateB\003\340A\003\032h\n" + + "\017IndexedProperty\022\021\n" + + "\004name\030\001 \001(\tB\003\340A\002\022B\n" + + "\tdirection\030\002 \001(\0162*" + + ".google.datastore.admin.v1.Index.DirectionB\003\340A\002\"J\n" + + "\014AncestorMode\022\035\n" + + "\031ANCESTOR_MODE_UNSPECIFIED\020\000\022\010\n" + + "\004NONE\020\001\022\021\n\r" + + "ALL_ANCESTORS\020\002\"E\n" + + "\tDirection\022\031\n" + + "\025DIRECTION_UNSPECIFIED\020\000\022\r\n" + + "\tASCENDING\020\001\022\016\n\n" + + "DESCENDING\020\002\"P\n" + + "\005State\022\025\n" + + "\021STATE_UNSPECIFIED\020\000\022\014\n" + + "\010CREATING\020\001\022\t\n" + + "\005READY\020\002\022\014\n" + + "\010DELETING\020\003\022\t\n" + + "\005ERROR\020\004B\322\001\n" + + "\035com.google.datastore.admin.v1B\n" + + "IndexProtoP\001Z9cloud.google.com/go/datastore/admi" + "n/apiv1/adminpb;adminpb\252\002\037Google.Cloud.D" + "atastore.Admin.V1\312\002\037Google\\Cloud\\Datasto" - + "re\\Admin\\V1\352\002#Google::Cloud::Datastore::" - + "Admin::V1b\006proto3" + + "re\\Admin\\V1\352\002#Google::Cloud::Datastore::Admin::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequest.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequest.java index 5eb553c33..ca32a0fa3 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequest.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -34,6 +34,7 @@ public final class ListIndexesRequest extends com.google.protobuf.GeneratedMessa // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.ListIndexesRequest) ListIndexesRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use ListIndexesRequest.newBuilder() to construct. private ListIndexesRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -70,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +95,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -121,6 +124,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object filter_ = ""; + /** * string filter = 3; * @@ -138,6 +142,7 @@ public java.lang.String getFilter() { return s; } } + /** * string filter = 3; * @@ -158,6 +163,7 @@ public com.google.protobuf.ByteString getFilterBytes() { public static final int PAGE_SIZE_FIELD_NUMBER = 4; private int pageSize_ = 0; + /** * * @@ -179,6 +185,7 @@ public int getPageSize() { @SuppressWarnings("serial") private volatile java.lang.Object pageToken_ = ""; + /** * * @@ -202,6 +209,7 @@ public java.lang.String getPageToken() { return s; } } + /** * * @@ -412,6 +420,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -640,6 +649,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -662,6 +672,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -684,6 +695,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -705,6 +717,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -722,6 +735,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -746,6 +760,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object filter_ = ""; + /** * string filter = 3; * @@ -762,6 +777,7 @@ public java.lang.String getFilter() { return (java.lang.String) ref; } } + /** * string filter = 3; * @@ -778,6 +794,7 @@ public com.google.protobuf.ByteString getFilterBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * string filter = 3; * @@ -793,6 +810,7 @@ public Builder setFilter(java.lang.String value) { onChanged(); return this; } + /** * string filter = 3; * @@ -804,6 +822,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * string filter = 3; * @@ -822,6 +841,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { } private int pageSize_; + /** * * @@ -838,6 +858,7 @@ public Builder setFilterBytes(com.google.protobuf.ByteString value) { public int getPageSize() { return pageSize_; } + /** * * @@ -858,6 +879,7 @@ public Builder setPageSize(int value) { onChanged(); return this; } + /** * * @@ -878,6 +900,7 @@ public Builder clearPageSize() { } private java.lang.Object pageToken_ = ""; + /** * * @@ -900,6 +923,7 @@ public java.lang.String getPageToken() { return (java.lang.String) ref; } } + /** * * @@ -922,6 +946,7 @@ public com.google.protobuf.ByteString getPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -943,6 +968,7 @@ public Builder setPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -960,6 +986,7 @@ public Builder clearPageToken() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequestOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequestOrBuilder.java index 389feb19a..1c4c70c35 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequestOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface ListIndexesRequestOrBuilder @@ -36,6 +36,7 @@ public interface ListIndexesRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -55,6 +56,7 @@ public interface ListIndexesRequestOrBuilder * @return The filter. */ java.lang.String getFilter(); + /** * string filter = 3; * @@ -88,6 +90,7 @@ public interface ListIndexesRequestOrBuilder * @return The pageToken. */ java.lang.String getPageToken(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponse.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponse.java index 05da1f24d..3aae0bc18 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponse.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -34,6 +34,7 @@ public final class ListIndexesResponse extends com.google.protobuf.GeneratedMess // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.ListIndexesResponse) ListIndexesResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use ListIndexesResponse.newBuilder() to construct. private ListIndexesResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -69,6 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List indexes_; + /** * * @@ -82,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getIndexesList() { return indexes_; } + /** * * @@ -96,6 +99,7 @@ public java.util.List getIndexesList() { getIndexesOrBuilderList() { return indexes_; } + /** * * @@ -109,6 +113,7 @@ public java.util.List getIndexesList() { public int getIndexesCount() { return indexes_.size(); } + /** * * @@ -122,6 +127,7 @@ public int getIndexesCount() { public com.google.datastore.admin.v1.Index getIndexes(int index) { return indexes_.get(index); } + /** * * @@ -140,6 +146,7 @@ public com.google.datastore.admin.v1.IndexOrBuilder getIndexesOrBuilder(int inde @SuppressWarnings("serial") private volatile java.lang.Object nextPageToken_ = ""; + /** * * @@ -163,6 +170,7 @@ public java.lang.String getNextPageToken() { return s; } } + /** * * @@ -357,6 +365,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -634,6 +643,7 @@ public java.util.List getIndexesList() { return indexesBuilder_.getMessageList(); } } + /** * * @@ -650,6 +660,7 @@ public int getIndexesCount() { return indexesBuilder_.getCount(); } } + /** * * @@ -666,6 +677,7 @@ public com.google.datastore.admin.v1.Index getIndexes(int index) { return indexesBuilder_.getMessage(index); } } + /** * * @@ -688,6 +700,7 @@ public Builder setIndexes(int index, com.google.datastore.admin.v1.Index value) } return this; } + /** * * @@ -708,6 +721,7 @@ public Builder setIndexes( } return this; } + /** * * @@ -730,6 +744,7 @@ public Builder addIndexes(com.google.datastore.admin.v1.Index value) { } return this; } + /** * * @@ -752,6 +767,7 @@ public Builder addIndexes(int index, com.google.datastore.admin.v1.Index value) } return this; } + /** * * @@ -771,6 +787,7 @@ public Builder addIndexes(com.google.datastore.admin.v1.Index.Builder builderFor } return this; } + /** * * @@ -791,6 +808,7 @@ public Builder addIndexes( } return this; } + /** * * @@ -811,6 +829,7 @@ public Builder addAllIndexes( } return this; } + /** * * @@ -830,6 +849,7 @@ public Builder clearIndexes() { } return this; } + /** * * @@ -849,6 +869,7 @@ public Builder removeIndexes(int index) { } return this; } + /** * * @@ -861,6 +882,7 @@ public Builder removeIndexes(int index) { public com.google.datastore.admin.v1.Index.Builder getIndexesBuilder(int index) { return getIndexesFieldBuilder().getBuilder(index); } + /** * * @@ -877,6 +899,7 @@ public com.google.datastore.admin.v1.IndexOrBuilder getIndexesOrBuilder(int inde return indexesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -894,6 +917,7 @@ public com.google.datastore.admin.v1.IndexOrBuilder getIndexesOrBuilder(int inde return java.util.Collections.unmodifiableList(indexes_); } } + /** * * @@ -907,6 +931,7 @@ public com.google.datastore.admin.v1.Index.Builder addIndexesBuilder() { return getIndexesFieldBuilder() .addBuilder(com.google.datastore.admin.v1.Index.getDefaultInstance()); } + /** * * @@ -920,6 +945,7 @@ public com.google.datastore.admin.v1.Index.Builder addIndexesBuilder(int index) return getIndexesFieldBuilder() .addBuilder(index, com.google.datastore.admin.v1.Index.getDefaultInstance()); } + /** * * @@ -951,6 +977,7 @@ public java.util.List getIndexesBui } private java.lang.Object nextPageToken_ = ""; + /** * * @@ -973,6 +1000,7 @@ public java.lang.String getNextPageToken() { return (java.lang.String) ref; } } + /** * * @@ -995,6 +1023,7 @@ public com.google.protobuf.ByteString getNextPageTokenBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1016,6 +1045,7 @@ public Builder setNextPageToken(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1033,6 +1063,7 @@ public Builder clearNextPageToken() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponseOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponseOrBuilder.java index e6b8e4376..c89b116ed 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponseOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ListIndexesResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface ListIndexesResponseOrBuilder @@ -34,6 +34,7 @@ public interface ListIndexesResponseOrBuilder * repeated .google.datastore.admin.v1.Index indexes = 1; */ java.util.List getIndexesList(); + /** * * @@ -44,6 +45,7 @@ public interface ListIndexesResponseOrBuilder * repeated .google.datastore.admin.v1.Index indexes = 1; */ com.google.datastore.admin.v1.Index getIndexes(int index); + /** * * @@ -54,6 +56,7 @@ public interface ListIndexesResponseOrBuilder * repeated .google.datastore.admin.v1.Index indexes = 1; */ int getIndexesCount(); + /** * * @@ -64,6 +67,7 @@ public interface ListIndexesResponseOrBuilder * repeated .google.datastore.admin.v1.Index indexes = 1; */ java.util.List getIndexesOrBuilderList(); + /** * * @@ -87,6 +91,7 @@ public interface ListIndexesResponseOrBuilder * @return The nextPageToken. */ java.lang.String getNextPageToken(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEvent.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEvent.java index d69e36b88..7833fb2a2 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEvent.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/migration.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -35,6 +35,7 @@ public final class MigrationProgressEvent extends com.google.protobuf.GeneratedM // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.MigrationProgressEvent) MigrationProgressEventOrBuilder { private static final long serialVersionUID = 0L; + // Use MigrationProgressEvent.newBuilder() to construct. private MigrationProgressEvent(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -128,6 +129,7 @@ public enum ConcurrencyMode implements com.google.protobuf.ProtocolMessageEnum { * CONCURRENCY_MODE_UNSPECIFIED = 0; */ public static final int CONCURRENCY_MODE_UNSPECIFIED_VALUE = 0; + /** * * @@ -138,6 +140,7 @@ public enum ConcurrencyMode implements com.google.protobuf.ProtocolMessageEnum { * PESSIMISTIC = 1; */ public static final int PESSIMISTIC_VALUE = 1; + /** * * @@ -148,6 +151,7 @@ public enum ConcurrencyMode implements com.google.protobuf.ProtocolMessageEnum { * OPTIMISTIC = 2; */ public static final int OPTIMISTIC_VALUE = 2; + /** * * @@ -267,6 +271,7 @@ public interface PrepareStepDetailsOrBuilder * @return The enum numeric value on the wire for concurrencyMode. */ int getConcurrencyModeValue(); + /** * * @@ -282,6 +287,7 @@ public interface PrepareStepDetailsOrBuilder */ com.google.datastore.admin.v1.MigrationProgressEvent.ConcurrencyMode getConcurrencyMode(); } + /** * * @@ -296,6 +302,7 @@ public static final class PrepareStepDetails extends com.google.protobuf.Generat // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.MigrationProgressEvent.PrepareStepDetails) PrepareStepDetailsOrBuilder { private static final long serialVersionUID = 0L; + // Use PrepareStepDetails.newBuilder() to construct. private PrepareStepDetails(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -329,6 +336,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int CONCURRENCY_MODE_FIELD_NUMBER = 1; private int concurrencyMode_ = 0; + /** * * @@ -346,6 +354,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getConcurrencyModeValue() { return concurrencyMode_; } + /** * * @@ -539,6 +548,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -735,6 +745,7 @@ public Builder mergeFrom( private int bitField0_; private int concurrencyMode_ = 0; + /** * * @@ -753,6 +764,7 @@ public Builder mergeFrom( public int getConcurrencyModeValue() { return concurrencyMode_; } + /** * * @@ -774,6 +786,7 @@ public Builder setConcurrencyModeValue(int value) { onChanged(); return this; } + /** * * @@ -798,6 +811,7 @@ public Builder setConcurrencyModeValue(int value) { ? com.google.datastore.admin.v1.MigrationProgressEvent.ConcurrencyMode.UNRECOGNIZED : result; } + /** * * @@ -823,6 +837,7 @@ public Builder setConcurrencyMode( onChanged(); return this; } + /** * * @@ -930,6 +945,7 @@ public interface RedirectWritesStepDetailsOrBuilder * @return The enum numeric value on the wire for concurrencyMode. */ int getConcurrencyModeValue(); + /** * * @@ -944,6 +960,7 @@ public interface RedirectWritesStepDetailsOrBuilder */ com.google.datastore.admin.v1.MigrationProgressEvent.ConcurrencyMode getConcurrencyMode(); } + /** * * @@ -959,6 +976,7 @@ public static final class RedirectWritesStepDetails extends com.google.protobuf. // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.MigrationProgressEvent.RedirectWritesStepDetails) RedirectWritesStepDetailsOrBuilder { private static final long serialVersionUID = 0L; + // Use RedirectWritesStepDetails.newBuilder() to construct. private RedirectWritesStepDetails(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -992,6 +1010,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int CONCURRENCY_MODE_FIELD_NUMBER = 1; private int concurrencyMode_ = 0; + /** * * @@ -1008,6 +1027,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getConcurrencyModeValue() { return concurrencyMode_; } + /** * * @@ -1206,6 +1226,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -1408,6 +1429,7 @@ public Builder mergeFrom( private int bitField0_; private int concurrencyMode_ = 0; + /** * * @@ -1425,6 +1447,7 @@ public Builder mergeFrom( public int getConcurrencyModeValue() { return concurrencyMode_; } + /** * * @@ -1445,6 +1468,7 @@ public Builder setConcurrencyModeValue(int value) { onChanged(); return this; } + /** * * @@ -1468,6 +1492,7 @@ public Builder setConcurrencyModeValue(int value) { ? com.google.datastore.admin.v1.MigrationProgressEvent.ConcurrencyMode.UNRECOGNIZED : result; } + /** * * @@ -1492,6 +1517,7 @@ public Builder setConcurrencyMode( onChanged(); return this; } + /** * * @@ -1598,6 +1624,7 @@ public enum StepDetailsCase private StepDetailsCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -1632,6 +1659,7 @@ public StepDetailsCase getStepDetailsCase() { public static final int STEP_FIELD_NUMBER = 1; private int step_ = 0; + /** * * @@ -1650,6 +1678,7 @@ public StepDetailsCase getStepDetailsCase() { public int getStepValue() { return step_; } + /** * * @@ -1672,6 +1701,7 @@ public com.google.datastore.admin.v1.MigrationStep getStep() { } public static final int PREPARE_STEP_DETAILS_FIELD_NUMBER = 2; + /** * * @@ -1689,6 +1719,7 @@ public com.google.datastore.admin.v1.MigrationStep getStep() { public boolean hasPrepareStepDetails() { return stepDetailsCase_ == 2; } + /** * * @@ -1711,6 +1742,7 @@ public boolean hasPrepareStepDetails() { return com.google.datastore.admin.v1.MigrationProgressEvent.PrepareStepDetails .getDefaultInstance(); } + /** * * @@ -1733,6 +1765,7 @@ public boolean hasPrepareStepDetails() { } public static final int REDIRECT_WRITES_STEP_DETAILS_FIELD_NUMBER = 3; + /** * * @@ -1750,6 +1783,7 @@ public boolean hasPrepareStepDetails() { public boolean hasRedirectWritesStepDetails() { return stepDetailsCase_ == 3; } + /** * * @@ -1773,6 +1807,7 @@ public boolean hasRedirectWritesStepDetails() { return com.google.datastore.admin.v1.MigrationProgressEvent.RedirectWritesStepDetails .getDefaultInstance(); } + /** * * @@ -2005,6 +2040,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -2253,6 +2289,7 @@ public Builder clearStepDetails() { private int bitField0_; private int step_ = 0; + /** * * @@ -2271,6 +2308,7 @@ public Builder clearStepDetails() { public int getStepValue() { return step_; } + /** * * @@ -2292,6 +2330,7 @@ public Builder setStepValue(int value) { onChanged(); return this; } + /** * * @@ -2312,6 +2351,7 @@ public com.google.datastore.admin.v1.MigrationStep getStep() { com.google.datastore.admin.v1.MigrationStep.forNumber(step_); return result == null ? com.google.datastore.admin.v1.MigrationStep.UNRECOGNIZED : result; } + /** * * @@ -2336,6 +2376,7 @@ public Builder setStep(com.google.datastore.admin.v1.MigrationStep value) { onChanged(); return this; } + /** * * @@ -2362,6 +2403,7 @@ public Builder clearStep() { com.google.datastore.admin.v1.MigrationProgressEvent.PrepareStepDetails.Builder, com.google.datastore.admin.v1.MigrationProgressEvent.PrepareStepDetailsOrBuilder> prepareStepDetailsBuilder_; + /** * * @@ -2379,6 +2421,7 @@ public Builder clearStep() { public boolean hasPrepareStepDetails() { return stepDetailsCase_ == 2; } + /** * * @@ -2410,6 +2453,7 @@ public boolean hasPrepareStepDetails() { .getDefaultInstance(); } } + /** * * @@ -2435,6 +2479,7 @@ public Builder setPrepareStepDetails( stepDetailsCase_ = 2; return this; } + /** * * @@ -2458,6 +2503,7 @@ public Builder setPrepareStepDetails( stepDetailsCase_ = 2; return this; } + /** * * @@ -2496,6 +2542,7 @@ public Builder mergePrepareStepDetails( stepDetailsCase_ = 2; return this; } + /** * * @@ -2523,6 +2570,7 @@ public Builder clearPrepareStepDetails() { } return this; } + /** * * @@ -2538,6 +2586,7 @@ public Builder clearPrepareStepDetails() { getPrepareStepDetailsBuilder() { return getPrepareStepDetailsFieldBuilder().getBuilder(); } + /** * * @@ -2563,6 +2612,7 @@ public Builder clearPrepareStepDetails() { .getDefaultInstance(); } } + /** * * @@ -2606,6 +2656,7 @@ public Builder clearPrepareStepDetails() { com.google.datastore.admin.v1.MigrationProgressEvent.RedirectWritesStepDetails.Builder, com.google.datastore.admin.v1.MigrationProgressEvent.RedirectWritesStepDetailsOrBuilder> redirectWritesStepDetailsBuilder_; + /** * * @@ -2623,6 +2674,7 @@ public Builder clearPrepareStepDetails() { public boolean hasRedirectWritesStepDetails() { return stepDetailsCase_ == 3; } + /** * * @@ -2654,6 +2706,7 @@ public boolean hasRedirectWritesStepDetails() { .getDefaultInstance(); } } + /** * * @@ -2679,6 +2732,7 @@ public Builder setRedirectWritesStepDetails( stepDetailsCase_ = 3; return this; } + /** * * @@ -2702,6 +2756,7 @@ public Builder setRedirectWritesStepDetails( stepDetailsCase_ = 3; return this; } + /** * * @@ -2742,6 +2797,7 @@ public Builder mergeRedirectWritesStepDetails( stepDetailsCase_ = 3; return this; } + /** * * @@ -2769,6 +2825,7 @@ public Builder clearRedirectWritesStepDetails() { } return this; } + /** * * @@ -2784,6 +2841,7 @@ public Builder clearRedirectWritesStepDetails() { getRedirectWritesStepDetailsBuilder() { return getRedirectWritesStepDetailsFieldBuilder().getBuilder(); } + /** * * @@ -2809,6 +2867,7 @@ public Builder clearRedirectWritesStepDetails() { .getDefaultInstance(); } } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEventOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEventOrBuilder.java index 68441b30b..c23e32fbb 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEventOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProgressEventOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/migration.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface MigrationProgressEventOrBuilder @@ -39,6 +39,7 @@ public interface MigrationProgressEventOrBuilder * @return The enum numeric value on the wire for step. */ int getStepValue(); + /** * * @@ -69,6 +70,7 @@ public interface MigrationProgressEventOrBuilder * @return Whether the prepareStepDetails field is set. */ boolean hasPrepareStepDetails(); + /** * * @@ -83,6 +85,7 @@ public interface MigrationProgressEventOrBuilder * @return The prepareStepDetails. */ com.google.datastore.admin.v1.MigrationProgressEvent.PrepareStepDetails getPrepareStepDetails(); + /** * * @@ -111,6 +114,7 @@ public interface MigrationProgressEventOrBuilder * @return Whether the redirectWritesStepDetails field is set. */ boolean hasRedirectWritesStepDetails(); + /** * * @@ -126,6 +130,7 @@ public interface MigrationProgressEventOrBuilder */ com.google.datastore.admin.v1.MigrationProgressEvent.RedirectWritesStepDetails getRedirectWritesStepDetails(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProto.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProto.java index 0c1110444..4da124461 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProto.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/migration.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public final class MigrationProto { diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationState.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationState.java index 1cc537677..5434e3eae 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationState.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationState.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/migration.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -82,6 +82,7 @@ public enum MigrationState implements com.google.protobuf.ProtocolMessageEnum { * MIGRATION_STATE_UNSPECIFIED = 0; */ public static final int MIGRATION_STATE_UNSPECIFIED_VALUE = 0; + /** * * @@ -92,6 +93,7 @@ public enum MigrationState implements com.google.protobuf.ProtocolMessageEnum { * RUNNING = 1; */ public static final int RUNNING_VALUE = 1; + /** * * @@ -102,6 +104,7 @@ public enum MigrationState implements com.google.protobuf.ProtocolMessageEnum { * PAUSED = 2; */ public static final int PAUSED_VALUE = 2; + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEvent.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEvent.java index 54f20a287..1e06a1c49 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEvent.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEvent.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/migration.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -35,6 +35,7 @@ public final class MigrationStateEvent extends com.google.protobuf.GeneratedMess // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.MigrationStateEvent) MigrationStateEventOrBuilder { private static final long serialVersionUID = 0L; + // Use MigrationStateEvent.newBuilder() to construct. private MigrationStateEvent(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -67,6 +68,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int STATE_FIELD_NUMBER = 1; private int state_ = 0; + /** * * @@ -82,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public int getStateValue() { return state_; } + /** * * @@ -261,6 +264,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -445,6 +449,7 @@ public Builder mergeFrom( private int bitField0_; private int state_ = 0; + /** * * @@ -460,6 +465,7 @@ public Builder mergeFrom( public int getStateValue() { return state_; } + /** * * @@ -478,6 +484,7 @@ public Builder setStateValue(int value) { onChanged(); return this; } + /** * * @@ -495,6 +502,7 @@ public com.google.datastore.admin.v1.MigrationState getState() { com.google.datastore.admin.v1.MigrationState.forNumber(state_); return result == null ? com.google.datastore.admin.v1.MigrationState.UNRECOGNIZED : result; } + /** * * @@ -516,6 +524,7 @@ public Builder setState(com.google.datastore.admin.v1.MigrationState value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEventOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEventOrBuilder.java index 3920f71c7..758d5fe00 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEventOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStateEventOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/migration.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface MigrationStateEventOrBuilder @@ -36,6 +36,7 @@ public interface MigrationStateEventOrBuilder * @return The enum numeric value on the wire for state. */ int getStateValue(); + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStep.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStep.java index 6810cfd53..44f3c4c5e 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStep.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/MigrationStep.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/migration.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -123,6 +123,7 @@ public enum MigrationStep implements com.google.protobuf.ProtocolMessageEnum { * MIGRATION_STEP_UNSPECIFIED = 0; */ public static final int MIGRATION_STEP_UNSPECIFIED_VALUE = 0; + /** * * @@ -133,6 +134,7 @@ public enum MigrationStep implements com.google.protobuf.ProtocolMessageEnum { * PREPARE = 6; */ public static final int PREPARE_VALUE = 6; + /** * * @@ -143,6 +145,7 @@ public enum MigrationStep implements com.google.protobuf.ProtocolMessageEnum { * START = 1; */ public static final int START_VALUE = 1; + /** * * @@ -153,6 +156,7 @@ public enum MigrationStep implements com.google.protobuf.ProtocolMessageEnum { * APPLY_WRITES_SYNCHRONOUSLY = 7; */ public static final int APPLY_WRITES_SYNCHRONOUSLY_VALUE = 7; + /** * * @@ -164,6 +168,7 @@ public enum MigrationStep implements com.google.protobuf.ProtocolMessageEnum { * COPY_AND_VERIFY = 2; */ public static final int COPY_AND_VERIFY_VALUE = 2; + /** * * @@ -174,6 +179,7 @@ public enum MigrationStep implements com.google.protobuf.ProtocolMessageEnum { * REDIRECT_EVENTUALLY_CONSISTENT_READS = 3; */ public static final int REDIRECT_EVENTUALLY_CONSISTENT_READS_VALUE = 3; + /** * * @@ -184,6 +190,7 @@ public enum MigrationStep implements com.google.protobuf.ProtocolMessageEnum { * REDIRECT_STRONGLY_CONSISTENT_READS = 4; */ public static final int REDIRECT_STRONGLY_CONSISTENT_READS_VALUE = 4; + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/OperationType.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/OperationType.java index b8a5f327b..db31a688d 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/OperationType.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/OperationType.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -92,6 +92,7 @@ public enum OperationType implements com.google.protobuf.ProtocolMessageEnum { * OPERATION_TYPE_UNSPECIFIED = 0; */ public static final int OPERATION_TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -102,6 +103,7 @@ public enum OperationType implements com.google.protobuf.ProtocolMessageEnum { * EXPORT_ENTITIES = 1; */ public static final int EXPORT_ENTITIES_VALUE = 1; + /** * * @@ -112,6 +114,7 @@ public enum OperationType implements com.google.protobuf.ProtocolMessageEnum { * IMPORT_ENTITIES = 2; */ public static final int IMPORT_ENTITIES_VALUE = 2; + /** * * @@ -122,6 +125,7 @@ public enum OperationType implements com.google.protobuf.ProtocolMessageEnum { * CREATE_INDEX = 3; */ public static final int CREATE_INDEX_VALUE = 3; + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Progress.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Progress.java index 347508413..48580643e 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Progress.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/Progress.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; /** @@ -33,6 +33,7 @@ public final class Progress extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.admin.v1.Progress) ProgressOrBuilder { private static final long serialVersionUID = 0L; + // Use Progress.newBuilder() to construct. private Progress(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -63,6 +64,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int WORK_COMPLETED_FIELD_NUMBER = 1; private long workCompleted_ = 0L; + /** * * @@ -82,6 +84,7 @@ public long getWorkCompleted() { public static final int WORK_ESTIMATED_FIELD_NUMBER = 2; private long workEstimated_ = 0L; + /** * * @@ -266,6 +269,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -460,6 +464,7 @@ public Builder mergeFrom( private int bitField0_; private long workCompleted_; + /** * * @@ -476,6 +481,7 @@ public Builder mergeFrom( public long getWorkCompleted() { return workCompleted_; } + /** * * @@ -496,6 +502,7 @@ public Builder setWorkCompleted(long value) { onChanged(); return this; } + /** * * @@ -516,6 +523,7 @@ public Builder clearWorkCompleted() { } private long workEstimated_; + /** * * @@ -532,6 +540,7 @@ public Builder clearWorkCompleted() { public long getWorkEstimated() { return workEstimated_; } + /** * * @@ -552,6 +561,7 @@ public Builder setWorkEstimated(long value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ProgressOrBuilder.java b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ProgressOrBuilder.java index faa613564..0d22c5b2c 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ProgressOrBuilder.java +++ b/proto-google-cloud-datastore-admin-v1/src/main/java/com/google/datastore/admin/v1/ProgressOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/admin/v1/datastore_admin.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.admin.v1; public interface ProgressOrBuilder diff --git a/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/datastore_admin.proto b/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/datastore_admin.proto index 79ca3df68..50c4d0cc8 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/datastore_admin.proto +++ b/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/datastore_admin.proto @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// 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. diff --git a/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/index.proto b/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/index.proto index 60bb5af5f..c90766056 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/index.proto +++ b/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/index.proto @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// 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. diff --git a/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/migration.proto b/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/migration.proto index e5f7477da..67ac1ab71 100644 --- a/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/migration.proto +++ b/proto-google-cloud-datastore-admin-v1/src/main/proto/google/datastore/admin/v1/migration.proto @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// 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. diff --git a/proto-google-cloud-datastore-v1/clirr-ignored-differences.xml b/proto-google-cloud-datastore-v1/clirr-ignored-differences.xml index 064bc1b32..34662f77c 100644 --- a/proto-google-cloud-datastore-v1/clirr-ignored-differences.xml +++ b/proto-google-cloud-datastore-v1/clirr-ignored-differences.xml @@ -58,4 +58,66 @@ STATS_FIELD_NUMBER 6011 + + + + 7006 + com/google/datastore/v1/** + * getDefaultInstanceForType() + ** + + + 7006 + com/google/datastore/v1/** + * addRepeatedField(*) + ** + + + 7006 + com/google/datastore/v1/** + * clear() + ** + + + 7006 + com/google/datastore/v1/** + * clearField(*) + ** + + + 7006 + com/google/datastore/v1/** + * clearOneof(*) + ** + + + 7006 + com/google/datastore/v1/** + * clone() + ** + + + 7006 + com/google/datastore/v1/** + * mergeUnknownFields(*) + ** + + + 7006 + com/google/datastore/v1/** + * setField(*) + ** + + + 7006 + com/google/datastore/v1/** + * setRepeatedField(*) + ** + + + 7006 + com/google/datastore/v1/** + * setUnknownFields(*) + ** + diff --git a/proto-google-cloud-datastore-v1/pom.xml b/proto-google-cloud-datastore-v1/pom.xml index f7533666e..f896ecd1f 100644 --- a/proto-google-cloud-datastore-v1/pom.xml +++ b/proto-google-cloud-datastore-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-datastore-v1 - 0.110.2-SNAPSHOT + 0.119.2-SNAPSHOT proto-google-cloud-datastore-v1 PROTO library for proto-google-cloud-datastore-v1 com.google.cloud google-cloud-datastore-parent - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQuery.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQuery.java index 654257a1d..700120ceb 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQuery.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class AggregationQuery extends com.google.protobuf.GeneratedMessage // @@protoc_insertion_point(message_implements:google.datastore.v1.AggregationQuery) AggregationQueryOrBuilder { private static final long serialVersionUID = 0L; + // Use AggregationQuery.newBuilder() to construct. private AggregationQuery(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -81,6 +82,7 @@ public interface AggregationOrBuilder * @return Whether the count field is set. */ boolean hasCount(); + /** * * @@ -93,6 +95,7 @@ public interface AggregationOrBuilder * @return The count. */ com.google.datastore.v1.AggregationQuery.Aggregation.Count getCount(); + /** * * @@ -116,6 +119,7 @@ public interface AggregationOrBuilder * @return Whether the sum field is set. */ boolean hasSum(); + /** * * @@ -128,6 +132,7 @@ public interface AggregationOrBuilder * @return The sum. */ com.google.datastore.v1.AggregationQuery.Aggregation.Sum getSum(); + /** * * @@ -151,6 +156,7 @@ public interface AggregationOrBuilder * @return Whether the avg field is set. */ boolean hasAvg(); + /** * * @@ -163,6 +169,7 @@ public interface AggregationOrBuilder * @return The avg. */ com.google.datastore.v1.AggregationQuery.Aggregation.Avg getAvg(); + /** * * @@ -220,6 +227,7 @@ public interface AggregationOrBuilder * @return The alias. */ java.lang.String getAlias(); + /** * * @@ -269,6 +277,7 @@ public interface AggregationOrBuilder com.google.datastore.v1.AggregationQuery.Aggregation.OperatorCase getOperatorCase(); } + /** * * @@ -283,6 +292,7 @@ public static final class Aggregation extends com.google.protobuf.GeneratedMessa // @@protoc_insertion_point(message_implements:google.datastore.v1.AggregationQuery.Aggregation) AggregationOrBuilder { private static final long serialVersionUID = 0L; + // Use Aggregation.newBuilder() to construct. private Aggregation(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -350,6 +360,7 @@ public interface CountOrBuilder * @return Whether the upTo field is set. */ boolean hasUpTo(); + /** * * @@ -382,6 +393,7 @@ public interface CountOrBuilder * @return The upTo. */ com.google.protobuf.Int64Value getUpTo(); + /** * * @@ -413,6 +425,7 @@ public interface CountOrBuilder */ com.google.protobuf.Int64ValueOrBuilder getUpToOrBuilder(); } + /** * * @@ -430,6 +443,7 @@ public static final class Count extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.AggregationQuery.Aggregation.Count) CountOrBuilder { private static final long serialVersionUID = 0L; + // Use Count.newBuilder() to construct. private Count(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -461,6 +475,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int UP_TO_FIELD_NUMBER = 1; private com.google.protobuf.Int64Value upTo_; + /** * * @@ -496,6 +511,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasUpTo() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -531,6 +547,7 @@ public boolean hasUpTo() { public com.google.protobuf.Int64Value getUpTo() { return upTo_ == null ? com.google.protobuf.Int64Value.getDefaultInstance() : upTo_; } + /** * * @@ -731,6 +748,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -943,6 +961,7 @@ public Builder mergeFrom( com.google.protobuf.Int64Value.Builder, com.google.protobuf.Int64ValueOrBuilder> upToBuilder_; + /** * * @@ -977,6 +996,7 @@ public Builder mergeFrom( public boolean hasUpTo() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1015,6 +1035,7 @@ public com.google.protobuf.Int64Value getUpTo() { return upToBuilder_.getMessage(); } } + /** * * @@ -1057,6 +1078,7 @@ public Builder setUpTo(com.google.protobuf.Int64Value value) { onChanged(); return this; } + /** * * @@ -1096,6 +1118,7 @@ public Builder setUpTo(com.google.protobuf.Int64Value.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -1143,6 +1166,7 @@ public Builder mergeUpTo(com.google.protobuf.Int64Value value) { } return this; } + /** * * @@ -1182,6 +1206,7 @@ public Builder clearUpTo() { onChanged(); return this; } + /** * * @@ -1216,6 +1241,7 @@ public com.google.protobuf.Int64Value.Builder getUpToBuilder() { onChanged(); return getUpToFieldBuilder().getBuilder(); } + /** * * @@ -1252,6 +1278,7 @@ public com.google.protobuf.Int64ValueOrBuilder getUpToOrBuilder() { return upTo_ == null ? com.google.protobuf.Int64Value.getDefaultInstance() : upTo_; } } + /** * * @@ -1382,6 +1409,7 @@ public interface SumOrBuilder * @return Whether the property field is set. */ boolean hasProperty(); + /** * * @@ -1394,6 +1422,7 @@ public interface SumOrBuilder * @return The property. */ com.google.datastore.v1.PropertyReference getProperty(); + /** * * @@ -1405,6 +1434,7 @@ public interface SumOrBuilder */ com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder(); } + /** * * @@ -1439,6 +1469,7 @@ public static final class Sum extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.AggregationQuery.Aggregation.Sum) SumOrBuilder { private static final long serialVersionUID = 0L; + // Use Sum.newBuilder() to construct. private Sum(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -1470,6 +1501,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int PROPERTY_FIELD_NUMBER = 1; private com.google.datastore.v1.PropertyReference property_; + /** * * @@ -1485,6 +1517,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1502,6 +1535,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { ? com.google.datastore.v1.PropertyReference.getDefaultInstance() : property_; } + /** * * @@ -1684,6 +1718,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -1913,6 +1948,7 @@ public Builder mergeFrom( com.google.datastore.v1.PropertyReference.Builder, com.google.datastore.v1.PropertyReferenceOrBuilder> propertyBuilder_; + /** * * @@ -1927,6 +1963,7 @@ public Builder mergeFrom( public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1947,6 +1984,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { return propertyBuilder_.getMessage(); } } + /** * * @@ -1969,6 +2007,7 @@ public Builder setProperty(com.google.datastore.v1.PropertyReference value) { onChanged(); return this; } + /** * * @@ -1989,6 +2028,7 @@ public Builder setProperty( onChanged(); return this; } + /** * * @@ -2016,6 +2056,7 @@ public Builder mergeProperty(com.google.datastore.v1.PropertyReference value) { } return this; } + /** * * @@ -2035,6 +2076,7 @@ public Builder clearProperty() { onChanged(); return this; } + /** * * @@ -2049,6 +2091,7 @@ public com.google.datastore.v1.PropertyReference.Builder getPropertyBuilder() { onChanged(); return getPropertyFieldBuilder().getBuilder(); } + /** * * @@ -2067,6 +2110,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() : property_; } } + /** * * @@ -2175,6 +2219,7 @@ public interface AvgOrBuilder * @return Whether the property field is set. */ boolean hasProperty(); + /** * * @@ -2187,6 +2232,7 @@ public interface AvgOrBuilder * @return The property. */ com.google.datastore.v1.PropertyReference getProperty(); + /** * * @@ -2198,6 +2244,7 @@ public interface AvgOrBuilder */ com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder(); } + /** * * @@ -2222,6 +2269,7 @@ public static final class Avg extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.AggregationQuery.Aggregation.Avg) AvgOrBuilder { private static final long serialVersionUID = 0L; + // Use Avg.newBuilder() to construct. private Avg(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -2253,6 +2301,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int PROPERTY_FIELD_NUMBER = 1; private com.google.datastore.v1.PropertyReference property_; + /** * * @@ -2268,6 +2317,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -2285,6 +2335,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { ? com.google.datastore.v1.PropertyReference.getDefaultInstance() : property_; } + /** * * @@ -2467,6 +2518,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -2686,6 +2738,7 @@ public Builder mergeFrom( com.google.datastore.v1.PropertyReference.Builder, com.google.datastore.v1.PropertyReferenceOrBuilder> propertyBuilder_; + /** * * @@ -2700,6 +2753,7 @@ public Builder mergeFrom( public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -2720,6 +2774,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { return propertyBuilder_.getMessage(); } } + /** * * @@ -2742,6 +2797,7 @@ public Builder setProperty(com.google.datastore.v1.PropertyReference value) { onChanged(); return this; } + /** * * @@ -2762,6 +2818,7 @@ public Builder setProperty( onChanged(); return this; } + /** * * @@ -2789,6 +2846,7 @@ public Builder mergeProperty(com.google.datastore.v1.PropertyReference value) { } return this; } + /** * * @@ -2808,6 +2866,7 @@ public Builder clearProperty() { onChanged(); return this; } + /** * * @@ -2822,6 +2881,7 @@ public com.google.datastore.v1.PropertyReference.Builder getPropertyBuilder() { onChanged(); return getPropertyFieldBuilder().getBuilder(); } + /** * * @@ -2840,6 +2900,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() : property_; } } + /** * * @@ -2949,6 +3010,7 @@ public enum OperatorCase private OperatorCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -2984,6 +3046,7 @@ public OperatorCase getOperatorCase() { } public static final int COUNT_FIELD_NUMBER = 1; + /** * * @@ -2999,6 +3062,7 @@ public OperatorCase getOperatorCase() { public boolean hasCount() { return operatorCase_ == 1; } + /** * * @@ -3017,6 +3081,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Count getCount() { } return com.google.datastore.v1.AggregationQuery.Aggregation.Count.getDefaultInstance(); } + /** * * @@ -3035,6 +3100,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.CountOrBuilder getCo } public static final int SUM_FIELD_NUMBER = 2; + /** * * @@ -3050,6 +3116,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.CountOrBuilder getCo public boolean hasSum() { return operatorCase_ == 2; } + /** * * @@ -3068,6 +3135,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Sum getSum() { } return com.google.datastore.v1.AggregationQuery.Aggregation.Sum.getDefaultInstance(); } + /** * * @@ -3086,6 +3154,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.SumOrBuilder getSumO } public static final int AVG_FIELD_NUMBER = 3; + /** * * @@ -3101,6 +3170,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.SumOrBuilder getSumO public boolean hasAvg() { return operatorCase_ == 3; } + /** * * @@ -3119,6 +3189,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Avg getAvg() { } return com.google.datastore.v1.AggregationQuery.Aggregation.Avg.getDefaultInstance(); } + /** * * @@ -3140,6 +3211,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.AvgOrBuilder getAvgO @SuppressWarnings("serial") private volatile java.lang.Object alias_ = ""; + /** * * @@ -3197,6 +3269,7 @@ public java.lang.String getAlias() { return s; } } + /** * * @@ -3473,6 +3546,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -3743,6 +3817,7 @@ public Builder clearOperator() { com.google.datastore.v1.AggregationQuery.Aggregation.Count.Builder, com.google.datastore.v1.AggregationQuery.Aggregation.CountOrBuilder> countBuilder_; + /** * * @@ -3758,6 +3833,7 @@ public Builder clearOperator() { public boolean hasCount() { return operatorCase_ == 1; } + /** * * @@ -3783,6 +3859,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Count getCount() { return com.google.datastore.v1.AggregationQuery.Aggregation.Count.getDefaultInstance(); } } + /** * * @@ -3805,6 +3882,7 @@ public Builder setCount(com.google.datastore.v1.AggregationQuery.Aggregation.Cou operatorCase_ = 1; return this; } + /** * * @@ -3825,6 +3903,7 @@ public Builder setCount( operatorCase_ = 1; return this; } + /** * * @@ -3859,6 +3938,7 @@ public Builder mergeCount(com.google.datastore.v1.AggregationQuery.Aggregation.C operatorCase_ = 1; return this; } + /** * * @@ -3884,6 +3964,7 @@ public Builder clearCount() { } return this; } + /** * * @@ -3896,6 +3977,7 @@ public Builder clearCount() { public com.google.datastore.v1.AggregationQuery.Aggregation.Count.Builder getCountBuilder() { return getCountFieldBuilder().getBuilder(); } + /** * * @@ -3917,6 +3999,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Count.Builder getCou return com.google.datastore.v1.AggregationQuery.Aggregation.Count.getDefaultInstance(); } } + /** * * @@ -3956,6 +4039,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Count.Builder getCou com.google.datastore.v1.AggregationQuery.Aggregation.Sum.Builder, com.google.datastore.v1.AggregationQuery.Aggregation.SumOrBuilder> sumBuilder_; + /** * * @@ -3971,6 +4055,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Count.Builder getCou public boolean hasSum() { return operatorCase_ == 2; } + /** * * @@ -3996,6 +4081,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Sum getSum() { return com.google.datastore.v1.AggregationQuery.Aggregation.Sum.getDefaultInstance(); } } + /** * * @@ -4018,6 +4104,7 @@ public Builder setSum(com.google.datastore.v1.AggregationQuery.Aggregation.Sum v operatorCase_ = 2; return this; } + /** * * @@ -4038,6 +4125,7 @@ public Builder setSum( operatorCase_ = 2; return this; } + /** * * @@ -4072,6 +4160,7 @@ public Builder mergeSum(com.google.datastore.v1.AggregationQuery.Aggregation.Sum operatorCase_ = 2; return this; } + /** * * @@ -4097,6 +4186,7 @@ public Builder clearSum() { } return this; } + /** * * @@ -4109,6 +4199,7 @@ public Builder clearSum() { public com.google.datastore.v1.AggregationQuery.Aggregation.Sum.Builder getSumBuilder() { return getSumFieldBuilder().getBuilder(); } + /** * * @@ -4129,6 +4220,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.SumOrBuilder getSumO return com.google.datastore.v1.AggregationQuery.Aggregation.Sum.getDefaultInstance(); } } + /** * * @@ -4168,6 +4260,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.SumOrBuilder getSumO com.google.datastore.v1.AggregationQuery.Aggregation.Avg.Builder, com.google.datastore.v1.AggregationQuery.Aggregation.AvgOrBuilder> avgBuilder_; + /** * * @@ -4183,6 +4276,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.SumOrBuilder getSumO public boolean hasAvg() { return operatorCase_ == 3; } + /** * * @@ -4208,6 +4302,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Avg getAvg() { return com.google.datastore.v1.AggregationQuery.Aggregation.Avg.getDefaultInstance(); } } + /** * * @@ -4230,6 +4325,7 @@ public Builder setAvg(com.google.datastore.v1.AggregationQuery.Aggregation.Avg v operatorCase_ = 3; return this; } + /** * * @@ -4250,6 +4346,7 @@ public Builder setAvg( operatorCase_ = 3; return this; } + /** * * @@ -4284,6 +4381,7 @@ public Builder mergeAvg(com.google.datastore.v1.AggregationQuery.Aggregation.Avg operatorCase_ = 3; return this; } + /** * * @@ -4309,6 +4407,7 @@ public Builder clearAvg() { } return this; } + /** * * @@ -4321,6 +4420,7 @@ public Builder clearAvg() { public com.google.datastore.v1.AggregationQuery.Aggregation.Avg.Builder getAvgBuilder() { return getAvgFieldBuilder().getBuilder(); } + /** * * @@ -4341,6 +4441,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.AvgOrBuilder getAvgO return com.google.datastore.v1.AggregationQuery.Aggregation.Avg.getDefaultInstance(); } } + /** * * @@ -4376,6 +4477,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.AvgOrBuilder getAvgO } private java.lang.Object alias_ = ""; + /** * * @@ -4432,6 +4534,7 @@ public java.lang.String getAlias() { return (java.lang.String) ref; } } + /** * * @@ -4488,6 +4591,7 @@ public com.google.protobuf.ByteString getAliasBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -4543,6 +4647,7 @@ public Builder setAlias(java.lang.String value) { onChanged(); return this; } + /** * * @@ -4594,6 +4699,7 @@ public Builder clearAlias() { onChanged(); return this; } + /** * * @@ -4731,6 +4837,7 @@ public enum QueryTypeCase private QueryTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -4762,6 +4869,7 @@ public QueryTypeCase getQueryTypeCase() { } public static final int NESTED_QUERY_FIELD_NUMBER = 1; + /** * * @@ -4777,6 +4885,7 @@ public QueryTypeCase getQueryTypeCase() { public boolean hasNestedQuery() { return queryTypeCase_ == 1; } + /** * * @@ -4795,6 +4904,7 @@ public com.google.datastore.v1.Query getNestedQuery() { } return com.google.datastore.v1.Query.getDefaultInstance(); } + /** * * @@ -4816,6 +4926,7 @@ public com.google.datastore.v1.QueryOrBuilder getNestedQueryOrBuilder() { @SuppressWarnings("serial") private java.util.List aggregations_; + /** * * @@ -4837,6 +4948,7 @@ public com.google.datastore.v1.QueryOrBuilder getNestedQueryOrBuilder() { getAggregationsList() { return aggregations_; } + /** * * @@ -4858,6 +4970,7 @@ public com.google.datastore.v1.QueryOrBuilder getNestedQueryOrBuilder() { getAggregationsOrBuilderList() { return aggregations_; } + /** * * @@ -4878,6 +4991,7 @@ public com.google.datastore.v1.QueryOrBuilder getNestedQueryOrBuilder() { public int getAggregationsCount() { return aggregations_.size(); } + /** * * @@ -4898,6 +5012,7 @@ public int getAggregationsCount() { public com.google.datastore.v1.AggregationQuery.Aggregation getAggregations(int index) { return aggregations_.get(index); } + /** * * @@ -5104,6 +5219,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -5383,6 +5499,7 @@ public Builder clearQueryType() { com.google.datastore.v1.Query.Builder, com.google.datastore.v1.QueryOrBuilder> nestedQueryBuilder_; + /** * * @@ -5398,6 +5515,7 @@ public Builder clearQueryType() { public boolean hasNestedQuery() { return queryTypeCase_ == 1; } + /** * * @@ -5423,6 +5541,7 @@ public com.google.datastore.v1.Query getNestedQuery() { return com.google.datastore.v1.Query.getDefaultInstance(); } } + /** * * @@ -5445,6 +5564,7 @@ public Builder setNestedQuery(com.google.datastore.v1.Query value) { queryTypeCase_ = 1; return this; } + /** * * @@ -5464,6 +5584,7 @@ public Builder setNestedQuery(com.google.datastore.v1.Query.Builder builderForVa queryTypeCase_ = 1; return this; } + /** * * @@ -5495,6 +5616,7 @@ public Builder mergeNestedQuery(com.google.datastore.v1.Query value) { queryTypeCase_ = 1; return this; } + /** * * @@ -5520,6 +5642,7 @@ public Builder clearNestedQuery() { } return this; } + /** * * @@ -5532,6 +5655,7 @@ public Builder clearNestedQuery() { public com.google.datastore.v1.Query.Builder getNestedQueryBuilder() { return getNestedQueryFieldBuilder().getBuilder(); } + /** * * @@ -5552,6 +5676,7 @@ public com.google.datastore.v1.QueryOrBuilder getNestedQueryOrBuilder() { return com.google.datastore.v1.Query.getDefaultInstance(); } } + /** * * @@ -5625,6 +5750,7 @@ private void ensureAggregationsIsMutable() { return aggregationsBuilder_.getMessageList(); } } + /** * * @@ -5648,6 +5774,7 @@ public int getAggregationsCount() { return aggregationsBuilder_.getCount(); } } + /** * * @@ -5671,6 +5798,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation getAggregations(int return aggregationsBuilder_.getMessage(index); } } + /** * * @@ -5701,6 +5829,7 @@ public Builder setAggregations( } return this; } + /** * * @@ -5728,6 +5857,7 @@ public Builder setAggregations( } return this; } + /** * * @@ -5757,6 +5887,7 @@ public Builder addAggregations(com.google.datastore.v1.AggregationQuery.Aggregat } return this; } + /** * * @@ -5787,6 +5918,7 @@ public Builder addAggregations( } return this; } + /** * * @@ -5814,6 +5946,7 @@ public Builder addAggregations( } return this; } + /** * * @@ -5841,6 +5974,7 @@ public Builder addAggregations( } return this; } + /** * * @@ -5868,6 +6002,7 @@ public Builder addAllAggregations( } return this; } + /** * * @@ -5894,6 +6029,7 @@ public Builder clearAggregations() { } return this; } + /** * * @@ -5920,6 +6056,7 @@ public Builder removeAggregations(int index) { } return this; } + /** * * @@ -5940,6 +6077,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Builder getAggregati int index) { return getAggregationsFieldBuilder().getBuilder(index); } + /** * * @@ -5964,6 +6102,7 @@ public com.google.datastore.v1.AggregationQuery.AggregationOrBuilder getAggregat return aggregationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -5988,6 +6127,7 @@ public com.google.datastore.v1.AggregationQuery.AggregationOrBuilder getAggregat return java.util.Collections.unmodifiableList(aggregations_); } } + /** * * @@ -6008,6 +6148,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Builder addAggregati return getAggregationsFieldBuilder() .addBuilder(com.google.datastore.v1.AggregationQuery.Aggregation.getDefaultInstance()); } + /** * * @@ -6030,6 +6171,7 @@ public com.google.datastore.v1.AggregationQuery.Aggregation.Builder addAggregati .addBuilder( index, com.google.datastore.v1.AggregationQuery.Aggregation.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQueryOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQueryOrBuilder.java index bfb5e8448..1bced478b 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQueryOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationQueryOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface AggregationQueryOrBuilder @@ -36,6 +36,7 @@ public interface AggregationQueryOrBuilder * @return Whether the nestedQuery field is set. */ boolean hasNestedQuery(); + /** * * @@ -48,6 +49,7 @@ public interface AggregationQueryOrBuilder * @return The nestedQuery. */ com.google.datastore.v1.Query getNestedQuery(); + /** * * @@ -76,6 +78,7 @@ public interface AggregationQueryOrBuilder * */ java.util.List getAggregationsList(); + /** * * @@ -93,6 +96,7 @@ public interface AggregationQueryOrBuilder * */ com.google.datastore.v1.AggregationQuery.Aggregation getAggregations(int index); + /** * * @@ -110,6 +114,7 @@ public interface AggregationQueryOrBuilder * */ int getAggregationsCount(); + /** * * @@ -128,6 +133,7 @@ public interface AggregationQueryOrBuilder */ java.util.List getAggregationsOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResult.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResult.java index 5a6afdcff..a8af25d74 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResult.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/aggregation_result.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -37,6 +37,7 @@ public final class AggregationResult extends com.google.protobuf.GeneratedMessag // @@protoc_insertion_point(message_implements:google.datastore.v1.AggregationResult) AggregationResultOrBuilder { private static final long serialVersionUID = 0L; + // Use AggregationResult.newBuilder() to construct. private AggregationResult(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -108,6 +109,7 @@ private static final class AggregatePropertiesDefaultEntryHolder { public int getAggregatePropertiesCount() { return internalGetAggregateProperties().getMap().size(); } + /** * * @@ -129,12 +131,14 @@ public boolean containsAggregateProperties(java.lang.String key) { } return internalGetAggregateProperties().getMap().containsKey(key); } + /** Use {@link #getAggregatePropertiesMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getAggregateProperties() { return getAggregatePropertiesMap(); } + /** * * @@ -154,6 +158,7 @@ public java.util.Map getAggrega getAggregatePropertiesMap() { return internalGetAggregateProperties().getMap(); } + /** * * @@ -180,6 +185,7 @@ public java.util.Map getAggrega internalGetAggregateProperties().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -379,6 +385,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -611,7 +618,8 @@ public com.google.datastore.v1.Value build(com.google.datastore.v1.ValueOrBuilde defaultEntry() { return AggregatePropertiesDefaultEntryHolder.defaultEntry; } - }; + } + ; private static final AggregatePropertiesConverter aggregatePropertiesConverter = new AggregatePropertiesConverter(); @@ -653,6 +661,7 @@ public com.google.datastore.v1.Value build(com.google.datastore.v1.ValueOrBuilde public int getAggregatePropertiesCount() { return internalGetAggregateProperties().ensureBuilderMap().size(); } + /** * * @@ -674,12 +683,14 @@ public boolean containsAggregateProperties(java.lang.String key) { } return internalGetAggregateProperties().ensureBuilderMap().containsKey(key); } + /** Use {@link #getAggregatePropertiesMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getAggregateProperties() { return getAggregatePropertiesMap(); } + /** * * @@ -699,6 +710,7 @@ public java.util.Map getAggrega getAggregatePropertiesMap() { return internalGetAggregateProperties().getImmutableMap(); } + /** * * @@ -725,6 +737,7 @@ public java.util.Map getAggrega internalGetMutableAggregateProperties().ensureBuilderMap(); return map.containsKey(key) ? aggregatePropertiesConverter.build(map.get(key)) : defaultValue; } + /** * * @@ -757,6 +770,7 @@ public Builder clearAggregateProperties() { internalGetMutableAggregateProperties().clear(); return this; } + /** * * @@ -778,6 +792,7 @@ public Builder removeAggregateProperties(java.lang.String key) { internalGetMutableAggregateProperties().ensureBuilderMap().remove(key); return this; } + /** Use alternate mutation accessors instead. */ @java.lang.Deprecated public java.util.Map @@ -785,6 +800,7 @@ public Builder removeAggregateProperties(java.lang.String key) { bitField0_ |= 0x00000001; return internalGetMutableAggregateProperties().ensureMessageMap(); } + /** * * @@ -811,6 +827,7 @@ public Builder putAggregateProperties( bitField0_ |= 0x00000001; return this; } + /** * * @@ -837,6 +854,7 @@ public Builder putAllAggregateProperties( bitField0_ |= 0x00000001; return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatch.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatch.java index 040d282df..2db8614e5 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatch.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatch.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/aggregation_result.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class AggregationResultBatch extends com.google.protobuf.GeneratedM // @@protoc_insertion_point(message_implements:google.datastore.v1.AggregationResultBatch) AggregationResultBatchOrBuilder { private static final long serialVersionUID = 0L; + // Use AggregationResultBatch.newBuilder() to construct. private AggregationResultBatch(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -69,6 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List aggregationResults_; + /** * * @@ -82,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getAggregationResultsList() { return aggregationResults_; } + /** * * @@ -96,6 +99,7 @@ public java.util.List getAggregationR getAggregationResultsOrBuilderList() { return aggregationResults_; } + /** * * @@ -109,6 +113,7 @@ public java.util.List getAggregationR public int getAggregationResultsCount() { return aggregationResults_.size(); } + /** * * @@ -122,6 +127,7 @@ public int getAggregationResultsCount() { public com.google.datastore.v1.AggregationResult getAggregationResults(int index) { return aggregationResults_.get(index); } + /** * * @@ -139,6 +145,7 @@ public com.google.datastore.v1.AggregationResultOrBuilder getAggregationResultsO public static final int MORE_RESULTS_FIELD_NUMBER = 2; private int moreResults_ = 0; + /** * * @@ -156,6 +163,7 @@ public com.google.datastore.v1.AggregationResultOrBuilder getAggregationResultsO public int getMoreResultsValue() { return moreResults_; } + /** * * @@ -180,6 +188,7 @@ public com.google.datastore.v1.QueryResultBatch.MoreResultsType getMoreResults() public static final int READ_TIME_FIELD_NUMBER = 3; private com.google.protobuf.Timestamp readTime_; + /** * * @@ -199,6 +208,7 @@ public com.google.datastore.v1.QueryResultBatch.MoreResultsType getMoreResults() public boolean hasReadTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -218,6 +228,7 @@ public boolean hasReadTime() { public com.google.protobuf.Timestamp getReadTime() { return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_; } + /** * * @@ -425,6 +436,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -728,6 +740,7 @@ public java.util.List getAggregationR return aggregationResultsBuilder_.getMessageList(); } } + /** * * @@ -744,6 +757,7 @@ public int getAggregationResultsCount() { return aggregationResultsBuilder_.getCount(); } } + /** * * @@ -760,6 +774,7 @@ public com.google.datastore.v1.AggregationResult getAggregationResults(int index return aggregationResultsBuilder_.getMessage(index); } } + /** * * @@ -783,6 +798,7 @@ public Builder setAggregationResults( } return this; } + /** * * @@ -803,6 +819,7 @@ public Builder setAggregationResults( } return this; } + /** * * @@ -825,6 +842,7 @@ public Builder addAggregationResults(com.google.datastore.v1.AggregationResult v } return this; } + /** * * @@ -848,6 +866,7 @@ public Builder addAggregationResults( } return this; } + /** * * @@ -868,6 +887,7 @@ public Builder addAggregationResults( } return this; } + /** * * @@ -888,6 +908,7 @@ public Builder addAggregationResults( } return this; } + /** * * @@ -908,6 +929,7 @@ public Builder addAllAggregationResults( } return this; } + /** * * @@ -927,6 +949,7 @@ public Builder clearAggregationResults() { } return this; } + /** * * @@ -946,6 +969,7 @@ public Builder removeAggregationResults(int index) { } return this; } + /** * * @@ -959,6 +983,7 @@ public com.google.datastore.v1.AggregationResult.Builder getAggregationResultsBu int index) { return getAggregationResultsFieldBuilder().getBuilder(index); } + /** * * @@ -976,6 +1001,7 @@ public com.google.datastore.v1.AggregationResultOrBuilder getAggregationResultsO return aggregationResultsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -993,6 +1019,7 @@ public com.google.datastore.v1.AggregationResultOrBuilder getAggregationResultsO return java.util.Collections.unmodifiableList(aggregationResults_); } } + /** * * @@ -1006,6 +1033,7 @@ public com.google.datastore.v1.AggregationResult.Builder addAggregationResultsBu return getAggregationResultsFieldBuilder() .addBuilder(com.google.datastore.v1.AggregationResult.getDefaultInstance()); } + /** * * @@ -1020,6 +1048,7 @@ public com.google.datastore.v1.AggregationResult.Builder addAggregationResultsBu return getAggregationResultsFieldBuilder() .addBuilder(index, com.google.datastore.v1.AggregationResult.getDefaultInstance()); } + /** * * @@ -1055,6 +1084,7 @@ public com.google.datastore.v1.AggregationResult.Builder addAggregationResultsBu } private int moreResults_ = 0; + /** * * @@ -1072,6 +1102,7 @@ public com.google.datastore.v1.AggregationResult.Builder addAggregationResultsBu public int getMoreResultsValue() { return moreResults_; } + /** * * @@ -1092,6 +1123,7 @@ public Builder setMoreResultsValue(int value) { onChanged(); return this; } + /** * * @@ -1113,6 +1145,7 @@ public com.google.datastore.v1.QueryResultBatch.MoreResultsType getMoreResults() ? com.google.datastore.v1.QueryResultBatch.MoreResultsType.UNRECOGNIZED : result; } + /** * * @@ -1136,6 +1169,7 @@ public Builder setMoreResults(com.google.datastore.v1.QueryResultBatch.MoreResul onChanged(); return this; } + /** * * @@ -1162,6 +1196,7 @@ public Builder clearMoreResults() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> readTimeBuilder_; + /** * * @@ -1180,6 +1215,7 @@ public Builder clearMoreResults() { public boolean hasReadTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1202,6 +1238,7 @@ public com.google.protobuf.Timestamp getReadTime() { return readTimeBuilder_.getMessage(); } } + /** * * @@ -1228,6 +1265,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1251,6 +1289,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp.Builder builderForValue onChanged(); return this; } + /** * * @@ -1282,6 +1321,7 @@ public Builder mergeReadTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1305,6 +1345,7 @@ public Builder clearReadTime() { onChanged(); return this; } + /** * * @@ -1323,6 +1364,7 @@ public com.google.protobuf.Timestamp.Builder getReadTimeBuilder() { onChanged(); return getReadTimeFieldBuilder().getBuilder(); } + /** * * @@ -1343,6 +1385,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() { return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatchOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatchOrBuilder.java index 5c1fb1daa..0c8ebc3fd 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatchOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultBatchOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/aggregation_result.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface AggregationResultBatchOrBuilder @@ -34,6 +34,7 @@ public interface AggregationResultBatchOrBuilder * repeated .google.datastore.v1.AggregationResult aggregation_results = 1; */ java.util.List getAggregationResultsList(); + /** * * @@ -44,6 +45,7 @@ public interface AggregationResultBatchOrBuilder * repeated .google.datastore.v1.AggregationResult aggregation_results = 1; */ com.google.datastore.v1.AggregationResult getAggregationResults(int index); + /** * * @@ -54,6 +56,7 @@ public interface AggregationResultBatchOrBuilder * repeated .google.datastore.v1.AggregationResult aggregation_results = 1; */ int getAggregationResultsCount(); + /** * * @@ -65,6 +68,7 @@ public interface AggregationResultBatchOrBuilder */ java.util.List getAggregationResultsOrBuilderList(); + /** * * @@ -90,6 +94,7 @@ public interface AggregationResultBatchOrBuilder * @return The enum numeric value on the wire for moreResults. */ int getMoreResultsValue(); + /** * * @@ -121,6 +126,7 @@ public interface AggregationResultBatchOrBuilder * @return Whether the readTime field is set. */ boolean hasReadTime(); + /** * * @@ -137,6 +143,7 @@ public interface AggregationResultBatchOrBuilder * @return The readTime. */ com.google.protobuf.Timestamp getReadTime(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultOrBuilder.java index 4bcde0f95..94e573e78 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/aggregation_result.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface AggregationResultOrBuilder @@ -39,6 +39,7 @@ public interface AggregationResultOrBuilder * map<string, .google.datastore.v1.Value> aggregate_properties = 2; */ int getAggregatePropertiesCount(); + /** * * @@ -54,9 +55,11 @@ public interface AggregationResultOrBuilder * map<string, .google.datastore.v1.Value> aggregate_properties = 2; */ boolean containsAggregateProperties(java.lang.String key); + /** Use {@link #getAggregatePropertiesMap()} instead. */ @java.lang.Deprecated java.util.Map getAggregateProperties(); + /** * * @@ -72,6 +75,7 @@ public interface AggregationResultOrBuilder * map<string, .google.datastore.v1.Value> aggregate_properties = 2; */ java.util.Map getAggregatePropertiesMap(); + /** * * @@ -91,6 +95,7 @@ com.google.datastore.v1.Value getAggregatePropertiesOrDefault( java.lang.String key, /* nullable */ com.google.datastore.v1.Value defaultValue); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultProto.java index a924705f1..8c172f409 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultProto.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AggregationResultProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/aggregation_result.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public final class AggregationResultProto { @@ -63,13 +63,13 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "tastore.v1.AggregationResult\022K\n\014more_res" + "ults\030\002 \001(\01625.google.datastore.v1.QueryRe" + "sultBatch.MoreResultsType\022-\n\tread_time\030\003" - + " \001(\0132\032.google.protobuf.TimestampB\310\001\n\027com" + + " \001(\0132\032.google.protobuf.TimestampB\307\001\n\027com" + ".google.datastore.v1B\026AggregationResultP" - + "rotoP\001Z builder) { super(builder); @@ -70,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +95,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -121,6 +124,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -147,6 +151,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -178,6 +183,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { @SuppressWarnings("serial") private java.util.List keys_; + /** * * @@ -193,6 +199,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public java.util.List getKeysList() { return keys_; } + /** * * @@ -208,6 +215,7 @@ public java.util.List getKeysList() { public java.util.List getKeysOrBuilderList() { return keys_; } + /** * * @@ -223,6 +231,7 @@ public java.util.List getKeysOrB public int getKeysCount() { return keys_.size(); } + /** * * @@ -238,6 +247,7 @@ public int getKeysCount() { public com.google.datastore.v1.Key getKeys(int index) { return keys_.get(index); } + /** * * @@ -433,6 +443,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -691,6 +702,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -713,6 +725,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -735,6 +748,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -756,6 +770,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -773,6 +788,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -797,6 +813,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -822,6 +839,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -847,6 +865,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -871,6 +890,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -891,6 +911,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -950,6 +971,7 @@ public java.util.List getKeysList() { return keysBuilder_.getMessageList(); } } + /** * * @@ -968,6 +990,7 @@ public int getKeysCount() { return keysBuilder_.getCount(); } } + /** * * @@ -986,6 +1009,7 @@ public com.google.datastore.v1.Key getKeys(int index) { return keysBuilder_.getMessage(index); } } + /** * * @@ -1010,6 +1034,7 @@ public Builder setKeys(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1031,6 +1056,7 @@ public Builder setKeys(int index, com.google.datastore.v1.Key.Builder builderFor } return this; } + /** * * @@ -1055,6 +1081,7 @@ public Builder addKeys(com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1079,6 +1106,7 @@ public Builder addKeys(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1100,6 +1128,7 @@ public Builder addKeys(com.google.datastore.v1.Key.Builder builderForValue) { } return this; } + /** * * @@ -1121,6 +1150,7 @@ public Builder addKeys(int index, com.google.datastore.v1.Key.Builder builderFor } return this; } + /** * * @@ -1142,6 +1172,7 @@ public Builder addAllKeys(java.lang.Iterable getKeysOrB return java.util.Collections.unmodifiableList(keys_); } } + /** * * @@ -1248,6 +1284,7 @@ public java.util.List getKeysOrB public com.google.datastore.v1.Key.Builder addKeysBuilder() { return getKeysFieldBuilder().addBuilder(com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * @@ -1263,6 +1300,7 @@ public com.google.datastore.v1.Key.Builder addKeysBuilder(int index) { return getKeysFieldBuilder() .addBuilder(index, com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java index 3f2db79c4..13d3009e7 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface AllocateIdsRequestOrBuilder @@ -36,6 +36,7 @@ public interface AllocateIdsRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -64,6 +65,7 @@ public interface AllocateIdsRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -92,6 +94,7 @@ public interface AllocateIdsRequestOrBuilder * */ java.util.List getKeysList(); + /** * * @@ -104,6 +107,7 @@ public interface AllocateIdsRequestOrBuilder * */ com.google.datastore.v1.Key getKeys(int index); + /** * * @@ -116,6 +120,7 @@ public interface AllocateIdsRequestOrBuilder * */ int getKeysCount(); + /** * * @@ -128,6 +133,7 @@ public interface AllocateIdsRequestOrBuilder * */ java.util.List getKeysOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java index c1ac60e39..b7e67dcc0 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class AllocateIdsResponse extends com.google.protobuf.GeneratedMess // @@protoc_insertion_point(message_implements:google.datastore.v1.AllocateIdsResponse) AllocateIdsResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use AllocateIdsResponse.newBuilder() to construct. private AllocateIdsResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -68,6 +69,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List keys_; + /** * * @@ -82,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getKeysList() { return keys_; } + /** * * @@ -96,6 +99,7 @@ public java.util.List getKeysList() { public java.util.List getKeysOrBuilderList() { return keys_; } + /** * * @@ -110,6 +114,7 @@ public java.util.List getKeysOrB public int getKeysCount() { return keys_.size(); } + /** * * @@ -124,6 +129,7 @@ public int getKeysCount() { public com.google.datastore.v1.Key getKeys(int index) { return keys_.get(index); } + /** * * @@ -300,6 +306,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -559,6 +566,7 @@ public java.util.List getKeysList() { return keysBuilder_.getMessageList(); } } + /** * * @@ -576,6 +584,7 @@ public int getKeysCount() { return keysBuilder_.getCount(); } } + /** * * @@ -593,6 +602,7 @@ public com.google.datastore.v1.Key getKeys(int index) { return keysBuilder_.getMessage(index); } } + /** * * @@ -616,6 +626,7 @@ public Builder setKeys(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -636,6 +647,7 @@ public Builder setKeys(int index, com.google.datastore.v1.Key.Builder builderFor } return this; } + /** * * @@ -659,6 +671,7 @@ public Builder addKeys(com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -682,6 +695,7 @@ public Builder addKeys(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -702,6 +716,7 @@ public Builder addKeys(com.google.datastore.v1.Key.Builder builderForValue) { } return this; } + /** * * @@ -722,6 +737,7 @@ public Builder addKeys(int index, com.google.datastore.v1.Key.Builder builderFor } return this; } + /** * * @@ -742,6 +758,7 @@ public Builder addAllKeys(java.lang.Iterable getKeysOrB return java.util.Collections.unmodifiableList(keys_); } } + /** * * @@ -842,6 +864,7 @@ public java.util.List getKeysOrB public com.google.datastore.v1.Key.Builder addKeysBuilder() { return getKeysFieldBuilder().addBuilder(com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * @@ -856,6 +879,7 @@ public com.google.datastore.v1.Key.Builder addKeysBuilder(int index) { return getKeysFieldBuilder() .addBuilder(index, com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java index 15aa0780e..6dbcd866d 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/AllocateIdsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface AllocateIdsResponseOrBuilder @@ -35,6 +35,7 @@ public interface AllocateIdsResponseOrBuilder * repeated .google.datastore.v1.Key keys = 1; */ java.util.List getKeysList(); + /** * * @@ -46,6 +47,7 @@ public interface AllocateIdsResponseOrBuilder * repeated .google.datastore.v1.Key keys = 1; */ com.google.datastore.v1.Key getKeys(int index); + /** * * @@ -57,6 +59,7 @@ public interface AllocateIdsResponseOrBuilder * repeated .google.datastore.v1.Key keys = 1; */ int getKeysCount(); + /** * * @@ -68,6 +71,7 @@ public interface AllocateIdsResponseOrBuilder * repeated .google.datastore.v1.Key keys = 1; */ java.util.List getKeysOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java index 332ecd57f..0d73c1fa7 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValue.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class ArrayValue extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.ArrayValue) ArrayValueOrBuilder { private static final long serialVersionUID = 0L; + // Use ArrayValue.newBuilder() to construct. private ArrayValue(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -67,6 +68,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List values_; + /** * * @@ -82,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getValuesList() { return values_; } + /** * * @@ -97,6 +100,7 @@ public java.util.List getValuesList() { public java.util.List getValuesOrBuilderList() { return values_; } + /** * * @@ -112,6 +116,7 @@ public java.util.List getValue public int getValuesCount() { return values_.size(); } + /** * * @@ -127,6 +132,7 @@ public int getValuesCount() { public com.google.datastore.v1.Value getValues(int index) { return values_.get(index); } + /** * * @@ -302,6 +308,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -561,6 +568,7 @@ public java.util.List getValuesList() { return valuesBuilder_.getMessageList(); } } + /** * * @@ -579,6 +587,7 @@ public int getValuesCount() { return valuesBuilder_.getCount(); } } + /** * * @@ -597,6 +606,7 @@ public com.google.datastore.v1.Value getValues(int index) { return valuesBuilder_.getMessage(index); } } + /** * * @@ -621,6 +631,7 @@ public Builder setValues(int index, com.google.datastore.v1.Value value) { } return this; } + /** * * @@ -642,6 +653,7 @@ public Builder setValues(int index, com.google.datastore.v1.Value.Builder builde } return this; } + /** * * @@ -666,6 +678,7 @@ public Builder addValues(com.google.datastore.v1.Value value) { } return this; } + /** * * @@ -690,6 +703,7 @@ public Builder addValues(int index, com.google.datastore.v1.Value value) { } return this; } + /** * * @@ -711,6 +725,7 @@ public Builder addValues(com.google.datastore.v1.Value.Builder builderForValue) } return this; } + /** * * @@ -732,6 +747,7 @@ public Builder addValues(int index, com.google.datastore.v1.Value.Builder builde } return this; } + /** * * @@ -754,6 +770,7 @@ public Builder addAllValues( } return this; } + /** * * @@ -775,6 +792,7 @@ public Builder clearValues() { } return this; } + /** * * @@ -796,6 +814,7 @@ public Builder removeValues(int index) { } return this; } + /** * * @@ -810,6 +829,7 @@ public Builder removeValues(int index) { public com.google.datastore.v1.Value.Builder getValuesBuilder(int index) { return getValuesFieldBuilder().getBuilder(index); } + /** * * @@ -828,6 +848,7 @@ public com.google.datastore.v1.ValueOrBuilder getValuesOrBuilder(int index) { return valuesBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -847,6 +868,7 @@ public com.google.datastore.v1.ValueOrBuilder getValuesOrBuilder(int index) { return java.util.Collections.unmodifiableList(values_); } } + /** * * @@ -861,6 +883,7 @@ public com.google.datastore.v1.ValueOrBuilder getValuesOrBuilder(int index) { public com.google.datastore.v1.Value.Builder addValuesBuilder() { return getValuesFieldBuilder().addBuilder(com.google.datastore.v1.Value.getDefaultInstance()); } + /** * * @@ -876,6 +899,7 @@ public com.google.datastore.v1.Value.Builder addValuesBuilder(int index) { return getValuesFieldBuilder() .addBuilder(index, com.google.datastore.v1.Value.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java index 3f8acbe27..c6d447186 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ArrayValueOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ArrayValueOrBuilder @@ -36,6 +36,7 @@ public interface ArrayValueOrBuilder * repeated .google.datastore.v1.Value values = 1; */ java.util.List getValuesList(); + /** * * @@ -48,6 +49,7 @@ public interface ArrayValueOrBuilder * repeated .google.datastore.v1.Value values = 1; */ com.google.datastore.v1.Value getValues(int index); + /** * * @@ -60,6 +62,7 @@ public interface ArrayValueOrBuilder * repeated .google.datastore.v1.Value values = 1; */ int getValuesCount(); + /** * * @@ -72,6 +75,7 @@ public interface ArrayValueOrBuilder * repeated .google.datastore.v1.Value values = 1; */ java.util.List getValuesOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java index eee52d8fd..6fdef6176 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class BeginTransactionRequest extends com.google.protobuf.Generated // @@protoc_insertion_point(message_implements:google.datastore.v1.BeginTransactionRequest) BeginTransactionRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use BeginTransactionRequest.newBuilder() to construct. private BeginTransactionRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -70,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +95,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -121,6 +124,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -147,6 +151,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -176,6 +181,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public static final int TRANSACTION_OPTIONS_FIELD_NUMBER = 10; private com.google.datastore.v1.TransactionOptions transactionOptions_; + /** * * @@ -191,6 +197,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public boolean hasTransactionOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -208,6 +215,7 @@ public com.google.datastore.v1.TransactionOptions getTransactionOptions() { ? com.google.datastore.v1.TransactionOptions.getDefaultInstance() : transactionOptions_; } + /** * * @@ -406,6 +414,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -639,6 +648,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -661,6 +671,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -683,6 +694,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -704,6 +716,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -721,6 +734,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -745,6 +759,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -770,6 +785,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -795,6 +811,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -819,6 +836,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -839,6 +857,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -871,6 +890,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { com.google.datastore.v1.TransactionOptions.Builder, com.google.datastore.v1.TransactionOptionsOrBuilder> transactionOptionsBuilder_; + /** * * @@ -885,6 +905,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public boolean hasTransactionOptions() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -905,6 +926,7 @@ public com.google.datastore.v1.TransactionOptions getTransactionOptions() { return transactionOptionsBuilder_.getMessage(); } } + /** * * @@ -927,6 +949,7 @@ public Builder setTransactionOptions(com.google.datastore.v1.TransactionOptions onChanged(); return this; } + /** * * @@ -947,6 +970,7 @@ public Builder setTransactionOptions( onChanged(); return this; } + /** * * @@ -975,6 +999,7 @@ public Builder mergeTransactionOptions(com.google.datastore.v1.TransactionOption } return this; } + /** * * @@ -994,6 +1019,7 @@ public Builder clearTransactionOptions() { onChanged(); return this; } + /** * * @@ -1008,6 +1034,7 @@ public com.google.datastore.v1.TransactionOptions.Builder getTransactionOptionsB onChanged(); return getTransactionOptionsFieldBuilder().getBuilder(); } + /** * * @@ -1026,6 +1053,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getTransactionOptions : transactionOptions_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java index 322bbccc6..9441e577d 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface BeginTransactionRequestOrBuilder @@ -36,6 +36,7 @@ public interface BeginTransactionRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -64,6 +65,7 @@ public interface BeginTransactionRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -92,6 +94,7 @@ public interface BeginTransactionRequestOrBuilder * @return Whether the transactionOptions field is set. */ boolean hasTransactionOptions(); + /** * * @@ -104,6 +107,7 @@ public interface BeginTransactionRequestOrBuilder * @return The transactionOptions. */ com.google.datastore.v1.TransactionOptions getTransactionOptions(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java index c955d18fd..839dab467 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class BeginTransactionResponse extends com.google.protobuf.Generate // @@protoc_insertion_point(message_implements:google.datastore.v1.BeginTransactionResponse) BeginTransactionResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use BeginTransactionResponse.newBuilder() to construct. private BeginTransactionResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -66,6 +67,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int TRANSACTION_FIELD_NUMBER = 1; private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -241,6 +243,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -424,6 +427,7 @@ public Builder mergeFrom( private int bitField0_; private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -439,6 +443,7 @@ public Builder mergeFrom( public com.google.protobuf.ByteString getTransaction() { return transaction_; } + /** * * @@ -460,6 +465,7 @@ public Builder setTransaction(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java index 065ffa4bd..408896255 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/BeginTransactionResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface BeginTransactionResponseOrBuilder diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java index 3b865f5be..3189b3fa6 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class CommitRequest extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.CommitRequest) CommitRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use CommitRequest.newBuilder() to construct. private CommitRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -121,6 +122,7 @@ public enum Mode implements com.google.protobuf.ProtocolMessageEnum { * MODE_UNSPECIFIED = 0; */ public static final int MODE_UNSPECIFIED_VALUE = 0; + /** * * @@ -133,6 +135,7 @@ public enum Mode implements com.google.protobuf.ProtocolMessageEnum { * TRANSACTIONAL = 1; */ public static final int TRANSACTIONAL_VALUE = 1; + /** * * @@ -244,6 +247,7 @@ public enum TransactionSelectorCase private TransactionSelectorCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -280,6 +284,7 @@ public TransactionSelectorCase getTransactionSelectorCase() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -303,6 +308,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -331,6 +337,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -357,6 +364,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -386,6 +394,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public static final int MODE_FIELD_NUMBER = 5; private int mode_ = 0; + /** * * @@ -401,6 +410,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public int getModeValue() { return mode_; } + /** * * @@ -420,6 +430,7 @@ public com.google.datastore.v1.CommitRequest.Mode getMode() { } public static final int TRANSACTION_FIELD_NUMBER = 1; + /** * * @@ -437,6 +448,7 @@ public com.google.datastore.v1.CommitRequest.Mode getMode() { public boolean hasTransaction() { return transactionSelectorCase_ == 1; } + /** * * @@ -459,6 +471,7 @@ public com.google.protobuf.ByteString getTransaction() { } public static final int SINGLE_USE_TRANSACTION_FIELD_NUMBER = 10; + /** * * @@ -477,6 +490,7 @@ public com.google.protobuf.ByteString getTransaction() { public boolean hasSingleUseTransaction() { return transactionSelectorCase_ == 10; } + /** * * @@ -498,6 +512,7 @@ public com.google.datastore.v1.TransactionOptions getSingleUseTransaction() { } return com.google.datastore.v1.TransactionOptions.getDefaultInstance(); } + /** * * @@ -522,6 +537,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getSingleUseTransacti @SuppressWarnings("serial") private java.util.List mutations_; + /** * * @@ -547,6 +563,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getSingleUseTransacti public java.util.List getMutationsList() { return mutations_; } + /** * * @@ -573,6 +590,7 @@ public java.util.List getMutationsList() { getMutationsOrBuilderList() { return mutations_; } + /** * * @@ -598,6 +616,7 @@ public java.util.List getMutationsList() { public int getMutationsCount() { return mutations_.size(); } + /** * * @@ -623,6 +642,7 @@ public int getMutationsCount() { public com.google.datastore.v1.Mutation getMutations(int index) { return mutations_.get(index); } + /** * * @@ -874,6 +894,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -1201,6 +1222,7 @@ public Builder clearTransactionSelector() { private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -1223,6 +1245,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -1245,6 +1268,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1266,6 +1290,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1283,6 +1308,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1307,6 +1333,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -1332,6 +1359,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -1357,6 +1385,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1381,6 +1410,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1401,6 +1431,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1428,6 +1459,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { } private int mode_ = 0; + /** * * @@ -1443,6 +1475,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public int getModeValue() { return mode_; } + /** * * @@ -1461,6 +1494,7 @@ public Builder setModeValue(int value) { onChanged(); return this; } + /** * * @@ -1478,6 +1512,7 @@ public com.google.datastore.v1.CommitRequest.Mode getMode() { com.google.datastore.v1.CommitRequest.Mode.forNumber(mode_); return result == null ? com.google.datastore.v1.CommitRequest.Mode.UNRECOGNIZED : result; } + /** * * @@ -1499,6 +1534,7 @@ public Builder setMode(com.google.datastore.v1.CommitRequest.Mode value) { onChanged(); return this; } + /** * * @@ -1533,6 +1569,7 @@ public Builder clearMode() { public boolean hasTransaction() { return transactionSelectorCase_ == 1; } + /** * * @@ -1552,6 +1589,7 @@ public com.google.protobuf.ByteString getTransaction() { } return com.google.protobuf.ByteString.EMPTY; } + /** * * @@ -1575,6 +1613,7 @@ public Builder setTransaction(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1602,6 +1641,7 @@ public Builder clearTransaction() { com.google.datastore.v1.TransactionOptions.Builder, com.google.datastore.v1.TransactionOptionsOrBuilder> singleUseTransactionBuilder_; + /** * * @@ -1620,6 +1660,7 @@ public Builder clearTransaction() { public boolean hasSingleUseTransaction() { return transactionSelectorCase_ == 10; } + /** * * @@ -1648,6 +1689,7 @@ public com.google.datastore.v1.TransactionOptions getSingleUseTransaction() { return com.google.datastore.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -1673,6 +1715,7 @@ public Builder setSingleUseTransaction(com.google.datastore.v1.TransactionOption transactionSelectorCase_ = 10; return this; } + /** * * @@ -1696,6 +1739,7 @@ public Builder setSingleUseTransaction( transactionSelectorCase_ = 10; return this; } + /** * * @@ -1732,6 +1776,7 @@ public Builder mergeSingleUseTransaction(com.google.datastore.v1.TransactionOpti transactionSelectorCase_ = 10; return this; } + /** * * @@ -1760,6 +1805,7 @@ public Builder clearSingleUseTransaction() { } return this; } + /** * * @@ -1775,6 +1821,7 @@ public Builder clearSingleUseTransaction() { public com.google.datastore.v1.TransactionOptions.Builder getSingleUseTransactionBuilder() { return getSingleUseTransactionFieldBuilder().getBuilder(); } + /** * * @@ -1798,6 +1845,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getSingleUseTransacti return com.google.datastore.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -1878,6 +1926,7 @@ public java.util.List getMutationsList() { return mutationsBuilder_.getMessageList(); } } + /** * * @@ -1906,6 +1955,7 @@ public int getMutationsCount() { return mutationsBuilder_.getCount(); } } + /** * * @@ -1934,6 +1984,7 @@ public com.google.datastore.v1.Mutation getMutations(int index) { return mutationsBuilder_.getMessage(index); } } + /** * * @@ -1968,6 +2019,7 @@ public Builder setMutations(int index, com.google.datastore.v1.Mutation value) { } return this; } + /** * * @@ -2000,6 +2052,7 @@ public Builder setMutations( } return this; } + /** * * @@ -2034,6 +2087,7 @@ public Builder addMutations(com.google.datastore.v1.Mutation value) { } return this; } + /** * * @@ -2068,6 +2122,7 @@ public Builder addMutations(int index, com.google.datastore.v1.Mutation value) { } return this; } + /** * * @@ -2099,6 +2154,7 @@ public Builder addMutations(com.google.datastore.v1.Mutation.Builder builderForV } return this; } + /** * * @@ -2131,6 +2187,7 @@ public Builder addMutations( } return this; } + /** * * @@ -2163,6 +2220,7 @@ public Builder addAllMutations( } return this; } + /** * * @@ -2194,6 +2252,7 @@ public Builder clearMutations() { } return this; } + /** * * @@ -2225,6 +2284,7 @@ public Builder removeMutations(int index) { } return this; } + /** * * @@ -2249,6 +2309,7 @@ public Builder removeMutations(int index) { public com.google.datastore.v1.Mutation.Builder getMutationsBuilder(int index) { return getMutationsFieldBuilder().getBuilder(index); } + /** * * @@ -2277,6 +2338,7 @@ public com.google.datastore.v1.MutationOrBuilder getMutationsOrBuilder(int index return mutationsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2306,6 +2368,7 @@ public com.google.datastore.v1.MutationOrBuilder getMutationsOrBuilder(int index return java.util.Collections.unmodifiableList(mutations_); } } + /** * * @@ -2331,6 +2394,7 @@ public com.google.datastore.v1.Mutation.Builder addMutationsBuilder() { return getMutationsFieldBuilder() .addBuilder(com.google.datastore.v1.Mutation.getDefaultInstance()); } + /** * * @@ -2356,6 +2420,7 @@ public com.google.datastore.v1.Mutation.Builder addMutationsBuilder(int index) { return getMutationsFieldBuilder() .addBuilder(index, com.google.datastore.v1.Mutation.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java index 8da438a01..2602a23f5 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface CommitRequestOrBuilder @@ -36,6 +36,7 @@ public interface CommitRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -64,6 +65,7 @@ public interface CommitRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -92,6 +94,7 @@ public interface CommitRequestOrBuilder * @return The enum numeric value on the wire for mode. */ int getModeValue(); + /** * * @@ -119,6 +122,7 @@ public interface CommitRequestOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * @@ -149,6 +153,7 @@ public interface CommitRequestOrBuilder * @return Whether the singleUseTransaction field is set. */ boolean hasSingleUseTransaction(); + /** * * @@ -164,6 +169,7 @@ public interface CommitRequestOrBuilder * @return The singleUseTransaction. */ com.google.datastore.v1.TransactionOptions getSingleUseTransaction(); + /** * * @@ -200,6 +206,7 @@ public interface CommitRequestOrBuilder * repeated .google.datastore.v1.Mutation mutations = 6; */ java.util.List getMutationsList(); + /** * * @@ -222,6 +229,7 @@ public interface CommitRequestOrBuilder * repeated .google.datastore.v1.Mutation mutations = 6; */ com.google.datastore.v1.Mutation getMutations(int index); + /** * * @@ -244,6 +252,7 @@ public interface CommitRequestOrBuilder * repeated .google.datastore.v1.Mutation mutations = 6; */ int getMutationsCount(); + /** * * @@ -266,6 +275,7 @@ public interface CommitRequestOrBuilder * repeated .google.datastore.v1.Mutation mutations = 6; */ java.util.List getMutationsOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java index 610c275ea..51aadd20b 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class CommitResponse extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.CommitResponse) CommitResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use CommitResponse.newBuilder() to construct. private CommitResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -68,6 +69,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List mutationResults_; + /** * * @@ -82,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getMutationResultsList() { return mutationResults_; } + /** * * @@ -97,6 +100,7 @@ public java.util.List getMutationResults getMutationResultsOrBuilderList() { return mutationResults_; } + /** * * @@ -111,6 +115,7 @@ public java.util.List getMutationResults public int getMutationResultsCount() { return mutationResults_.size(); } + /** * * @@ -125,6 +130,7 @@ public int getMutationResultsCount() { public com.google.datastore.v1.MutationResult getMutationResults(int index) { return mutationResults_.get(index); } + /** * * @@ -142,6 +148,7 @@ public com.google.datastore.v1.MutationResultOrBuilder getMutationResultsOrBuild public static final int INDEX_UPDATES_FIELD_NUMBER = 4; private int indexUpdates_ = 0; + /** * * @@ -161,6 +168,7 @@ public int getIndexUpdates() { public static final int COMMIT_TIME_FIELD_NUMBER = 8; private com.google.protobuf.Timestamp commitTime_; + /** * * @@ -176,6 +184,7 @@ public int getIndexUpdates() { public boolean hasCommitTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -191,6 +200,7 @@ public boolean hasCommitTime() { public com.google.protobuf.Timestamp getCommitTime() { return commitTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : commitTime_; } + /** * * @@ -388,6 +398,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -692,6 +703,7 @@ public java.util.List getMutationResults return mutationResultsBuilder_.getMessageList(); } } + /** * * @@ -709,6 +721,7 @@ public int getMutationResultsCount() { return mutationResultsBuilder_.getCount(); } } + /** * * @@ -726,6 +739,7 @@ public com.google.datastore.v1.MutationResult getMutationResults(int index) { return mutationResultsBuilder_.getMessage(index); } } + /** * * @@ -749,6 +763,7 @@ public Builder setMutationResults(int index, com.google.datastore.v1.MutationRes } return this; } + /** * * @@ -770,6 +785,7 @@ public Builder setMutationResults( } return this; } + /** * * @@ -793,6 +809,7 @@ public Builder addMutationResults(com.google.datastore.v1.MutationResult value) } return this; } + /** * * @@ -816,6 +833,7 @@ public Builder addMutationResults(int index, com.google.datastore.v1.MutationRes } return this; } + /** * * @@ -837,6 +855,7 @@ public Builder addMutationResults( } return this; } + /** * * @@ -858,6 +877,7 @@ public Builder addMutationResults( } return this; } + /** * * @@ -879,6 +899,7 @@ public Builder addAllMutationResults( } return this; } + /** * * @@ -899,6 +920,7 @@ public Builder clearMutationResults() { } return this; } + /** * * @@ -919,6 +941,7 @@ public Builder removeMutationResults(int index) { } return this; } + /** * * @@ -932,6 +955,7 @@ public Builder removeMutationResults(int index) { public com.google.datastore.v1.MutationResult.Builder getMutationResultsBuilder(int index) { return getMutationResultsFieldBuilder().getBuilder(index); } + /** * * @@ -949,6 +973,7 @@ public com.google.datastore.v1.MutationResultOrBuilder getMutationResultsOrBuild return mutationResultsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -967,6 +992,7 @@ public com.google.datastore.v1.MutationResultOrBuilder getMutationResultsOrBuild return java.util.Collections.unmodifiableList(mutationResults_); } } + /** * * @@ -981,6 +1007,7 @@ public com.google.datastore.v1.MutationResult.Builder addMutationResultsBuilder( return getMutationResultsFieldBuilder() .addBuilder(com.google.datastore.v1.MutationResult.getDefaultInstance()); } + /** * * @@ -995,6 +1022,7 @@ public com.google.datastore.v1.MutationResult.Builder addMutationResultsBuilder( return getMutationResultsFieldBuilder() .addBuilder(index, com.google.datastore.v1.MutationResult.getDefaultInstance()); } + /** * * @@ -1031,6 +1059,7 @@ public com.google.datastore.v1.MutationResult.Builder addMutationResultsBuilder( } private int indexUpdates_; + /** * * @@ -1047,6 +1076,7 @@ public com.google.datastore.v1.MutationResult.Builder addMutationResultsBuilder( public int getIndexUpdates() { return indexUpdates_; } + /** * * @@ -1067,6 +1097,7 @@ public Builder setIndexUpdates(int value) { onChanged(); return this; } + /** * * @@ -1092,6 +1123,7 @@ public Builder clearIndexUpdates() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> commitTimeBuilder_; + /** * * @@ -1106,6 +1138,7 @@ public Builder clearIndexUpdates() { public boolean hasCommitTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1126,6 +1159,7 @@ public com.google.protobuf.Timestamp getCommitTime() { return commitTimeBuilder_.getMessage(); } } + /** * * @@ -1148,6 +1182,7 @@ public Builder setCommitTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1167,6 +1202,7 @@ public Builder setCommitTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1194,6 +1230,7 @@ public Builder mergeCommitTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1213,6 +1250,7 @@ public Builder clearCommitTime() { onChanged(); return this; } + /** * * @@ -1227,6 +1265,7 @@ public com.google.protobuf.Timestamp.Builder getCommitTimeBuilder() { onChanged(); return getCommitTimeFieldBuilder().getBuilder(); } + /** * * @@ -1245,6 +1284,7 @@ public com.google.protobuf.TimestampOrBuilder getCommitTimeOrBuilder() { : commitTime_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java index 41d4a006d..734dab60a 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CommitResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface CommitResponseOrBuilder @@ -35,6 +35,7 @@ public interface CommitResponseOrBuilder * repeated .google.datastore.v1.MutationResult mutation_results = 3; */ java.util.List getMutationResultsList(); + /** * * @@ -46,6 +47,7 @@ public interface CommitResponseOrBuilder * repeated .google.datastore.v1.MutationResult mutation_results = 3; */ com.google.datastore.v1.MutationResult getMutationResults(int index); + /** * * @@ -57,6 +59,7 @@ public interface CommitResponseOrBuilder * repeated .google.datastore.v1.MutationResult mutation_results = 3; */ int getMutationResultsCount(); + /** * * @@ -69,6 +72,7 @@ public interface CommitResponseOrBuilder */ java.util.List getMutationResultsOrBuilderList(); + /** * * @@ -107,6 +111,7 @@ public interface CommitResponseOrBuilder * @return Whether the commitTime field is set. */ boolean hasCommitTime(); + /** * * @@ -119,6 +124,7 @@ public interface CommitResponseOrBuilder * @return The commitTime. */ com.google.protobuf.Timestamp getCommitTime(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java index 500df91cc..48ce71656 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class CompositeFilter extends com.google.protobuf.GeneratedMessageV // @@protoc_insertion_point(message_implements:google.datastore.v1.CompositeFilter) CompositeFilterOrBuilder { private static final long serialVersionUID = 0L; + // Use CompositeFilter.newBuilder() to construct. private CompositeFilter(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -117,6 +118,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * OPERATOR_UNSPECIFIED = 0; */ public static final int OPERATOR_UNSPECIFIED_VALUE = 0; + /** * * @@ -127,6 +129,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * AND = 1; */ public static final int AND_VALUE = 1; + /** * * @@ -223,6 +226,7 @@ private Operator(int value) { public static final int OP_FIELD_NUMBER = 1; private int op_ = 0; + /** * * @@ -238,6 +242,7 @@ private Operator(int value) { public int getOpValue() { return op_; } + /** * * @@ -260,6 +265,7 @@ public com.google.datastore.v1.CompositeFilter.Operator getOp() { @SuppressWarnings("serial") private java.util.List filters_; + /** * * @@ -277,6 +283,7 @@ public com.google.datastore.v1.CompositeFilter.Operator getOp() { public java.util.List getFiltersList() { return filters_; } + /** * * @@ -295,6 +302,7 @@ public java.util.List getFiltersList() { getFiltersOrBuilderList() { return filters_; } + /** * * @@ -312,6 +320,7 @@ public java.util.List getFiltersList() { public int getFiltersCount() { return filters_.size(); } + /** * * @@ -329,6 +338,7 @@ public int getFiltersCount() { public com.google.datastore.v1.Filter getFilters(int index) { return filters_.get(index); } + /** * * @@ -516,6 +526,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -756,6 +767,7 @@ public Builder mergeFrom( private int bitField0_; private int op_ = 0; + /** * * @@ -771,6 +783,7 @@ public Builder mergeFrom( public int getOpValue() { return op_; } + /** * * @@ -789,6 +802,7 @@ public Builder setOpValue(int value) { onChanged(); return this; } + /** * * @@ -808,6 +822,7 @@ public com.google.datastore.v1.CompositeFilter.Operator getOp() { ? com.google.datastore.v1.CompositeFilter.Operator.UNRECOGNIZED : result; } + /** * * @@ -829,6 +844,7 @@ public Builder setOp(com.google.datastore.v1.CompositeFilter.Operator value) { onChanged(); return this; } + /** * * @@ -883,6 +899,7 @@ public java.util.List getFiltersList() { return filtersBuilder_.getMessageList(); } } + /** * * @@ -903,6 +920,7 @@ public int getFiltersCount() { return filtersBuilder_.getCount(); } } + /** * * @@ -923,6 +941,7 @@ public com.google.datastore.v1.Filter getFilters(int index) { return filtersBuilder_.getMessage(index); } } + /** * * @@ -949,6 +968,7 @@ public Builder setFilters(int index, com.google.datastore.v1.Filter value) { } return this; } + /** * * @@ -972,6 +992,7 @@ public Builder setFilters(int index, com.google.datastore.v1.Filter.Builder buil } return this; } + /** * * @@ -998,6 +1019,7 @@ public Builder addFilters(com.google.datastore.v1.Filter value) { } return this; } + /** * * @@ -1024,6 +1046,7 @@ public Builder addFilters(int index, com.google.datastore.v1.Filter value) { } return this; } + /** * * @@ -1047,6 +1070,7 @@ public Builder addFilters(com.google.datastore.v1.Filter.Builder builderForValue } return this; } + /** * * @@ -1070,6 +1094,7 @@ public Builder addFilters(int index, com.google.datastore.v1.Filter.Builder buil } return this; } + /** * * @@ -1094,6 +1119,7 @@ public Builder addAllFilters( } return this; } + /** * * @@ -1117,6 +1143,7 @@ public Builder clearFilters() { } return this; } + /** * * @@ -1140,6 +1167,7 @@ public Builder removeFilters(int index) { } return this; } + /** * * @@ -1156,6 +1184,7 @@ public Builder removeFilters(int index) { public com.google.datastore.v1.Filter.Builder getFiltersBuilder(int index) { return getFiltersFieldBuilder().getBuilder(index); } + /** * * @@ -1176,6 +1205,7 @@ public com.google.datastore.v1.FilterOrBuilder getFiltersOrBuilder(int index) { return filtersBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1197,6 +1227,7 @@ public com.google.datastore.v1.FilterOrBuilder getFiltersOrBuilder(int index) { return java.util.Collections.unmodifiableList(filters_); } } + /** * * @@ -1214,6 +1245,7 @@ public com.google.datastore.v1.Filter.Builder addFiltersBuilder() { return getFiltersFieldBuilder() .addBuilder(com.google.datastore.v1.Filter.getDefaultInstance()); } + /** * * @@ -1231,6 +1263,7 @@ public com.google.datastore.v1.Filter.Builder addFiltersBuilder(int index) { return getFiltersFieldBuilder() .addBuilder(index, com.google.datastore.v1.Filter.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java index b9d87ece8..da11961a0 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/CompositeFilterOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface CompositeFilterOrBuilder @@ -36,6 +36,7 @@ public interface CompositeFilterOrBuilder * @return The enum numeric value on the wire for op. */ int getOpValue(); + /** * * @@ -63,6 +64,7 @@ public interface CompositeFilterOrBuilder * repeated .google.datastore.v1.Filter filters = 2; */ java.util.List getFiltersList(); + /** * * @@ -77,6 +79,7 @@ public interface CompositeFilterOrBuilder * repeated .google.datastore.v1.Filter filters = 2; */ com.google.datastore.v1.Filter getFilters(int index); + /** * * @@ -91,6 +94,7 @@ public interface CompositeFilterOrBuilder * repeated .google.datastore.v1.Filter filters = 2; */ int getFiltersCount(); + /** * * @@ -105,6 +109,7 @@ public interface CompositeFilterOrBuilder * repeated .google.datastore.v1.Filter filters = 2; */ java.util.List getFiltersOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java index 1b8753e35..b7fd2e6b5 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/DatastoreProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public final class DatastoreProto { @@ -96,10 +96,18 @@ public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry r internal_static_google_datastore_v1_Mutation_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_google_datastore_v1_Mutation_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_datastore_v1_PropertyTransform_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_datastore_v1_PropertyTransform_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_datastore_v1_MutationResult_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_google_datastore_v1_MutationResult_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_google_datastore_v1_PropertyMask_descriptor; + static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_google_datastore_v1_PropertyMask_fieldAccessorTable; static final com.google.protobuf.Descriptors.Descriptor internal_static_google_datastore_v1_ReadOptions_descriptor; static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable @@ -125,160 +133,217 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n#google/datastore/v1/datastore.proto\022\023g" + "\n" + + "#google/datastore/v1/datastore.proto\022\023g" + "oogle.datastore.v1\032\034google/api/annotatio" + "ns.proto\032\027google/api/client.proto\032\037googl" + "e/api/field_behavior.proto\032\030google/api/r" - + "outing.proto\032,google/datastore/v1/aggreg" - + "ation_result.proto\032 google/datastore/v1/" + + "outing.proto\032,google/datastore/v1/aggregation_result.proto\032 google/datastore/v1/" + "entity.proto\032\037google/datastore/v1/query." + "proto\032\'google/datastore/v1/query_profile" - + ".proto\032\037google/protobuf/timestamp.proto\"" - + "\242\001\n\rLookupRequest\022\027\n\nproject_id\030\010 \001(\tB\003\340" - + "A\002\022\023\n\013database_id\030\t \001(\t\0226\n\014read_options\030" - + "\001 \001(\0132 .google.datastore.v1.ReadOptions\022" - + "+\n\004keys\030\003 \003(\0132\030.google.datastore.v1.KeyB" - + "\003\340A\002\"\346\001\n\016LookupResponse\0220\n\005found\030\001 \003(\0132!" - + ".google.datastore.v1.EntityResult\0222\n\007mis" - + "sing\030\002 \003(\0132!.google.datastore.v1.EntityR" - + "esult\022*\n\010deferred\030\003 \003(\0132\030.google.datasto" - + "re.v1.Key\022\023\n\013transaction\030\005 \001(\014\022-\n\tread_t" - + "ime\030\007 \001(\0132\032.google.protobuf.Timestamp\"\341\002" - + "\n\017RunQueryRequest\022\027\n\nproject_id\030\010 \001(\tB\003\340" - + "A\002\022\023\n\013database_id\030\t \001(\t\0226\n\014partition_id\030" - + "\002 \001(\0132 .google.datastore.v1.PartitionId\022" - + "6\n\014read_options\030\001 \001(\0132 .google.datastore" - + ".v1.ReadOptions\022+\n\005query\030\003 \001(\0132\032.google." - + "datastore.v1.QueryH\000\0222\n\tgql_query\030\007 \001(\0132" - + "\035.google.datastore.v1.GqlQueryH\000\022A\n\017expl" - + "ain_options\030\014 \001(\0132#.google.datastore.v1." - + "ExplainOptionsB\003\340A\001B\014\n\nquery_type\"\306\001\n\020Ru" - + "nQueryResponse\0224\n\005batch\030\001 \001(\0132%.google.d" - + "atastore.v1.QueryResultBatch\022)\n\005query\030\002 " - + "\001(\0132\032.google.datastore.v1.Query\022\023\n\013trans" - + "action\030\005 \001(\014\022<\n\017explain_metrics\030\t \001(\0132#." - + "google.datastore.v1.ExplainMetrics\"\203\003\n\032R" - + "unAggregationQueryRequest\022\027\n\nproject_id\030" - + "\010 \001(\tB\003\340A\002\022\023\n\013database_id\030\t \001(\t\0226\n\014parti" - + "tion_id\030\002 \001(\0132 .google.datastore.v1.Part" - + "itionId\0226\n\014read_options\030\001 \001(\0132 .google.d" - + "atastore.v1.ReadOptions\022B\n\021aggregation_q" - + "uery\030\003 \001(\0132%.google.datastore.v1.Aggrega" - + "tionQueryH\000\0222\n\tgql_query\030\007 \001(\0132\035.google." - + "datastore.v1.GqlQueryH\000\022A\n\017explain_optio" - + "ns\030\013 \001(\0132#.google.datastore.v1.ExplainOp" - + "tionsB\003\340A\001B\014\n\nquery_type\"\342\001\n\033RunAggregat" - + "ionQueryResponse\022:\n\005batch\030\001 \001(\0132+.google" - + ".datastore.v1.AggregationResultBatch\0224\n\005" - + "query\030\002 \001(\0132%.google.datastore.v1.Aggreg" - + "ationQuery\022\023\n\013transaction\030\005 \001(\014\022<\n\017expla" - + "in_metrics\030\t \001(\0132#.google.datastore.v1.E" - + "xplainMetrics\"\215\001\n\027BeginTransactionReques" - + "t\022\027\n\nproject_id\030\010 \001(\tB\003\340A\002\022\023\n\013database_i" - + "d\030\t \001(\t\022D\n\023transaction_options\030\n \001(\0132\'.g" - + "oogle.datastore.v1.TransactionOptions\"/\n" - + "\030BeginTransactionResponse\022\023\n\013transaction" - + "\030\001 \001(\014\"Y\n\017RollbackRequest\022\027\n\nproject_id\030" - + "\010 \001(\tB\003\340A\002\022\023\n\013database_id\030\t \001(\t\022\030\n\013trans" - + "action\030\001 \001(\014B\003\340A\002\"\022\n\020RollbackResponse\"\350\002" - + "\n\rCommitRequest\022\027\n\nproject_id\030\010 \001(\tB\003\340A\002" - + "\022\023\n\013database_id\030\t \001(\t\0225\n\004mode\030\005 \001(\0162\'.go" - + "ogle.datastore.v1.CommitRequest.Mode\022\025\n\013" - + "transaction\030\001 \001(\014H\000\022I\n\026single_use_transa" - + "ction\030\n \001(\0132\'.google.datastore.v1.Transa" - + "ctionOptionsH\000\0220\n\tmutations\030\006 \003(\0132\035.goog" - + "le.datastore.v1.Mutation\"F\n\004Mode\022\024\n\020MODE" - + "_UNSPECIFIED\020\000\022\021\n\rTRANSACTIONAL\020\001\022\025\n\021NON" - + "_TRANSACTIONAL\020\002B\026\n\024transaction_selector" - + "\"\227\001\n\016CommitResponse\022=\n\020mutation_results\030" - + "\003 \003(\0132#.google.datastore.v1.MutationResu" - + "lt\022\025\n\rindex_updates\030\004 \001(\005\022/\n\013commit_time" - + "\030\010 \001(\0132\032.google.protobuf.Timestamp\"o\n\022Al" - + "locateIdsRequest\022\027\n\nproject_id\030\010 \001(\tB\003\340A" - + "\002\022\023\n\013database_id\030\t \001(\t\022+\n\004keys\030\001 \003(\0132\030.g" - + "oogle.datastore.v1.KeyB\003\340A\002\"=\n\023AllocateI" - + "dsResponse\022&\n\004keys\030\001 \003(\0132\030.google.datast" - + "ore.v1.Key\"n\n\021ReserveIdsRequest\022\027\n\nproje" - + "ct_id\030\010 \001(\tB\003\340A\002\022\023\n\013database_id\030\t \001(\t\022+\n" - + "\004keys\030\001 \003(\0132\030.google.datastore.v1.KeyB\003\340" - + "A\002\"\024\n\022ReserveIdsResponse\"\272\002\n\010Mutation\022-\n" - + "\006insert\030\004 \001(\0132\033.google.datastore.v1.Enti" - + "tyH\000\022-\n\006update\030\005 \001(\0132\033.google.datastore." - + "v1.EntityH\000\022-\n\006upsert\030\006 \001(\0132\033.google.dat" - + "astore.v1.EntityH\000\022*\n\006delete\030\007 \001(\0132\030.goo" - + "gle.datastore.v1.KeyH\000\022\026\n\014base_version\030\010" - + " \001(\003H\001\0221\n\013update_time\030\013 \001(\0132\032.google.pro" - + "tobuf.TimestampH\001B\013\n\toperationB\035\n\033confli" - + "ct_detection_strategy\"\305\001\n\016MutationResult" - + "\022%\n\003key\030\003 \001(\0132\030.google.datastore.v1.Key\022" - + "\017\n\007version\030\004 \001(\003\022/\n\013create_time\030\007 \001(\0132\032." - + "google.protobuf.Timestamp\022/\n\013update_time" - + "\030\006 \001(\0132\032.google.protobuf.Timestamp\022\031\n\021co" - + "nflict_detected\030\005 \001(\010\"\312\002\n\013ReadOptions\022L\n" - + "\020read_consistency\030\001 \001(\01620.google.datasto" - + "re.v1.ReadOptions.ReadConsistencyH\000\022\025\n\013t" - + "ransaction\030\002 \001(\014H\000\022B\n\017new_transaction\030\003 " - + "\001(\0132\'.google.datastore.v1.TransactionOpt" - + "ionsH\000\022/\n\tread_time\030\004 \001(\0132\032.google.proto" - + "buf.TimestampH\000\"M\n\017ReadConsistency\022 \n\034RE" - + "AD_CONSISTENCY_UNSPECIFIED\020\000\022\n\n\006STRONG\020\001" - + "\022\014\n\010EVENTUAL\020\002B\022\n\020consistency_type\"\222\002\n\022T" - + "ransactionOptions\022G\n\nread_write\030\001 \001(\01321." - + "google.datastore.v1.TransactionOptions.R" - + "eadWriteH\000\022E\n\tread_only\030\002 \001(\01320.google.d" - + "atastore.v1.TransactionOptions.ReadOnlyH" - + "\000\032)\n\tReadWrite\022\034\n\024previous_transaction\030\001" - + " \001(\014\0329\n\010ReadOnly\022-\n\tread_time\030\001 \001(\0132\032.go" - + "ogle.protobuf.TimestampB\006\n\004mode2\341\r\n\tData" - + "store\022\300\001\n\006Lookup\022\".google.datastore.v1.L" - + "ookupRequest\032#.google.datastore.v1.Looku" - + "pResponse\"m\332A\034project_id,read_options,ke" - + "ys\202\323\344\223\002%\" /v1/projects/{project_id}:look" - + "up:\001*\212\323\344\223\002\035\022\014\n\nproject_id\022\r\n\013database_id" - + "\022\251\001\n\010RunQuery\022$.google.datastore.v1.RunQ" - + "ueryRequest\032%.google.datastore.v1.RunQue" - + "ryResponse\"P\202\323\344\223\002\'\"\"/v1/projects/{projec" - + "t_id}:runQuery:\001*\212\323\344\223\002\035\022\014\n\nproject_id\022\r\n" - + "\013database_id\022\325\001\n\023RunAggregationQuery\022/.g" - + "oogle.datastore.v1.RunAggregationQueryRe" + + ".proto\032\037google/protobuf/timestamp.proto\"\334\001\n\r" + + "LookupRequest\022\027\n\n" + + "project_id\030\010 \001(\tB\003\340A\002\022\023\n" + + "\013database_id\030\t \001(\t\0226\n" + + "\014read_options\030\001 \001(\0132 .google.datastore.v1.ReadOptions\022+\n" + + "\004keys\030\003 \003(\0132\030.google.datastore.v1.KeyB\003\340A\002\0228\n\r" + + "property_mask\030\005 \001(\0132!.google.datastore.v1.PropertyMask\"\346\001\n" + + "\016LookupResponse\0220\n" + + "\005found\030\001 \003(\0132!.google.datastore.v1.EntityResult\0222\n" + + "\007missing\030\002 \003(\0132!.google.datastore.v1.EntityResult\022*\n" + + "\010deferred\030\003 \003(\0132\030.google.datastore.v1.Key\022\023\n" + + "\013transaction\030\005 \001(\014\022-\n" + + "\tread_time\030\007 \001(\0132\032.google.protobuf.Timestamp\"\233\003\n" + + "\017RunQueryRequest\022\027\n\n" + + "project_id\030\010 \001(\tB\003\340A\002\022\023\n" + + "\013database_id\030\t \001(\t\0226\n" + + "\014partition_id\030\002 \001(\0132 .google.datastore.v1.PartitionId\0226\n" + + "\014read_options\030\001 \001(\0132 .google.datastore.v1.ReadOptions\022+\n" + + "\005query\030\003 \001(\0132\032.google.datastore.v1.QueryH\000\0222\n" + + "\tgql_query\030\007 \001(\0132\035.google.datastore.v1.GqlQueryH\000\0228\n\r" + + "property_mask\030\n" + + " \001(\0132!.google.datastore.v1.PropertyMask\022A\n" + + "\017explain_options\030\014" + + " \001(\0132#.google.datastore.v1.ExplainOptionsB\003\340A\001B\014\n\n" + + "query_type\"\306\001\n" + + "\020RunQueryResponse\0224\n" + + "\005batch\030\001 \001(\0132%.google.datastore.v1.QueryResultBatch\022)\n" + + "\005query\030\002 \001(\0132\032.google.datastore.v1.Query\022\023\n" + + "\013transaction\030\005 \001(\014\022<\n" + + "\017explain_metrics\030\t \001(\0132#.google.datastore.v1.ExplainMetrics\"\203\003\n" + + "\032RunAggregationQueryRequest\022\027\n\n" + + "project_id\030\010 \001(\tB\003\340A\002\022\023\n" + + "\013database_id\030\t \001(\t\0226\n" + + "\014partition_id\030\002 \001(\0132 .google.datastore.v1.PartitionId\0226\n" + + "\014read_options\030\001 \001(\0132 .google.datastore.v1.ReadOptions\022B\n" + + "\021aggregation_query\030\003" + + " \001(\0132%.google.datastore.v1.AggregationQueryH\000\0222\n" + + "\tgql_query\030\007 \001(\0132\035.google.datastore.v1.GqlQueryH\000\022A\n" + + "\017explain_options\030\013" + + " \001(\0132#.google.datastore.v1.ExplainOptionsB\003\340A\001B\014\n\n" + + "query_type\"\342\001\n" + + "\033RunAggregationQueryResponse\022:\n" + + "\005batch\030\001 \001(\0132+.google.datastore.v1.AggregationResultBatch\0224\n" + + "\005query\030\002 \001(\0132%.google.datastore.v1.AggregationQuery\022\023\n" + + "\013transaction\030\005 \001(\014\022<\n" + + "\017explain_metrics\030\t \001(\0132#.google.datastore.v1.ExplainMetrics\"\215\001\n" + + "\027BeginTransactionRequest\022\027\n" + + "\n" + + "project_id\030\010 \001(\tB\003\340A\002\022\023\n" + + "\013database_id\030\t \001(\t\022D\n" + + "\023transaction_options\030\n" + + " \001(\0132\'.google.datastore.v1.TransactionOptions\"/\n" + + "\030BeginTransactionResponse\022\023\n" + + "\013transaction\030\001 \001(\014\"Y\n" + + "\017RollbackRequest\022\027\n\n" + + "project_id\030\010 \001(\tB\003\340A\002\022\023\n" + + "\013database_id\030\t \001(\t\022\030\n" + + "\013transaction\030\001 \001(\014B\003\340A\002\"\022\n" + + "\020RollbackResponse\"\350\002\n\r" + + "CommitRequest\022\027\n\n" + + "project_id\030\010 \001(\tB\003\340A\002\022\023\n" + + "\013database_id\030\t \001(\t\0225\n" + + "\004mode\030\005 \001(\0162\'.google.datastore.v1.CommitRequest.Mode\022\025\n" + + "\013transaction\030\001 \001(\014H\000\022I\n" + + "\026single_use_transaction\030\n" + + " \001(\0132\'.google.datastore.v1.TransactionOptionsH\000\0220\n" + + "\tmutations\030\006 \003(\0132\035.google.datastore.v1.Mutation\"F\n" + + "\004Mode\022\024\n" + + "\020MODE_UNSPECIFIED\020\000\022\021\n\r" + + "TRANSACTIONAL\020\001\022\025\n" + + "\021NON_TRANSACTIONAL\020\002B\026\n" + + "\024transaction_selector\"\227\001\n" + + "\016CommitResponse\022=\n" + + "\020mutation_results\030\003 \003(" + + "\0132#.google.datastore.v1.MutationResult\022\025\n\r" + + "index_updates\030\004 \001(\005\022/\n" + + "\013commit_time\030\010 \001(\0132\032.google.protobuf.Timestamp\"o\n" + + "\022AllocateIdsRequest\022\027\n\n" + + "project_id\030\010 \001(\tB\003\340A\002\022\023\n" + + "\013database_id\030\t \001(\t\022+\n" + + "\004keys\030\001 \003(\0132\030.google.datastore.v1.KeyB\003\340A\002\"=\n" + + "\023AllocateIdsResponse\022&\n" + + "\004keys\030\001 \003(\0132\030.google.datastore.v1.Key\"n\n" + + "\021ReserveIdsRequest\022\027\n\n" + + "project_id\030\010 \001(\tB\003\340A\002\022\023\n" + + "\013database_id\030\t \001(\t\022+\n" + + "\004keys\030\001 \003(\0132\030.google.datastore.v1.KeyB\003\340A\002\"\024\n" + + "\022ReserveIdsResponse\"\362\004\n" + + "\010Mutation\022-\n" + + "\006insert\030\004 \001(\0132\033.google.datastore.v1.EntityH\000\022-\n" + + "\006update\030\005 \001(\0132\033.google.datastore.v1.EntityH\000\022-\n" + + "\006upsert\030\006 \001(\0132\033.google.datastore.v1.EntityH\000\022*\n" + + "\006delete\030\007 \001(\0132\030.google.datastore.v1.KeyH\000\022\026\n" + + "\014base_version\030\010 \001(\003H\001\0221\n" + + "\013update_time\030\013 \001(\0132\032.google.protobuf.TimestampH\001\022^\n" + + "\034conflict_resolution_strategy\030\n" + + " \001(\01628.google.datastore.v1.Mutation.ConflictResolutionStrategy\0228\n\r" + + "property_mask\030\t \001(\0132!.google.datastore.v1.PropertyMask\022H\n" + + "\023property_transforms\030\014 \003(\0132&.g" + + "oogle.datastore.v1.PropertyTransformB\003\340A\001\"R\n" + + "\032ConflictResolutionStrategy\022\030\n" + + "\024STRATEGY_UNSPECIFIED\020\000\022\020\n" + + "\014SERVER_VALUE\020\001\022\010\n" + + "\004FAIL\020\003B\013\n" + + "\toperationB\035\n" + + "\033conflict_detection_strategy\"\343\003\n" + + "\021PropertyTransform\022\025\n" + + "\010property\030\001 \001(\tB\003\340A\001\022Q\n" + + "\023set_to_server_value\030\002 " + + "\001(\01622.google.datastore.v1.PropertyTransform.ServerValueH\000\022/\n" + + "\tincrement\030\003 \001(\0132\032.google.datastore.v1.ValueH\000\022-\n" + + "\007maximum\030\004 \001(\0132\032.google.datastore.v1.ValueH\000\022-\n" + + "\007minimum\030\005 \001(\0132\032.google.datastore.v1.ValueH\000\022B\n" + + "\027append_missing_elements\030\006" + + " \001(\0132\037.google.datastore.v1.ArrayValueH\000\022@\n" + + "\025remove_all_from_array\030\007" + + " \001(\0132\037.google.datastore.v1.ArrayValueH\000\"=\n" + + "\013ServerValue\022\034\n" + + "\030SERVER_VALUE_UNSPECIFIED\020\000\022\020\n" + + "\014REQUEST_TIME\020\001B\020\n" + + "\016transform_type\"\374\001\n" + + "\016MutationResult\022%\n" + + "\003key\030\003 \001(\0132\030.google.datastore.v1.Key\022\017\n" + + "\007version\030\004 \001(\003\022/\n" + + "\013create_time\030\007 \001(\0132\032.google.protobuf.Timestamp\022/\n" + + "\013update_time\030\006 \001(\0132\032.google.protobuf.Timestamp\022\031\n" + + "\021conflict_detected\030\005 \001(\010\0225\n" + + "\021transform_results\030\010 \003(\0132\032.google.datastore.v1.Value\"\035\n" + + "\014PropertyMask\022\r\n" + + "\005paths\030\001 \003(\t\"\312\002\n" + + "\013ReadOptions\022L\n" + + "\020read_consistency\030\001" + + " \001(\01620.google.datastore.v1.ReadOptions.ReadConsistencyH\000\022\025\n" + + "\013transaction\030\002 \001(\014H\000\022B\n" + + "\017new_transaction\030\003 " + + "\001(\0132\'.google.datastore.v1.TransactionOptionsH\000\022/\n" + + "\tread_time\030\004 \001(\0132\032.google.protobuf.TimestampH\000\"M\n" + + "\017ReadConsistency\022 \n" + + "\034READ_CONSISTENCY_UNSPECIFIED\020\000\022\n\n" + + "\006STRONG\020\001\022\014\n" + + "\010EVENTUAL\020\002B\022\n" + + "\020consistency_type\"\222\002\n" + + "\022TransactionOptions\022G\n\n" + + "read_write\030\001 \001(\01321." + + "google.datastore.v1.TransactionOptions.ReadWriteH\000\022E\n" + + "\tread_only\030\002 \001(\01320.google.d" + + "atastore.v1.TransactionOptions.ReadOnlyH\000\032)\n" + + "\tReadWrite\022\034\n" + + "\024previous_transaction\030\001 \001(\014\0329\n" + + "\010ReadOnly\022-\n" + + "\tread_time\030\001 \001(\0132\032.google.protobuf.TimestampB\006\n" + + "\004mode2\341\r\n" + + "\tDatastore\022\300\001\n" + + "\006Lookup\022\".google.datastore.v1.LookupRequest\032#.google.datastore.v1.Looku" + + "pResponse\"m\332A\034project_id,read_options,keys\202\323\344\223\002%\"" + + " /v1/projects/{project_id}:lookup:\001*\212\323\344\223\002\035\022\014\n\n" + + "project_id\022\r\n" + + "\013database_id\022\251\001\n" + + "\010RunQuery\022$.google.datastore.v1.RunQueryRequest\032%.google.datastore.v1.RunQue" + + "ryResponse\"P\202\323\344\223\002\'\"\"/v1/projects/{project_id}:runQuery:\001*\212\323\344\223\002\035\022\014\n\n" + + "project_id\022\r\n" + + "\013database_id\022\325\001\n" + + "\023RunAggregationQuery\022/.google.datastore.v1.RunAggregationQueryRe" + "quest\0320.google.datastore.v1.RunAggregati" + "onQueryResponse\"[\202\323\344\223\0022\"-/v1/projects/{p" - + "roject_id}:runAggregationQuery:\001*\212\323\344\223\002\035\022" - + "\014\n\nproject_id\022\r\n\013database_id\022\326\001\n\020BeginTr" - + "ansaction\022,.google.datastore.v1.BeginTra" - + "nsactionRequest\032-.google.datastore.v1.Be" - + "ginTransactionResponse\"e\332A\nproject_id\202\323\344" - + "\223\002/\"*/v1/projects/{project_id}:beginTran" - + "saction:\001*\212\323\344\223\002\035\022\014\n\nproject_id\022\r\n\013databa" - + "se_id\022\346\001\n\006Commit\022\".google.datastore.v1.C" - + "ommitRequest\032#.google.datastore.v1.Commi" + + "roject_id}:runAggregationQuery:\001*\212\323\344\223\002\035\022\014\n\n" + + "project_id\022\r\n" + + "\013database_id\022\326\001\n" + + "\020BeginTransaction\022,.google.datastore.v1.BeginTra" + + "nsactionRequest\032-.google.datastore.v1.BeginTransactionResponse\"e\332A\n" + + "project_id\202\323\344" + + "\223\002/\"*/v1/projects/{project_id}:beginTransaction:\001*\212\323\344\223\002\035\022\014\n\n" + + "project_id\022\r\n" + + "\013database_id\022\346\001\n" + + "\006Commit\022\".google.datastore.v1.CommitRequest\032#.google.datastore.v1.Commi" + "tResponse\"\222\001\332A%project_id,mode,transacti" - + "on,mutations\332A\031project_id,mode,mutations" - + "\202\323\344\223\002%\" /v1/projects/{project_id}:commit" - + ":\001*\212\323\344\223\002\035\022\014\n\nproject_id\022\r\n\013database_id\022\302" - + "\001\n\010Rollback\022$.google.datastore.v1.Rollba" + + "on,mutations\332A\031project_id,mode,mutations\202\323\344\223\002%\"" + + " /v1/projects/{project_id}:commit:\001*\212\323\344\223\002\035\022\014\n\n" + + "project_id\022\r\n" + + "\013database_id\022\302\001\n" + + "\010Rollback\022$.google.datastore.v1.Rollba" + "ckRequest\032%.google.datastore.v1.Rollback" + "Response\"i\332A\026project_id,transaction\202\323\344\223\002" - + "\'\"\"/v1/projects/{project_id}:rollback:\001*" - + "\212\323\344\223\002\035\022\014\n\nproject_id\022\r\n\013database_id\022\307\001\n\013" - + "AllocateIds\022\'.google.datastore.v1.Alloca" + + "\'\"\"/v1/projects/{project_id}:rollback:\001*\212\323\344\223\002\035\022\014\n\n" + + "project_id\022\r\n" + + "\013database_id\022\307\001\n" + + "\013AllocateIds\022\'.google.datastore.v1.Alloca" + "teIdsRequest\032(.google.datastore.v1.Alloc" + "ateIdsResponse\"e\332A\017project_id,keys\202\323\344\223\002*" - + "\"%/v1/projects/{project_id}:allocateIds:" - + "\001*\212\323\344\223\002\035\022\014\n\nproject_id\022\r\n\013database_id\022\303\001" - + "\n\nReserveIds\022&.google.datastore.v1.Reser" - + "veIdsRequest\032\'.google.datastore.v1.Reser" + + "\"%/v1/projects/{project_id}:allocateIds:\001*\212\323\344\223\002\035\022\014\n\n" + + "project_id\022\r\n" + + "\013database_id\022\303\001\n\n" + + "ReserveIds\022&.google.datastore.v1.ReserveIdsRequest\032\'.google.datastore.v1.Reser" + "veIdsResponse\"d\332A\017project_id,keys\202\323\344\223\002)\"" - + "$/v1/projects/{project_id}:reserveIds:\001*" - + "\212\323\344\223\002\035\022\014\n\nproject_id\022\r\n\013database_id\032v\312A\030" - + "datastore.googleapis.com\322AXhttps://www.g" - + "oogleapis.com/auth/cloud-platform,https:" - + "//www.googleapis.com/auth/datastoreB\300\001\n\027" - + "com.google.datastore.v1B\016DatastoreProtoP" - + "\001Z builder) { super(builder); @@ -77,6 +78,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl private int bitField0_; public static final int KEY_FIELD_NUMBER = 1; private com.google.datastore.v1.Key key_; + /** * * @@ -97,6 +99,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl public boolean hasKey() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -117,6 +120,7 @@ public boolean hasKey() { public com.google.datastore.v1.Key getKey() { return key_ == null ? com.google.datastore.v1.Key.getDefaultInstance() : key_; } + /** * * @@ -165,6 +169,7 @@ private static final class PropertiesDefaultEntryHolder { public int getPropertiesCount() { return internalGetProperties().getMap().size(); } + /** * * @@ -186,12 +191,14 @@ public boolean containsProperties(java.lang.String key) { } return internalGetProperties().getMap().containsKey(key); } + /** Use {@link #getPropertiesMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getProperties() { return getPropertiesMap(); } + /** * * @@ -210,6 +217,7 @@ public java.util.Map getPropert public java.util.Map getPropertiesMap() { return internalGetProperties().getMap(); } + /** * * @@ -236,6 +244,7 @@ public java.util.Map getPropert internalGetProperties().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -442,6 +451,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -686,6 +696,7 @@ public Builder mergeFrom( com.google.datastore.v1.Key.Builder, com.google.datastore.v1.KeyOrBuilder> keyBuilder_; + /** * * @@ -705,6 +716,7 @@ public Builder mergeFrom( public boolean hasKey() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -728,6 +740,7 @@ public com.google.datastore.v1.Key getKey() { return keyBuilder_.getMessage(); } } + /** * * @@ -755,6 +768,7 @@ public Builder setKey(com.google.datastore.v1.Key value) { onChanged(); return this; } + /** * * @@ -779,6 +793,7 @@ public Builder setKey(com.google.datastore.v1.Key.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -811,6 +826,7 @@ public Builder mergeKey(com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -835,6 +851,7 @@ public Builder clearKey() { onChanged(); return this; } + /** * * @@ -854,6 +871,7 @@ public com.google.datastore.v1.Key.Builder getKeyBuilder() { onChanged(); return getKeyFieldBuilder().getBuilder(); } + /** * * @@ -875,6 +893,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyOrBuilder() { return key_ == null ? com.google.datastore.v1.Key.getDefaultInstance() : key_; } } + /** * * @@ -923,7 +942,8 @@ public com.google.datastore.v1.Value build(com.google.datastore.v1.ValueOrBuilde defaultEntry() { return PropertiesDefaultEntryHolder.defaultEntry; } - }; + } + ; private static final PropertiesConverter propertiesConverter = new PropertiesConverter(); @@ -963,6 +983,7 @@ public com.google.datastore.v1.Value build(com.google.datastore.v1.ValueOrBuilde public int getPropertiesCount() { return internalGetProperties().ensureBuilderMap().size(); } + /** * * @@ -984,12 +1005,14 @@ public boolean containsProperties(java.lang.String key) { } return internalGetProperties().ensureBuilderMap().containsKey(key); } + /** Use {@link #getPropertiesMap()} instead. */ @java.lang.Override @java.lang.Deprecated public java.util.Map getProperties() { return getPropertiesMap(); } + /** * * @@ -1008,6 +1031,7 @@ public java.util.Map getPropert public java.util.Map getPropertiesMap() { return internalGetProperties().getImmutableMap(); } + /** * * @@ -1034,6 +1058,7 @@ public java.util.Map getPropert internalGetMutableProperties().ensureBuilderMap(); return map.containsKey(key) ? propertiesConverter.build(map.get(key)) : defaultValue; } + /** * * @@ -1066,6 +1091,7 @@ public Builder clearProperties() { internalGetMutableProperties().clear(); return this; } + /** * * @@ -1087,12 +1113,14 @@ public Builder removeProperties(java.lang.String key) { internalGetMutableProperties().ensureBuilderMap().remove(key); return this; } + /** Use alternate mutation accessors instead. */ @java.lang.Deprecated public java.util.Map getMutableProperties() { bitField0_ |= 0x00000002; return internalGetMutableProperties().ensureMessageMap(); } + /** * * @@ -1118,6 +1146,7 @@ public Builder putProperties(java.lang.String key, com.google.datastore.v1.Value bitField0_ |= 0x00000002; return this; } + /** * * @@ -1144,6 +1173,7 @@ public Builder putAllProperties( bitField0_ |= 0x00000002; return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java index cc8398b53..455c0fe51 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface EntityOrBuilder @@ -41,6 +41,7 @@ public interface EntityOrBuilder * @return Whether the key field is set. */ boolean hasKey(); + /** * * @@ -58,6 +59,7 @@ public interface EntityOrBuilder * @return The key. */ com.google.datastore.v1.Key getKey(); + /** * * @@ -89,6 +91,7 @@ public interface EntityOrBuilder * map<string, .google.datastore.v1.Value> properties = 3; */ int getPropertiesCount(); + /** * * @@ -104,9 +107,11 @@ public interface EntityOrBuilder * map<string, .google.datastore.v1.Value> properties = 3; */ boolean containsProperties(java.lang.String key); + /** Use {@link #getPropertiesMap()} instead. */ @java.lang.Deprecated java.util.Map getProperties(); + /** * * @@ -122,6 +127,7 @@ public interface EntityOrBuilder * map<string, .google.datastore.v1.Value> properties = 3; */ java.util.Map getPropertiesMap(); + /** * * @@ -141,6 +147,7 @@ com.google.datastore.v1.Value getPropertiesOrDefault( java.lang.String key, /* nullable */ com.google.datastore.v1.Value defaultValue); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java index 1239bbd98..fdccb2240 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public final class EntityProto { @@ -65,40 +65,50 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { static { java.lang.String[] descriptorData = { - "\n google/datastore/v1/entity.proto\022\023goog" + "\n" + + " google/datastore/v1/entity.proto\022\023goog" + "le.datastore.v1\032\034google/protobuf/struct." - + "proto\032\037google/protobuf/timestamp.proto\032\030" - + "google/type/latlng.proto\"L\n\013PartitionId\022" - + "\022\n\nproject_id\030\002 \001(\t\022\023\n\013database_id\030\003 \001(\t" - + "\022\024\n\014namespace_id\030\004 \001(\t\"\267\001\n\003Key\0226\n\014partit" - + "ion_id\030\001 \001(\0132 .google.datastore.v1.Parti" - + "tionId\0222\n\004path\030\002 \003(\0132$.google.datastore." - + "v1.Key.PathElement\032D\n\013PathElement\022\014\n\004kin" - + "d\030\001 \001(\t\022\014\n\002id\030\002 \001(\003H\000\022\016\n\004name\030\003 \001(\tH\000B\t\n" - + "\007id_type\"8\n\nArrayValue\022*\n\006values\030\001 \003(\0132\032" - + ".google.datastore.v1.Value\"\361\003\n\005Value\0220\n\n" - + "null_value\030\013 \001(\0162\032.google.protobuf.NullV" - + "alueH\000\022\027\n\rboolean_value\030\001 \001(\010H\000\022\027\n\rinteg" - + "er_value\030\002 \001(\003H\000\022\026\n\014double_value\030\003 \001(\001H\000" - + "\0225\n\017timestamp_value\030\n \001(\0132\032.google.proto" - + "buf.TimestampH\000\022-\n\tkey_value\030\005 \001(\0132\030.goo" - + "gle.datastore.v1.KeyH\000\022\026\n\014string_value\030\021" - + " \001(\tH\000\022\024\n\nblob_value\030\022 \001(\014H\000\022.\n\017geo_poin" - + "t_value\030\010 \001(\0132\023.google.type.LatLngH\000\0223\n\014" - + "entity_value\030\006 \001(\0132\033.google.datastore.v1" - + ".EntityH\000\0226\n\013array_value\030\t \001(\0132\037.google." - + "datastore.v1.ArrayValueH\000\022\017\n\007meaning\030\016 \001" - + "(\005\022\034\n\024exclude_from_indexes\030\023 \001(\010B\014\n\nvalu" - + "e_type\"\277\001\n\006Entity\022%\n\003key\030\001 \001(\0132\030.google." - + "datastore.v1.Key\022?\n\nproperties\030\003 \003(\0132+.g" - + "oogle.datastore.v1.Entity.PropertiesEntr" - + "y\032M\n\017PropertiesEntry\022\013\n\003key\030\001 \001(\t\022)\n\005val" - + "ue\030\002 \001(\0132\032.google.datastore.v1.Value:\0028\001" - + "B\275\001\n\027com.google.datastore.v1B\013EntityProt" - + "oP\001Z builder) { super(builder); @@ -130,6 +131,7 @@ public enum ResultType implements com.google.protobuf.ProtocolMessageEnum { * RESULT_TYPE_UNSPECIFIED = 0; */ public static final int RESULT_TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -140,6 +142,7 @@ public enum ResultType implements com.google.protobuf.ProtocolMessageEnum { * FULL = 1; */ public static final int FULL_VALUE = 1; + /** * * @@ -150,6 +153,7 @@ public enum ResultType implements com.google.protobuf.ProtocolMessageEnum { * PROJECTION = 2; */ public static final int PROJECTION_VALUE = 2; + /** * * @@ -249,6 +253,7 @@ private ResultType(int value) { private int bitField0_; public static final int ENTITY_FIELD_NUMBER = 1; private com.google.datastore.v1.Entity entity_; + /** * * @@ -264,6 +269,7 @@ private ResultType(int value) { public boolean hasEntity() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -279,6 +285,7 @@ public boolean hasEntity() { public com.google.datastore.v1.Entity getEntity() { return entity_ == null ? com.google.datastore.v1.Entity.getDefaultInstance() : entity_; } + /** * * @@ -295,6 +302,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityOrBuilder() { public static final int VERSION_FIELD_NUMBER = 4; private long version_ = 0L; + /** * * @@ -321,6 +329,7 @@ public long getVersion() { public static final int CREATE_TIME_FIELD_NUMBER = 6; private com.google.protobuf.Timestamp createTime_; + /** * * @@ -339,6 +348,7 @@ public long getVersion() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -357,6 +367,7 @@ public boolean hasCreateTime() { public com.google.protobuf.Timestamp getCreateTime() { return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_; } + /** * * @@ -376,6 +387,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public static final int UPDATE_TIME_FIELD_NUMBER = 5; private com.google.protobuf.Timestamp updateTime_; + /** * * @@ -394,6 +406,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasUpdateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -412,6 +425,7 @@ public boolean hasUpdateTime() { public com.google.protobuf.Timestamp getUpdateTime() { return updateTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_; } + /** * * @@ -431,6 +445,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { public static final int CURSOR_FIELD_NUMBER = 3; private com.google.protobuf.ByteString cursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -656,6 +671,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -921,6 +937,7 @@ public Builder mergeFrom( com.google.datastore.v1.Entity.Builder, com.google.datastore.v1.EntityOrBuilder> entityBuilder_; + /** * * @@ -935,6 +952,7 @@ public Builder mergeFrom( public boolean hasEntity() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -953,6 +971,7 @@ public com.google.datastore.v1.Entity getEntity() { return entityBuilder_.getMessage(); } } + /** * * @@ -975,6 +994,7 @@ public Builder setEntity(com.google.datastore.v1.Entity value) { onChanged(); return this; } + /** * * @@ -994,6 +1014,7 @@ public Builder setEntity(com.google.datastore.v1.Entity.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1021,6 +1042,7 @@ public Builder mergeEntity(com.google.datastore.v1.Entity value) { } return this; } + /** * * @@ -1040,6 +1062,7 @@ public Builder clearEntity() { onChanged(); return this; } + /** * * @@ -1054,6 +1077,7 @@ public com.google.datastore.v1.Entity.Builder getEntityBuilder() { onChanged(); return getEntityFieldBuilder().getBuilder(); } + /** * * @@ -1070,6 +1094,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityOrBuilder() { return entity_ == null ? com.google.datastore.v1.Entity.getDefaultInstance() : entity_; } } + /** * * @@ -1097,6 +1122,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityOrBuilder() { } private long version_; + /** * * @@ -1120,6 +1146,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityOrBuilder() { public long getVersion() { return version_; } + /** * * @@ -1147,6 +1174,7 @@ public Builder setVersion(long value) { onChanged(); return this; } + /** * * @@ -1179,6 +1207,7 @@ public Builder clearVersion() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_; + /** * * @@ -1196,6 +1225,7 @@ public Builder clearVersion() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1219,6 +1249,7 @@ public com.google.protobuf.Timestamp getCreateTime() { return createTimeBuilder_.getMessage(); } } + /** * * @@ -1244,6 +1275,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1266,6 +1298,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1296,6 +1329,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1318,6 +1352,7 @@ public Builder clearCreateTime() { onChanged(); return this; } + /** * * @@ -1335,6 +1370,7 @@ public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { onChanged(); return getCreateTimeFieldBuilder().getBuilder(); } + /** * * @@ -1356,6 +1392,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { : createTime_; } } + /** * * @@ -1391,6 +1428,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updateTimeBuilder_; + /** * * @@ -1408,6 +1446,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasUpdateTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1431,6 +1470,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { return updateTimeBuilder_.getMessage(); } } + /** * * @@ -1456,6 +1496,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1478,6 +1519,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1508,6 +1550,7 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1530,6 +1573,7 @@ public Builder clearUpdateTime() { onChanged(); return this; } + /** * * @@ -1547,6 +1591,7 @@ public com.google.protobuf.Timestamp.Builder getUpdateTimeBuilder() { onChanged(); return getUpdateTimeFieldBuilder().getBuilder(); } + /** * * @@ -1568,6 +1613,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { : updateTime_; } } + /** * * @@ -1598,6 +1644,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { } private com.google.protobuf.ByteString cursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -1614,6 +1661,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { public com.google.protobuf.ByteString getCursor() { return cursor_; } + /** * * @@ -1636,6 +1684,7 @@ public Builder setCursor(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java index b8262fd26..85d9d4ce1 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/EntityResultOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface EntityResultOrBuilder @@ -36,6 +36,7 @@ public interface EntityResultOrBuilder * @return Whether the entity field is set. */ boolean hasEntity(); + /** * * @@ -48,6 +49,7 @@ public interface EntityResultOrBuilder * @return The entity. */ com.google.datastore.v1.Entity getEntity(); + /** * * @@ -95,6 +97,7 @@ public interface EntityResultOrBuilder * @return Whether the createTime field is set. */ boolean hasCreateTime(); + /** * * @@ -110,6 +113,7 @@ public interface EntityResultOrBuilder * @return The createTime. */ com.google.protobuf.Timestamp getCreateTime(); + /** * * @@ -139,6 +143,7 @@ public interface EntityResultOrBuilder * @return Whether the updateTime field is set. */ boolean hasUpdateTime(); + /** * * @@ -154,6 +159,7 @@ public interface EntityResultOrBuilder * @return The updateTime. */ com.google.protobuf.Timestamp getUpdateTime(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStats.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStats.java index 7530347c4..d42944e05 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStats.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStats.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class ExecutionStats extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.ExecutionStats) ExecutionStatsOrBuilder { private static final long serialVersionUID = 0L; + // Use ExecutionStats.newBuilder() to construct. private ExecutionStats(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -64,6 +65,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int RESULTS_RETURNED_FIELD_NUMBER = 1; private long resultsReturned_ = 0L; + /** * * @@ -83,6 +85,7 @@ public long getResultsReturned() { public static final int EXECUTION_DURATION_FIELD_NUMBER = 3; private com.google.protobuf.Duration executionDuration_; + /** * * @@ -98,6 +101,7 @@ public long getResultsReturned() { public boolean hasExecutionDuration() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -115,6 +119,7 @@ public com.google.protobuf.Duration getExecutionDuration() { ? com.google.protobuf.Duration.getDefaultInstance() : executionDuration_; } + /** * * @@ -133,6 +138,7 @@ public com.google.protobuf.DurationOrBuilder getExecutionDurationOrBuilder() { public static final int READ_OPERATIONS_FIELD_NUMBER = 4; private long readOperations_ = 0L; + /** * * @@ -151,6 +157,7 @@ public long getReadOperations() { public static final int DEBUG_STATS_FIELD_NUMBER = 5; private com.google.protobuf.Struct debugStats_; + /** * * @@ -177,6 +184,7 @@ public long getReadOperations() { public boolean hasDebugStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -203,6 +211,7 @@ public boolean hasDebugStats() { public com.google.protobuf.Struct getDebugStats() { return debugStats_ == null ? com.google.protobuf.Struct.getDefaultInstance() : debugStats_; } + /** * * @@ -423,6 +432,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -669,6 +679,7 @@ public Builder mergeFrom( private int bitField0_; private long resultsReturned_; + /** * * @@ -685,6 +696,7 @@ public Builder mergeFrom( public long getResultsReturned() { return resultsReturned_; } + /** * * @@ -705,6 +717,7 @@ public Builder setResultsReturned(long value) { onChanged(); return this; } + /** * * @@ -730,6 +743,7 @@ public Builder clearResultsReturned() { com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> executionDurationBuilder_; + /** * * @@ -744,6 +758,7 @@ public Builder clearResultsReturned() { public boolean hasExecutionDuration() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -764,6 +779,7 @@ public com.google.protobuf.Duration getExecutionDuration() { return executionDurationBuilder_.getMessage(); } } + /** * * @@ -786,6 +802,7 @@ public Builder setExecutionDuration(com.google.protobuf.Duration value) { onChanged(); return this; } + /** * * @@ -805,6 +822,7 @@ public Builder setExecutionDuration(com.google.protobuf.Duration.Builder builder onChanged(); return this; } + /** * * @@ -832,6 +850,7 @@ public Builder mergeExecutionDuration(com.google.protobuf.Duration value) { } return this; } + /** * * @@ -851,6 +870,7 @@ public Builder clearExecutionDuration() { onChanged(); return this; } + /** * * @@ -865,6 +885,7 @@ public com.google.protobuf.Duration.Builder getExecutionDurationBuilder() { onChanged(); return getExecutionDurationFieldBuilder().getBuilder(); } + /** * * @@ -883,6 +904,7 @@ public com.google.protobuf.DurationOrBuilder getExecutionDurationOrBuilder() { : executionDuration_; } } + /** * * @@ -910,6 +932,7 @@ public com.google.protobuf.DurationOrBuilder getExecutionDurationOrBuilder() { } private long readOperations_; + /** * * @@ -925,6 +948,7 @@ public com.google.protobuf.DurationOrBuilder getExecutionDurationOrBuilder() { public long getReadOperations() { return readOperations_; } + /** * * @@ -944,6 +968,7 @@ public Builder setReadOperations(long value) { onChanged(); return this; } + /** * * @@ -968,6 +993,7 @@ public Builder clearReadOperations() { com.google.protobuf.Struct.Builder, com.google.protobuf.StructOrBuilder> debugStatsBuilder_; + /** * * @@ -993,6 +1019,7 @@ public Builder clearReadOperations() { public boolean hasDebugStats() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1022,6 +1049,7 @@ public com.google.protobuf.Struct getDebugStats() { return debugStatsBuilder_.getMessage(); } } + /** * * @@ -1055,6 +1083,7 @@ public Builder setDebugStats(com.google.protobuf.Struct value) { onChanged(); return this; } + /** * * @@ -1085,6 +1114,7 @@ public Builder setDebugStats(com.google.protobuf.Struct.Builder builderForValue) onChanged(); return this; } + /** * * @@ -1123,6 +1153,7 @@ public Builder mergeDebugStats(com.google.protobuf.Struct value) { } return this; } + /** * * @@ -1153,6 +1184,7 @@ public Builder clearDebugStats() { onChanged(); return this; } + /** * * @@ -1178,6 +1210,7 @@ public com.google.protobuf.Struct.Builder getDebugStatsBuilder() { onChanged(); return getDebugStatsFieldBuilder().getBuilder(); } + /** * * @@ -1205,6 +1238,7 @@ public com.google.protobuf.StructOrBuilder getDebugStatsOrBuilder() { return debugStats_ == null ? com.google.protobuf.Struct.getDefaultInstance() : debugStats_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStatsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStatsOrBuilder.java index b31b1227b..ffbf156bf 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStatsOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExecutionStatsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ExecutionStatsOrBuilder @@ -50,6 +50,7 @@ public interface ExecutionStatsOrBuilder * @return Whether the executionDuration field is set. */ boolean hasExecutionDuration(); + /** * * @@ -62,6 +63,7 @@ public interface ExecutionStatsOrBuilder * @return The executionDuration. */ com.google.protobuf.Duration getExecutionDuration(); + /** * * @@ -109,6 +111,7 @@ public interface ExecutionStatsOrBuilder * @return Whether the debugStats field is set. */ boolean hasDebugStats(); + /** * * @@ -132,6 +135,7 @@ public interface ExecutionStatsOrBuilder * @return The debugStats. */ com.google.protobuf.Struct getDebugStats(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetrics.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetrics.java index 423b58973..7a4f5361d 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetrics.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetrics.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class ExplainMetrics extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.ExplainMetrics) ExplainMetricsOrBuilder { private static final long serialVersionUID = 0L; + // Use ExplainMetrics.newBuilder() to construct. private ExplainMetrics(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -64,6 +65,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int PLAN_SUMMARY_FIELD_NUMBER = 1; private com.google.datastore.v1.PlanSummary planSummary_; + /** * * @@ -79,6 +81,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasPlanSummary() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -96,6 +99,7 @@ public com.google.datastore.v1.PlanSummary getPlanSummary() { ? com.google.datastore.v1.PlanSummary.getDefaultInstance() : planSummary_; } + /** * * @@ -114,6 +118,7 @@ public com.google.datastore.v1.PlanSummaryOrBuilder getPlanSummaryOrBuilder() { public static final int EXECUTION_STATS_FIELD_NUMBER = 2; private com.google.datastore.v1.ExecutionStats executionStats_; + /** * * @@ -131,6 +136,7 @@ public com.google.datastore.v1.PlanSummaryOrBuilder getPlanSummaryOrBuilder() { public boolean hasExecutionStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -150,6 +156,7 @@ public com.google.datastore.v1.ExecutionStats getExecutionStats() { ? com.google.datastore.v1.ExecutionStats.getDefaultInstance() : executionStats_; } + /** * * @@ -345,6 +352,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -568,6 +576,7 @@ public Builder mergeFrom( com.google.datastore.v1.PlanSummary.Builder, com.google.datastore.v1.PlanSummaryOrBuilder> planSummaryBuilder_; + /** * * @@ -582,6 +591,7 @@ public Builder mergeFrom( public boolean hasPlanSummary() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -602,6 +612,7 @@ public com.google.datastore.v1.PlanSummary getPlanSummary() { return planSummaryBuilder_.getMessage(); } } + /** * * @@ -624,6 +635,7 @@ public Builder setPlanSummary(com.google.datastore.v1.PlanSummary value) { onChanged(); return this; } + /** * * @@ -643,6 +655,7 @@ public Builder setPlanSummary(com.google.datastore.v1.PlanSummary.Builder builde onChanged(); return this; } + /** * * @@ -670,6 +683,7 @@ public Builder mergePlanSummary(com.google.datastore.v1.PlanSummary value) { } return this; } + /** * * @@ -689,6 +703,7 @@ public Builder clearPlanSummary() { onChanged(); return this; } + /** * * @@ -703,6 +718,7 @@ public com.google.datastore.v1.PlanSummary.Builder getPlanSummaryBuilder() { onChanged(); return getPlanSummaryFieldBuilder().getBuilder(); } + /** * * @@ -721,6 +737,7 @@ public com.google.datastore.v1.PlanSummaryOrBuilder getPlanSummaryOrBuilder() { : planSummary_; } } + /** * * @@ -753,6 +770,7 @@ public com.google.datastore.v1.PlanSummaryOrBuilder getPlanSummaryOrBuilder() { com.google.datastore.v1.ExecutionStats.Builder, com.google.datastore.v1.ExecutionStatsOrBuilder> executionStatsBuilder_; + /** * * @@ -769,6 +787,7 @@ public com.google.datastore.v1.PlanSummaryOrBuilder getPlanSummaryOrBuilder() { public boolean hasExecutionStats() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -791,6 +810,7 @@ public com.google.datastore.v1.ExecutionStats getExecutionStats() { return executionStatsBuilder_.getMessage(); } } + /** * * @@ -815,6 +835,7 @@ public Builder setExecutionStats(com.google.datastore.v1.ExecutionStats value) { onChanged(); return this; } + /** * * @@ -837,6 +858,7 @@ public Builder setExecutionStats( onChanged(); return this; } + /** * * @@ -866,6 +888,7 @@ public Builder mergeExecutionStats(com.google.datastore.v1.ExecutionStats value) } return this; } + /** * * @@ -887,6 +910,7 @@ public Builder clearExecutionStats() { onChanged(); return this; } + /** * * @@ -903,6 +927,7 @@ public com.google.datastore.v1.ExecutionStats.Builder getExecutionStatsBuilder() onChanged(); return getExecutionStatsFieldBuilder().getBuilder(); } + /** * * @@ -923,6 +948,7 @@ public com.google.datastore.v1.ExecutionStatsOrBuilder getExecutionStatsOrBuilde : executionStats_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetricsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetricsOrBuilder.java index c6b995167..b9463b3e0 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetricsOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainMetricsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ExplainMetricsOrBuilder @@ -36,6 +36,7 @@ public interface ExplainMetricsOrBuilder * @return Whether the planSummary field is set. */ boolean hasPlanSummary(); + /** * * @@ -48,6 +49,7 @@ public interface ExplainMetricsOrBuilder * @return The planSummary. */ com.google.datastore.v1.PlanSummary getPlanSummary(); + /** * * @@ -73,6 +75,7 @@ public interface ExplainMetricsOrBuilder * @return Whether the executionStats field is set. */ boolean hasExecutionStats(); + /** * * @@ -87,6 +90,7 @@ public interface ExplainMetricsOrBuilder * @return The executionStats. */ com.google.datastore.v1.ExecutionStats getExecutionStats(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptions.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptions.java index 4e2f32872..5d374909f 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptions.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class ExplainOptions extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.ExplainOptions) ExplainOptionsOrBuilder { private static final long serialVersionUID = 0L; + // Use ExplainOptions.newBuilder() to construct. private ExplainOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -63,6 +64,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int ANALYZE_FIELD_NUMBER = 1; private boolean analyze_ = false; + /** * * @@ -243,6 +245,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -424,6 +427,7 @@ public Builder mergeFrom( private int bitField0_; private boolean analyze_; + /** * * @@ -445,6 +449,7 @@ public Builder mergeFrom( public boolean getAnalyze() { return analyze_; } + /** * * @@ -470,6 +475,7 @@ public Builder setAnalyze(boolean value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptionsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptionsOrBuilder.java index 0248d5101..f6c779c19 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptionsOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ExplainOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ExplainOptionsOrBuilder diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java index b9b60db38..7454f23b6 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Filter.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class Filter extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.Filter) FilterOrBuilder { private static final long serialVersionUID = 0L; + // Use Filter.newBuilder() to construct. private Filter(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -76,6 +77,7 @@ public enum FilterTypeCase private FilterTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -109,6 +111,7 @@ public FilterTypeCase getFilterTypeCase() { } public static final int COMPOSITE_FILTER_FIELD_NUMBER = 1; + /** * * @@ -124,6 +127,7 @@ public FilterTypeCase getFilterTypeCase() { public boolean hasCompositeFilter() { return filterTypeCase_ == 1; } + /** * * @@ -142,6 +146,7 @@ public com.google.datastore.v1.CompositeFilter getCompositeFilter() { } return com.google.datastore.v1.CompositeFilter.getDefaultInstance(); } + /** * * @@ -160,6 +165,7 @@ public com.google.datastore.v1.CompositeFilterOrBuilder getCompositeFilterOrBuil } public static final int PROPERTY_FILTER_FIELD_NUMBER = 2; + /** * * @@ -175,6 +181,7 @@ public com.google.datastore.v1.CompositeFilterOrBuilder getCompositeFilterOrBuil public boolean hasPropertyFilter() { return filterTypeCase_ == 2; } + /** * * @@ -193,6 +200,7 @@ public com.google.datastore.v1.PropertyFilter getPropertyFilter() { } return com.google.datastore.v1.PropertyFilter.getDefaultInstance(); } + /** * * @@ -397,6 +405,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -629,6 +638,7 @@ public Builder clearFilterType() { com.google.datastore.v1.CompositeFilter.Builder, com.google.datastore.v1.CompositeFilterOrBuilder> compositeFilterBuilder_; + /** * * @@ -644,6 +654,7 @@ public Builder clearFilterType() { public boolean hasCompositeFilter() { return filterTypeCase_ == 1; } + /** * * @@ -669,6 +680,7 @@ public com.google.datastore.v1.CompositeFilter getCompositeFilter() { return com.google.datastore.v1.CompositeFilter.getDefaultInstance(); } } + /** * * @@ -691,6 +703,7 @@ public Builder setCompositeFilter(com.google.datastore.v1.CompositeFilter value) filterTypeCase_ = 1; return this; } + /** * * @@ -711,6 +724,7 @@ public Builder setCompositeFilter( filterTypeCase_ = 1; return this; } + /** * * @@ -743,6 +757,7 @@ public Builder mergeCompositeFilter(com.google.datastore.v1.CompositeFilter valu filterTypeCase_ = 1; return this; } + /** * * @@ -768,6 +783,7 @@ public Builder clearCompositeFilter() { } return this; } + /** * * @@ -780,6 +796,7 @@ public Builder clearCompositeFilter() { public com.google.datastore.v1.CompositeFilter.Builder getCompositeFilterBuilder() { return getCompositeFilterFieldBuilder().getBuilder(); } + /** * * @@ -800,6 +817,7 @@ public com.google.datastore.v1.CompositeFilterOrBuilder getCompositeFilterOrBuil return com.google.datastore.v1.CompositeFilter.getDefaultInstance(); } } + /** * * @@ -838,6 +856,7 @@ public com.google.datastore.v1.CompositeFilterOrBuilder getCompositeFilterOrBuil com.google.datastore.v1.PropertyFilter.Builder, com.google.datastore.v1.PropertyFilterOrBuilder> propertyFilterBuilder_; + /** * * @@ -853,6 +872,7 @@ public com.google.datastore.v1.CompositeFilterOrBuilder getCompositeFilterOrBuil public boolean hasPropertyFilter() { return filterTypeCase_ == 2; } + /** * * @@ -878,6 +898,7 @@ public com.google.datastore.v1.PropertyFilter getPropertyFilter() { return com.google.datastore.v1.PropertyFilter.getDefaultInstance(); } } + /** * * @@ -900,6 +921,7 @@ public Builder setPropertyFilter(com.google.datastore.v1.PropertyFilter value) { filterTypeCase_ = 2; return this; } + /** * * @@ -920,6 +942,7 @@ public Builder setPropertyFilter( filterTypeCase_ = 2; return this; } + /** * * @@ -952,6 +975,7 @@ public Builder mergePropertyFilter(com.google.datastore.v1.PropertyFilter value) filterTypeCase_ = 2; return this; } + /** * * @@ -977,6 +1001,7 @@ public Builder clearPropertyFilter() { } return this; } + /** * * @@ -989,6 +1014,7 @@ public Builder clearPropertyFilter() { public com.google.datastore.v1.PropertyFilter.Builder getPropertyFilterBuilder() { return getPropertyFilterFieldBuilder().getBuilder(); } + /** * * @@ -1009,6 +1035,7 @@ public com.google.datastore.v1.PropertyFilterOrBuilder getPropertyFilterOrBuilde return com.google.datastore.v1.PropertyFilter.getDefaultInstance(); } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java index b7a38fddf..1136f49a3 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FilterOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface FilterOrBuilder @@ -36,6 +36,7 @@ public interface FilterOrBuilder * @return Whether the compositeFilter field is set. */ boolean hasCompositeFilter(); + /** * * @@ -48,6 +49,7 @@ public interface FilterOrBuilder * @return The compositeFilter. */ com.google.datastore.v1.CompositeFilter getCompositeFilter(); + /** * * @@ -71,6 +73,7 @@ public interface FilterOrBuilder * @return Whether the propertyFilter field is set. */ boolean hasPropertyFilter(); + /** * * @@ -83,6 +86,7 @@ public interface FilterOrBuilder * @return The propertyFilter. */ com.google.datastore.v1.PropertyFilter getPropertyFilter(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FindNearest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FindNearest.java new file mode 100644 index 000000000..fd233c99b --- /dev/null +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FindNearest.java @@ -0,0 +1,2339 @@ +/* + * 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/datastore/v1/query.proto + +// Protobuf Java Version: 3.25.5 +package com.google.datastore.v1; + +/** + * + * + *
+ * Nearest Neighbors search config. The ordering provided by FindNearest
+ * supersedes the order_by stage. If multiple documents have the same vector
+ * distance, the returned document order is not guaranteed to be stable between
+ * queries.
+ * 
+ * + * Protobuf type {@code google.datastore.v1.FindNearest} + */ +public final class FindNearest extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.datastore.v1.FindNearest) + FindNearestOrBuilder { + private static final long serialVersionUID = 0L; + + // Use FindNearest.newBuilder() to construct. + private FindNearest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private FindNearest() { + distanceMeasure_ = 0; + distanceResultProperty_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new FindNearest(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.datastore.v1.QueryProto + .internal_static_google_datastore_v1_FindNearest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.datastore.v1.QueryProto + .internal_static_google_datastore_v1_FindNearest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.datastore.v1.FindNearest.class, + com.google.datastore.v1.FindNearest.Builder.class); + } + + /** + * + * + *
+   * The distance measure to use when comparing vectors.
+   * 
+ * + * Protobuf enum {@code google.datastore.v1.FindNearest.DistanceMeasure} + */ + public enum DistanceMeasure implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Should not be set.
+     * 
+ * + * DISTANCE_MEASURE_UNSPECIFIED = 0; + */ + DISTANCE_MEASURE_UNSPECIFIED(0), + /** + * + * + *
+     * Measures the EUCLIDEAN distance between the vectors. See
+     * [Euclidean](https://en.wikipedia.org/wiki/Euclidean_distance) to learn
+     * more. The resulting distance decreases the more similar two vectors are.
+     * 
+ * + * EUCLIDEAN = 1; + */ + EUCLIDEAN(1), + /** + * + * + *
+     * COSINE distance compares vectors based on the angle between them, which
+     * allows you to measure similarity that isn't based on the vectors
+     * magnitude. We recommend using DOT_PRODUCT with unit normalized vectors
+     * instead of COSINE distance, which is mathematically equivalent with
+     * better performance. See [Cosine
+     * Similarity](https://en.wikipedia.org/wiki/Cosine_similarity) to learn
+     * more about COSINE similarity and COSINE distance. The resulting COSINE
+     * distance decreases the more similar two vectors are.
+     * 
+ * + * COSINE = 2; + */ + COSINE(2), + /** + * + * + *
+     * Similar to cosine but is affected by the magnitude of the vectors. See
+     * [Dot Product](https://en.wikipedia.org/wiki/Dot_product) to learn more.
+     * The resulting distance increases the more similar two vectors are.
+     * 
+ * + * DOT_PRODUCT = 3; + */ + DOT_PRODUCT(3), + UNRECOGNIZED(-1), + ; + + /** + * + * + *
+     * Should not be set.
+     * 
+ * + * DISTANCE_MEASURE_UNSPECIFIED = 0; + */ + public static final int DISTANCE_MEASURE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * Measures the EUCLIDEAN distance between the vectors. See
+     * [Euclidean](https://en.wikipedia.org/wiki/Euclidean_distance) to learn
+     * more. The resulting distance decreases the more similar two vectors are.
+     * 
+ * + * EUCLIDEAN = 1; + */ + public static final int EUCLIDEAN_VALUE = 1; + + /** + * + * + *
+     * COSINE distance compares vectors based on the angle between them, which
+     * allows you to measure similarity that isn't based on the vectors
+     * magnitude. We recommend using DOT_PRODUCT with unit normalized vectors
+     * instead of COSINE distance, which is mathematically equivalent with
+     * better performance. See [Cosine
+     * Similarity](https://en.wikipedia.org/wiki/Cosine_similarity) to learn
+     * more about COSINE similarity and COSINE distance. The resulting COSINE
+     * distance decreases the more similar two vectors are.
+     * 
+ * + * COSINE = 2; + */ + public static final int COSINE_VALUE = 2; + + /** + * + * + *
+     * Similar to cosine but is affected by the magnitude of the vectors. See
+     * [Dot Product](https://en.wikipedia.org/wiki/Dot_product) to learn more.
+     * The resulting distance increases the more similar two vectors are.
+     * 
+ * + * DOT_PRODUCT = 3; + */ + public static final int DOT_PRODUCT_VALUE = 3; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static DistanceMeasure valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static DistanceMeasure forNumber(int value) { + switch (value) { + case 0: + return DISTANCE_MEASURE_UNSPECIFIED; + case 1: + return EUCLIDEAN; + case 2: + return COSINE; + case 3: + return DOT_PRODUCT; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public DistanceMeasure findValueByNumber(int number) { + return DistanceMeasure.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.datastore.v1.FindNearest.getDescriptor().getEnumTypes().get(0); + } + + private static final DistanceMeasure[] VALUES = values(); + + public static DistanceMeasure valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private DistanceMeasure(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.datastore.v1.FindNearest.DistanceMeasure) + } + + private int bitField0_; + public static final int VECTOR_PROPERTY_FIELD_NUMBER = 1; + private com.google.datastore.v1.PropertyReference vectorProperty_; + + /** + * + * + *
+   * Required. An indexed vector property to search upon. Only documents which
+   * contain vectors whose dimensionality match the query_vector can be
+   * returned.
+   * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the vectorProperty field is set. + */ + @java.lang.Override + public boolean hasVectorProperty() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * Required. An indexed vector property to search upon. Only documents which
+   * contain vectors whose dimensionality match the query_vector can be
+   * returned.
+   * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The vectorProperty. + */ + @java.lang.Override + public com.google.datastore.v1.PropertyReference getVectorProperty() { + return vectorProperty_ == null + ? com.google.datastore.v1.PropertyReference.getDefaultInstance() + : vectorProperty_; + } + + /** + * + * + *
+   * Required. An indexed vector property to search upon. Only documents which
+   * contain vectors whose dimensionality match the query_vector can be
+   * returned.
+   * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.datastore.v1.PropertyReferenceOrBuilder getVectorPropertyOrBuilder() { + return vectorProperty_ == null + ? com.google.datastore.v1.PropertyReference.getDefaultInstance() + : vectorProperty_; + } + + public static final int QUERY_VECTOR_FIELD_NUMBER = 2; + private com.google.datastore.v1.Value queryVector_; + + /** + * + * + *
+   * Required. The query vector that we are searching on. Must be a vector of no
+   * more than 2048 dimensions.
+   * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the queryVector field is set. + */ + @java.lang.Override + public boolean hasQueryVector() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * Required. The query vector that we are searching on. Must be a vector of no
+   * more than 2048 dimensions.
+   * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The queryVector. + */ + @java.lang.Override + public com.google.datastore.v1.Value getQueryVector() { + return queryVector_ == null ? com.google.datastore.v1.Value.getDefaultInstance() : queryVector_; + } + + /** + * + * + *
+   * Required. The query vector that we are searching on. Must be a vector of no
+   * more than 2048 dimensions.
+   * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + @java.lang.Override + public com.google.datastore.v1.ValueOrBuilder getQueryVectorOrBuilder() { + return queryVector_ == null ? com.google.datastore.v1.Value.getDefaultInstance() : queryVector_; + } + + public static final int DISTANCE_MEASURE_FIELD_NUMBER = 3; + private int distanceMeasure_ = 0; + + /** + * + * + *
+   * Required. The Distance Measure to use, required.
+   * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The enum numeric value on the wire for distanceMeasure. + */ + @java.lang.Override + public int getDistanceMeasureValue() { + return distanceMeasure_; + } + + /** + * + * + *
+   * Required. The Distance Measure to use, required.
+   * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The distanceMeasure. + */ + @java.lang.Override + public com.google.datastore.v1.FindNearest.DistanceMeasure getDistanceMeasure() { + com.google.datastore.v1.FindNearest.DistanceMeasure result = + com.google.datastore.v1.FindNearest.DistanceMeasure.forNumber(distanceMeasure_); + return result == null + ? com.google.datastore.v1.FindNearest.DistanceMeasure.UNRECOGNIZED + : result; + } + + public static final int LIMIT_FIELD_NUMBER = 4; + private com.google.protobuf.Int32Value limit_; + + /** + * + * + *
+   * Required. The number of nearest neighbors to return. Must be a positive
+   * integer of no more than 100.
+   * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the limit field is set. + */ + @java.lang.Override + public boolean hasLimit() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+   * Required. The number of nearest neighbors to return. Must be a positive
+   * integer of no more than 100.
+   * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The limit. + */ + @java.lang.Override + public com.google.protobuf.Int32Value getLimit() { + return limit_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : limit_; + } + + /** + * + * + *
+   * Required. The number of nearest neighbors to return. Must be a positive
+   * integer of no more than 100.
+   * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + @java.lang.Override + public com.google.protobuf.Int32ValueOrBuilder getLimitOrBuilder() { + return limit_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : limit_; + } + + public static final int DISTANCE_RESULT_PROPERTY_FIELD_NUMBER = 5; + + @SuppressWarnings("serial") + private volatile java.lang.Object distanceResultProperty_ = ""; + + /** + * + * + *
+   * Optional. Optional name of the field to output the result of the vector
+   * distance calculation. Must conform to [entity
+   * property][google.datastore.v1.Entity.properties] limitations.
+   * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The distanceResultProperty. + */ + @java.lang.Override + public java.lang.String getDistanceResultProperty() { + java.lang.Object ref = distanceResultProperty_; + 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(); + distanceResultProperty_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. Optional name of the field to output the result of the vector
+   * distance calculation. Must conform to [entity
+   * property][google.datastore.v1.Entity.properties] limitations.
+   * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for distanceResultProperty. + */ + @java.lang.Override + public com.google.protobuf.ByteString getDistanceResultPropertyBytes() { + java.lang.Object ref = distanceResultProperty_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + distanceResultProperty_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DISTANCE_THRESHOLD_FIELD_NUMBER = 6; + private com.google.protobuf.DoubleValue distanceThreshold_; + + /** + * + * + *
+   * Optional. Option to specify a threshold for which no less similar documents
+   * will be returned. The behavior of the specified `distance_measure` will
+   * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+   * increase when the vectors are more similar, the comparison is inverted.
+   *
+   * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+   * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+   * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the distanceThreshold field is set. + */ + @java.lang.Override + public boolean hasDistanceThreshold() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
+   * Optional. Option to specify a threshold for which no less similar documents
+   * will be returned. The behavior of the specified `distance_measure` will
+   * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+   * increase when the vectors are more similar, the comparison is inverted.
+   *
+   * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+   * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+   * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The distanceThreshold. + */ + @java.lang.Override + public com.google.protobuf.DoubleValue getDistanceThreshold() { + return distanceThreshold_ == null + ? com.google.protobuf.DoubleValue.getDefaultInstance() + : distanceThreshold_; + } + + /** + * + * + *
+   * Optional. Option to specify a threshold for which no less similar documents
+   * will be returned. The behavior of the specified `distance_measure` will
+   * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+   * increase when the vectors are more similar, the comparison is inverted.
+   *
+   * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+   * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+   * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.protobuf.DoubleValueOrBuilder getDistanceThresholdOrBuilder() { + return distanceThreshold_ == null + ? com.google.protobuf.DoubleValue.getDefaultInstance() + : distanceThreshold_; + } + + 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 (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getVectorProperty()); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(2, getQueryVector()); + } + if (distanceMeasure_ + != com.google.datastore.v1.FindNearest.DistanceMeasure.DISTANCE_MEASURE_UNSPECIFIED + .getNumber()) { + output.writeEnum(3, distanceMeasure_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(4, getLimit()); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(distanceResultProperty_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 5, distanceResultProperty_); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeMessage(6, getDistanceThreshold()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(1, getVectorProperty()); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(2, getQueryVector()); + } + if (distanceMeasure_ + != com.google.datastore.v1.FindNearest.DistanceMeasure.DISTANCE_MEASURE_UNSPECIFIED + .getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(3, distanceMeasure_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(4, getLimit()); + } + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(distanceResultProperty_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, distanceResultProperty_); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(6, getDistanceThreshold()); + } + 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.datastore.v1.FindNearest)) { + return super.equals(obj); + } + com.google.datastore.v1.FindNearest other = (com.google.datastore.v1.FindNearest) obj; + + if (hasVectorProperty() != other.hasVectorProperty()) return false; + if (hasVectorProperty()) { + if (!getVectorProperty().equals(other.getVectorProperty())) return false; + } + if (hasQueryVector() != other.hasQueryVector()) return false; + if (hasQueryVector()) { + if (!getQueryVector().equals(other.getQueryVector())) return false; + } + if (distanceMeasure_ != other.distanceMeasure_) return false; + if (hasLimit() != other.hasLimit()) return false; + if (hasLimit()) { + if (!getLimit().equals(other.getLimit())) return false; + } + if (!getDistanceResultProperty().equals(other.getDistanceResultProperty())) return false; + if (hasDistanceThreshold() != other.hasDistanceThreshold()) return false; + if (hasDistanceThreshold()) { + if (!getDistanceThreshold().equals(other.getDistanceThreshold())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasVectorProperty()) { + hash = (37 * hash) + VECTOR_PROPERTY_FIELD_NUMBER; + hash = (53 * hash) + getVectorProperty().hashCode(); + } + if (hasQueryVector()) { + hash = (37 * hash) + QUERY_VECTOR_FIELD_NUMBER; + hash = (53 * hash) + getQueryVector().hashCode(); + } + hash = (37 * hash) + DISTANCE_MEASURE_FIELD_NUMBER; + hash = (53 * hash) + distanceMeasure_; + if (hasLimit()) { + hash = (37 * hash) + LIMIT_FIELD_NUMBER; + hash = (53 * hash) + getLimit().hashCode(); + } + hash = (37 * hash) + DISTANCE_RESULT_PROPERTY_FIELD_NUMBER; + hash = (53 * hash) + getDistanceResultProperty().hashCode(); + if (hasDistanceThreshold()) { + hash = (37 * hash) + DISTANCE_THRESHOLD_FIELD_NUMBER; + hash = (53 * hash) + getDistanceThreshold().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.datastore.v1.FindNearest parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.FindNearest parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.datastore.v1.FindNearest parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.FindNearest 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.datastore.v1.FindNearest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.FindNearest parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.datastore.v1.FindNearest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.FindNearest 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.datastore.v1.FindNearest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.FindNearest 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.datastore.v1.FindNearest parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.FindNearest 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.datastore.v1.FindNearest 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; + } + + /** + * + * + *
+   * Nearest Neighbors search config. The ordering provided by FindNearest
+   * supersedes the order_by stage. If multiple documents have the same vector
+   * distance, the returned document order is not guaranteed to be stable between
+   * queries.
+   * 
+ * + * Protobuf type {@code google.datastore.v1.FindNearest} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.datastore.v1.FindNearest) + com.google.datastore.v1.FindNearestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.datastore.v1.QueryProto + .internal_static_google_datastore_v1_FindNearest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.datastore.v1.QueryProto + .internal_static_google_datastore_v1_FindNearest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.datastore.v1.FindNearest.class, + com.google.datastore.v1.FindNearest.Builder.class); + } + + // Construct using com.google.datastore.v1.FindNearest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { + getVectorPropertyFieldBuilder(); + getQueryVectorFieldBuilder(); + getLimitFieldBuilder(); + getDistanceThresholdFieldBuilder(); + } + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + vectorProperty_ = null; + if (vectorPropertyBuilder_ != null) { + vectorPropertyBuilder_.dispose(); + vectorPropertyBuilder_ = null; + } + queryVector_ = null; + if (queryVectorBuilder_ != null) { + queryVectorBuilder_.dispose(); + queryVectorBuilder_ = null; + } + distanceMeasure_ = 0; + limit_ = null; + if (limitBuilder_ != null) { + limitBuilder_.dispose(); + limitBuilder_ = null; + } + distanceResultProperty_ = ""; + distanceThreshold_ = null; + if (distanceThresholdBuilder_ != null) { + distanceThresholdBuilder_.dispose(); + distanceThresholdBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.datastore.v1.QueryProto + .internal_static_google_datastore_v1_FindNearest_descriptor; + } + + @java.lang.Override + public com.google.datastore.v1.FindNearest getDefaultInstanceForType() { + return com.google.datastore.v1.FindNearest.getDefaultInstance(); + } + + @java.lang.Override + public com.google.datastore.v1.FindNearest build() { + com.google.datastore.v1.FindNearest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.datastore.v1.FindNearest buildPartial() { + com.google.datastore.v1.FindNearest result = new com.google.datastore.v1.FindNearest(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.datastore.v1.FindNearest result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.vectorProperty_ = + vectorPropertyBuilder_ == null ? vectorProperty_ : vectorPropertyBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.queryVector_ = + queryVectorBuilder_ == null ? queryVector_ : queryVectorBuilder_.build(); + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.distanceMeasure_ = distanceMeasure_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.limit_ = limitBuilder_ == null ? limit_ : limitBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.distanceResultProperty_ = distanceResultProperty_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.distanceThreshold_ = + distanceThresholdBuilder_ == null + ? distanceThreshold_ + : distanceThresholdBuilder_.build(); + to_bitField0_ |= 0x00000008; + } + 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.datastore.v1.FindNearest) { + return mergeFrom((com.google.datastore.v1.FindNearest) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.datastore.v1.FindNearest other) { + if (other == com.google.datastore.v1.FindNearest.getDefaultInstance()) return this; + if (other.hasVectorProperty()) { + mergeVectorProperty(other.getVectorProperty()); + } + if (other.hasQueryVector()) { + mergeQueryVector(other.getQueryVector()); + } + if (other.distanceMeasure_ != 0) { + setDistanceMeasureValue(other.getDistanceMeasureValue()); + } + if (other.hasLimit()) { + mergeLimit(other.getLimit()); + } + if (!other.getDistanceResultProperty().isEmpty()) { + distanceResultProperty_ = other.distanceResultProperty_; + bitField0_ |= 0x00000010; + onChanged(); + } + if (other.hasDistanceThreshold()) { + mergeDistanceThreshold(other.getDistanceThreshold()); + } + 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: + { + input.readMessage(getVectorPropertyFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 18: + { + input.readMessage(getQueryVectorFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000002; + break; + } // case 18 + case 24: + { + distanceMeasure_ = input.readEnum(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 34: + { + input.readMessage(getLimitFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000008; + break; + } // case 34 + case 42: + { + distanceResultProperty_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 50: + { + input.readMessage( + getDistanceThresholdFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000020; + break; + } // case 50 + 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.datastore.v1.PropertyReference vectorProperty_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyReference, + com.google.datastore.v1.PropertyReference.Builder, + com.google.datastore.v1.PropertyReferenceOrBuilder> + vectorPropertyBuilder_; + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the vectorProperty field is set. + */ + public boolean hasVectorProperty() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The vectorProperty. + */ + public com.google.datastore.v1.PropertyReference getVectorProperty() { + if (vectorPropertyBuilder_ == null) { + return vectorProperty_ == null + ? com.google.datastore.v1.PropertyReference.getDefaultInstance() + : vectorProperty_; + } else { + return vectorPropertyBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setVectorProperty(com.google.datastore.v1.PropertyReference value) { + if (vectorPropertyBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + vectorProperty_ = value; + } else { + vectorPropertyBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setVectorProperty( + com.google.datastore.v1.PropertyReference.Builder builderForValue) { + if (vectorPropertyBuilder_ == null) { + vectorProperty_ = builderForValue.build(); + } else { + vectorPropertyBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeVectorProperty(com.google.datastore.v1.PropertyReference value) { + if (vectorPropertyBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) + && vectorProperty_ != null + && vectorProperty_ != com.google.datastore.v1.PropertyReference.getDefaultInstance()) { + getVectorPropertyBuilder().mergeFrom(value); + } else { + vectorProperty_ = value; + } + } else { + vectorPropertyBuilder_.mergeFrom(value); + } + if (vectorProperty_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearVectorProperty() { + bitField0_ = (bitField0_ & ~0x00000001); + vectorProperty_ = null; + if (vectorPropertyBuilder_ != null) { + vectorPropertyBuilder_.dispose(); + vectorPropertyBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.datastore.v1.PropertyReference.Builder getVectorPropertyBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getVectorPropertyFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.datastore.v1.PropertyReferenceOrBuilder getVectorPropertyOrBuilder() { + if (vectorPropertyBuilder_ != null) { + return vectorPropertyBuilder_.getMessageOrBuilder(); + } else { + return vectorProperty_ == null + ? com.google.datastore.v1.PropertyReference.getDefaultInstance() + : vectorProperty_; + } + } + + /** + * + * + *
+     * Required. An indexed vector property to search upon. Only documents which
+     * contain vectors whose dimensionality match the query_vector can be
+     * returned.
+     * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyReference, + com.google.datastore.v1.PropertyReference.Builder, + com.google.datastore.v1.PropertyReferenceOrBuilder> + getVectorPropertyFieldBuilder() { + if (vectorPropertyBuilder_ == null) { + vectorPropertyBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyReference, + com.google.datastore.v1.PropertyReference.Builder, + com.google.datastore.v1.PropertyReferenceOrBuilder>( + getVectorProperty(), getParentForChildren(), isClean()); + vectorProperty_ = null; + } + return vectorPropertyBuilder_; + } + + private com.google.datastore.v1.Value queryVector_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + queryVectorBuilder_; + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the queryVector field is set. + */ + public boolean hasQueryVector() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The queryVector. + */ + public com.google.datastore.v1.Value getQueryVector() { + if (queryVectorBuilder_ == null) { + return queryVector_ == null + ? com.google.datastore.v1.Value.getDefaultInstance() + : queryVector_; + } else { + return queryVectorBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setQueryVector(com.google.datastore.v1.Value value) { + if (queryVectorBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + queryVector_ = value; + } else { + queryVectorBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder setQueryVector(com.google.datastore.v1.Value.Builder builderForValue) { + if (queryVectorBuilder_ == null) { + queryVector_ = builderForValue.build(); + } else { + queryVectorBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder mergeQueryVector(com.google.datastore.v1.Value value) { + if (queryVectorBuilder_ == null) { + if (((bitField0_ & 0x00000002) != 0) + && queryVector_ != null + && queryVector_ != com.google.datastore.v1.Value.getDefaultInstance()) { + getQueryVectorBuilder().mergeFrom(value); + } else { + queryVector_ = value; + } + } else { + queryVectorBuilder_.mergeFrom(value); + } + if (queryVector_ != null) { + bitField0_ |= 0x00000002; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public Builder clearQueryVector() { + bitField0_ = (bitField0_ & ~0x00000002); + queryVector_ = null; + if (queryVectorBuilder_ != null) { + queryVectorBuilder_.dispose(); + queryVectorBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.datastore.v1.Value.Builder getQueryVectorBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getQueryVectorFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + public com.google.datastore.v1.ValueOrBuilder getQueryVectorOrBuilder() { + if (queryVectorBuilder_ != null) { + return queryVectorBuilder_.getMessageOrBuilder(); + } else { + return queryVector_ == null + ? com.google.datastore.v1.Value.getDefaultInstance() + : queryVector_; + } + } + + /** + * + * + *
+     * Required. The query vector that we are searching on. Must be a vector of no
+     * more than 2048 dimensions.
+     * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + getQueryVectorFieldBuilder() { + if (queryVectorBuilder_ == null) { + queryVectorBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder>( + getQueryVector(), getParentForChildren(), isClean()); + queryVector_ = null; + } + return queryVectorBuilder_; + } + + private int distanceMeasure_ = 0; + + /** + * + * + *
+     * Required. The Distance Measure to use, required.
+     * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The enum numeric value on the wire for distanceMeasure. + */ + @java.lang.Override + public int getDistanceMeasureValue() { + return distanceMeasure_; + } + + /** + * + * + *
+     * Required. The Distance Measure to use, required.
+     * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @param value The enum numeric value on the wire for distanceMeasure to set. + * @return This builder for chaining. + */ + public Builder setDistanceMeasureValue(int value) { + distanceMeasure_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The Distance Measure to use, required.
+     * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The distanceMeasure. + */ + @java.lang.Override + public com.google.datastore.v1.FindNearest.DistanceMeasure getDistanceMeasure() { + com.google.datastore.v1.FindNearest.DistanceMeasure result = + com.google.datastore.v1.FindNearest.DistanceMeasure.forNumber(distanceMeasure_); + return result == null + ? com.google.datastore.v1.FindNearest.DistanceMeasure.UNRECOGNIZED + : result; + } + + /** + * + * + *
+     * Required. The Distance Measure to use, required.
+     * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @param value The distanceMeasure to set. + * @return This builder for chaining. + */ + public Builder setDistanceMeasure(com.google.datastore.v1.FindNearest.DistanceMeasure value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + distanceMeasure_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The Distance Measure to use, required.
+     * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return This builder for chaining. + */ + public Builder clearDistanceMeasure() { + bitField0_ = (bitField0_ & ~0x00000004); + distanceMeasure_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.Int32Value limit_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Int32Value, + com.google.protobuf.Int32Value.Builder, + com.google.protobuf.Int32ValueOrBuilder> + limitBuilder_; + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the limit field is set. + */ + public boolean hasLimit() { + return ((bitField0_ & 0x00000008) != 0); + } + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The limit. + */ + public com.google.protobuf.Int32Value getLimit() { + if (limitBuilder_ == null) { + return limit_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : limit_; + } else { + return limitBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setLimit(com.google.protobuf.Int32Value value) { + if (limitBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + limit_ = value; + } else { + limitBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder setLimit(com.google.protobuf.Int32Value.Builder builderForValue) { + if (limitBuilder_ == null) { + limit_ = builderForValue.build(); + } else { + limitBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder mergeLimit(com.google.protobuf.Int32Value value) { + if (limitBuilder_ == null) { + if (((bitField0_ & 0x00000008) != 0) + && limit_ != null + && limit_ != com.google.protobuf.Int32Value.getDefaultInstance()) { + getLimitBuilder().mergeFrom(value); + } else { + limit_ = value; + } + } else { + limitBuilder_.mergeFrom(value); + } + if (limit_ != null) { + bitField0_ |= 0x00000008; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + public Builder clearLimit() { + bitField0_ = (bitField0_ & ~0x00000008); + limit_ = null; + if (limitBuilder_ != null) { + limitBuilder_.dispose(); + limitBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.protobuf.Int32Value.Builder getLimitBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getLimitFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + public com.google.protobuf.Int32ValueOrBuilder getLimitOrBuilder() { + if (limitBuilder_ != null) { + return limitBuilder_.getMessageOrBuilder(); + } else { + return limit_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : limit_; + } + } + + /** + * + * + *
+     * Required. The number of nearest neighbors to return. Must be a positive
+     * integer of no more than 100.
+     * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Int32Value, + com.google.protobuf.Int32Value.Builder, + com.google.protobuf.Int32ValueOrBuilder> + getLimitFieldBuilder() { + if (limitBuilder_ == null) { + limitBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.Int32Value, + com.google.protobuf.Int32Value.Builder, + com.google.protobuf.Int32ValueOrBuilder>( + getLimit(), getParentForChildren(), isClean()); + limit_ = null; + } + return limitBuilder_; + } + + private java.lang.Object distanceResultProperty_ = ""; + + /** + * + * + *
+     * Optional. Optional name of the field to output the result of the vector
+     * distance calculation. Must conform to [entity
+     * property][google.datastore.v1.Entity.properties] limitations.
+     * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The distanceResultProperty. + */ + public java.lang.String getDistanceResultProperty() { + java.lang.Object ref = distanceResultProperty_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + distanceResultProperty_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. Optional name of the field to output the result of the vector
+     * distance calculation. Must conform to [entity
+     * property][google.datastore.v1.Entity.properties] limitations.
+     * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for distanceResultProperty. + */ + public com.google.protobuf.ByteString getDistanceResultPropertyBytes() { + java.lang.Object ref = distanceResultProperty_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + distanceResultProperty_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. Optional name of the field to output the result of the vector
+     * distance calculation. Must conform to [entity
+     * property][google.datastore.v1.Entity.properties] limitations.
+     * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The distanceResultProperty to set. + * @return This builder for chaining. + */ + public Builder setDistanceResultProperty(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + distanceResultProperty_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Optional name of the field to output the result of the vector
+     * distance calculation. Must conform to [entity
+     * property][google.datastore.v1.Entity.properties] limitations.
+     * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearDistanceResultProperty() { + distanceResultProperty_ = getDefaultInstance().getDistanceResultProperty(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Optional name of the field to output the result of the vector
+     * distance calculation. Must conform to [entity
+     * property][google.datastore.v1.Entity.properties] limitations.
+     * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for distanceResultProperty to set. + * @return This builder for chaining. + */ + public Builder setDistanceResultPropertyBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + distanceResultProperty_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + private com.google.protobuf.DoubleValue distanceThreshold_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.DoubleValue, + com.google.protobuf.DoubleValue.Builder, + com.google.protobuf.DoubleValueOrBuilder> + distanceThresholdBuilder_; + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the distanceThreshold field is set. + */ + public boolean hasDistanceThreshold() { + return ((bitField0_ & 0x00000020) != 0); + } + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The distanceThreshold. + */ + public com.google.protobuf.DoubleValue getDistanceThreshold() { + if (distanceThresholdBuilder_ == null) { + return distanceThreshold_ == null + ? com.google.protobuf.DoubleValue.getDefaultInstance() + : distanceThreshold_; + } else { + return distanceThresholdBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setDistanceThreshold(com.google.protobuf.DoubleValue value) { + if (distanceThresholdBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + distanceThreshold_ = value; + } else { + distanceThresholdBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setDistanceThreshold(com.google.protobuf.DoubleValue.Builder builderForValue) { + if (distanceThresholdBuilder_ == null) { + distanceThreshold_ = builderForValue.build(); + } else { + distanceThresholdBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeDistanceThreshold(com.google.protobuf.DoubleValue value) { + if (distanceThresholdBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0) + && distanceThreshold_ != null + && distanceThreshold_ != com.google.protobuf.DoubleValue.getDefaultInstance()) { + getDistanceThresholdBuilder().mergeFrom(value); + } else { + distanceThreshold_ = value; + } + } else { + distanceThresholdBuilder_.mergeFrom(value); + } + if (distanceThreshold_ != null) { + bitField0_ |= 0x00000020; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearDistanceThreshold() { + bitField0_ = (bitField0_ & ~0x00000020); + distanceThreshold_ = null; + if (distanceThresholdBuilder_ != null) { + distanceThresholdBuilder_.dispose(); + distanceThresholdBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.DoubleValue.Builder getDistanceThresholdBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return getDistanceThresholdFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.protobuf.DoubleValueOrBuilder getDistanceThresholdOrBuilder() { + if (distanceThresholdBuilder_ != null) { + return distanceThresholdBuilder_.getMessageOrBuilder(); + } else { + return distanceThreshold_ == null + ? com.google.protobuf.DoubleValue.getDefaultInstance() + : distanceThreshold_; + } + } + + /** + * + * + *
+     * Optional. Option to specify a threshold for which no less similar documents
+     * will be returned. The behavior of the specified `distance_measure` will
+     * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+     * increase when the vectors are more similar, the comparison is inverted.
+     *
+     * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+     * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+     * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.DoubleValue, + com.google.protobuf.DoubleValue.Builder, + com.google.protobuf.DoubleValueOrBuilder> + getDistanceThresholdFieldBuilder() { + if (distanceThresholdBuilder_ == null) { + distanceThresholdBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.protobuf.DoubleValue, + com.google.protobuf.DoubleValue.Builder, + com.google.protobuf.DoubleValueOrBuilder>( + getDistanceThreshold(), getParentForChildren(), isClean()); + distanceThreshold_ = null; + } + return distanceThresholdBuilder_; + } + + @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.datastore.v1.FindNearest) + } + + // @@protoc_insertion_point(class_scope:google.datastore.v1.FindNearest) + private static final com.google.datastore.v1.FindNearest DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.datastore.v1.FindNearest(); + } + + public static com.google.datastore.v1.FindNearest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public FindNearest 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.datastore.v1.FindNearest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FindNearestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FindNearestOrBuilder.java new file mode 100644 index 000000000..4e21ec5c3 --- /dev/null +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/FindNearestOrBuilder.java @@ -0,0 +1,279 @@ +/* + * 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/datastore/v1/query.proto + +// Protobuf Java Version: 3.25.5 +package com.google.datastore.v1; + +public interface FindNearestOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.datastore.v1.FindNearest) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Required. An indexed vector property to search upon. Only documents which
+   * contain vectors whose dimensionality match the query_vector can be
+   * returned.
+   * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the vectorProperty field is set. + */ + boolean hasVectorProperty(); + + /** + * + * + *
+   * Required. An indexed vector property to search upon. Only documents which
+   * contain vectors whose dimensionality match the query_vector can be
+   * returned.
+   * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The vectorProperty. + */ + com.google.datastore.v1.PropertyReference getVectorProperty(); + + /** + * + * + *
+   * Required. An indexed vector property to search upon. Only documents which
+   * contain vectors whose dimensionality match the query_vector can be
+   * returned.
+   * 
+ * + * + * .google.datastore.v1.PropertyReference vector_property = 1 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.datastore.v1.PropertyReferenceOrBuilder getVectorPropertyOrBuilder(); + + /** + * + * + *
+   * Required. The query vector that we are searching on. Must be a vector of no
+   * more than 2048 dimensions.
+   * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return Whether the queryVector field is set. + */ + boolean hasQueryVector(); + + /** + * + * + *
+   * Required. The query vector that we are searching on. Must be a vector of no
+   * more than 2048 dimensions.
+   * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The queryVector. + */ + com.google.datastore.v1.Value getQueryVector(); + + /** + * + * + *
+   * Required. The query vector that we are searching on. Must be a vector of no
+   * more than 2048 dimensions.
+   * 
+ * + * .google.datastore.v1.Value query_vector = 2 [(.google.api.field_behavior) = REQUIRED]; + * + */ + com.google.datastore.v1.ValueOrBuilder getQueryVectorOrBuilder(); + + /** + * + * + *
+   * Required. The Distance Measure to use, required.
+   * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The enum numeric value on the wire for distanceMeasure. + */ + int getDistanceMeasureValue(); + + /** + * + * + *
+   * Required. The Distance Measure to use, required.
+   * 
+ * + * + * .google.datastore.v1.FindNearest.DistanceMeasure distance_measure = 3 [(.google.api.field_behavior) = REQUIRED]; + * + * + * @return The distanceMeasure. + */ + com.google.datastore.v1.FindNearest.DistanceMeasure getDistanceMeasure(); + + /** + * + * + *
+   * Required. The number of nearest neighbors to return. Must be a positive
+   * integer of no more than 100.
+   * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return Whether the limit field is set. + */ + boolean hasLimit(); + + /** + * + * + *
+   * Required. The number of nearest neighbors to return. Must be a positive
+   * integer of no more than 100.
+   * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + * + * @return The limit. + */ + com.google.protobuf.Int32Value getLimit(); + + /** + * + * + *
+   * Required. The number of nearest neighbors to return. Must be a positive
+   * integer of no more than 100.
+   * 
+ * + * .google.protobuf.Int32Value limit = 4 [(.google.api.field_behavior) = REQUIRED]; + */ + com.google.protobuf.Int32ValueOrBuilder getLimitOrBuilder(); + + /** + * + * + *
+   * Optional. Optional name of the field to output the result of the vector
+   * distance calculation. Must conform to [entity
+   * property][google.datastore.v1.Entity.properties] limitations.
+   * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The distanceResultProperty. + */ + java.lang.String getDistanceResultProperty(); + + /** + * + * + *
+   * Optional. Optional name of the field to output the result of the vector
+   * distance calculation. Must conform to [entity
+   * property][google.datastore.v1.Entity.properties] limitations.
+   * 
+ * + * string distance_result_property = 5 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for distanceResultProperty. + */ + com.google.protobuf.ByteString getDistanceResultPropertyBytes(); + + /** + * + * + *
+   * Optional. Option to specify a threshold for which no less similar documents
+   * will be returned. The behavior of the specified `distance_measure` will
+   * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+   * increase when the vectors are more similar, the comparison is inverted.
+   *
+   * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+   * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+   * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the distanceThreshold field is set. + */ + boolean hasDistanceThreshold(); + + /** + * + * + *
+   * Optional. Option to specify a threshold for which no less similar documents
+   * will be returned. The behavior of the specified `distance_measure` will
+   * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+   * increase when the vectors are more similar, the comparison is inverted.
+   *
+   * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+   * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+   * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The distanceThreshold. + */ + com.google.protobuf.DoubleValue getDistanceThreshold(); + + /** + * + * + *
+   * Optional. Option to specify a threshold for which no less similar documents
+   * will be returned. The behavior of the specified `distance_measure` will
+   * affect the meaning of the distance threshold. Since DOT_PRODUCT distances
+   * increase when the vectors are more similar, the comparison is inverted.
+   *
+   * For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold
+   * For DOT_PRODUCT:       WHERE distance >= distance_threshold
+   * 
+ * + * + * .google.protobuf.DoubleValue distance_threshold = 6 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.protobuf.DoubleValueOrBuilder getDistanceThresholdOrBuilder(); +} diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java index 0c7eb2a61..86ae757ad 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQuery.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class GqlQuery extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.GqlQuery) GqlQueryOrBuilder { private static final long serialVersionUID = 0L; + // Use GqlQuery.newBuilder() to construct. private GqlQuery(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -80,6 +81,7 @@ protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldRefl @SuppressWarnings("serial") private volatile java.lang.Object queryString_ = ""; + /** * * @@ -104,6 +106,7 @@ public java.lang.String getQueryString() { return s; } } + /** * * @@ -131,6 +134,7 @@ public com.google.protobuf.ByteString getQueryStringBytes() { public static final int ALLOW_LITERALS_FIELD_NUMBER = 2; private boolean allowLiterals_ = false; + /** * * @@ -182,6 +186,7 @@ private static final class NamedBindingsDefaultEntryHolder { public int getNamedBindingsCount() { return internalGetNamedBindings().getMap().size(); } + /** * * @@ -202,6 +207,7 @@ public boolean containsNamedBindings(java.lang.String key) { } return internalGetNamedBindings().getMap().containsKey(key); } + /** Use {@link #getNamedBindingsMap()} instead. */ @java.lang.Override @java.lang.Deprecated @@ -209,6 +215,7 @@ public boolean containsNamedBindings(java.lang.String key) { getNamedBindings() { return getNamedBindingsMap(); } + /** * * @@ -227,6 +234,7 @@ public boolean containsNamedBindings(java.lang.String key) { getNamedBindingsMap() { return internalGetNamedBindings().getMap(); } + /** * * @@ -252,6 +260,7 @@ public boolean containsNamedBindings(java.lang.String key) { internalGetNamedBindings().getMap(); return map.containsKey(key) ? map.get(key) : defaultValue; } + /** * * @@ -282,6 +291,7 @@ public com.google.datastore.v1.GqlQueryParameter getNamedBindingsOrThrow(java.la @SuppressWarnings("serial") private java.util.List positionalBindings_; + /** * * @@ -299,6 +309,7 @@ public com.google.datastore.v1.GqlQueryParameter getNamedBindingsOrThrow(java.la public java.util.List getPositionalBindingsList() { return positionalBindings_; } + /** * * @@ -317,6 +328,7 @@ public java.util.List getPositionalBi getPositionalBindingsOrBuilderList() { return positionalBindings_; } + /** * * @@ -334,6 +346,7 @@ public java.util.List getPositionalBi public int getPositionalBindingsCount() { return positionalBindings_.size(); } + /** * * @@ -351,6 +364,7 @@ public int getPositionalBindingsCount() { public com.google.datastore.v1.GqlQueryParameter getPositionalBindings(int index) { return positionalBindings_.get(index); } + /** * * @@ -566,6 +580,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -865,6 +880,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object queryString_ = ""; + /** * * @@ -888,6 +904,7 @@ public java.lang.String getQueryString() { return (java.lang.String) ref; } } + /** * * @@ -911,6 +928,7 @@ public com.google.protobuf.ByteString getQueryStringBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -933,6 +951,7 @@ public Builder setQueryString(java.lang.String value) { onChanged(); return this; } + /** * * @@ -951,6 +970,7 @@ public Builder clearQueryString() { onChanged(); return this; } + /** * * @@ -976,6 +996,7 @@ public Builder setQueryStringBytes(com.google.protobuf.ByteString value) { } private boolean allowLiterals_; + /** * * @@ -994,6 +1015,7 @@ public Builder setQueryStringBytes(com.google.protobuf.ByteString value) { public boolean getAllowLiterals() { return allowLiterals_; } + /** * * @@ -1016,6 +1038,7 @@ public Builder setAllowLiterals(boolean value) { onChanged(); return this; } + /** * * @@ -1057,7 +1080,8 @@ public com.google.datastore.v1.GqlQueryParameter build( defaultEntry() { return NamedBindingsDefaultEntryHolder.defaultEntry; } - }; + } + ; private static final NamedBindingsConverter namedBindingsConverter = new NamedBindingsConverter(); @@ -1098,6 +1122,7 @@ public com.google.datastore.v1.GqlQueryParameter build( public int getNamedBindingsCount() { return internalGetNamedBindings().ensureBuilderMap().size(); } + /** * * @@ -1118,6 +1143,7 @@ public boolean containsNamedBindings(java.lang.String key) { } return internalGetNamedBindings().ensureBuilderMap().containsKey(key); } + /** Use {@link #getNamedBindingsMap()} instead. */ @java.lang.Override @java.lang.Deprecated @@ -1125,6 +1151,7 @@ public boolean containsNamedBindings(java.lang.String key) { getNamedBindings() { return getNamedBindingsMap(); } + /** * * @@ -1143,6 +1170,7 @@ public boolean containsNamedBindings(java.lang.String key) { getNamedBindingsMap() { return internalGetNamedBindings().getImmutableMap(); } + /** * * @@ -1168,6 +1196,7 @@ public boolean containsNamedBindings(java.lang.String key) { internalGetMutableNamedBindings().ensureBuilderMap(); return map.containsKey(key) ? namedBindingsConverter.build(map.get(key)) : defaultValue; } + /** * * @@ -1199,6 +1228,7 @@ public Builder clearNamedBindings() { internalGetMutableNamedBindings().clear(); return this; } + /** * * @@ -1219,6 +1249,7 @@ public Builder removeNamedBindings(java.lang.String key) { internalGetMutableNamedBindings().ensureBuilderMap().remove(key); return this; } + /** Use alternate mutation accessors instead. */ @java.lang.Deprecated public java.util.Map @@ -1226,6 +1257,7 @@ public Builder removeNamedBindings(java.lang.String key) { bitField0_ |= 0x00000004; return internalGetMutableNamedBindings().ensureMessageMap(); } + /** * * @@ -1251,6 +1283,7 @@ public Builder putNamedBindings( bitField0_ |= 0x00000004; return this; } + /** * * @@ -1276,6 +1309,7 @@ public Builder putAllNamedBindings( bitField0_ |= 0x00000004; return this; } + /** * * @@ -1342,6 +1376,7 @@ public java.util.List getPositionalBi return positionalBindingsBuilder_.getMessageList(); } } + /** * * @@ -1362,6 +1397,7 @@ public int getPositionalBindingsCount() { return positionalBindingsBuilder_.getCount(); } } + /** * * @@ -1382,6 +1418,7 @@ public com.google.datastore.v1.GqlQueryParameter getPositionalBindings(int index return positionalBindingsBuilder_.getMessage(index); } } + /** * * @@ -1409,6 +1446,7 @@ public Builder setPositionalBindings( } return this; } + /** * * @@ -1433,6 +1471,7 @@ public Builder setPositionalBindings( } return this; } + /** * * @@ -1459,6 +1498,7 @@ public Builder addPositionalBindings(com.google.datastore.v1.GqlQueryParameter v } return this; } + /** * * @@ -1486,6 +1526,7 @@ public Builder addPositionalBindings( } return this; } + /** * * @@ -1510,6 +1551,7 @@ public Builder addPositionalBindings( } return this; } + /** * * @@ -1534,6 +1576,7 @@ public Builder addPositionalBindings( } return this; } + /** * * @@ -1558,6 +1601,7 @@ public Builder addAllPositionalBindings( } return this; } + /** * * @@ -1581,6 +1625,7 @@ public Builder clearPositionalBindings() { } return this; } + /** * * @@ -1604,6 +1649,7 @@ public Builder removePositionalBindings(int index) { } return this; } + /** * * @@ -1621,6 +1667,7 @@ public com.google.datastore.v1.GqlQueryParameter.Builder getPositionalBindingsBu int index) { return getPositionalBindingsFieldBuilder().getBuilder(index); } + /** * * @@ -1642,6 +1689,7 @@ public com.google.datastore.v1.GqlQueryParameterOrBuilder getPositionalBindingsO return positionalBindingsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1663,6 +1711,7 @@ public com.google.datastore.v1.GqlQueryParameterOrBuilder getPositionalBindingsO return java.util.Collections.unmodifiableList(positionalBindings_); } } + /** * * @@ -1680,6 +1729,7 @@ public com.google.datastore.v1.GqlQueryParameter.Builder addPositionalBindingsBu return getPositionalBindingsFieldBuilder() .addBuilder(com.google.datastore.v1.GqlQueryParameter.getDefaultInstance()); } + /** * * @@ -1698,6 +1748,7 @@ public com.google.datastore.v1.GqlQueryParameter.Builder addPositionalBindingsBu return getPositionalBindingsFieldBuilder() .addBuilder(index, com.google.datastore.v1.GqlQueryParameter.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java index 7cedc2fd3..36d73aa77 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface GqlQueryOrBuilder @@ -37,6 +37,7 @@ public interface GqlQueryOrBuilder * @return The queryString. */ java.lang.String getQueryString(); + /** * * @@ -81,6 +82,7 @@ public interface GqlQueryOrBuilder * map<string, .google.datastore.v1.GqlQueryParameter> named_bindings = 5; */ int getNamedBindingsCount(); + /** * * @@ -95,9 +97,11 @@ public interface GqlQueryOrBuilder * map<string, .google.datastore.v1.GqlQueryParameter> named_bindings = 5; */ boolean containsNamedBindings(java.lang.String key); + /** Use {@link #getNamedBindingsMap()} instead. */ @java.lang.Deprecated java.util.Map getNamedBindings(); + /** * * @@ -112,6 +116,7 @@ public interface GqlQueryOrBuilder * map<string, .google.datastore.v1.GqlQueryParameter> named_bindings = 5; */ java.util.Map getNamedBindingsMap(); + /** * * @@ -130,6 +135,7 @@ com.google.datastore.v1.GqlQueryParameter getNamedBindingsOrDefault( java.lang.String key, /* nullable */ com.google.datastore.v1.GqlQueryParameter defaultValue); + /** * * @@ -159,6 +165,7 @@ com.google.datastore.v1.GqlQueryParameter getNamedBindingsOrDefault( * repeated .google.datastore.v1.GqlQueryParameter positional_bindings = 4; */ java.util.List getPositionalBindingsList(); + /** * * @@ -173,6 +180,7 @@ com.google.datastore.v1.GqlQueryParameter getNamedBindingsOrDefault( * repeated .google.datastore.v1.GqlQueryParameter positional_bindings = 4; */ com.google.datastore.v1.GqlQueryParameter getPositionalBindings(int index); + /** * * @@ -187,6 +195,7 @@ com.google.datastore.v1.GqlQueryParameter getNamedBindingsOrDefault( * repeated .google.datastore.v1.GqlQueryParameter positional_bindings = 4; */ int getPositionalBindingsCount(); + /** * * @@ -202,6 +211,7 @@ com.google.datastore.v1.GqlQueryParameter getNamedBindingsOrDefault( */ java.util.List getPositionalBindingsOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java index 866409cff..eb6b3850e 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameter.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class GqlQueryParameter extends com.google.protobuf.GeneratedMessag // @@protoc_insertion_point(message_implements:google.datastore.v1.GqlQueryParameter) GqlQueryParameterOrBuilder { private static final long serialVersionUID = 0L; + // Use GqlQueryParameter.newBuilder() to construct. private GqlQueryParameter(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -78,6 +79,7 @@ public enum ParameterTypeCase private ParameterTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -111,6 +113,7 @@ public ParameterTypeCase getParameterTypeCase() { } public static final int VALUE_FIELD_NUMBER = 2; + /** * * @@ -126,6 +129,7 @@ public ParameterTypeCase getParameterTypeCase() { public boolean hasValue() { return parameterTypeCase_ == 2; } + /** * * @@ -144,6 +148,7 @@ public com.google.datastore.v1.Value getValue() { } return com.google.datastore.v1.Value.getDefaultInstance(); } + /** * * @@ -162,6 +167,7 @@ public com.google.datastore.v1.ValueOrBuilder getValueOrBuilder() { } public static final int CURSOR_FIELD_NUMBER = 3; + /** * * @@ -178,6 +184,7 @@ public com.google.datastore.v1.ValueOrBuilder getValueOrBuilder() { public boolean hasCursor() { return parameterTypeCase_ == 3; } + /** * * @@ -387,6 +394,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -615,6 +623,7 @@ public Builder clearParameterType() { com.google.datastore.v1.Value.Builder, com.google.datastore.v1.ValueOrBuilder> valueBuilder_; + /** * * @@ -630,6 +639,7 @@ public Builder clearParameterType() { public boolean hasValue() { return parameterTypeCase_ == 2; } + /** * * @@ -655,6 +665,7 @@ public com.google.datastore.v1.Value getValue() { return com.google.datastore.v1.Value.getDefaultInstance(); } } + /** * * @@ -677,6 +688,7 @@ public Builder setValue(com.google.datastore.v1.Value value) { parameterTypeCase_ = 2; return this; } + /** * * @@ -696,6 +708,7 @@ public Builder setValue(com.google.datastore.v1.Value.Builder builderForValue) { parameterTypeCase_ = 2; return this; } + /** * * @@ -728,6 +741,7 @@ public Builder mergeValue(com.google.datastore.v1.Value value) { parameterTypeCase_ = 2; return this; } + /** * * @@ -753,6 +767,7 @@ public Builder clearValue() { } return this; } + /** * * @@ -765,6 +780,7 @@ public Builder clearValue() { public com.google.datastore.v1.Value.Builder getValueBuilder() { return getValueFieldBuilder().getBuilder(); } + /** * * @@ -785,6 +801,7 @@ public com.google.datastore.v1.ValueOrBuilder getValueOrBuilder() { return com.google.datastore.v1.Value.getDefaultInstance(); } } + /** * * @@ -831,6 +848,7 @@ public com.google.datastore.v1.ValueOrBuilder getValueOrBuilder() { public boolean hasCursor() { return parameterTypeCase_ == 3; } + /** * * @@ -849,6 +867,7 @@ public com.google.protobuf.ByteString getCursor() { } return com.google.protobuf.ByteString.EMPTY; } + /** * * @@ -871,6 +890,7 @@ public Builder setCursor(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java index c4faa7547..7c3e07894 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/GqlQueryParameterOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface GqlQueryParameterOrBuilder @@ -36,6 +36,7 @@ public interface GqlQueryParameterOrBuilder * @return Whether the value field is set. */ boolean hasValue(); + /** * * @@ -48,6 +49,7 @@ public interface GqlQueryParameterOrBuilder * @return The value. */ com.google.datastore.v1.Value getValue(); + /** * * @@ -72,6 +74,7 @@ public interface GqlQueryParameterOrBuilder * @return Whether the cursor field is set. */ boolean hasCursor(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java index 693c867fb..28314fbb8 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Key.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -36,6 +36,7 @@ public final class Key extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.Key) KeyOrBuilder { private static final long serialVersionUID = 0L; + // Use Key.newBuilder() to construct. private Key(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -89,6 +90,7 @@ public interface PathElementOrBuilder * @return The kind. */ java.lang.String getKind(); + /** * * @@ -125,6 +127,7 @@ public interface PathElementOrBuilder * @return Whether the id field is set. */ boolean hasId(); + /** * * @@ -161,6 +164,7 @@ public interface PathElementOrBuilder * @return Whether the name field is set. */ boolean hasName(); + /** * * @@ -181,6 +185,7 @@ public interface PathElementOrBuilder * @return The name. */ java.lang.String getName(); + /** * * @@ -204,6 +209,7 @@ public interface PathElementOrBuilder com.google.datastore.v1.Key.PathElement.IdTypeCase getIdTypeCase(); } + /** * * @@ -221,6 +227,7 @@ public static final class PathElement extends com.google.protobuf.GeneratedMessa // @@protoc_insertion_point(message_implements:google.datastore.v1.Key.PathElement) PathElementOrBuilder { private static final long serialVersionUID = 0L; + // Use PathElement.newBuilder() to construct. private PathElement(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -268,6 +275,7 @@ public enum IdTypeCase private IdTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -304,6 +312,7 @@ public IdTypeCase getIdTypeCase() { @SuppressWarnings("serial") private volatile java.lang.Object kind_ = ""; + /** * * @@ -335,6 +344,7 @@ public java.lang.String getKind() { return s; } } + /** * * @@ -368,6 +378,7 @@ public com.google.protobuf.ByteString getKindBytes() { } public static final int ID_FIELD_NUMBER = 2; + /** * * @@ -386,6 +397,7 @@ public com.google.protobuf.ByteString getKindBytes() { public boolean hasId() { return idTypeCase_ == 2; } + /** * * @@ -409,6 +421,7 @@ public long getId() { } public static final int NAME_FIELD_NUMBER = 3; + /** * * @@ -431,6 +444,7 @@ public long getId() { public boolean hasName() { return idTypeCase_ == 3; } + /** * * @@ -466,6 +480,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -698,6 +713,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -940,6 +956,7 @@ public Builder clearIdType() { private int bitField0_; private java.lang.Object kind_ = ""; + /** * * @@ -970,6 +987,7 @@ public java.lang.String getKind() { return (java.lang.String) ref; } } + /** * * @@ -1000,6 +1018,7 @@ public com.google.protobuf.ByteString getKindBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1029,6 +1048,7 @@ public Builder setKind(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1054,6 +1074,7 @@ public Builder clearKind() { onChanged(); return this; } + /** * * @@ -1102,6 +1123,7 @@ public Builder setKindBytes(com.google.protobuf.ByteString value) { public boolean hasId() { return idTypeCase_ == 2; } + /** * * @@ -1122,6 +1144,7 @@ public long getId() { } return 0L; } + /** * * @@ -1144,6 +1167,7 @@ public Builder setId(long value) { onChanged(); return this; } + /** * * @@ -1190,6 +1214,7 @@ public Builder clearId() { public boolean hasName() { return idTypeCase_ == 3; } + /** * * @@ -1226,6 +1251,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -1262,6 +1288,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1291,6 +1318,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1318,6 +1346,7 @@ public Builder clearName() { } return this; } + /** * * @@ -1416,6 +1445,7 @@ public com.google.datastore.v1.Key.PathElement getDefaultInstanceForType() { private int bitField0_; public static final int PARTITION_ID_FIELD_NUMBER = 1; private com.google.datastore.v1.PartitionId partitionId_; + /** * * @@ -1433,6 +1463,7 @@ public com.google.datastore.v1.Key.PathElement getDefaultInstanceForType() { public boolean hasPartitionId() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1452,6 +1483,7 @@ public com.google.datastore.v1.PartitionId getPartitionId() { ? com.google.datastore.v1.PartitionId.getDefaultInstance() : partitionId_; } + /** * * @@ -1474,6 +1506,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { @SuppressWarnings("serial") private java.util.List path_; + /** * * @@ -1502,6 +1535,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { public java.util.List getPathList() { return path_; } + /** * * @@ -1531,6 +1565,7 @@ public java.util.List getPathList() { getPathOrBuilderList() { return path_; } + /** * * @@ -1559,6 +1594,7 @@ public java.util.List getPathList() { public int getPathCount() { return path_.size(); } + /** * * @@ -1587,6 +1623,7 @@ public int getPathCount() { public com.google.datastore.v1.Key.PathElement getPath(int index) { return path_.get(index); } + /** * * @@ -1789,6 +1826,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -2052,6 +2090,7 @@ public Builder mergeFrom( com.google.datastore.v1.PartitionId.Builder, com.google.datastore.v1.PartitionIdOrBuilder> partitionIdBuilder_; + /** * * @@ -2068,6 +2107,7 @@ public Builder mergeFrom( public boolean hasPartitionId() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -2090,6 +2130,7 @@ public com.google.datastore.v1.PartitionId getPartitionId() { return partitionIdBuilder_.getMessage(); } } + /** * * @@ -2114,6 +2155,7 @@ public Builder setPartitionId(com.google.datastore.v1.PartitionId value) { onChanged(); return this; } + /** * * @@ -2135,6 +2177,7 @@ public Builder setPartitionId(com.google.datastore.v1.PartitionId.Builder builde onChanged(); return this; } + /** * * @@ -2164,6 +2207,7 @@ public Builder mergePartitionId(com.google.datastore.v1.PartitionId value) { } return this; } + /** * * @@ -2185,6 +2229,7 @@ public Builder clearPartitionId() { onChanged(); return this; } + /** * * @@ -2201,6 +2246,7 @@ public com.google.datastore.v1.PartitionId.Builder getPartitionIdBuilder() { onChanged(); return getPartitionIdFieldBuilder().getBuilder(); } + /** * * @@ -2221,6 +2267,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { : partitionId_; } } + /** * * @@ -2296,6 +2343,7 @@ public java.util.List getPathList() { return pathBuilder_.getMessageList(); } } + /** * * @@ -2327,6 +2375,7 @@ public int getPathCount() { return pathBuilder_.getCount(); } } + /** * * @@ -2358,6 +2407,7 @@ public com.google.datastore.v1.Key.PathElement getPath(int index) { return pathBuilder_.getMessage(index); } } + /** * * @@ -2395,6 +2445,7 @@ public Builder setPath(int index, com.google.datastore.v1.Key.PathElement value) } return this; } + /** * * @@ -2430,6 +2481,7 @@ public Builder setPath( } return this; } + /** * * @@ -2467,6 +2519,7 @@ public Builder addPath(com.google.datastore.v1.Key.PathElement value) { } return this; } + /** * * @@ -2504,6 +2557,7 @@ public Builder addPath(int index, com.google.datastore.v1.Key.PathElement value) } return this; } + /** * * @@ -2538,6 +2592,7 @@ public Builder addPath(com.google.datastore.v1.Key.PathElement.Builder builderFo } return this; } + /** * * @@ -2573,6 +2628,7 @@ public Builder addPath( } return this; } + /** * * @@ -2608,6 +2664,7 @@ public Builder addAllPath( } return this; } + /** * * @@ -2642,6 +2699,7 @@ public Builder clearPath() { } return this; } + /** * * @@ -2676,6 +2734,7 @@ public Builder removePath(int index) { } return this; } + /** * * @@ -2703,6 +2762,7 @@ public Builder removePath(int index) { public com.google.datastore.v1.Key.PathElement.Builder getPathBuilder(int index) { return getPathFieldBuilder().getBuilder(index); } + /** * * @@ -2734,6 +2794,7 @@ public com.google.datastore.v1.Key.PathElementOrBuilder getPathOrBuilder(int ind return pathBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2766,6 +2827,7 @@ public com.google.datastore.v1.Key.PathElementOrBuilder getPathOrBuilder(int ind return java.util.Collections.unmodifiableList(path_); } } + /** * * @@ -2794,6 +2856,7 @@ public com.google.datastore.v1.Key.PathElement.Builder addPathBuilder() { return getPathFieldBuilder() .addBuilder(com.google.datastore.v1.Key.PathElement.getDefaultInstance()); } + /** * * @@ -2822,6 +2885,7 @@ public com.google.datastore.v1.Key.PathElement.Builder addPathBuilder(int index) return getPathFieldBuilder() .addBuilder(index, com.google.datastore.v1.Key.PathElement.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java index b88c3493e..4c72915d8 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KeyOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface KeyOrBuilder @@ -38,6 +38,7 @@ public interface KeyOrBuilder * @return Whether the partitionId field is set. */ boolean hasPartitionId(); + /** * * @@ -52,6 +53,7 @@ public interface KeyOrBuilder * @return The partitionId. */ com.google.datastore.v1.PartitionId getPartitionId(); + /** * * @@ -90,6 +92,7 @@ public interface KeyOrBuilder * repeated .google.datastore.v1.Key.PathElement path = 2; */ java.util.List getPathList(); + /** * * @@ -115,6 +118,7 @@ public interface KeyOrBuilder * repeated .google.datastore.v1.Key.PathElement path = 2; */ com.google.datastore.v1.Key.PathElement getPath(int index); + /** * * @@ -140,6 +144,7 @@ public interface KeyOrBuilder * repeated .google.datastore.v1.Key.PathElement path = 2; */ int getPathCount(); + /** * * @@ -165,6 +170,7 @@ public interface KeyOrBuilder * repeated .google.datastore.v1.Key.PathElement path = 2; */ java.util.List getPathOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java index fde068625..9b3d26ef9 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class KindExpression extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.KindExpression) KindExpressionOrBuilder { private static final long serialVersionUID = 0L; + // Use KindExpression.newBuilder() to construct. private KindExpression(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -67,6 +68,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -90,6 +92,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -272,6 +275,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -455,6 +459,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -477,6 +482,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -499,6 +505,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -520,6 +527,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -537,6 +545,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java index b3c48590c..ad9b5f9b6 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/KindExpressionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface KindExpressionOrBuilder @@ -36,6 +36,7 @@ public interface KindExpressionOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java index cd95d3a06..68b94adaa 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class LookupRequest extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.LookupRequest) LookupRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use LookupRequest.newBuilder() to construct. private LookupRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -70,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +95,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -121,6 +124,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -147,6 +151,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -176,6 +181,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public static final int READ_OPTIONS_FIELD_NUMBER = 1; private com.google.datastore.v1.ReadOptions readOptions_; + /** * * @@ -191,6 +197,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public boolean hasReadOptions() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -208,6 +215,7 @@ public com.google.datastore.v1.ReadOptions getReadOptions() { ? com.google.datastore.v1.ReadOptions.getDefaultInstance() : readOptions_; } + /** * * @@ -228,6 +236,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { @SuppressWarnings("serial") private java.util.List keys_; + /** * * @@ -242,6 +251,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { public java.util.List getKeysList() { return keys_; } + /** * * @@ -256,6 +266,7 @@ public java.util.List getKeysList() { public java.util.List getKeysOrBuilderList() { return keys_; } + /** * * @@ -270,6 +281,7 @@ public java.util.List getKeysOrB public int getKeysCount() { return keys_.size(); } + /** * * @@ -284,6 +296,7 @@ public int getKeysCount() { public com.google.datastore.v1.Key getKeys(int index) { return keys_.get(index); } + /** * * @@ -299,6 +312,74 @@ public com.google.datastore.v1.KeyOrBuilder getKeysOrBuilder(int index) { return keys_.get(index); } + public static final int PROPERTY_MASK_FIELD_NUMBER = 5; + private com.google.datastore.v1.PropertyMask propertyMask_; + + /** + * + * + *
+   * The properties to return. Defaults to returning all properties.
+   *
+   * If this field is set and an entity has a property not referenced in the
+   * mask, it will be absent from [LookupResponse.found.entity.properties][].
+   *
+   * The entity's key is always returned.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + * + * @return Whether the propertyMask field is set. + */ + @java.lang.Override + public boolean hasPropertyMask() { + return ((bitField0_ & 0x00000002) != 0); + } + + /** + * + * + *
+   * The properties to return. Defaults to returning all properties.
+   *
+   * If this field is set and an entity has a property not referenced in the
+   * mask, it will be absent from [LookupResponse.found.entity.properties][].
+   *
+   * The entity's key is always returned.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + * + * @return The propertyMask. + */ + @java.lang.Override + public com.google.datastore.v1.PropertyMask getPropertyMask() { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + + /** + * + * + *
+   * The properties to return. Defaults to returning all properties.
+   *
+   * If this field is set and an entity has a property not referenced in the
+   * mask, it will be absent from [LookupResponse.found.entity.properties][].
+   *
+   * The entity's key is always returned.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + @java.lang.Override + public com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder() { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -319,6 +400,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io for (int i = 0; i < keys_.size(); i++) { output.writeMessage(3, keys_.get(i)); } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeMessage(5, getPropertyMask()); + } if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { com.google.protobuf.GeneratedMessageV3.writeString(output, 8, projectId_); } @@ -340,6 +424,9 @@ public int getSerializedSize() { for (int i = 0; i < keys_.size(); i++) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, keys_.get(i)); } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, getPropertyMask()); + } if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(projectId_)) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, projectId_); } @@ -368,6 +455,10 @@ public boolean equals(final java.lang.Object obj) { if (!getReadOptions().equals(other.getReadOptions())) return false; } if (!getKeysList().equals(other.getKeysList())) return false; + if (hasPropertyMask() != other.hasPropertyMask()) return false; + if (hasPropertyMask()) { + if (!getPropertyMask().equals(other.getPropertyMask())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -391,6 +482,10 @@ public int hashCode() { hash = (37 * hash) + KEYS_FIELD_NUMBER; hash = (53 * hash) + getKeysList().hashCode(); } + if (hasPropertyMask()) { + hash = (37 * hash) + PROPERTY_MASK_FIELD_NUMBER; + hash = (53 * hash) + getPropertyMask().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -490,6 +585,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -532,6 +628,7 @@ private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { getReadOptionsFieldBuilder(); getKeysFieldBuilder(); + getPropertyMaskFieldBuilder(); } } @@ -553,6 +650,11 @@ public Builder clear() { keysBuilder_.clear(); } bitField0_ = (bitField0_ & ~0x00000008); + propertyMask_ = null; + if (propertyMaskBuilder_ != null) { + propertyMaskBuilder_.dispose(); + propertyMaskBuilder_ = null; + } return this; } @@ -614,6 +716,11 @@ private void buildPartial0(com.google.datastore.v1.LookupRequest result) { readOptionsBuilder_ == null ? readOptions_ : readOptionsBuilder_.build(); to_bitField0_ |= 0x00000001; } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.propertyMask_ = + propertyMaskBuilder_ == null ? propertyMask_ : propertyMaskBuilder_.build(); + to_bitField0_ |= 0x00000002; + } result.bitField0_ |= to_bitField0_; } @@ -702,6 +809,9 @@ public Builder mergeFrom(com.google.datastore.v1.LookupRequest other) { } } } + if (other.hasPropertyMask()) { + mergePropertyMask(other.getPropertyMask()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -746,6 +856,12 @@ public Builder mergeFrom( } break; } // case 26 + case 42: + { + input.readMessage(getPropertyMaskFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000010; + break; + } // case 42 case 66: { projectId_ = input.readStringRequireUtf8(); @@ -778,6 +894,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -800,6 +917,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -822,6 +940,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -843,6 +962,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -860,6 +980,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -884,6 +1005,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -909,6 +1031,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -934,6 +1057,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -958,6 +1082,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -978,6 +1103,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1010,6 +1136,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { com.google.datastore.v1.ReadOptions.Builder, com.google.datastore.v1.ReadOptionsOrBuilder> readOptionsBuilder_; + /** * * @@ -1024,6 +1151,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public boolean hasReadOptions() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1044,6 +1172,7 @@ public com.google.datastore.v1.ReadOptions getReadOptions() { return readOptionsBuilder_.getMessage(); } } + /** * * @@ -1066,6 +1195,7 @@ public Builder setReadOptions(com.google.datastore.v1.ReadOptions value) { onChanged(); return this; } + /** * * @@ -1085,6 +1215,7 @@ public Builder setReadOptions(com.google.datastore.v1.ReadOptions.Builder builde onChanged(); return this; } + /** * * @@ -1112,6 +1243,7 @@ public Builder mergeReadOptions(com.google.datastore.v1.ReadOptions value) { } return this; } + /** * * @@ -1131,6 +1263,7 @@ public Builder clearReadOptions() { onChanged(); return this; } + /** * * @@ -1145,6 +1278,7 @@ public com.google.datastore.v1.ReadOptions.Builder getReadOptionsBuilder() { onChanged(); return getReadOptionsFieldBuilder().getBuilder(); } + /** * * @@ -1163,6 +1297,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { : readOptions_; } } + /** * * @@ -1221,6 +1356,7 @@ public java.util.List getKeysList() { return keysBuilder_.getMessageList(); } } + /** * * @@ -1238,6 +1374,7 @@ public int getKeysCount() { return keysBuilder_.getCount(); } } + /** * * @@ -1255,6 +1392,7 @@ public com.google.datastore.v1.Key getKeys(int index) { return keysBuilder_.getMessage(index); } } + /** * * @@ -1278,6 +1416,7 @@ public Builder setKeys(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1298,6 +1437,7 @@ public Builder setKeys(int index, com.google.datastore.v1.Key.Builder builderFor } return this; } + /** * * @@ -1321,6 +1461,7 @@ public Builder addKeys(com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1344,6 +1485,7 @@ public Builder addKeys(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1364,6 +1506,7 @@ public Builder addKeys(com.google.datastore.v1.Key.Builder builderForValue) { } return this; } + /** * * @@ -1384,6 +1527,7 @@ public Builder addKeys(int index, com.google.datastore.v1.Key.Builder builderFor } return this; } + /** * * @@ -1404,6 +1548,7 @@ public Builder addAllKeys(java.lang.Iterable getKeysOrB return java.util.Collections.unmodifiableList(keys_); } } + /** * * @@ -1504,6 +1654,7 @@ public java.util.List getKeysOrB public com.google.datastore.v1.Key.Builder addKeysBuilder() { return getKeysFieldBuilder().addBuilder(com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * @@ -1518,6 +1669,7 @@ public com.google.datastore.v1.Key.Builder addKeysBuilder(int index) { return getKeysFieldBuilder() .addBuilder(index, com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * @@ -1549,6 +1701,245 @@ public java.util.List getKeysBuilderList() return keysBuilder_; } + private com.google.datastore.v1.PropertyMask propertyMask_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder> + propertyMaskBuilder_; + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + * + * @return Whether the propertyMask field is set. + */ + public boolean hasPropertyMask() { + return ((bitField0_ & 0x00000010) != 0); + } + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + * + * @return The propertyMask. + */ + public com.google.datastore.v1.PropertyMask getPropertyMask() { + if (propertyMaskBuilder_ == null) { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } else { + return propertyMaskBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + public Builder setPropertyMask(com.google.datastore.v1.PropertyMask value) { + if (propertyMaskBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + propertyMask_ = value; + } else { + propertyMaskBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + public Builder setPropertyMask(com.google.datastore.v1.PropertyMask.Builder builderForValue) { + if (propertyMaskBuilder_ == null) { + propertyMask_ = builderForValue.build(); + } else { + propertyMaskBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + public Builder mergePropertyMask(com.google.datastore.v1.PropertyMask value) { + if (propertyMaskBuilder_ == null) { + if (((bitField0_ & 0x00000010) != 0) + && propertyMask_ != null + && propertyMask_ != com.google.datastore.v1.PropertyMask.getDefaultInstance()) { + getPropertyMaskBuilder().mergeFrom(value); + } else { + propertyMask_ = value; + } + } else { + propertyMaskBuilder_.mergeFrom(value); + } + if (propertyMask_ != null) { + bitField0_ |= 0x00000010; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + public Builder clearPropertyMask() { + bitField0_ = (bitField0_ & ~0x00000010); + propertyMask_ = null; + if (propertyMaskBuilder_ != null) { + propertyMaskBuilder_.dispose(); + propertyMaskBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + public com.google.datastore.v1.PropertyMask.Builder getPropertyMaskBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getPropertyMaskFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + public com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder() { + if (propertyMaskBuilder_ != null) { + return propertyMaskBuilder_.getMessageOrBuilder(); + } else { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + } + + /** + * + * + *
+     * The properties to return. Defaults to returning all properties.
+     *
+     * If this field is set and an entity has a property not referenced in the
+     * mask, it will be absent from [LookupResponse.found.entity.properties][].
+     *
+     * The entity's key is always returned.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder> + getPropertyMaskFieldBuilder() { + if (propertyMaskBuilder_ == null) { + propertyMaskBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder>( + getPropertyMask(), getParentForChildren(), isClean()); + propertyMask_ = null; + } + return propertyMaskBuilder_; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java index 82fe24661..f10219815 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface LookupRequestOrBuilder @@ -36,6 +36,7 @@ public interface LookupRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -64,6 +65,7 @@ public interface LookupRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -92,6 +94,7 @@ public interface LookupRequestOrBuilder * @return Whether the readOptions field is set. */ boolean hasReadOptions(); + /** * * @@ -104,6 +107,7 @@ public interface LookupRequestOrBuilder * @return The readOptions. */ com.google.datastore.v1.ReadOptions getReadOptions(); + /** * * @@ -126,6 +130,7 @@ public interface LookupRequestOrBuilder * */ java.util.List getKeysList(); + /** * * @@ -137,6 +142,7 @@ public interface LookupRequestOrBuilder * */ com.google.datastore.v1.Key getKeys(int index); + /** * * @@ -148,6 +154,7 @@ public interface LookupRequestOrBuilder * */ int getKeysCount(); + /** * * @@ -159,6 +166,7 @@ public interface LookupRequestOrBuilder * */ java.util.List getKeysOrBuilderList(); + /** * * @@ -170,4 +178,56 @@ public interface LookupRequestOrBuilder * */ com.google.datastore.v1.KeyOrBuilder getKeysOrBuilder(int index); + + /** + * + * + *
+   * The properties to return. Defaults to returning all properties.
+   *
+   * If this field is set and an entity has a property not referenced in the
+   * mask, it will be absent from [LookupResponse.found.entity.properties][].
+   *
+   * The entity's key is always returned.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + * + * @return Whether the propertyMask field is set. + */ + boolean hasPropertyMask(); + + /** + * + * + *
+   * The properties to return. Defaults to returning all properties.
+   *
+   * If this field is set and an entity has a property not referenced in the
+   * mask, it will be absent from [LookupResponse.found.entity.properties][].
+   *
+   * The entity's key is always returned.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + * + * @return The propertyMask. + */ + com.google.datastore.v1.PropertyMask getPropertyMask(); + + /** + * + * + *
+   * The properties to return. Defaults to returning all properties.
+   *
+   * If this field is set and an entity has a property not referenced in the
+   * mask, it will be absent from [LookupResponse.found.entity.properties][].
+   *
+   * The entity's key is always returned.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 5; + */ + com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder(); } diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java index 6b56e1025..1f02e007c 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class LookupResponse extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.LookupResponse) LookupResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use LookupResponse.newBuilder() to construct. private LookupResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -71,6 +72,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List found_; + /** * * @@ -86,6 +88,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getFoundList() { return found_; } + /** * * @@ -102,6 +105,7 @@ public java.util.List getFoundList() { getFoundOrBuilderList() { return found_; } + /** * * @@ -117,6 +121,7 @@ public java.util.List getFoundList() { public int getFoundCount() { return found_.size(); } + /** * * @@ -132,6 +137,7 @@ public int getFoundCount() { public com.google.datastore.v1.EntityResult getFound(int index) { return found_.get(index); } + /** * * @@ -152,6 +158,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getFoundOrBuilder(int index @SuppressWarnings("serial") private java.util.List missing_; + /** * * @@ -167,6 +174,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getFoundOrBuilder(int index public java.util.List getMissingList() { return missing_; } + /** * * @@ -183,6 +191,7 @@ public java.util.List getMissingList() { getMissingOrBuilderList() { return missing_; } + /** * * @@ -198,6 +207,7 @@ public java.util.List getMissingList() { public int getMissingCount() { return missing_.size(); } + /** * * @@ -213,6 +223,7 @@ public int getMissingCount() { public com.google.datastore.v1.EntityResult getMissing(int index) { return missing_.get(index); } + /** * * @@ -233,6 +244,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getMissingOrBuilder(int ind @SuppressWarnings("serial") private java.util.List deferred_; + /** * * @@ -248,6 +260,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getMissingOrBuilder(int ind public java.util.List getDeferredList() { return deferred_; } + /** * * @@ -263,6 +276,7 @@ public java.util.List getDeferredList() { public java.util.List getDeferredOrBuilderList() { return deferred_; } + /** * * @@ -278,6 +292,7 @@ public java.util.List getDeferre public int getDeferredCount() { return deferred_.size(); } + /** * * @@ -293,6 +308,7 @@ public int getDeferredCount() { public com.google.datastore.v1.Key getDeferred(int index) { return deferred_.get(index); } + /** * * @@ -311,6 +327,7 @@ public com.google.datastore.v1.KeyOrBuilder getDeferredOrBuilder(int index) { public static final int TRANSACTION_FIELD_NUMBER = 5; private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -335,6 +352,7 @@ public com.google.protobuf.ByteString getTransaction() { public static final int READ_TIME_FIELD_NUMBER = 7; private com.google.protobuf.Timestamp readTime_; + /** * * @@ -350,6 +368,7 @@ public com.google.protobuf.ByteString getTransaction() { public boolean hasReadTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -365,6 +384,7 @@ public boolean hasReadTime() { public com.google.protobuf.Timestamp getReadTime() { return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_; } + /** * * @@ -584,6 +604,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -1001,6 +1022,7 @@ public java.util.List getFoundList() { return foundBuilder_.getMessageList(); } } + /** * * @@ -1019,6 +1041,7 @@ public int getFoundCount() { return foundBuilder_.getCount(); } } + /** * * @@ -1037,6 +1060,7 @@ public com.google.datastore.v1.EntityResult getFound(int index) { return foundBuilder_.getMessage(index); } } + /** * * @@ -1061,6 +1085,7 @@ public Builder setFound(int index, com.google.datastore.v1.EntityResult value) { } return this; } + /** * * @@ -1083,6 +1108,7 @@ public Builder setFound( } return this; } + /** * * @@ -1107,6 +1133,7 @@ public Builder addFound(com.google.datastore.v1.EntityResult value) { } return this; } + /** * * @@ -1131,6 +1158,7 @@ public Builder addFound(int index, com.google.datastore.v1.EntityResult value) { } return this; } + /** * * @@ -1152,6 +1180,7 @@ public Builder addFound(com.google.datastore.v1.EntityResult.Builder builderForV } return this; } + /** * * @@ -1174,6 +1203,7 @@ public Builder addFound( } return this; } + /** * * @@ -1196,6 +1226,7 @@ public Builder addAllFound( } return this; } + /** * * @@ -1217,6 +1248,7 @@ public Builder clearFound() { } return this; } + /** * * @@ -1238,6 +1270,7 @@ public Builder removeFound(int index) { } return this; } + /** * * @@ -1252,6 +1285,7 @@ public Builder removeFound(int index) { public com.google.datastore.v1.EntityResult.Builder getFoundBuilder(int index) { return getFoundFieldBuilder().getBuilder(index); } + /** * * @@ -1270,6 +1304,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getFoundOrBuilder(int index return foundBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1289,6 +1324,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getFoundOrBuilder(int index return java.util.Collections.unmodifiableList(found_); } } + /** * * @@ -1304,6 +1340,7 @@ public com.google.datastore.v1.EntityResult.Builder addFoundBuilder() { return getFoundFieldBuilder() .addBuilder(com.google.datastore.v1.EntityResult.getDefaultInstance()); } + /** * * @@ -1319,6 +1356,7 @@ public com.google.datastore.v1.EntityResult.Builder addFoundBuilder(int index) { return getFoundFieldBuilder() .addBuilder(index, com.google.datastore.v1.EntityResult.getDefaultInstance()); } + /** * * @@ -1385,6 +1423,7 @@ public java.util.List getMissingList() { return missingBuilder_.getMessageList(); } } + /** * * @@ -1403,6 +1442,7 @@ public int getMissingCount() { return missingBuilder_.getCount(); } } + /** * * @@ -1421,6 +1461,7 @@ public com.google.datastore.v1.EntityResult getMissing(int index) { return missingBuilder_.getMessage(index); } } + /** * * @@ -1445,6 +1486,7 @@ public Builder setMissing(int index, com.google.datastore.v1.EntityResult value) } return this; } + /** * * @@ -1467,6 +1509,7 @@ public Builder setMissing( } return this; } + /** * * @@ -1491,6 +1534,7 @@ public Builder addMissing(com.google.datastore.v1.EntityResult value) { } return this; } + /** * * @@ -1515,6 +1559,7 @@ public Builder addMissing(int index, com.google.datastore.v1.EntityResult value) } return this; } + /** * * @@ -1536,6 +1581,7 @@ public Builder addMissing(com.google.datastore.v1.EntityResult.Builder builderFo } return this; } + /** * * @@ -1558,6 +1604,7 @@ public Builder addMissing( } return this; } + /** * * @@ -1580,6 +1627,7 @@ public Builder addAllMissing( } return this; } + /** * * @@ -1601,6 +1649,7 @@ public Builder clearMissing() { } return this; } + /** * * @@ -1622,6 +1671,7 @@ public Builder removeMissing(int index) { } return this; } + /** * * @@ -1636,6 +1686,7 @@ public Builder removeMissing(int index) { public com.google.datastore.v1.EntityResult.Builder getMissingBuilder(int index) { return getMissingFieldBuilder().getBuilder(index); } + /** * * @@ -1654,6 +1705,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getMissingOrBuilder(int ind return missingBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1673,6 +1725,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getMissingOrBuilder(int ind return java.util.Collections.unmodifiableList(missing_); } } + /** * * @@ -1688,6 +1741,7 @@ public com.google.datastore.v1.EntityResult.Builder addMissingBuilder() { return getMissingFieldBuilder() .addBuilder(com.google.datastore.v1.EntityResult.getDefaultInstance()); } + /** * * @@ -1703,6 +1757,7 @@ public com.google.datastore.v1.EntityResult.Builder addMissingBuilder(int index) return getMissingFieldBuilder() .addBuilder(index, com.google.datastore.v1.EntityResult.getDefaultInstance()); } + /** * * @@ -1769,6 +1824,7 @@ public java.util.List getDeferredList() { return deferredBuilder_.getMessageList(); } } + /** * * @@ -1787,6 +1843,7 @@ public int getDeferredCount() { return deferredBuilder_.getCount(); } } + /** * * @@ -1805,6 +1862,7 @@ public com.google.datastore.v1.Key getDeferred(int index) { return deferredBuilder_.getMessage(index); } } + /** * * @@ -1829,6 +1887,7 @@ public Builder setDeferred(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1850,6 +1909,7 @@ public Builder setDeferred(int index, com.google.datastore.v1.Key.Builder builde } return this; } + /** * * @@ -1874,6 +1934,7 @@ public Builder addDeferred(com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1898,6 +1959,7 @@ public Builder addDeferred(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1919,6 +1981,7 @@ public Builder addDeferred(com.google.datastore.v1.Key.Builder builderForValue) } return this; } + /** * * @@ -1940,6 +2003,7 @@ public Builder addDeferred(int index, com.google.datastore.v1.Key.Builder builde } return this; } + /** * * @@ -1962,6 +2026,7 @@ public Builder addAllDeferred( } return this; } + /** * * @@ -1983,6 +2048,7 @@ public Builder clearDeferred() { } return this; } + /** * * @@ -2004,6 +2070,7 @@ public Builder removeDeferred(int index) { } return this; } + /** * * @@ -2018,6 +2085,7 @@ public Builder removeDeferred(int index) { public com.google.datastore.v1.Key.Builder getDeferredBuilder(int index) { return getDeferredFieldBuilder().getBuilder(index); } + /** * * @@ -2036,6 +2104,7 @@ public com.google.datastore.v1.KeyOrBuilder getDeferredOrBuilder(int index) { return deferredBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2055,6 +2124,7 @@ public com.google.datastore.v1.KeyOrBuilder getDeferredOrBuilder(int index) { return java.util.Collections.unmodifiableList(deferred_); } } + /** * * @@ -2069,6 +2139,7 @@ public com.google.datastore.v1.KeyOrBuilder getDeferredOrBuilder(int index) { public com.google.datastore.v1.Key.Builder addDeferredBuilder() { return getDeferredFieldBuilder().addBuilder(com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * @@ -2084,6 +2155,7 @@ public com.google.datastore.v1.Key.Builder addDeferredBuilder(int index) { return getDeferredFieldBuilder() .addBuilder(index, com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * @@ -2117,6 +2189,7 @@ public java.util.List getDeferredBuilderLis } private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -2138,6 +2211,7 @@ public java.util.List getDeferredBuilderLis public com.google.protobuf.ByteString getTransaction() { return transaction_; } + /** * * @@ -2165,6 +2239,7 @@ public Builder setTransaction(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -2195,6 +2270,7 @@ public Builder clearTransaction() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> readTimeBuilder_; + /** * * @@ -2209,6 +2285,7 @@ public Builder clearTransaction() { public boolean hasReadTime() { return ((bitField0_ & 0x00000010) != 0); } + /** * * @@ -2227,6 +2304,7 @@ public com.google.protobuf.Timestamp getReadTime() { return readTimeBuilder_.getMessage(); } } + /** * * @@ -2249,6 +2327,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -2268,6 +2347,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp.Builder builderForValue onChanged(); return this; } + /** * * @@ -2295,6 +2375,7 @@ public Builder mergeReadTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -2314,6 +2395,7 @@ public Builder clearReadTime() { onChanged(); return this; } + /** * * @@ -2328,6 +2410,7 @@ public com.google.protobuf.Timestamp.Builder getReadTimeBuilder() { onChanged(); return getReadTimeFieldBuilder().getBuilder(); } + /** * * @@ -2344,6 +2427,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() { return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java index 2935a1b62..ae3bfc36d 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/LookupResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface LookupResponseOrBuilder @@ -36,6 +36,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.EntityResult found = 1; */ java.util.List getFoundList(); + /** * * @@ -48,6 +49,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.EntityResult found = 1; */ com.google.datastore.v1.EntityResult getFound(int index); + /** * * @@ -60,6 +62,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.EntityResult found = 1; */ int getFoundCount(); + /** * * @@ -72,6 +75,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.EntityResult found = 1; */ java.util.List getFoundOrBuilderList(); + /** * * @@ -97,6 +101,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.EntityResult missing = 2; */ java.util.List getMissingList(); + /** * * @@ -109,6 +114,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.EntityResult missing = 2; */ com.google.datastore.v1.EntityResult getMissing(int index); + /** * * @@ -121,6 +127,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.EntityResult missing = 2; */ int getMissingCount(); + /** * * @@ -133,6 +140,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.EntityResult missing = 2; */ java.util.List getMissingOrBuilderList(); + /** * * @@ -158,6 +166,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.Key deferred = 3; */ java.util.List getDeferredList(); + /** * * @@ -170,6 +179,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.Key deferred = 3; */ com.google.datastore.v1.Key getDeferred(int index); + /** * * @@ -182,6 +192,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.Key deferred = 3; */ int getDeferredCount(); + /** * * @@ -194,6 +205,7 @@ public interface LookupResponseOrBuilder * repeated .google.datastore.v1.Key deferred = 3; */ java.util.List getDeferredOrBuilderList(); + /** * * @@ -238,6 +250,7 @@ public interface LookupResponseOrBuilder * @return Whether the readTime field is set. */ boolean hasReadTime(); + /** * * @@ -250,6 +263,7 @@ public interface LookupResponseOrBuilder * @return The readTime. */ com.google.protobuf.Timestamp getReadTime(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java index 91895d180..be1d7e191 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Mutation.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,12 +33,16 @@ public final class Mutation extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.Mutation) MutationOrBuilder { private static final long serialVersionUID = 0L; + // Use Mutation.newBuilder() to construct. private Mutation(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private Mutation() {} + private Mutation() { + conflictResolutionStrategy_ = 0; + propertyTransforms_ = java.util.Collections.emptyList(); + } @java.lang.Override @SuppressWarnings({"unused"}) @@ -60,6 +64,169 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { com.google.datastore.v1.Mutation.class, com.google.datastore.v1.Mutation.Builder.class); } + /** + * + * + *
+   * The possible ways to resolve a conflict detected in a mutation.
+   * 
+ * + * Protobuf enum {@code google.datastore.v1.Mutation.ConflictResolutionStrategy} + */ + public enum ConflictResolutionStrategy implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Unspecified. Defaults to `SERVER_VALUE`.
+     * 
+ * + * STRATEGY_UNSPECIFIED = 0; + */ + STRATEGY_UNSPECIFIED(0), + /** + * + * + *
+     * The server entity is kept.
+     * 
+ * + * SERVER_VALUE = 1; + */ + SERVER_VALUE(1), + /** + * + * + *
+     * The whole commit request fails.
+     * 
+ * + * FAIL = 3; + */ + FAIL(3), + UNRECOGNIZED(-1), + ; + + /** + * + * + *
+     * Unspecified. Defaults to `SERVER_VALUE`.
+     * 
+ * + * STRATEGY_UNSPECIFIED = 0; + */ + public static final int STRATEGY_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * The server entity is kept.
+     * 
+ * + * SERVER_VALUE = 1; + */ + public static final int SERVER_VALUE_VALUE = 1; + + /** + * + * + *
+     * The whole commit request fails.
+     * 
+ * + * FAIL = 3; + */ + public static final int FAIL_VALUE = 3; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ConflictResolutionStrategy valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static ConflictResolutionStrategy forNumber(int value) { + switch (value) { + case 0: + return STRATEGY_UNSPECIFIED; + case 1: + return SERVER_VALUE; + case 3: + return FAIL; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ConflictResolutionStrategy findValueByNumber(int number) { + return ConflictResolutionStrategy.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.datastore.v1.Mutation.getDescriptor().getEnumTypes().get(0); + } + + private static final ConflictResolutionStrategy[] VALUES = values(); + + public static ConflictResolutionStrategy valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private ConflictResolutionStrategy(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.datastore.v1.Mutation.ConflictResolutionStrategy) + } + + private int bitField0_; private int operationCase_ = 0; @SuppressWarnings("serial") @@ -79,6 +246,7 @@ public enum OperationCase private OperationCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -132,6 +300,7 @@ public enum ConflictDetectionStrategyCase private ConflictDetectionStrategyCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -165,6 +334,7 @@ public ConflictDetectionStrategyCase getConflictDetectionStrategyCase() { } public static final int INSERT_FIELD_NUMBER = 4; + /** * * @@ -181,6 +351,7 @@ public ConflictDetectionStrategyCase getConflictDetectionStrategyCase() { public boolean hasInsert() { return operationCase_ == 4; } + /** * * @@ -200,6 +371,7 @@ public com.google.datastore.v1.Entity getInsert() { } return com.google.datastore.v1.Entity.getDefaultInstance(); } + /** * * @@ -219,6 +391,7 @@ public com.google.datastore.v1.EntityOrBuilder getInsertOrBuilder() { } public static final int UPDATE_FIELD_NUMBER = 5; + /** * * @@ -235,6 +408,7 @@ public com.google.datastore.v1.EntityOrBuilder getInsertOrBuilder() { public boolean hasUpdate() { return operationCase_ == 5; } + /** * * @@ -254,6 +428,7 @@ public com.google.datastore.v1.Entity getUpdate() { } return com.google.datastore.v1.Entity.getDefaultInstance(); } + /** * * @@ -273,6 +448,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpdateOrBuilder() { } public static final int UPSERT_FIELD_NUMBER = 6; + /** * * @@ -289,6 +465,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpdateOrBuilder() { public boolean hasUpsert() { return operationCase_ == 6; } + /** * * @@ -308,6 +485,7 @@ public com.google.datastore.v1.Entity getUpsert() { } return com.google.datastore.v1.Entity.getDefaultInstance(); } + /** * * @@ -327,6 +505,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpsertOrBuilder() { } public static final int DELETE_FIELD_NUMBER = 7; + /** * * @@ -343,6 +522,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpsertOrBuilder() { public boolean hasDelete() { return operationCase_ == 7; } + /** * * @@ -362,6 +542,7 @@ public com.google.datastore.v1.Key getDelete() { } return com.google.datastore.v1.Key.getDefaultInstance(); } + /** * * @@ -381,6 +562,7 @@ public com.google.datastore.v1.KeyOrBuilder getDeleteOrBuilder() { } public static final int BASE_VERSION_FIELD_NUMBER = 8; + /** * * @@ -398,6 +580,7 @@ public com.google.datastore.v1.KeyOrBuilder getDeleteOrBuilder() { public boolean hasBaseVersion() { return conflictDetectionStrategyCase_ == 8; } + /** * * @@ -420,6 +603,7 @@ public long getBaseVersion() { } public static final int UPDATE_TIME_FIELD_NUMBER = 11; + /** * * @@ -437,6 +621,7 @@ public long getBaseVersion() { public boolean hasUpdateTime() { return conflictDetectionStrategyCase_ == 11; } + /** * * @@ -457,6 +642,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { } return com.google.protobuf.Timestamp.getDefaultInstance(); } + /** * * @@ -476,6 +662,236 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { return com.google.protobuf.Timestamp.getDefaultInstance(); } + public static final int CONFLICT_RESOLUTION_STRATEGY_FIELD_NUMBER = 10; + private int conflictResolutionStrategy_ = 0; + + /** + * + * + *
+   * The strategy to use when a conflict is detected. Defaults to
+   * `SERVER_VALUE`.
+   * If this is set, then `conflict_detection_strategy` must also be set.
+   * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @return The enum numeric value on the wire for conflictResolutionStrategy. + */ + @java.lang.Override + public int getConflictResolutionStrategyValue() { + return conflictResolutionStrategy_; + } + + /** + * + * + *
+   * The strategy to use when a conflict is detected. Defaults to
+   * `SERVER_VALUE`.
+   * If this is set, then `conflict_detection_strategy` must also be set.
+   * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @return The conflictResolutionStrategy. + */ + @java.lang.Override + public com.google.datastore.v1.Mutation.ConflictResolutionStrategy + getConflictResolutionStrategy() { + com.google.datastore.v1.Mutation.ConflictResolutionStrategy result = + com.google.datastore.v1.Mutation.ConflictResolutionStrategy.forNumber( + conflictResolutionStrategy_); + return result == null + ? com.google.datastore.v1.Mutation.ConflictResolutionStrategy.UNRECOGNIZED + : result; + } + + public static final int PROPERTY_MASK_FIELD_NUMBER = 9; + private com.google.datastore.v1.PropertyMask propertyMask_; + + /** + * + * + *
+   * The properties to write in this mutation.
+   * None of the properties in the mask may have a reserved name, except for
+   * `__key__`.
+   * This field is ignored for `delete`.
+   *
+   * If the entity already exists, only properties referenced in the mask are
+   * updated, others are left untouched.
+   * Properties referenced in the mask but not in the entity are deleted.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + * + * @return Whether the propertyMask field is set. + */ + @java.lang.Override + public boolean hasPropertyMask() { + return ((bitField0_ & 0x00000001) != 0); + } + + /** + * + * + *
+   * The properties to write in this mutation.
+   * None of the properties in the mask may have a reserved name, except for
+   * `__key__`.
+   * This field is ignored for `delete`.
+   *
+   * If the entity already exists, only properties referenced in the mask are
+   * updated, others are left untouched.
+   * Properties referenced in the mask but not in the entity are deleted.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + * + * @return The propertyMask. + */ + @java.lang.Override + public com.google.datastore.v1.PropertyMask getPropertyMask() { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + + /** + * + * + *
+   * The properties to write in this mutation.
+   * None of the properties in the mask may have a reserved name, except for
+   * `__key__`.
+   * This field is ignored for `delete`.
+   *
+   * If the entity already exists, only properties referenced in the mask are
+   * updated, others are left untouched.
+   * Properties referenced in the mask but not in the entity are deleted.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + @java.lang.Override + public com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder() { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + + public static final int PROPERTY_TRANSFORMS_FIELD_NUMBER = 12; + + @SuppressWarnings("serial") + private java.util.List propertyTransforms_; + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List getPropertyTransformsList() { + return propertyTransforms_; + } + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public java.util.List + getPropertyTransformsOrBuilderList() { + return propertyTransforms_; + } + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public int getPropertyTransformsCount() { + return propertyTransforms_.size(); + } + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.datastore.v1.PropertyTransform getPropertyTransforms(int index) { + return propertyTransforms_.get(index); + } + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.datastore.v1.PropertyTransformOrBuilder getPropertyTransformsOrBuilder( + int index) { + return propertyTransforms_.get(index); + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -505,9 +921,20 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (conflictDetectionStrategyCase_ == 8) { output.writeInt64(8, (long) ((java.lang.Long) conflictDetectionStrategy_)); } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(9, getPropertyMask()); + } + if (conflictResolutionStrategy_ + != com.google.datastore.v1.Mutation.ConflictResolutionStrategy.STRATEGY_UNSPECIFIED + .getNumber()) { + output.writeEnum(10, conflictResolutionStrategy_); + } if (conflictDetectionStrategyCase_ == 11) { output.writeMessage(11, (com.google.protobuf.Timestamp) conflictDetectionStrategy_); } + for (int i = 0; i < propertyTransforms_.size(); i++) { + output.writeMessage(12, propertyTransforms_.get(i)); + } getUnknownFields().writeTo(output); } @@ -542,11 +969,24 @@ public int getSerializedSize() { com.google.protobuf.CodedOutputStream.computeInt64Size( 8, (long) ((java.lang.Long) conflictDetectionStrategy_)); } + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(9, getPropertyMask()); + } + if (conflictResolutionStrategy_ + != com.google.datastore.v1.Mutation.ConflictResolutionStrategy.STRATEGY_UNSPECIFIED + .getNumber()) { + size += + com.google.protobuf.CodedOutputStream.computeEnumSize(10, conflictResolutionStrategy_); + } if (conflictDetectionStrategyCase_ == 11) { size += com.google.protobuf.CodedOutputStream.computeMessageSize( 11, (com.google.protobuf.Timestamp) conflictDetectionStrategy_); } + for (int i = 0; i < propertyTransforms_.size(); i++) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize(12, propertyTransforms_.get(i)); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -562,6 +1002,12 @@ public boolean equals(final java.lang.Object obj) { } com.google.datastore.v1.Mutation other = (com.google.datastore.v1.Mutation) obj; + if (conflictResolutionStrategy_ != other.conflictResolutionStrategy_) return false; + if (hasPropertyMask() != other.hasPropertyMask()) return false; + if (hasPropertyMask()) { + if (!getPropertyMask().equals(other.getPropertyMask())) return false; + } + if (!getPropertyTransformsList().equals(other.getPropertyTransformsList())) return false; if (!getOperationCase().equals(other.getOperationCase())) return false; switch (operationCase_) { case 4: @@ -602,6 +1048,16 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + CONFLICT_RESOLUTION_STRATEGY_FIELD_NUMBER; + hash = (53 * hash) + conflictResolutionStrategy_; + if (hasPropertyMask()) { + hash = (37 * hash) + PROPERTY_MASK_FIELD_NUMBER; + hash = (53 * hash) + getPropertyMask().hashCode(); + } + if (getPropertyTransformsCount() > 0) { + hash = (37 * hash) + PROPERTY_TRANSFORMS_FIELD_NUMBER; + hash = (53 * hash) + getPropertyTransformsList().hashCode(); + } switch (operationCase_) { case 4: hash = (37 * hash) + INSERT_FIELD_NUMBER; @@ -733,6 +1189,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -762,10 +1219,20 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { } // Construct using com.google.datastore.v1.Mutation.newBuilder() - private Builder() {} + private Builder() { + maybeForceBuilderInitialization(); + } private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { + getPropertyMaskFieldBuilder(); + getPropertyTransformsFieldBuilder(); + } } @java.lang.Override @@ -787,6 +1254,19 @@ public Builder clear() { if (updateTimeBuilder_ != null) { updateTimeBuilder_.clear(); } + conflictResolutionStrategy_ = 0; + propertyMask_ = null; + if (propertyMaskBuilder_ != null) { + propertyMaskBuilder_.dispose(); + propertyMaskBuilder_ = null; + } + if (propertyTransformsBuilder_ == null) { + propertyTransforms_ = java.util.Collections.emptyList(); + } else { + propertyTransforms_ = null; + propertyTransformsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); operationCase_ = 0; operation_ = null; conflictDetectionStrategyCase_ = 0; @@ -817,6 +1297,7 @@ public com.google.datastore.v1.Mutation build() { @java.lang.Override public com.google.datastore.v1.Mutation buildPartial() { com.google.datastore.v1.Mutation result = new com.google.datastore.v1.Mutation(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -825,8 +1306,30 @@ public com.google.datastore.v1.Mutation buildPartial() { return result; } + private void buildPartialRepeatedFields(com.google.datastore.v1.Mutation result) { + if (propertyTransformsBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0)) { + propertyTransforms_ = java.util.Collections.unmodifiableList(propertyTransforms_); + bitField0_ = (bitField0_ & ~0x00000100); + } + result.propertyTransforms_ = propertyTransforms_; + } else { + result.propertyTransforms_ = propertyTransformsBuilder_.build(); + } + } + private void buildPartial0(com.google.datastore.v1.Mutation result) { int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000040) != 0)) { + result.conflictResolutionStrategy_ = conflictResolutionStrategy_; + } + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000080) != 0)) { + result.propertyMask_ = + propertyMaskBuilder_ == null ? propertyMask_ : propertyMaskBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; } private void buildPartialOneofs(com.google.datastore.v1.Mutation result) { @@ -896,7 +1399,40 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(com.google.datastore.v1.Mutation other) { if (other == com.google.datastore.v1.Mutation.getDefaultInstance()) return this; - switch (other.getOperationCase()) { + if (other.conflictResolutionStrategy_ != 0) { + setConflictResolutionStrategyValue(other.getConflictResolutionStrategyValue()); + } + if (other.hasPropertyMask()) { + mergePropertyMask(other.getPropertyMask()); + } + if (propertyTransformsBuilder_ == null) { + if (!other.propertyTransforms_.isEmpty()) { + if (propertyTransforms_.isEmpty()) { + propertyTransforms_ = other.propertyTransforms_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensurePropertyTransformsIsMutable(); + propertyTransforms_.addAll(other.propertyTransforms_); + } + onChanged(); + } + } else { + if (!other.propertyTransforms_.isEmpty()) { + if (propertyTransformsBuilder_.isEmpty()) { + propertyTransformsBuilder_.dispose(); + propertyTransformsBuilder_ = null; + propertyTransforms_ = other.propertyTransforms_; + bitField0_ = (bitField0_ & ~0x00000100); + propertyTransformsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders + ? getPropertyTransformsFieldBuilder() + : null; + } else { + propertyTransformsBuilder_.addAllMessages(other.propertyTransforms_); + } + } + } + switch (other.getOperationCase()) { case INSERT: { mergeInsert(other.getInsert()); @@ -994,12 +1530,37 @@ public Builder mergeFrom( conflictDetectionStrategyCase_ = 8; break; } // case 64 + case 74: + { + input.readMessage(getPropertyMaskFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000080; + break; + } // case 74 + case 80: + { + conflictResolutionStrategy_ = input.readEnum(); + bitField0_ |= 0x00000040; + break; + } // case 80 case 90: { input.readMessage(getUpdateTimeFieldBuilder().getBuilder(), extensionRegistry); conflictDetectionStrategyCase_ = 11; break; } // case 90 + case 98: + { + com.google.datastore.v1.PropertyTransform m = + input.readMessage( + com.google.datastore.v1.PropertyTransform.parser(), extensionRegistry); + if (propertyTransformsBuilder_ == null) { + ensurePropertyTransformsIsMutable(); + propertyTransforms_.add(m); + } else { + propertyTransformsBuilder_.addMessage(m); + } + break; + } // case 98 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1052,6 +1613,7 @@ public Builder clearConflictDetectionStrategy() { com.google.datastore.v1.Entity.Builder, com.google.datastore.v1.EntityOrBuilder> insertBuilder_; + /** * * @@ -1068,6 +1630,7 @@ public Builder clearConflictDetectionStrategy() { public boolean hasInsert() { return operationCase_ == 4; } + /** * * @@ -1094,6 +1657,7 @@ public com.google.datastore.v1.Entity getInsert() { return com.google.datastore.v1.Entity.getDefaultInstance(); } } + /** * * @@ -1117,6 +1681,7 @@ public Builder setInsert(com.google.datastore.v1.Entity value) { operationCase_ = 4; return this; } + /** * * @@ -1137,6 +1702,7 @@ public Builder setInsert(com.google.datastore.v1.Entity.Builder builderForValue) operationCase_ = 4; return this; } + /** * * @@ -1169,6 +1735,7 @@ public Builder mergeInsert(com.google.datastore.v1.Entity value) { operationCase_ = 4; return this; } + /** * * @@ -1195,6 +1762,7 @@ public Builder clearInsert() { } return this; } + /** * * @@ -1208,6 +1776,7 @@ public Builder clearInsert() { public com.google.datastore.v1.Entity.Builder getInsertBuilder() { return getInsertFieldBuilder().getBuilder(); } + /** * * @@ -1229,6 +1798,7 @@ public com.google.datastore.v1.EntityOrBuilder getInsertOrBuilder() { return com.google.datastore.v1.Entity.getDefaultInstance(); } } + /** * * @@ -1266,6 +1836,7 @@ public com.google.datastore.v1.EntityOrBuilder getInsertOrBuilder() { com.google.datastore.v1.Entity.Builder, com.google.datastore.v1.EntityOrBuilder> updateBuilder_; + /** * * @@ -1282,6 +1853,7 @@ public com.google.datastore.v1.EntityOrBuilder getInsertOrBuilder() { public boolean hasUpdate() { return operationCase_ == 5; } + /** * * @@ -1308,6 +1880,7 @@ public com.google.datastore.v1.Entity getUpdate() { return com.google.datastore.v1.Entity.getDefaultInstance(); } } + /** * * @@ -1331,6 +1904,7 @@ public Builder setUpdate(com.google.datastore.v1.Entity value) { operationCase_ = 5; return this; } + /** * * @@ -1351,6 +1925,7 @@ public Builder setUpdate(com.google.datastore.v1.Entity.Builder builderForValue) operationCase_ = 5; return this; } + /** * * @@ -1383,6 +1958,7 @@ public Builder mergeUpdate(com.google.datastore.v1.Entity value) { operationCase_ = 5; return this; } + /** * * @@ -1409,6 +1985,7 @@ public Builder clearUpdate() { } return this; } + /** * * @@ -1422,6 +1999,7 @@ public Builder clearUpdate() { public com.google.datastore.v1.Entity.Builder getUpdateBuilder() { return getUpdateFieldBuilder().getBuilder(); } + /** * * @@ -1443,6 +2021,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpdateOrBuilder() { return com.google.datastore.v1.Entity.getDefaultInstance(); } } + /** * * @@ -1480,6 +2059,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpdateOrBuilder() { com.google.datastore.v1.Entity.Builder, com.google.datastore.v1.EntityOrBuilder> upsertBuilder_; + /** * * @@ -1496,6 +2076,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpdateOrBuilder() { public boolean hasUpsert() { return operationCase_ == 6; } + /** * * @@ -1522,6 +2103,7 @@ public com.google.datastore.v1.Entity getUpsert() { return com.google.datastore.v1.Entity.getDefaultInstance(); } } + /** * * @@ -1545,6 +2127,7 @@ public Builder setUpsert(com.google.datastore.v1.Entity value) { operationCase_ = 6; return this; } + /** * * @@ -1565,6 +2148,7 @@ public Builder setUpsert(com.google.datastore.v1.Entity.Builder builderForValue) operationCase_ = 6; return this; } + /** * * @@ -1597,6 +2181,7 @@ public Builder mergeUpsert(com.google.datastore.v1.Entity value) { operationCase_ = 6; return this; } + /** * * @@ -1623,6 +2208,7 @@ public Builder clearUpsert() { } return this; } + /** * * @@ -1636,6 +2222,7 @@ public Builder clearUpsert() { public com.google.datastore.v1.Entity.Builder getUpsertBuilder() { return getUpsertFieldBuilder().getBuilder(); } + /** * * @@ -1657,6 +2244,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpsertOrBuilder() { return com.google.datastore.v1.Entity.getDefaultInstance(); } } + /** * * @@ -1694,6 +2282,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpsertOrBuilder() { com.google.datastore.v1.Key.Builder, com.google.datastore.v1.KeyOrBuilder> deleteBuilder_; + /** * * @@ -1710,6 +2299,7 @@ public com.google.datastore.v1.EntityOrBuilder getUpsertOrBuilder() { public boolean hasDelete() { return operationCase_ == 7; } + /** * * @@ -1736,6 +2326,7 @@ public com.google.datastore.v1.Key getDelete() { return com.google.datastore.v1.Key.getDefaultInstance(); } } + /** * * @@ -1759,6 +2350,7 @@ public Builder setDelete(com.google.datastore.v1.Key value) { operationCase_ = 7; return this; } + /** * * @@ -1779,6 +2371,7 @@ public Builder setDelete(com.google.datastore.v1.Key.Builder builderForValue) { operationCase_ = 7; return this; } + /** * * @@ -1810,6 +2403,7 @@ public Builder mergeDelete(com.google.datastore.v1.Key value) { operationCase_ = 7; return this; } + /** * * @@ -1836,6 +2430,7 @@ public Builder clearDelete() { } return this; } + /** * * @@ -1849,6 +2444,7 @@ public Builder clearDelete() { public com.google.datastore.v1.Key.Builder getDeleteBuilder() { return getDeleteFieldBuilder().getBuilder(); } + /** * * @@ -1870,6 +2466,7 @@ public com.google.datastore.v1.KeyOrBuilder getDeleteOrBuilder() { return com.google.datastore.v1.Key.getDefaultInstance(); } } + /** * * @@ -1918,6 +2515,7 @@ public com.google.datastore.v1.KeyOrBuilder getDeleteOrBuilder() { public boolean hasBaseVersion() { return conflictDetectionStrategyCase_ == 8; } + /** * * @@ -1937,6 +2535,7 @@ public long getBaseVersion() { } return 0L; } + /** * * @@ -1958,6 +2557,7 @@ public Builder setBaseVersion(long value) { onChanged(); return this; } + /** * * @@ -1985,6 +2585,7 @@ public Builder clearBaseVersion() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updateTimeBuilder_; + /** * * @@ -2002,6 +2603,7 @@ public Builder clearBaseVersion() { public boolean hasUpdateTime() { return conflictDetectionStrategyCase_ == 11; } + /** * * @@ -2029,6 +2631,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -2053,6 +2656,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp value) { conflictDetectionStrategyCase_ = 11; return this; } + /** * * @@ -2074,6 +2678,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal conflictDetectionStrategyCase_ = 11; return this; } + /** * * @@ -2108,6 +2713,7 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { conflictDetectionStrategyCase_ = 11; return this; } + /** * * @@ -2135,6 +2741,7 @@ public Builder clearUpdateTime() { } return this; } + /** * * @@ -2149,6 +2756,7 @@ public Builder clearUpdateTime() { public com.google.protobuf.Timestamp.Builder getUpdateTimeBuilder() { return getUpdateTimeFieldBuilder().getBuilder(); } + /** * * @@ -2171,6 +2779,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -2206,6 +2815,867 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { return updateTimeBuilder_; } + private int conflictResolutionStrategy_ = 0; + + /** + * + * + *
+     * The strategy to use when a conflict is detected. Defaults to
+     * `SERVER_VALUE`.
+     * If this is set, then `conflict_detection_strategy` must also be set.
+     * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @return The enum numeric value on the wire for conflictResolutionStrategy. + */ + @java.lang.Override + public int getConflictResolutionStrategyValue() { + return conflictResolutionStrategy_; + } + + /** + * + * + *
+     * The strategy to use when a conflict is detected. Defaults to
+     * `SERVER_VALUE`.
+     * If this is set, then `conflict_detection_strategy` must also be set.
+     * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @param value The enum numeric value on the wire for conflictResolutionStrategy to set. + * @return This builder for chaining. + */ + public Builder setConflictResolutionStrategyValue(int value) { + conflictResolutionStrategy_ = value; + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * The strategy to use when a conflict is detected. Defaults to
+     * `SERVER_VALUE`.
+     * If this is set, then `conflict_detection_strategy` must also be set.
+     * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @return The conflictResolutionStrategy. + */ + @java.lang.Override + public com.google.datastore.v1.Mutation.ConflictResolutionStrategy + getConflictResolutionStrategy() { + com.google.datastore.v1.Mutation.ConflictResolutionStrategy result = + com.google.datastore.v1.Mutation.ConflictResolutionStrategy.forNumber( + conflictResolutionStrategy_); + return result == null + ? com.google.datastore.v1.Mutation.ConflictResolutionStrategy.UNRECOGNIZED + : result; + } + + /** + * + * + *
+     * The strategy to use when a conflict is detected. Defaults to
+     * `SERVER_VALUE`.
+     * If this is set, then `conflict_detection_strategy` must also be set.
+     * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @param value The conflictResolutionStrategy to set. + * @return This builder for chaining. + */ + public Builder setConflictResolutionStrategy( + com.google.datastore.v1.Mutation.ConflictResolutionStrategy value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000040; + conflictResolutionStrategy_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * The strategy to use when a conflict is detected. Defaults to
+     * `SERVER_VALUE`.
+     * If this is set, then `conflict_detection_strategy` must also be set.
+     * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @return This builder for chaining. + */ + public Builder clearConflictResolutionStrategy() { + bitField0_ = (bitField0_ & ~0x00000040); + conflictResolutionStrategy_ = 0; + onChanged(); + return this; + } + + private com.google.datastore.v1.PropertyMask propertyMask_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder> + propertyMaskBuilder_; + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + * + * @return Whether the propertyMask field is set. + */ + public boolean hasPropertyMask() { + return ((bitField0_ & 0x00000080) != 0); + } + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + * + * @return The propertyMask. + */ + public com.google.datastore.v1.PropertyMask getPropertyMask() { + if (propertyMaskBuilder_ == null) { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } else { + return propertyMaskBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + public Builder setPropertyMask(com.google.datastore.v1.PropertyMask value) { + if (propertyMaskBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + propertyMask_ = value; + } else { + propertyMaskBuilder_.setMessage(value); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + public Builder setPropertyMask(com.google.datastore.v1.PropertyMask.Builder builderForValue) { + if (propertyMaskBuilder_ == null) { + propertyMask_ = builderForValue.build(); + } else { + propertyMaskBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000080; + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + public Builder mergePropertyMask(com.google.datastore.v1.PropertyMask value) { + if (propertyMaskBuilder_ == null) { + if (((bitField0_ & 0x00000080) != 0) + && propertyMask_ != null + && propertyMask_ != com.google.datastore.v1.PropertyMask.getDefaultInstance()) { + getPropertyMaskBuilder().mergeFrom(value); + } else { + propertyMask_ = value; + } + } else { + propertyMaskBuilder_.mergeFrom(value); + } + if (propertyMask_ != null) { + bitField0_ |= 0x00000080; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + public Builder clearPropertyMask() { + bitField0_ = (bitField0_ & ~0x00000080); + propertyMask_ = null; + if (propertyMaskBuilder_ != null) { + propertyMaskBuilder_.dispose(); + propertyMaskBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + public com.google.datastore.v1.PropertyMask.Builder getPropertyMaskBuilder() { + bitField0_ |= 0x00000080; + onChanged(); + return getPropertyMaskFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + public com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder() { + if (propertyMaskBuilder_ != null) { + return propertyMaskBuilder_.getMessageOrBuilder(); + } else { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + } + + /** + * + * + *
+     * The properties to write in this mutation.
+     * None of the properties in the mask may have a reserved name, except for
+     * `__key__`.
+     * This field is ignored for `delete`.
+     *
+     * If the entity already exists, only properties referenced in the mask are
+     * updated, others are left untouched.
+     * Properties referenced in the mask but not in the entity are deleted.
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder> + getPropertyMaskFieldBuilder() { + if (propertyMaskBuilder_ == null) { + propertyMaskBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder>( + getPropertyMask(), getParentForChildren(), isClean()); + propertyMask_ = null; + } + return propertyMaskBuilder_; + } + + private java.util.List propertyTransforms_ = + java.util.Collections.emptyList(); + + private void ensurePropertyTransformsIsMutable() { + if (!((bitField0_ & 0x00000100) != 0)) { + propertyTransforms_ = + new java.util.ArrayList(propertyTransforms_); + bitField0_ |= 0x00000100; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.datastore.v1.PropertyTransform, + com.google.datastore.v1.PropertyTransform.Builder, + com.google.datastore.v1.PropertyTransformOrBuilder> + propertyTransformsBuilder_; + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List getPropertyTransformsList() { + if (propertyTransformsBuilder_ == null) { + return java.util.Collections.unmodifiableList(propertyTransforms_); + } else { + return propertyTransformsBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public int getPropertyTransformsCount() { + if (propertyTransformsBuilder_ == null) { + return propertyTransforms_.size(); + } else { + return propertyTransformsBuilder_.getCount(); + } + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.datastore.v1.PropertyTransform getPropertyTransforms(int index) { + if (propertyTransformsBuilder_ == null) { + return propertyTransforms_.get(index); + } else { + return propertyTransformsBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPropertyTransforms( + int index, com.google.datastore.v1.PropertyTransform value) { + if (propertyTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePropertyTransformsIsMutable(); + propertyTransforms_.set(index, value); + onChanged(); + } else { + propertyTransformsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setPropertyTransforms( + int index, com.google.datastore.v1.PropertyTransform.Builder builderForValue) { + if (propertyTransformsBuilder_ == null) { + ensurePropertyTransformsIsMutable(); + propertyTransforms_.set(index, builderForValue.build()); + onChanged(); + } else { + propertyTransformsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addPropertyTransforms(com.google.datastore.v1.PropertyTransform value) { + if (propertyTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePropertyTransformsIsMutable(); + propertyTransforms_.add(value); + onChanged(); + } else { + propertyTransformsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addPropertyTransforms( + int index, com.google.datastore.v1.PropertyTransform value) { + if (propertyTransformsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePropertyTransformsIsMutable(); + propertyTransforms_.add(index, value); + onChanged(); + } else { + propertyTransformsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addPropertyTransforms( + com.google.datastore.v1.PropertyTransform.Builder builderForValue) { + if (propertyTransformsBuilder_ == null) { + ensurePropertyTransformsIsMutable(); + propertyTransforms_.add(builderForValue.build()); + onChanged(); + } else { + propertyTransformsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addPropertyTransforms( + int index, com.google.datastore.v1.PropertyTransform.Builder builderForValue) { + if (propertyTransformsBuilder_ == null) { + ensurePropertyTransformsIsMutable(); + propertyTransforms_.add(index, builderForValue.build()); + onChanged(); + } else { + propertyTransformsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder addAllPropertyTransforms( + java.lang.Iterable values) { + if (propertyTransformsBuilder_ == null) { + ensurePropertyTransformsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, propertyTransforms_); + onChanged(); + } else { + propertyTransformsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearPropertyTransforms() { + if (propertyTransformsBuilder_ == null) { + propertyTransforms_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + onChanged(); + } else { + propertyTransformsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder removePropertyTransforms(int index) { + if (propertyTransformsBuilder_ == null) { + ensurePropertyTransformsIsMutable(); + propertyTransforms_.remove(index); + onChanged(); + } else { + propertyTransformsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.datastore.v1.PropertyTransform.Builder getPropertyTransformsBuilder( + int index) { + return getPropertyTransformsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.datastore.v1.PropertyTransformOrBuilder getPropertyTransformsOrBuilder( + int index) { + if (propertyTransformsBuilder_ == null) { + return propertyTransforms_.get(index); + } else { + return propertyTransformsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getPropertyTransformsOrBuilderList() { + if (propertyTransformsBuilder_ != null) { + return propertyTransformsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(propertyTransforms_); + } + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.datastore.v1.PropertyTransform.Builder addPropertyTransformsBuilder() { + return getPropertyTransformsFieldBuilder() + .addBuilder(com.google.datastore.v1.PropertyTransform.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.datastore.v1.PropertyTransform.Builder addPropertyTransformsBuilder( + int index) { + return getPropertyTransformsFieldBuilder() + .addBuilder(index, com.google.datastore.v1.PropertyTransform.getDefaultInstance()); + } + + /** + * + * + *
+     * Optional. The transforms to perform on the entity.
+     *
+     * This field can be set only when the operation is `insert`, `update`,
+     * or `upsert`. If present, the transforms are be applied to the entity
+     * regardless of the property mask, in order, after the operation.
+     * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public java.util.List + getPropertyTransformsBuilderList() { + return getPropertyTransformsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.datastore.v1.PropertyTransform, + com.google.datastore.v1.PropertyTransform.Builder, + com.google.datastore.v1.PropertyTransformOrBuilder> + getPropertyTransformsFieldBuilder() { + if (propertyTransformsBuilder_ == null) { + propertyTransformsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilderV3< + com.google.datastore.v1.PropertyTransform, + com.google.datastore.v1.PropertyTransform.Builder, + com.google.datastore.v1.PropertyTransformOrBuilder>( + propertyTransforms_, + ((bitField0_ & 0x00000100) != 0), + getParentForChildren(), + isClean()); + propertyTransforms_ = null; + } + return propertyTransformsBuilder_; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java index e833ed942..3b01c9ae5 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface MutationOrBuilder @@ -37,6 +37,7 @@ public interface MutationOrBuilder * @return Whether the insert field is set. */ boolean hasInsert(); + /** * * @@ -50,6 +51,7 @@ public interface MutationOrBuilder * @return The insert. */ com.google.datastore.v1.Entity getInsert(); + /** * * @@ -75,6 +77,7 @@ public interface MutationOrBuilder * @return Whether the update field is set. */ boolean hasUpdate(); + /** * * @@ -88,6 +91,7 @@ public interface MutationOrBuilder * @return The update. */ com.google.datastore.v1.Entity getUpdate(); + /** * * @@ -113,6 +117,7 @@ public interface MutationOrBuilder * @return Whether the upsert field is set. */ boolean hasUpsert(); + /** * * @@ -126,6 +131,7 @@ public interface MutationOrBuilder * @return The upsert. */ com.google.datastore.v1.Entity getUpsert(); + /** * * @@ -151,6 +157,7 @@ public interface MutationOrBuilder * @return Whether the delete field is set. */ boolean hasDelete(); + /** * * @@ -164,6 +171,7 @@ public interface MutationOrBuilder * @return The delete. */ com.google.datastore.v1.Key getDelete(); + /** * * @@ -190,6 +198,7 @@ public interface MutationOrBuilder * @return Whether the baseVersion field is set. */ boolean hasBaseVersion(); + /** * * @@ -219,6 +228,7 @@ public interface MutationOrBuilder * @return Whether the updateTime field is set. */ boolean hasUpdateTime(); + /** * * @@ -233,6 +243,7 @@ public interface MutationOrBuilder * @return The updateTime. */ com.google.protobuf.Timestamp getUpdateTime(); + /** * * @@ -246,6 +257,184 @@ public interface MutationOrBuilder */ com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder(); + /** + * + * + *
+   * The strategy to use when a conflict is detected. Defaults to
+   * `SERVER_VALUE`.
+   * If this is set, then `conflict_detection_strategy` must also be set.
+   * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @return The enum numeric value on the wire for conflictResolutionStrategy. + */ + int getConflictResolutionStrategyValue(); + + /** + * + * + *
+   * The strategy to use when a conflict is detected. Defaults to
+   * `SERVER_VALUE`.
+   * If this is set, then `conflict_detection_strategy` must also be set.
+   * 
+ * + * + * .google.datastore.v1.Mutation.ConflictResolutionStrategy conflict_resolution_strategy = 10; + * + * + * @return The conflictResolutionStrategy. + */ + com.google.datastore.v1.Mutation.ConflictResolutionStrategy getConflictResolutionStrategy(); + + /** + * + * + *
+   * The properties to write in this mutation.
+   * None of the properties in the mask may have a reserved name, except for
+   * `__key__`.
+   * This field is ignored for `delete`.
+   *
+   * If the entity already exists, only properties referenced in the mask are
+   * updated, others are left untouched.
+   * Properties referenced in the mask but not in the entity are deleted.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + * + * @return Whether the propertyMask field is set. + */ + boolean hasPropertyMask(); + + /** + * + * + *
+   * The properties to write in this mutation.
+   * None of the properties in the mask may have a reserved name, except for
+   * `__key__`.
+   * This field is ignored for `delete`.
+   *
+   * If the entity already exists, only properties referenced in the mask are
+   * updated, others are left untouched.
+   * Properties referenced in the mask but not in the entity are deleted.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + * + * @return The propertyMask. + */ + com.google.datastore.v1.PropertyMask getPropertyMask(); + + /** + * + * + *
+   * The properties to write in this mutation.
+   * None of the properties in the mask may have a reserved name, except for
+   * `__key__`.
+   * This field is ignored for `delete`.
+   *
+   * If the entity already exists, only properties referenced in the mask are
+   * updated, others are left untouched.
+   * Properties referenced in the mask but not in the entity are deleted.
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 9; + */ + com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder(); + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List getPropertyTransformsList(); + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.datastore.v1.PropertyTransform getPropertyTransforms(int index); + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + int getPropertyTransformsCount(); + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + java.util.List + getPropertyTransformsOrBuilderList(); + + /** + * + * + *
+   * Optional. The transforms to perform on the entity.
+   *
+   * This field can be set only when the operation is `insert`, `update`,
+   * or `upsert`. If present, the transforms are be applied to the entity
+   * regardless of the property mask, in order, after the operation.
+   * 
+ * + * + * repeated .google.datastore.v1.PropertyTransform property_transforms = 12 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.datastore.v1.PropertyTransformOrBuilder getPropertyTransformsOrBuilder(int index); + com.google.datastore.v1.Mutation.OperationCase getOperationCase(); com.google.datastore.v1.Mutation.ConflictDetectionStrategyCase getConflictDetectionStrategyCase(); diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java index 2e7abf0bd..8f82a5c95 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResult.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,12 +33,15 @@ public final class MutationResult extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.MutationResult) MutationResultOrBuilder { private static final long serialVersionUID = 0L; + // Use MutationResult.newBuilder() to construct. private MutationResult(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private MutationResult() {} + private MutationResult() { + transformResults_ = java.util.Collections.emptyList(); + } @java.lang.Override @SuppressWarnings({"unused"}) @@ -64,6 +67,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int KEY_FIELD_NUMBER = 3; private com.google.datastore.v1.Key key_; + /** * * @@ -80,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasKey() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -96,6 +101,7 @@ public boolean hasKey() { public com.google.datastore.v1.Key getKey() { return key_ == null ? com.google.datastore.v1.Key.getDefaultInstance() : key_; } + /** * * @@ -113,6 +119,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyOrBuilder() { public static final int VERSION_FIELD_NUMBER = 4; private long version_ = 0L; + /** * * @@ -135,6 +142,7 @@ public long getVersion() { public static final int CREATE_TIME_FIELD_NUMBER = 7; private com.google.protobuf.Timestamp createTime_; + /** * * @@ -150,6 +158,7 @@ public long getVersion() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -165,6 +174,7 @@ public boolean hasCreateTime() { public com.google.protobuf.Timestamp getCreateTime() { return createTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : createTime_; } + /** * * @@ -181,6 +191,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public static final int UPDATE_TIME_FIELD_NUMBER = 6; private com.google.protobuf.Timestamp updateTime_; + /** * * @@ -199,6 +210,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasUpdateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -217,6 +229,7 @@ public boolean hasUpdateTime() { public com.google.protobuf.Timestamp getUpdateTime() { return updateTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : updateTime_; } + /** * * @@ -236,6 +249,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { public static final int CONFLICT_DETECTED_FIELD_NUMBER = 5; private boolean conflictDetected_ = false; + /** * * @@ -253,6 +267,92 @@ public boolean getConflictDetected() { return conflictDetected_; } + public static final int TRANSFORM_RESULTS_FIELD_NUMBER = 8; + + @SuppressWarnings("serial") + private java.util.List transformResults_; + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + @java.lang.Override + public java.util.List getTransformResultsList() { + return transformResults_; + } + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + @java.lang.Override + public java.util.List + getTransformResultsOrBuilderList() { + return transformResults_; + } + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + @java.lang.Override + public int getTransformResultsCount() { + return transformResults_.size(); + } + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + @java.lang.Override + public com.google.datastore.v1.Value getTransformResults(int index) { + return transformResults_.get(index); + } + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + @java.lang.Override + public com.google.datastore.v1.ValueOrBuilder getTransformResultsOrBuilder(int index) { + return transformResults_.get(index); + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -282,6 +382,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(7, getCreateTime()); } + for (int i = 0; i < transformResults_.size(); i++) { + output.writeMessage(8, transformResults_.get(i)); + } getUnknownFields().writeTo(output); } @@ -306,6 +409,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(7, getCreateTime()); } + for (int i = 0; i < transformResults_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(8, transformResults_.get(i)); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -335,6 +441,7 @@ public boolean equals(final java.lang.Object obj) { if (!getUpdateTime().equals(other.getUpdateTime())) return false; } if (getConflictDetected() != other.getConflictDetected()) return false; + if (!getTransformResultsList().equals(other.getTransformResultsList())) return false; if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -362,6 +469,10 @@ public int hashCode() { } hash = (37 * hash) + CONFLICT_DETECTED_FIELD_NUMBER; hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getConflictDetected()); + if (getTransformResultsCount() > 0) { + hash = (37 * hash) + TRANSFORM_RESULTS_FIELD_NUMBER; + hash = (53 * hash) + getTransformResultsList().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -462,6 +573,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -505,6 +617,7 @@ private void maybeForceBuilderInitialization() { getKeyFieldBuilder(); getCreateTimeFieldBuilder(); getUpdateTimeFieldBuilder(); + getTransformResultsFieldBuilder(); } } @@ -529,6 +642,13 @@ public Builder clear() { updateTimeBuilder_ = null; } conflictDetected_ = false; + if (transformResultsBuilder_ == null) { + transformResults_ = java.util.Collections.emptyList(); + } else { + transformResults_ = null; + transformResultsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); return this; } @@ -556,6 +676,7 @@ public com.google.datastore.v1.MutationResult build() { public com.google.datastore.v1.MutationResult buildPartial() { com.google.datastore.v1.MutationResult result = new com.google.datastore.v1.MutationResult(this); + buildPartialRepeatedFields(result); if (bitField0_ != 0) { buildPartial0(result); } @@ -563,6 +684,18 @@ public com.google.datastore.v1.MutationResult buildPartial() { return result; } + private void buildPartialRepeatedFields(com.google.datastore.v1.MutationResult result) { + if (transformResultsBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0)) { + transformResults_ = java.util.Collections.unmodifiableList(transformResults_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.transformResults_ = transformResults_; + } else { + result.transformResults_ = transformResultsBuilder_.build(); + } + } + private void buildPartial0(com.google.datastore.v1.MutationResult result) { int from_bitField0_ = bitField0_; int to_bitField0_ = 0; @@ -647,6 +780,33 @@ public Builder mergeFrom(com.google.datastore.v1.MutationResult other) { if (other.getConflictDetected() != false) { setConflictDetected(other.getConflictDetected()); } + if (transformResultsBuilder_ == null) { + if (!other.transformResults_.isEmpty()) { + if (transformResults_.isEmpty()) { + transformResults_ = other.transformResults_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureTransformResultsIsMutable(); + transformResults_.addAll(other.transformResults_); + } + onChanged(); + } + } else { + if (!other.transformResults_.isEmpty()) { + if (transformResultsBuilder_.isEmpty()) { + transformResultsBuilder_.dispose(); + transformResultsBuilder_ = null; + transformResults_ = other.transformResults_; + bitField0_ = (bitField0_ & ~0x00000020); + transformResultsBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders + ? getTransformResultsFieldBuilder() + : null; + } else { + transformResultsBuilder_.addAllMessages(other.transformResults_); + } + } + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -703,6 +863,18 @@ public Builder mergeFrom( bitField0_ |= 0x00000004; break; } // case 58 + case 66: + { + com.google.datastore.v1.Value m = + input.readMessage(com.google.datastore.v1.Value.parser(), extensionRegistry); + if (transformResultsBuilder_ == null) { + ensureTransformResultsIsMutable(); + transformResults_.add(m); + } else { + transformResultsBuilder_.addMessage(m); + } + break; + } // case 66 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -728,6 +900,7 @@ public Builder mergeFrom( com.google.datastore.v1.Key.Builder, com.google.datastore.v1.KeyOrBuilder> keyBuilder_; + /** * * @@ -743,6 +916,7 @@ public Builder mergeFrom( public boolean hasKey() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -762,6 +936,7 @@ public com.google.datastore.v1.Key getKey() { return keyBuilder_.getMessage(); } } + /** * * @@ -785,6 +960,7 @@ public Builder setKey(com.google.datastore.v1.Key value) { onChanged(); return this; } + /** * * @@ -805,6 +981,7 @@ public Builder setKey(com.google.datastore.v1.Key.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -833,6 +1010,7 @@ public Builder mergeKey(com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -853,6 +1031,7 @@ public Builder clearKey() { onChanged(); return this; } + /** * * @@ -868,6 +1047,7 @@ public com.google.datastore.v1.Key.Builder getKeyBuilder() { onChanged(); return getKeyFieldBuilder().getBuilder(); } + /** * * @@ -885,6 +1065,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyOrBuilder() { return key_ == null ? com.google.datastore.v1.Key.getDefaultInstance() : key_; } } + /** * * @@ -912,6 +1093,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyOrBuilder() { } private long version_; + /** * * @@ -931,6 +1113,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyOrBuilder() { public long getVersion() { return version_; } + /** * * @@ -954,6 +1137,7 @@ public Builder setVersion(long value) { onChanged(); return this; } + /** * * @@ -982,6 +1166,7 @@ public Builder clearVersion() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> createTimeBuilder_; + /** * * @@ -996,6 +1181,7 @@ public Builder clearVersion() { public boolean hasCreateTime() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1016,6 +1202,7 @@ public com.google.protobuf.Timestamp getCreateTime() { return createTimeBuilder_.getMessage(); } } + /** * * @@ -1038,6 +1225,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1057,6 +1245,7 @@ public Builder setCreateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1084,6 +1273,7 @@ public Builder mergeCreateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1103,6 +1293,7 @@ public Builder clearCreateTime() { onChanged(); return this; } + /** * * @@ -1117,6 +1308,7 @@ public com.google.protobuf.Timestamp.Builder getCreateTimeBuilder() { onChanged(); return getCreateTimeFieldBuilder().getBuilder(); } + /** * * @@ -1135,6 +1327,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { : createTime_; } } + /** * * @@ -1167,6 +1360,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> updateTimeBuilder_; + /** * * @@ -1184,6 +1378,7 @@ public com.google.protobuf.TimestampOrBuilder getCreateTimeOrBuilder() { public boolean hasUpdateTime() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1207,6 +1402,7 @@ public com.google.protobuf.Timestamp getUpdateTime() { return updateTimeBuilder_.getMessage(); } } + /** * * @@ -1232,6 +1428,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1254,6 +1451,7 @@ public Builder setUpdateTime(com.google.protobuf.Timestamp.Builder builderForVal onChanged(); return this; } + /** * * @@ -1284,6 +1482,7 @@ public Builder mergeUpdateTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1306,6 +1505,7 @@ public Builder clearUpdateTime() { onChanged(); return this; } + /** * * @@ -1323,6 +1523,7 @@ public com.google.protobuf.Timestamp.Builder getUpdateTimeBuilder() { onChanged(); return getUpdateTimeFieldBuilder().getBuilder(); } + /** * * @@ -1344,6 +1545,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { : updateTime_; } } + /** * * @@ -1374,6 +1576,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { } private boolean conflictDetected_; + /** * * @@ -1390,6 +1593,7 @@ public com.google.protobuf.TimestampOrBuilder getUpdateTimeOrBuilder() { public boolean getConflictDetected() { return conflictDetected_; } + /** * * @@ -1410,6 +1614,7 @@ public Builder setConflictDetected(boolean value) { onChanged(); return this; } + /** * * @@ -1429,6 +1634,411 @@ public Builder clearConflictDetected() { return this; } + private java.util.List transformResults_ = + java.util.Collections.emptyList(); + + private void ensureTransformResultsIsMutable() { + if (!((bitField0_ & 0x00000020) != 0)) { + transformResults_ = + new java.util.ArrayList(transformResults_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + transformResultsBuilder_; + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public java.util.List getTransformResultsList() { + if (transformResultsBuilder_ == null) { + return java.util.Collections.unmodifiableList(transformResults_); + } else { + return transformResultsBuilder_.getMessageList(); + } + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public int getTransformResultsCount() { + if (transformResultsBuilder_ == null) { + return transformResults_.size(); + } else { + return transformResultsBuilder_.getCount(); + } + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public com.google.datastore.v1.Value getTransformResults(int index) { + if (transformResultsBuilder_ == null) { + return transformResults_.get(index); + } else { + return transformResultsBuilder_.getMessage(index); + } + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder setTransformResults(int index, com.google.datastore.v1.Value value) { + if (transformResultsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTransformResultsIsMutable(); + transformResults_.set(index, value); + onChanged(); + } else { + transformResultsBuilder_.setMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder setTransformResults( + int index, com.google.datastore.v1.Value.Builder builderForValue) { + if (transformResultsBuilder_ == null) { + ensureTransformResultsIsMutable(); + transformResults_.set(index, builderForValue.build()); + onChanged(); + } else { + transformResultsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder addTransformResults(com.google.datastore.v1.Value value) { + if (transformResultsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTransformResultsIsMutable(); + transformResults_.add(value); + onChanged(); + } else { + transformResultsBuilder_.addMessage(value); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder addTransformResults(int index, com.google.datastore.v1.Value value) { + if (transformResultsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureTransformResultsIsMutable(); + transformResults_.add(index, value); + onChanged(); + } else { + transformResultsBuilder_.addMessage(index, value); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder addTransformResults(com.google.datastore.v1.Value.Builder builderForValue) { + if (transformResultsBuilder_ == null) { + ensureTransformResultsIsMutable(); + transformResults_.add(builderForValue.build()); + onChanged(); + } else { + transformResultsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder addTransformResults( + int index, com.google.datastore.v1.Value.Builder builderForValue) { + if (transformResultsBuilder_ == null) { + ensureTransformResultsIsMutable(); + transformResults_.add(index, builderForValue.build()); + onChanged(); + } else { + transformResultsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder addAllTransformResults( + java.lang.Iterable values) { + if (transformResultsBuilder_ == null) { + ensureTransformResultsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, transformResults_); + onChanged(); + } else { + transformResultsBuilder_.addAllMessages(values); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder clearTransformResults() { + if (transformResultsBuilder_ == null) { + transformResults_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + transformResultsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public Builder removeTransformResults(int index) { + if (transformResultsBuilder_ == null) { + ensureTransformResultsIsMutable(); + transformResults_.remove(index); + onChanged(); + } else { + transformResultsBuilder_.remove(index); + } + return this; + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public com.google.datastore.v1.Value.Builder getTransformResultsBuilder(int index) { + return getTransformResultsFieldBuilder().getBuilder(index); + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public com.google.datastore.v1.ValueOrBuilder getTransformResultsOrBuilder(int index) { + if (transformResultsBuilder_ == null) { + return transformResults_.get(index); + } else { + return transformResultsBuilder_.getMessageOrBuilder(index); + } + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public java.util.List + getTransformResultsOrBuilderList() { + if (transformResultsBuilder_ != null) { + return transformResultsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(transformResults_); + } + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public com.google.datastore.v1.Value.Builder addTransformResultsBuilder() { + return getTransformResultsFieldBuilder() + .addBuilder(com.google.datastore.v1.Value.getDefaultInstance()); + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public com.google.datastore.v1.Value.Builder addTransformResultsBuilder(int index) { + return getTransformResultsFieldBuilder() + .addBuilder(index, com.google.datastore.v1.Value.getDefaultInstance()); + } + + /** + * + * + *
+     * The results of applying each
+     * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+     * order of the request.
+     * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + public java.util.List getTransformResultsBuilderList() { + return getTransformResultsFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + getTransformResultsFieldBuilder() { + if (transformResultsBuilder_ == null) { + transformResultsBuilder_ = + new com.google.protobuf.RepeatedFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder>( + transformResults_, + ((bitField0_ & 0x00000020) != 0), + getParentForChildren(), + isClean()); + transformResults_ = null; + } + return transformResultsBuilder_; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java index bec5014e2..5df6b9c3a 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/MutationResultOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface MutationResultOrBuilder @@ -37,6 +37,7 @@ public interface MutationResultOrBuilder * @return Whether the key field is set. */ boolean hasKey(); + /** * * @@ -50,6 +51,7 @@ public interface MutationResultOrBuilder * @return The key. */ com.google.datastore.v1.Key getKey(); + /** * * @@ -91,6 +93,7 @@ public interface MutationResultOrBuilder * @return Whether the createTime field is set. */ boolean hasCreateTime(); + /** * * @@ -103,6 +106,7 @@ public interface MutationResultOrBuilder * @return The createTime. */ com.google.protobuf.Timestamp getCreateTime(); + /** * * @@ -129,6 +133,7 @@ public interface MutationResultOrBuilder * @return Whether the updateTime field is set. */ boolean hasUpdateTime(); + /** * * @@ -144,6 +149,7 @@ public interface MutationResultOrBuilder * @return The updateTime. */ com.google.protobuf.Timestamp getUpdateTime(); + /** * * @@ -171,4 +177,70 @@ public interface MutationResultOrBuilder * @return The conflictDetected. */ boolean getConflictDetected(); + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + java.util.List getTransformResultsList(); + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + com.google.datastore.v1.Value getTransformResults(int index); + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + int getTransformResultsCount(); + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + java.util.List + getTransformResultsOrBuilderList(); + + /** + * + * + *
+   * The results of applying each
+   * [PropertyTransform][google.datastore.v1.PropertyTransform], in the same
+   * order of the request.
+   * 
+ * + * repeated .google.datastore.v1.Value transform_results = 8; + */ + com.google.datastore.v1.ValueOrBuilder getTransformResultsOrBuilder(int index); } diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java index 9116410f5..be1529aca 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionId.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -52,6 +52,7 @@ public final class PartitionId extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.PartitionId) PartitionIdOrBuilder { private static final long serialVersionUID = 0L; + // Use PartitionId.newBuilder() to construct. private PartitionId(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -88,6 +89,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -111,6 +113,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -139,6 +142,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -163,6 +167,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -192,6 +197,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object namespaceId_ = ""; + /** * * @@ -215,6 +221,7 @@ public java.lang.String getNamespaceId() { return s; } } + /** * * @@ -414,6 +421,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -645,6 +653,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -667,6 +676,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -689,6 +699,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -710,6 +721,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -727,6 +739,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -751,6 +764,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -774,6 +788,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -797,6 +812,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -819,6 +835,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -837,6 +854,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -862,6 +880,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object namespaceId_ = ""; + /** * * @@ -884,6 +903,7 @@ public java.lang.String getNamespaceId() { return (java.lang.String) ref; } } + /** * * @@ -906,6 +926,7 @@ public com.google.protobuf.ByteString getNamespaceIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -927,6 +948,7 @@ public Builder setNamespaceId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -944,6 +966,7 @@ public Builder clearNamespaceId() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java index d9dc8c271..17e4eb659 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PartitionIdOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface PartitionIdOrBuilder @@ -36,6 +36,7 @@ public interface PartitionIdOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -62,6 +63,7 @@ public interface PartitionIdOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -88,6 +90,7 @@ public interface PartitionIdOrBuilder * @return The namespaceId. */ java.lang.String getNamespaceId(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummary.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummary.java index b68c700c3..e378ba566 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummary.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummary.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class PlanSummary extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.PlanSummary) PlanSummaryOrBuilder { private static final long serialVersionUID = 0L; + // Use PlanSummary.newBuilder() to construct. private PlanSummary(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -67,6 +68,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List indexesUsed_; + /** * * @@ -84,6 +86,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getIndexesUsedList() { return indexesUsed_; } + /** * * @@ -102,6 +105,7 @@ public java.util.List getIndexesUsedList() { getIndexesUsedOrBuilderList() { return indexesUsed_; } + /** * * @@ -119,6 +123,7 @@ public java.util.List getIndexesUsedList() { public int getIndexesUsedCount() { return indexesUsed_.size(); } + /** * * @@ -136,6 +141,7 @@ public int getIndexesUsedCount() { public com.google.protobuf.Struct getIndexesUsed(int index) { return indexesUsed_.get(index); } + /** * * @@ -313,6 +319,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -574,6 +581,7 @@ public java.util.List getIndexesUsedList() { return indexesUsedBuilder_.getMessageList(); } } + /** * * @@ -594,6 +602,7 @@ public int getIndexesUsedCount() { return indexesUsedBuilder_.getCount(); } } + /** * * @@ -614,6 +623,7 @@ public com.google.protobuf.Struct getIndexesUsed(int index) { return indexesUsedBuilder_.getMessage(index); } } + /** * * @@ -640,6 +650,7 @@ public Builder setIndexesUsed(int index, com.google.protobuf.Struct value) { } return this; } + /** * * @@ -663,6 +674,7 @@ public Builder setIndexesUsed(int index, com.google.protobuf.Struct.Builder buil } return this; } + /** * * @@ -689,6 +701,7 @@ public Builder addIndexesUsed(com.google.protobuf.Struct value) { } return this; } + /** * * @@ -715,6 +728,7 @@ public Builder addIndexesUsed(int index, com.google.protobuf.Struct value) { } return this; } + /** * * @@ -738,6 +752,7 @@ public Builder addIndexesUsed(com.google.protobuf.Struct.Builder builderForValue } return this; } + /** * * @@ -761,6 +776,7 @@ public Builder addIndexesUsed(int index, com.google.protobuf.Struct.Builder buil } return this; } + /** * * @@ -785,6 +801,7 @@ public Builder addAllIndexesUsed( } return this; } + /** * * @@ -808,6 +825,7 @@ public Builder clearIndexesUsed() { } return this; } + /** * * @@ -831,6 +849,7 @@ public Builder removeIndexesUsed(int index) { } return this; } + /** * * @@ -847,6 +866,7 @@ public Builder removeIndexesUsed(int index) { public com.google.protobuf.Struct.Builder getIndexesUsedBuilder(int index) { return getIndexesUsedFieldBuilder().getBuilder(index); } + /** * * @@ -867,6 +887,7 @@ public com.google.protobuf.StructOrBuilder getIndexesUsedOrBuilder(int index) { return indexesUsedBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -888,6 +909,7 @@ public com.google.protobuf.StructOrBuilder getIndexesUsedOrBuilder(int index) { return java.util.Collections.unmodifiableList(indexesUsed_); } } + /** * * @@ -905,6 +927,7 @@ public com.google.protobuf.Struct.Builder addIndexesUsedBuilder() { return getIndexesUsedFieldBuilder() .addBuilder(com.google.protobuf.Struct.getDefaultInstance()); } + /** * * @@ -922,6 +945,7 @@ public com.google.protobuf.Struct.Builder addIndexesUsedBuilder(int index) { return getIndexesUsedFieldBuilder() .addBuilder(index, com.google.protobuf.Struct.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummaryOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummaryOrBuilder.java index 634faded7..b132b1c66 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummaryOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PlanSummaryOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface PlanSummaryOrBuilder @@ -38,6 +38,7 @@ public interface PlanSummaryOrBuilder * repeated .google.protobuf.Struct indexes_used = 1; */ java.util.List getIndexesUsedList(); + /** * * @@ -52,6 +53,7 @@ public interface PlanSummaryOrBuilder * repeated .google.protobuf.Struct indexes_used = 1; */ com.google.protobuf.Struct getIndexesUsed(int index); + /** * * @@ -66,6 +68,7 @@ public interface PlanSummaryOrBuilder * repeated .google.protobuf.Struct indexes_used = 1; */ int getIndexesUsedCount(); + /** * * @@ -80,6 +83,7 @@ public interface PlanSummaryOrBuilder * repeated .google.protobuf.Struct indexes_used = 1; */ java.util.List getIndexesUsedOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java index 412dc13dd..e3a262b14 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Projection.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class Projection extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.Projection) ProjectionOrBuilder { private static final long serialVersionUID = 0L; + // Use Projection.newBuilder() to construct. private Projection(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -64,6 +65,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int PROPERTY_FIELD_NUMBER = 1; private com.google.datastore.v1.PropertyReference property_; + /** * * @@ -79,6 +81,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -96,6 +99,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { ? com.google.datastore.v1.PropertyReference.getDefaultInstance() : property_; } + /** * * @@ -274,6 +278,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -475,6 +480,7 @@ public Builder mergeFrom( com.google.datastore.v1.PropertyReference.Builder, com.google.datastore.v1.PropertyReferenceOrBuilder> propertyBuilder_; + /** * * @@ -489,6 +495,7 @@ public Builder mergeFrom( public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -509,6 +516,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { return propertyBuilder_.getMessage(); } } + /** * * @@ -531,6 +539,7 @@ public Builder setProperty(com.google.datastore.v1.PropertyReference value) { onChanged(); return this; } + /** * * @@ -550,6 +559,7 @@ public Builder setProperty(com.google.datastore.v1.PropertyReference.Builder bui onChanged(); return this; } + /** * * @@ -577,6 +587,7 @@ public Builder mergeProperty(com.google.datastore.v1.PropertyReference value) { } return this; } + /** * * @@ -596,6 +607,7 @@ public Builder clearProperty() { onChanged(); return this; } + /** * * @@ -610,6 +622,7 @@ public com.google.datastore.v1.PropertyReference.Builder getPropertyBuilder() { onChanged(); return getPropertyFieldBuilder().getBuilder(); } + /** * * @@ -628,6 +641,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() : property_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java index c1a094d81..0b4cb23d8 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ProjectionOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ProjectionOrBuilder @@ -36,6 +36,7 @@ public interface ProjectionOrBuilder * @return Whether the property field is set. */ boolean hasProperty(); + /** * * @@ -48,6 +49,7 @@ public interface ProjectionOrBuilder * @return The property. */ com.google.datastore.v1.PropertyReference getProperty(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java index 3eb9c2c1d..2b9946906 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class PropertyFilter extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.PropertyFilter) PropertyFilterOrBuilder { private static final long serialVersionUID = 0L; + // Use PropertyFilter.newBuilder() to construct. private PropertyFilter(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -224,6 +225,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * OPERATOR_UNSPECIFIED = 0; */ public static final int OPERATOR_UNSPECIFIED_VALUE = 0; + /** * * @@ -238,6 +240,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * LESS_THAN = 1; */ public static final int LESS_THAN_VALUE = 1; + /** * * @@ -252,6 +255,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * LESS_THAN_OR_EQUAL = 2; */ public static final int LESS_THAN_OR_EQUAL_VALUE = 2; + /** * * @@ -266,6 +270,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * GREATER_THAN = 3; */ public static final int GREATER_THAN_VALUE = 3; + /** * * @@ -280,6 +285,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * GREATER_THAN_OR_EQUAL = 4; */ public static final int GREATER_THAN_OR_EQUAL_VALUE = 4; + /** * * @@ -290,6 +296,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * EQUAL = 5; */ public static final int EQUAL_VALUE = 5; + /** * * @@ -306,6 +313,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * IN = 6; */ public static final int IN_VALUE = 6; + /** * * @@ -321,6 +329,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * NOT_EQUAL = 9; */ public static final int NOT_EQUAL_VALUE = 9; + /** * * @@ -336,6 +345,7 @@ public enum Operator implements com.google.protobuf.ProtocolMessageEnum { * HAS_ANCESTOR = 11; */ public static final int HAS_ANCESTOR_VALUE = 11; + /** * * @@ -453,6 +463,7 @@ private Operator(int value) { private int bitField0_; public static final int PROPERTY_FIELD_NUMBER = 1; private com.google.datastore.v1.PropertyReference property_; + /** * * @@ -468,6 +479,7 @@ private Operator(int value) { public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -485,6 +497,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { ? com.google.datastore.v1.PropertyReference.getDefaultInstance() : property_; } + /** * * @@ -503,6 +516,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() public static final int OP_FIELD_NUMBER = 2; private int op_ = 0; + /** * * @@ -518,6 +532,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() public int getOpValue() { return op_; } + /** * * @@ -538,6 +553,7 @@ public com.google.datastore.v1.PropertyFilter.Operator getOp() { public static final int VALUE_FIELD_NUMBER = 3; private com.google.datastore.v1.Value value_; + /** * * @@ -553,6 +569,7 @@ public com.google.datastore.v1.PropertyFilter.Operator getOp() { public boolean hasValue() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -568,6 +585,7 @@ public boolean hasValue() { public com.google.datastore.v1.Value getValue() { return value_ == null ? com.google.datastore.v1.Value.getDefaultInstance() : value_; } + /** * * @@ -768,6 +786,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -1002,6 +1021,7 @@ public Builder mergeFrom( com.google.datastore.v1.PropertyReference.Builder, com.google.datastore.v1.PropertyReferenceOrBuilder> propertyBuilder_; + /** * * @@ -1016,6 +1036,7 @@ public Builder mergeFrom( public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1036,6 +1057,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { return propertyBuilder_.getMessage(); } } + /** * * @@ -1058,6 +1080,7 @@ public Builder setProperty(com.google.datastore.v1.PropertyReference value) { onChanged(); return this; } + /** * * @@ -1077,6 +1100,7 @@ public Builder setProperty(com.google.datastore.v1.PropertyReference.Builder bui onChanged(); return this; } + /** * * @@ -1104,6 +1128,7 @@ public Builder mergeProperty(com.google.datastore.v1.PropertyReference value) { } return this; } + /** * * @@ -1123,6 +1148,7 @@ public Builder clearProperty() { onChanged(); return this; } + /** * * @@ -1137,6 +1163,7 @@ public com.google.datastore.v1.PropertyReference.Builder getPropertyBuilder() { onChanged(); return getPropertyFieldBuilder().getBuilder(); } + /** * * @@ -1155,6 +1182,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() : property_; } } + /** * * @@ -1182,6 +1210,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() } private int op_ = 0; + /** * * @@ -1197,6 +1226,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() public int getOpValue() { return op_; } + /** * * @@ -1215,6 +1245,7 @@ public Builder setOpValue(int value) { onChanged(); return this; } + /** * * @@ -1232,6 +1263,7 @@ public com.google.datastore.v1.PropertyFilter.Operator getOp() { com.google.datastore.v1.PropertyFilter.Operator.forNumber(op_); return result == null ? com.google.datastore.v1.PropertyFilter.Operator.UNRECOGNIZED : result; } + /** * * @@ -1253,6 +1285,7 @@ public Builder setOp(com.google.datastore.v1.PropertyFilter.Operator value) { onChanged(); return this; } + /** * * @@ -1277,6 +1310,7 @@ public Builder clearOp() { com.google.datastore.v1.Value.Builder, com.google.datastore.v1.ValueOrBuilder> valueBuilder_; + /** * * @@ -1291,6 +1325,7 @@ public Builder clearOp() { public boolean hasValue() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1309,6 +1344,7 @@ public com.google.datastore.v1.Value getValue() { return valueBuilder_.getMessage(); } } + /** * * @@ -1331,6 +1367,7 @@ public Builder setValue(com.google.datastore.v1.Value value) { onChanged(); return this; } + /** * * @@ -1350,6 +1387,7 @@ public Builder setValue(com.google.datastore.v1.Value.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -1377,6 +1415,7 @@ public Builder mergeValue(com.google.datastore.v1.Value value) { } return this; } + /** * * @@ -1396,6 +1435,7 @@ public Builder clearValue() { onChanged(); return this; } + /** * * @@ -1410,6 +1450,7 @@ public com.google.datastore.v1.Value.Builder getValueBuilder() { onChanged(); return getValueFieldBuilder().getBuilder(); } + /** * * @@ -1426,6 +1467,7 @@ public com.google.datastore.v1.ValueOrBuilder getValueOrBuilder() { return value_ == null ? com.google.datastore.v1.Value.getDefaultInstance() : value_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java index c7c9d0577..b4efa5d93 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyFilterOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface PropertyFilterOrBuilder @@ -36,6 +36,7 @@ public interface PropertyFilterOrBuilder * @return Whether the property field is set. */ boolean hasProperty(); + /** * * @@ -48,6 +49,7 @@ public interface PropertyFilterOrBuilder * @return The property. */ com.google.datastore.v1.PropertyReference getProperty(); + /** * * @@ -71,6 +73,7 @@ public interface PropertyFilterOrBuilder * @return The enum numeric value on the wire for op. */ int getOpValue(); + /** * * @@ -96,6 +99,7 @@ public interface PropertyFilterOrBuilder * @return Whether the value field is set. */ boolean hasValue(); + /** * * @@ -108,6 +112,7 @@ public interface PropertyFilterOrBuilder * @return The value. */ com.google.datastore.v1.Value getValue(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyMask.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyMask.java new file mode 100644 index 000000000..d8fc11dec --- /dev/null +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyMask.java @@ -0,0 +1,863 @@ +/* + * 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/datastore/v1/datastore.proto + +// Protobuf Java Version: 3.25.5 +package com.google.datastore.v1; + +/** + * + * + *
+ * The set of arbitrarily nested property paths used to restrict an operation to
+ * only a subset of properties in an entity.
+ * 
+ * + * Protobuf type {@code google.datastore.v1.PropertyMask} + */ +public final class PropertyMask extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.datastore.v1.PropertyMask) + PropertyMaskOrBuilder { + private static final long serialVersionUID = 0L; + + // Use PropertyMask.newBuilder() to construct. + private PropertyMask(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private PropertyMask() { + paths_ = com.google.protobuf.LazyStringArrayList.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new PropertyMask(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyMask_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyMask_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.datastore.v1.PropertyMask.class, + com.google.datastore.v1.PropertyMask.Builder.class); + } + + public static final int PATHS_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private com.google.protobuf.LazyStringArrayList paths_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + /** + * + * + *
+   * The paths to the properties covered by this mask.
+   *
+   * A path is a list of property names separated by dots (`.`), for example
+   * `foo.bar` means the property `bar` inside the entity property `foo` inside
+   * the entity associated with this path.
+   *
+   * If a property name contains a dot `.` or a backslash `\`, then that
+   * name must be escaped.
+   *
+   * A path must not be empty, and may not reference a value inside an
+   * [array value][google.datastore.v1.Value.array_value].
+   * 
+ * + * repeated string paths = 1; + * + * @return A list containing the paths. + */ + public com.google.protobuf.ProtocolStringList getPathsList() { + return paths_; + } + + /** + * + * + *
+   * The paths to the properties covered by this mask.
+   *
+   * A path is a list of property names separated by dots (`.`), for example
+   * `foo.bar` means the property `bar` inside the entity property `foo` inside
+   * the entity associated with this path.
+   *
+   * If a property name contains a dot `.` or a backslash `\`, then that
+   * name must be escaped.
+   *
+   * A path must not be empty, and may not reference a value inside an
+   * [array value][google.datastore.v1.Value.array_value].
+   * 
+ * + * repeated string paths = 1; + * + * @return The count of paths. + */ + public int getPathsCount() { + return paths_.size(); + } + + /** + * + * + *
+   * The paths to the properties covered by this mask.
+   *
+   * A path is a list of property names separated by dots (`.`), for example
+   * `foo.bar` means the property `bar` inside the entity property `foo` inside
+   * the entity associated with this path.
+   *
+   * If a property name contains a dot `.` or a backslash `\`, then that
+   * name must be escaped.
+   *
+   * A path must not be empty, and may not reference a value inside an
+   * [array value][google.datastore.v1.Value.array_value].
+   * 
+ * + * repeated string paths = 1; + * + * @param index The index of the element to return. + * @return The paths at the given index. + */ + public java.lang.String getPaths(int index) { + return paths_.get(index); + } + + /** + * + * + *
+   * The paths to the properties covered by this mask.
+   *
+   * A path is a list of property names separated by dots (`.`), for example
+   * `foo.bar` means the property `bar` inside the entity property `foo` inside
+   * the entity associated with this path.
+   *
+   * If a property name contains a dot `.` or a backslash `\`, then that
+   * name must be escaped.
+   *
+   * A path must not be empty, and may not reference a value inside an
+   * [array value][google.datastore.v1.Value.array_value].
+   * 
+ * + * repeated string paths = 1; + * + * @param index The index of the value to return. + * @return The bytes of the paths at the given index. + */ + public com.google.protobuf.ByteString getPathsBytes(int index) { + return paths_.getByteString(index); + } + + private byte memoizedIsInitialized = -1; + + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + for (int i = 0; i < paths_.size(); i++) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, paths_.getRaw(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + for (int i = 0; i < paths_.size(); i++) { + dataSize += computeStringSizeNoTag(paths_.getRaw(i)); + } + size += dataSize; + size += 1 * getPathsList().size(); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.google.datastore.v1.PropertyMask)) { + return super.equals(obj); + } + com.google.datastore.v1.PropertyMask other = (com.google.datastore.v1.PropertyMask) obj; + + if (!getPathsList().equals(other.getPathsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getPathsCount() > 0) { + hash = (37 * hash) + PATHS_FIELD_NUMBER; + hash = (53 * hash) + getPathsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.datastore.v1.PropertyMask parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.PropertyMask parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.datastore.v1.PropertyMask parseFrom(com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.PropertyMask 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.datastore.v1.PropertyMask parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.PropertyMask parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.datastore.v1.PropertyMask parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.PropertyMask 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.datastore.v1.PropertyMask parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.PropertyMask 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.datastore.v1.PropertyMask parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.PropertyMask 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.datastore.v1.PropertyMask 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 set of arbitrarily nested property paths used to restrict an operation to
+   * only a subset of properties in an entity.
+   * 
+ * + * Protobuf type {@code google.datastore.v1.PropertyMask} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.datastore.v1.PropertyMask) + com.google.datastore.v1.PropertyMaskOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyMask_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyMask_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.datastore.v1.PropertyMask.class, + com.google.datastore.v1.PropertyMask.Builder.class); + } + + // Construct using com.google.datastore.v1.PropertyMask.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + paths_ = com.google.protobuf.LazyStringArrayList.emptyList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyMask_descriptor; + } + + @java.lang.Override + public com.google.datastore.v1.PropertyMask getDefaultInstanceForType() { + return com.google.datastore.v1.PropertyMask.getDefaultInstance(); + } + + @java.lang.Override + public com.google.datastore.v1.PropertyMask build() { + com.google.datastore.v1.PropertyMask result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.datastore.v1.PropertyMask buildPartial() { + com.google.datastore.v1.PropertyMask result = new com.google.datastore.v1.PropertyMask(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + onBuilt(); + return result; + } + + private void buildPartial0(com.google.datastore.v1.PropertyMask result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + paths_.makeImmutable(); + result.paths_ = paths_; + } + } + + @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.datastore.v1.PropertyMask) { + return mergeFrom((com.google.datastore.v1.PropertyMask) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.datastore.v1.PropertyMask other) { + if (other == com.google.datastore.v1.PropertyMask.getDefaultInstance()) return this; + if (!other.paths_.isEmpty()) { + if (paths_.isEmpty()) { + paths_ = other.paths_; + bitField0_ |= 0x00000001; + } else { + ensurePathsIsMutable(); + paths_.addAll(other.paths_); + } + 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: + { + java.lang.String s = input.readStringRequireUtf8(); + ensurePathsIsMutable(); + paths_.add(s); + 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 com.google.protobuf.LazyStringArrayList paths_ = + com.google.protobuf.LazyStringArrayList.emptyList(); + + private void ensurePathsIsMutable() { + if (!paths_.isModifiable()) { + paths_ = new com.google.protobuf.LazyStringArrayList(paths_); + } + bitField0_ |= 0x00000001; + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @return A list containing the paths. + */ + public com.google.protobuf.ProtocolStringList getPathsList() { + paths_.makeImmutable(); + return paths_; + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @return The count of paths. + */ + public int getPathsCount() { + return paths_.size(); + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @param index The index of the element to return. + * @return The paths at the given index. + */ + public java.lang.String getPaths(int index) { + return paths_.get(index); + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @param index The index of the value to return. + * @return The bytes of the paths at the given index. + */ + public com.google.protobuf.ByteString getPathsBytes(int index) { + return paths_.getByteString(index); + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @param index The index to set the value at. + * @param value The paths to set. + * @return This builder for chaining. + */ + public Builder setPaths(int index, java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensurePathsIsMutable(); + paths_.set(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @param value The paths to add. + * @return This builder for chaining. + */ + public Builder addPaths(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + ensurePathsIsMutable(); + paths_.add(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @param values The paths to add. + * @return This builder for chaining. + */ + public Builder addAllPaths(java.lang.Iterable values) { + ensurePathsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, paths_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @return This builder for chaining. + */ + public Builder clearPaths() { + paths_ = com.google.protobuf.LazyStringArrayList.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + ; + onChanged(); + return this; + } + + /** + * + * + *
+     * The paths to the properties covered by this mask.
+     *
+     * A path is a list of property names separated by dots (`.`), for example
+     * `foo.bar` means the property `bar` inside the entity property `foo` inside
+     * the entity associated with this path.
+     *
+     * If a property name contains a dot `.` or a backslash `\`, then that
+     * name must be escaped.
+     *
+     * A path must not be empty, and may not reference a value inside an
+     * [array value][google.datastore.v1.Value.array_value].
+     * 
+ * + * repeated string paths = 1; + * + * @param value The bytes of the paths to add. + * @return This builder for chaining. + */ + public Builder addPathsBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + ensurePathsIsMutable(); + paths_.add(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.datastore.v1.PropertyMask) + } + + // @@protoc_insertion_point(class_scope:google.datastore.v1.PropertyMask) + private static final com.google.datastore.v1.PropertyMask DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.datastore.v1.PropertyMask(); + } + + public static com.google.datastore.v1.PropertyMask getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PropertyMask 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.datastore.v1.PropertyMask getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyMaskOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyMaskOrBuilder.java new file mode 100644 index 000000000..ebd49c682 --- /dev/null +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyMaskOrBuilder.java @@ -0,0 +1,120 @@ +/* + * 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/datastore/v1/datastore.proto + +// Protobuf Java Version: 3.25.5 +package com.google.datastore.v1; + +public interface PropertyMaskOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.datastore.v1.PropertyMask) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * The paths to the properties covered by this mask.
+   *
+   * A path is a list of property names separated by dots (`.`), for example
+   * `foo.bar` means the property `bar` inside the entity property `foo` inside
+   * the entity associated with this path.
+   *
+   * If a property name contains a dot `.` or a backslash `\`, then that
+   * name must be escaped.
+   *
+   * A path must not be empty, and may not reference a value inside an
+   * [array value][google.datastore.v1.Value.array_value].
+   * 
+ * + * repeated string paths = 1; + * + * @return A list containing the paths. + */ + java.util.List getPathsList(); + + /** + * + * + *
+   * The paths to the properties covered by this mask.
+   *
+   * A path is a list of property names separated by dots (`.`), for example
+   * `foo.bar` means the property `bar` inside the entity property `foo` inside
+   * the entity associated with this path.
+   *
+   * If a property name contains a dot `.` or a backslash `\`, then that
+   * name must be escaped.
+   *
+   * A path must not be empty, and may not reference a value inside an
+   * [array value][google.datastore.v1.Value.array_value].
+   * 
+ * + * repeated string paths = 1; + * + * @return The count of paths. + */ + int getPathsCount(); + + /** + * + * + *
+   * The paths to the properties covered by this mask.
+   *
+   * A path is a list of property names separated by dots (`.`), for example
+   * `foo.bar` means the property `bar` inside the entity property `foo` inside
+   * the entity associated with this path.
+   *
+   * If a property name contains a dot `.` or a backslash `\`, then that
+   * name must be escaped.
+   *
+   * A path must not be empty, and may not reference a value inside an
+   * [array value][google.datastore.v1.Value.array_value].
+   * 
+ * + * repeated string paths = 1; + * + * @param index The index of the element to return. + * @return The paths at the given index. + */ + java.lang.String getPaths(int index); + + /** + * + * + *
+   * The paths to the properties covered by this mask.
+   *
+   * A path is a list of property names separated by dots (`.`), for example
+   * `foo.bar` means the property `bar` inside the entity property `foo` inside
+   * the entity associated with this path.
+   *
+   * If a property name contains a dot `.` or a backslash `\`, then that
+   * name must be escaped.
+   *
+   * A path must not be empty, and may not reference a value inside an
+   * [array value][google.datastore.v1.Value.array_value].
+   * 
+ * + * repeated string paths = 1; + * + * @param index The index of the value to return. + * @return The bytes of the paths at the given index. + */ + com.google.protobuf.ByteString getPathsBytes(int index); +} diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java index b42405c97..a4315a539 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class PropertyOrder extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.PropertyOrder) PropertyOrderOrBuilder { private static final long serialVersionUID = 0L; + // Use PropertyOrder.newBuilder() to construct. private PropertyOrder(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -116,6 +117,7 @@ public enum Direction implements com.google.protobuf.ProtocolMessageEnum { * DIRECTION_UNSPECIFIED = 0; */ public static final int DIRECTION_UNSPECIFIED_VALUE = 0; + /** * * @@ -126,6 +128,7 @@ public enum Direction implements com.google.protobuf.ProtocolMessageEnum { * ASCENDING = 1; */ public static final int ASCENDING_VALUE = 1; + /** * * @@ -223,6 +226,7 @@ private Direction(int value) { private int bitField0_; public static final int PROPERTY_FIELD_NUMBER = 1; private com.google.datastore.v1.PropertyReference property_; + /** * * @@ -238,6 +242,7 @@ private Direction(int value) { public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -255,6 +260,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { ? com.google.datastore.v1.PropertyReference.getDefaultInstance() : property_; } + /** * * @@ -273,6 +279,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() public static final int DIRECTION_FIELD_NUMBER = 2; private int direction_ = 0; + /** * * @@ -288,6 +295,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() public int getDirectionValue() { return direction_; } + /** * * @@ -479,6 +487,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -694,6 +703,7 @@ public Builder mergeFrom( com.google.datastore.v1.PropertyReference.Builder, com.google.datastore.v1.PropertyReferenceOrBuilder> propertyBuilder_; + /** * * @@ -708,6 +718,7 @@ public Builder mergeFrom( public boolean hasProperty() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -728,6 +739,7 @@ public com.google.datastore.v1.PropertyReference getProperty() { return propertyBuilder_.getMessage(); } } + /** * * @@ -750,6 +762,7 @@ public Builder setProperty(com.google.datastore.v1.PropertyReference value) { onChanged(); return this; } + /** * * @@ -769,6 +782,7 @@ public Builder setProperty(com.google.datastore.v1.PropertyReference.Builder bui onChanged(); return this; } + /** * * @@ -796,6 +810,7 @@ public Builder mergeProperty(com.google.datastore.v1.PropertyReference value) { } return this; } + /** * * @@ -815,6 +830,7 @@ public Builder clearProperty() { onChanged(); return this; } + /** * * @@ -829,6 +845,7 @@ public com.google.datastore.v1.PropertyReference.Builder getPropertyBuilder() { onChanged(); return getPropertyFieldBuilder().getBuilder(); } + /** * * @@ -847,6 +864,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() : property_; } } + /** * * @@ -874,6 +892,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() } private int direction_ = 0; + /** * * @@ -889,6 +908,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getPropertyOrBuilder() public int getDirectionValue() { return direction_; } + /** * * @@ -907,6 +927,7 @@ public Builder setDirectionValue(int value) { onChanged(); return this; } + /** * * @@ -924,6 +945,7 @@ public com.google.datastore.v1.PropertyOrder.Direction getDirection() { com.google.datastore.v1.PropertyOrder.Direction.forNumber(direction_); return result == null ? com.google.datastore.v1.PropertyOrder.Direction.UNRECOGNIZED : result; } + /** * * @@ -945,6 +967,7 @@ public Builder setDirection(com.google.datastore.v1.PropertyOrder.Direction valu onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java index 3522ab951..e1f589f07 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyOrderOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface PropertyOrderOrBuilder @@ -36,6 +36,7 @@ public interface PropertyOrderOrBuilder * @return Whether the property field is set. */ boolean hasProperty(); + /** * * @@ -48,6 +49,7 @@ public interface PropertyOrderOrBuilder * @return The property. */ com.google.datastore.v1.PropertyReference getProperty(); + /** * * @@ -71,6 +73,7 @@ public interface PropertyOrderOrBuilder * @return The enum numeric value on the wire for direction. */ int getDirectionValue(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java index a7a4c304e..c301b8518 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReference.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class PropertyReference extends com.google.protobuf.GeneratedMessag // @@protoc_insertion_point(message_implements:google.datastore.v1.PropertyReference) PropertyReferenceOrBuilder { private static final long serialVersionUID = 0L; + // Use PropertyReference.newBuilder() to construct. private PropertyReference(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -67,6 +68,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object name_ = ""; + /** * * @@ -96,6 +98,7 @@ public java.lang.String getName() { return s; } } + /** * * @@ -285,6 +288,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -468,6 +472,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object name_ = ""; + /** * * @@ -496,6 +501,7 @@ public java.lang.String getName() { return (java.lang.String) ref; } } + /** * * @@ -524,6 +530,7 @@ public com.google.protobuf.ByteString getNameBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -551,6 +558,7 @@ public Builder setName(java.lang.String value) { onChanged(); return this; } + /** * * @@ -574,6 +582,7 @@ public Builder clearName() { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java index 7761b1421..0fb61d2e0 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyReferenceOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface PropertyReferenceOrBuilder @@ -42,6 +42,7 @@ public interface PropertyReferenceOrBuilder * @return The name. */ java.lang.String getName(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyTransform.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyTransform.java new file mode 100644 index 000000000..51bf34d7c --- /dev/null +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyTransform.java @@ -0,0 +1,3276 @@ +/* + * 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/datastore/v1/datastore.proto + +// Protobuf Java Version: 3.25.5 +package com.google.datastore.v1; + +/** + * + * + *
+ * A transformation of an entity property.
+ * 
+ * + * Protobuf type {@code google.datastore.v1.PropertyTransform} + */ +public final class PropertyTransform extends com.google.protobuf.GeneratedMessageV3 + implements + // @@protoc_insertion_point(message_implements:google.datastore.v1.PropertyTransform) + PropertyTransformOrBuilder { + private static final long serialVersionUID = 0L; + + // Use PropertyTransform.newBuilder() to construct. + private PropertyTransform(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + + private PropertyTransform() { + property_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance(UnusedPrivateParameter unused) { + return new PropertyTransform(); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyTransform_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyTransform_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.datastore.v1.PropertyTransform.class, + com.google.datastore.v1.PropertyTransform.Builder.class); + } + + /** + * + * + *
+   * A value that is calculated by the server.
+   * 
+ * + * Protobuf enum {@code google.datastore.v1.PropertyTransform.ServerValue} + */ + public enum ServerValue implements com.google.protobuf.ProtocolMessageEnum { + /** + * + * + *
+     * Unspecified. This value must not be used.
+     * 
+ * + * SERVER_VALUE_UNSPECIFIED = 0; + */ + SERVER_VALUE_UNSPECIFIED(0), + /** + * + * + *
+     * The time at which the server processed the request, with millisecond
+     * precision. If used on multiple properties (same or different entities)
+     * in a transaction, all the properties will get the same server timestamp.
+     * 
+ * + * REQUEST_TIME = 1; + */ + REQUEST_TIME(1), + UNRECOGNIZED(-1), + ; + + /** + * + * + *
+     * Unspecified. This value must not be used.
+     * 
+ * + * SERVER_VALUE_UNSPECIFIED = 0; + */ + public static final int SERVER_VALUE_UNSPECIFIED_VALUE = 0; + + /** + * + * + *
+     * The time at which the server processed the request, with millisecond
+     * precision. If used on multiple properties (same or different entities)
+     * in a transaction, all the properties will get the same server timestamp.
+     * 
+ * + * REQUEST_TIME = 1; + */ + public static final int REQUEST_TIME_VALUE = 1; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static ServerValue valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static ServerValue forNumber(int value) { + switch (value) { + case 0: + return SERVER_VALUE_UNSPECIFIED; + case 1: + return REQUEST_TIME; + default: + return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } + + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public ServerValue findValueByNumber(int number) { + return ServerValue.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } + + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.google.datastore.v1.PropertyTransform.getDescriptor().getEnumTypes().get(0); + } + + private static final ServerValue[] VALUES = values(); + + public static ServerValue valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private ServerValue(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:google.datastore.v1.PropertyTransform.ServerValue) + } + + private int transformTypeCase_ = 0; + + @SuppressWarnings("serial") + private java.lang.Object transformType_; + + public enum TransformTypeCase + implements + com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + SET_TO_SERVER_VALUE(2), + INCREMENT(3), + MAXIMUM(4), + MINIMUM(5), + APPEND_MISSING_ELEMENTS(6), + REMOVE_ALL_FROM_ARRAY(7), + TRANSFORMTYPE_NOT_SET(0); + private final int value; + + private TransformTypeCase(int value) { + this.value = value; + } + + /** + * @param value The number of the enum to look for. + * @return The enum associated with the given number. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static TransformTypeCase valueOf(int value) { + return forNumber(value); + } + + public static TransformTypeCase forNumber(int value) { + switch (value) { + case 2: + return SET_TO_SERVER_VALUE; + case 3: + return INCREMENT; + case 4: + return MAXIMUM; + case 5: + return MINIMUM; + case 6: + return APPEND_MISSING_ELEMENTS; + case 7: + return REMOVE_ALL_FROM_ARRAY; + case 0: + return TRANSFORMTYPE_NOT_SET; + default: + return null; + } + } + + public int getNumber() { + return this.value; + } + }; + + public TransformTypeCase getTransformTypeCase() { + return TransformTypeCase.forNumber(transformTypeCase_); + } + + public static final int PROPERTY_FIELD_NUMBER = 1; + + @SuppressWarnings("serial") + private volatile java.lang.Object property_ = ""; + + /** + * + * + *
+   * Optional. The name of the property.
+   *
+   * Property paths (a list of property names separated by dots (`.`)) may be
+   * used to refer to properties inside entity values. For example `foo.bar`
+   * means the property `bar` inside the entity property `foo`.
+   *
+   * If a property name contains a dot `.` or a backlslash `\`, then that name
+   * must be escaped.
+   * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The property. + */ + @java.lang.Override + public java.lang.String getProperty() { + java.lang.Object ref = property_; + 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(); + property_ = s; + return s; + } + } + + /** + * + * + *
+   * Optional. The name of the property.
+   *
+   * Property paths (a list of property names separated by dots (`.`)) may be
+   * used to refer to properties inside entity values. For example `foo.bar`
+   * means the property `bar` inside the entity property `foo`.
+   *
+   * If a property name contains a dot `.` or a backlslash `\`, then that name
+   * must be escaped.
+   * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for property. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPropertyBytes() { + java.lang.Object ref = property_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + property_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int SET_TO_SERVER_VALUE_FIELD_NUMBER = 2; + + /** + * + * + *
+   * Sets the property to the given server value.
+   * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return Whether the setToServerValue field is set. + */ + public boolean hasSetToServerValue() { + return transformTypeCase_ == 2; + } + + /** + * + * + *
+   * Sets the property to the given server value.
+   * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return The enum numeric value on the wire for setToServerValue. + */ + public int getSetToServerValueValue() { + if (transformTypeCase_ == 2) { + return (java.lang.Integer) transformType_; + } + return 0; + } + + /** + * + * + *
+   * Sets the property to the given server value.
+   * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return The setToServerValue. + */ + public com.google.datastore.v1.PropertyTransform.ServerValue getSetToServerValue() { + if (transformTypeCase_ == 2) { + com.google.datastore.v1.PropertyTransform.ServerValue result = + com.google.datastore.v1.PropertyTransform.ServerValue.forNumber( + (java.lang.Integer) transformType_); + return result == null + ? com.google.datastore.v1.PropertyTransform.ServerValue.UNRECOGNIZED + : result; + } + return com.google.datastore.v1.PropertyTransform.ServerValue.SERVER_VALUE_UNSPECIFIED; + } + + public static final int INCREMENT_FIELD_NUMBER = 3; + + /** + * + * + *
+   * Adds the given value to the property's current value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If either of the given value or the current property value are doubles,
+   * both values will be interpreted as doubles. Double arithmetic and
+   * representation of double values follows IEEE 754 semantics.
+   * If there is positive/negative integer overflow, the property is resolved
+   * to the largest magnitude positive/negative integer.
+   * 
+ * + * .google.datastore.v1.Value increment = 3; + * + * @return Whether the increment field is set. + */ + @java.lang.Override + public boolean hasIncrement() { + return transformTypeCase_ == 3; + } + + /** + * + * + *
+   * Adds the given value to the property's current value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If either of the given value or the current property value are doubles,
+   * both values will be interpreted as doubles. Double arithmetic and
+   * representation of double values follows IEEE 754 semantics.
+   * If there is positive/negative integer overflow, the property is resolved
+   * to the largest magnitude positive/negative integer.
+   * 
+ * + * .google.datastore.v1.Value increment = 3; + * + * @return The increment. + */ + @java.lang.Override + public com.google.datastore.v1.Value getIncrement() { + if (transformTypeCase_ == 3) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + + /** + * + * + *
+   * Adds the given value to the property's current value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If either of the given value or the current property value are doubles,
+   * both values will be interpreted as doubles. Double arithmetic and
+   * representation of double values follows IEEE 754 semantics.
+   * If there is positive/negative integer overflow, the property is resolved
+   * to the largest magnitude positive/negative integer.
+   * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + @java.lang.Override + public com.google.datastore.v1.ValueOrBuilder getIncrementOrBuilder() { + if (transformTypeCase_ == 3) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + + public static final int MAXIMUM_FIELD_NUMBER = 4; + + /** + * + * + *
+   * Sets the property to the maximum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If a maximum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the larger operand. If the operands are
+   * equivalent (e.g. 3 and 3.0), the property does not change.
+   * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+   * zero input value is always the stored value.
+   * The maximum of any numeric value x and NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value maximum = 4; + * + * @return Whether the maximum field is set. + */ + @java.lang.Override + public boolean hasMaximum() { + return transformTypeCase_ == 4; + } + + /** + * + * + *
+   * Sets the property to the maximum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If a maximum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the larger operand. If the operands are
+   * equivalent (e.g. 3 and 3.0), the property does not change.
+   * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+   * zero input value is always the stored value.
+   * The maximum of any numeric value x and NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value maximum = 4; + * + * @return The maximum. + */ + @java.lang.Override + public com.google.datastore.v1.Value getMaximum() { + if (transformTypeCase_ == 4) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + + /** + * + * + *
+   * Sets the property to the maximum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If a maximum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the larger operand. If the operands are
+   * equivalent (e.g. 3 and 3.0), the property does not change.
+   * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+   * zero input value is always the stored value.
+   * The maximum of any numeric value x and NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + @java.lang.Override + public com.google.datastore.v1.ValueOrBuilder getMaximumOrBuilder() { + if (transformTypeCase_ == 4) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + + public static final int MINIMUM_FIELD_NUMBER = 5; + + /** + * + * + *
+   * Sets the property to the minimum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the input value.
+   * If a minimum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the smaller operand. If the operands
+   * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+   * and -0.0 are all zero. The minimum of a zero stored value and zero input
+   * value is always the stored value. The minimum of any numeric value x and
+   * NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value minimum = 5; + * + * @return Whether the minimum field is set. + */ + @java.lang.Override + public boolean hasMinimum() { + return transformTypeCase_ == 5; + } + + /** + * + * + *
+   * Sets the property to the minimum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the input value.
+   * If a minimum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the smaller operand. If the operands
+   * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+   * and -0.0 are all zero. The minimum of a zero stored value and zero input
+   * value is always the stored value. The minimum of any numeric value x and
+   * NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value minimum = 5; + * + * @return The minimum. + */ + @java.lang.Override + public com.google.datastore.v1.Value getMinimum() { + if (transformTypeCase_ == 5) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + + /** + * + * + *
+   * Sets the property to the minimum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the input value.
+   * If a minimum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the smaller operand. If the operands
+   * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+   * and -0.0 are all zero. The minimum of a zero stored value and zero input
+   * value is always the stored value. The minimum of any numeric value x and
+   * NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + @java.lang.Override + public com.google.datastore.v1.ValueOrBuilder getMinimumOrBuilder() { + if (transformTypeCase_ == 5) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + + public static final int APPEND_MISSING_ELEMENTS_FIELD_NUMBER = 6; + + /** + * + * + *
+   * Appends the given elements in order if they are not already present in
+   * the current property value.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is first set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when checking if a value is missing.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * If the input contains multiple equivalent values, only the first will
+   * be considered.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + * + * @return Whether the appendMissingElements field is set. + */ + @java.lang.Override + public boolean hasAppendMissingElements() { + return transformTypeCase_ == 6; + } + + /** + * + * + *
+   * Appends the given elements in order if they are not already present in
+   * the current property value.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is first set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when checking if a value is missing.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * If the input contains multiple equivalent values, only the first will
+   * be considered.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + * + * @return The appendMissingElements. + */ + @java.lang.Override + public com.google.datastore.v1.ArrayValue getAppendMissingElements() { + if (transformTypeCase_ == 6) { + return (com.google.datastore.v1.ArrayValue) transformType_; + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + + /** + * + * + *
+   * Appends the given elements in order if they are not already present in
+   * the current property value.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is first set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when checking if a value is missing.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * If the input contains multiple equivalent values, only the first will
+   * be considered.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + @java.lang.Override + public com.google.datastore.v1.ArrayValueOrBuilder getAppendMissingElementsOrBuilder() { + if (transformTypeCase_ == 6) { + return (com.google.datastore.v1.ArrayValue) transformType_; + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + + public static final int REMOVE_ALL_FROM_ARRAY_FIELD_NUMBER = 7; + + /** + * + * + *
+   * Removes all of the given elements from the array in the property.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when deciding whether an element should be removed.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * This will remove all equivalent values if there are duplicates.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + * + * @return Whether the removeAllFromArray field is set. + */ + @java.lang.Override + public boolean hasRemoveAllFromArray() { + return transformTypeCase_ == 7; + } + + /** + * + * + *
+   * Removes all of the given elements from the array in the property.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when deciding whether an element should be removed.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * This will remove all equivalent values if there are duplicates.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + * + * @return The removeAllFromArray. + */ + @java.lang.Override + public com.google.datastore.v1.ArrayValue getRemoveAllFromArray() { + if (transformTypeCase_ == 7) { + return (com.google.datastore.v1.ArrayValue) transformType_; + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + + /** + * + * + *
+   * Removes all of the given elements from the array in the property.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when deciding whether an element should be removed.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * This will remove all equivalent values if there are duplicates.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + @java.lang.Override + public com.google.datastore.v1.ArrayValueOrBuilder getRemoveAllFromArrayOrBuilder() { + if (transformTypeCase_ == 7) { + return (com.google.datastore.v1.ArrayValue) transformType_; + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + + 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(property_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, property_); + } + if (transformTypeCase_ == 2) { + output.writeEnum(2, ((java.lang.Integer) transformType_)); + } + if (transformTypeCase_ == 3) { + output.writeMessage(3, (com.google.datastore.v1.Value) transformType_); + } + if (transformTypeCase_ == 4) { + output.writeMessage(4, (com.google.datastore.v1.Value) transformType_); + } + if (transformTypeCase_ == 5) { + output.writeMessage(5, (com.google.datastore.v1.Value) transformType_); + } + if (transformTypeCase_ == 6) { + output.writeMessage(6, (com.google.datastore.v1.ArrayValue) transformType_); + } + if (transformTypeCase_ == 7) { + output.writeMessage(7, (com.google.datastore.v1.ArrayValue) transformType_); + } + 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(property_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, property_); + } + if (transformTypeCase_ == 2) { + size += + com.google.protobuf.CodedOutputStream.computeEnumSize( + 2, ((java.lang.Integer) transformType_)); + } + if (transformTypeCase_ == 3) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 3, (com.google.datastore.v1.Value) transformType_); + } + if (transformTypeCase_ == 4) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 4, (com.google.datastore.v1.Value) transformType_); + } + if (transformTypeCase_ == 5) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 5, (com.google.datastore.v1.Value) transformType_); + } + if (transformTypeCase_ == 6) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 6, (com.google.datastore.v1.ArrayValue) transformType_); + } + if (transformTypeCase_ == 7) { + size += + com.google.protobuf.CodedOutputStream.computeMessageSize( + 7, (com.google.datastore.v1.ArrayValue) transformType_); + } + 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.datastore.v1.PropertyTransform)) { + return super.equals(obj); + } + com.google.datastore.v1.PropertyTransform other = + (com.google.datastore.v1.PropertyTransform) obj; + + if (!getProperty().equals(other.getProperty())) return false; + if (!getTransformTypeCase().equals(other.getTransformTypeCase())) return false; + switch (transformTypeCase_) { + case 2: + if (getSetToServerValueValue() != other.getSetToServerValueValue()) return false; + break; + case 3: + if (!getIncrement().equals(other.getIncrement())) return false; + break; + case 4: + if (!getMaximum().equals(other.getMaximum())) return false; + break; + case 5: + if (!getMinimum().equals(other.getMinimum())) return false; + break; + case 6: + if (!getAppendMissingElements().equals(other.getAppendMissingElements())) return false; + break; + case 7: + if (!getRemoveAllFromArray().equals(other.getRemoveAllFromArray())) return false; + break; + case 0: + default: + } + 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) + PROPERTY_FIELD_NUMBER; + hash = (53 * hash) + getProperty().hashCode(); + switch (transformTypeCase_) { + case 2: + hash = (37 * hash) + SET_TO_SERVER_VALUE_FIELD_NUMBER; + hash = (53 * hash) + getSetToServerValueValue(); + break; + case 3: + hash = (37 * hash) + INCREMENT_FIELD_NUMBER; + hash = (53 * hash) + getIncrement().hashCode(); + break; + case 4: + hash = (37 * hash) + MAXIMUM_FIELD_NUMBER; + hash = (53 * hash) + getMaximum().hashCode(); + break; + case 5: + hash = (37 * hash) + MINIMUM_FIELD_NUMBER; + hash = (53 * hash) + getMinimum().hashCode(); + break; + case 6: + hash = (37 * hash) + APPEND_MISSING_ELEMENTS_FIELD_NUMBER; + hash = (53 * hash) + getAppendMissingElements().hashCode(); + break; + case 7: + hash = (37 * hash) + REMOVE_ALL_FROM_ARRAY_FIELD_NUMBER; + hash = (53 * hash) + getRemoveAllFromArray().hashCode(); + break; + case 0: + default: + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.google.datastore.v1.PropertyTransform parseFrom(java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.PropertyTransform parseFrom( + java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.datastore.v1.PropertyTransform parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.PropertyTransform 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.datastore.v1.PropertyTransform parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.google.datastore.v1.PropertyTransform parseFrom( + byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.google.datastore.v1.PropertyTransform parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.PropertyTransform 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.datastore.v1.PropertyTransform parseDelimitedFrom( + java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseDelimitedWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.PropertyTransform 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.datastore.v1.PropertyTransform parseFrom( + com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3.parseWithIOException(PARSER, input); + } + + public static com.google.datastore.v1.PropertyTransform 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.datastore.v1.PropertyTransform 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 transformation of an entity property.
+   * 
+ * + * Protobuf type {@code google.datastore.v1.PropertyTransform} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder + implements + // @@protoc_insertion_point(builder_implements:google.datastore.v1.PropertyTransform) + com.google.datastore.v1.PropertyTransformOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyTransform_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyTransform_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.google.datastore.v1.PropertyTransform.class, + com.google.datastore.v1.PropertyTransform.Builder.class); + } + + // Construct using com.google.datastore.v1.PropertyTransform.newBuilder() + private Builder() {} + + private Builder(com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + } + + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + property_ = ""; + if (incrementBuilder_ != null) { + incrementBuilder_.clear(); + } + if (maximumBuilder_ != null) { + maximumBuilder_.clear(); + } + if (minimumBuilder_ != null) { + minimumBuilder_.clear(); + } + if (appendMissingElementsBuilder_ != null) { + appendMissingElementsBuilder_.clear(); + } + if (removeAllFromArrayBuilder_ != null) { + removeAllFromArrayBuilder_.clear(); + } + transformTypeCase_ = 0; + transformType_ = null; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.google.datastore.v1.DatastoreProto + .internal_static_google_datastore_v1_PropertyTransform_descriptor; + } + + @java.lang.Override + public com.google.datastore.v1.PropertyTransform getDefaultInstanceForType() { + return com.google.datastore.v1.PropertyTransform.getDefaultInstance(); + } + + @java.lang.Override + public com.google.datastore.v1.PropertyTransform build() { + com.google.datastore.v1.PropertyTransform result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.google.datastore.v1.PropertyTransform buildPartial() { + com.google.datastore.v1.PropertyTransform result = + new com.google.datastore.v1.PropertyTransform(this); + if (bitField0_ != 0) { + buildPartial0(result); + } + buildPartialOneofs(result); + onBuilt(); + return result; + } + + private void buildPartial0(com.google.datastore.v1.PropertyTransform result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.property_ = property_; + } + } + + private void buildPartialOneofs(com.google.datastore.v1.PropertyTransform result) { + result.transformTypeCase_ = transformTypeCase_; + result.transformType_ = this.transformType_; + if (transformTypeCase_ == 3 && incrementBuilder_ != null) { + result.transformType_ = incrementBuilder_.build(); + } + if (transformTypeCase_ == 4 && maximumBuilder_ != null) { + result.transformType_ = maximumBuilder_.build(); + } + if (transformTypeCase_ == 5 && minimumBuilder_ != null) { + result.transformType_ = minimumBuilder_.build(); + } + if (transformTypeCase_ == 6 && appendMissingElementsBuilder_ != null) { + result.transformType_ = appendMissingElementsBuilder_.build(); + } + if (transformTypeCase_ == 7 && removeAllFromArrayBuilder_ != null) { + result.transformType_ = removeAllFromArrayBuilder_.build(); + } + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.setField(field, value); + } + + @java.lang.Override + public Builder clearField(com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + + @java.lang.Override + public Builder clearOneof(com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, java.lang.Object value) { + return super.addRepeatedField(field, value); + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.google.datastore.v1.PropertyTransform) { + return mergeFrom((com.google.datastore.v1.PropertyTransform) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.google.datastore.v1.PropertyTransform other) { + if (other == com.google.datastore.v1.PropertyTransform.getDefaultInstance()) return this; + if (!other.getProperty().isEmpty()) { + property_ = other.property_; + bitField0_ |= 0x00000001; + onChanged(); + } + switch (other.getTransformTypeCase()) { + case SET_TO_SERVER_VALUE: + { + setSetToServerValueValue(other.getSetToServerValueValue()); + break; + } + case INCREMENT: + { + mergeIncrement(other.getIncrement()); + break; + } + case MAXIMUM: + { + mergeMaximum(other.getMaximum()); + break; + } + case MINIMUM: + { + mergeMinimum(other.getMinimum()); + break; + } + case APPEND_MISSING_ELEMENTS: + { + mergeAppendMissingElements(other.getAppendMissingElements()); + break; + } + case REMOVE_ALL_FROM_ARRAY: + { + mergeRemoveAllFromArray(other.getRemoveAllFromArray()); + break; + } + case TRANSFORMTYPE_NOT_SET: + { + break; + } + } + 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: + { + property_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000001; + break; + } // case 10 + case 16: + { + int rawValue = input.readEnum(); + transformTypeCase_ = 2; + transformType_ = rawValue; + break; + } // case 16 + case 26: + { + input.readMessage(getIncrementFieldBuilder().getBuilder(), extensionRegistry); + transformTypeCase_ = 3; + break; + } // case 26 + case 34: + { + input.readMessage(getMaximumFieldBuilder().getBuilder(), extensionRegistry); + transformTypeCase_ = 4; + break; + } // case 34 + case 42: + { + input.readMessage(getMinimumFieldBuilder().getBuilder(), extensionRegistry); + transformTypeCase_ = 5; + break; + } // case 42 + case 50: + { + input.readMessage( + getAppendMissingElementsFieldBuilder().getBuilder(), extensionRegistry); + transformTypeCase_ = 6; + break; + } // case 50 + case 58: + { + input.readMessage( + getRemoveAllFromArrayFieldBuilder().getBuilder(), extensionRegistry); + transformTypeCase_ = 7; + break; + } // case 58 + 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 transformTypeCase_ = 0; + private java.lang.Object transformType_; + + public TransformTypeCase getTransformTypeCase() { + return TransformTypeCase.forNumber(transformTypeCase_); + } + + public Builder clearTransformType() { + transformTypeCase_ = 0; + transformType_ = null; + onChanged(); + return this; + } + + private int bitField0_; + + private java.lang.Object property_ = ""; + + /** + * + * + *
+     * Optional. The name of the property.
+     *
+     * Property paths (a list of property names separated by dots (`.`)) may be
+     * used to refer to properties inside entity values. For example `foo.bar`
+     * means the property `bar` inside the entity property `foo`.
+     *
+     * If a property name contains a dot `.` or a backlslash `\`, then that name
+     * must be escaped.
+     * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The property. + */ + public java.lang.String getProperty() { + java.lang.Object ref = property_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + property_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the property.
+     *
+     * Property paths (a list of property names separated by dots (`.`)) may be
+     * used to refer to properties inside entity values. For example `foo.bar`
+     * means the property `bar` inside the entity property `foo`.
+     *
+     * If a property name contains a dot `.` or a backlslash `\`, then that name
+     * must be escaped.
+     * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for property. + */ + public com.google.protobuf.ByteString getPropertyBytes() { + java.lang.Object ref = property_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + property_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * + * + *
+     * Optional. The name of the property.
+     *
+     * Property paths (a list of property names separated by dots (`.`)) may be
+     * used to refer to properties inside entity values. For example `foo.bar`
+     * means the property `bar` inside the entity property `foo`.
+     *
+     * If a property name contains a dot `.` or a backlslash `\`, then that name
+     * must be escaped.
+     * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The property to set. + * @return This builder for chaining. + */ + public Builder setProperty(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + property_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the property.
+     *
+     * Property paths (a list of property names separated by dots (`.`)) may be
+     * used to refer to properties inside entity values. For example `foo.bar`
+     * means the property `bar` inside the entity property `foo`.
+     *
+     * If a property name contains a dot `.` or a backlslash `\`, then that name
+     * must be escaped.
+     * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return This builder for chaining. + */ + public Builder clearProperty() { + property_ = getDefaultInstance().getProperty(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. The name of the property.
+     *
+     * Property paths (a list of property names separated by dots (`.`)) may be
+     * used to refer to properties inside entity values. For example `foo.bar`
+     * means the property `bar` inside the entity property `foo`.
+     *
+     * If a property name contains a dot `.` or a backlslash `\`, then that name
+     * must be escaped.
+     * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @param value The bytes for property to set. + * @return This builder for chaining. + */ + public Builder setPropertyBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + property_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + + /** + * + * + *
+     * Sets the property to the given server value.
+     * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return Whether the setToServerValue field is set. + */ + @java.lang.Override + public boolean hasSetToServerValue() { + return transformTypeCase_ == 2; + } + + /** + * + * + *
+     * Sets the property to the given server value.
+     * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return The enum numeric value on the wire for setToServerValue. + */ + @java.lang.Override + public int getSetToServerValueValue() { + if (transformTypeCase_ == 2) { + return ((java.lang.Integer) transformType_).intValue(); + } + return 0; + } + + /** + * + * + *
+     * Sets the property to the given server value.
+     * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @param value The enum numeric value on the wire for setToServerValue to set. + * @return This builder for chaining. + */ + public Builder setSetToServerValueValue(int value) { + transformTypeCase_ = 2; + transformType_ = value; + onChanged(); + return this; + } + + /** + * + * + *
+     * Sets the property to the given server value.
+     * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return The setToServerValue. + */ + @java.lang.Override + public com.google.datastore.v1.PropertyTransform.ServerValue getSetToServerValue() { + if (transformTypeCase_ == 2) { + com.google.datastore.v1.PropertyTransform.ServerValue result = + com.google.datastore.v1.PropertyTransform.ServerValue.forNumber( + (java.lang.Integer) transformType_); + return result == null + ? com.google.datastore.v1.PropertyTransform.ServerValue.UNRECOGNIZED + : result; + } + return com.google.datastore.v1.PropertyTransform.ServerValue.SERVER_VALUE_UNSPECIFIED; + } + + /** + * + * + *
+     * Sets the property to the given server value.
+     * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @param value The setToServerValue to set. + * @return This builder for chaining. + */ + public Builder setSetToServerValue( + com.google.datastore.v1.PropertyTransform.ServerValue value) { + if (value == null) { + throw new NullPointerException(); + } + transformTypeCase_ = 2; + transformType_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * + * + *
+     * Sets the property to the given server value.
+     * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return This builder for chaining. + */ + public Builder clearSetToServerValue() { + if (transformTypeCase_ == 2) { + transformTypeCase_ = 0; + transformType_ = null; + onChanged(); + } + return this; + } + + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + incrementBuilder_; + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + * + * @return Whether the increment field is set. + */ + @java.lang.Override + public boolean hasIncrement() { + return transformTypeCase_ == 3; + } + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + * + * @return The increment. + */ + @java.lang.Override + public com.google.datastore.v1.Value getIncrement() { + if (incrementBuilder_ == null) { + if (transformTypeCase_ == 3) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } else { + if (transformTypeCase_ == 3) { + return incrementBuilder_.getMessage(); + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + public Builder setIncrement(com.google.datastore.v1.Value value) { + if (incrementBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + transformType_ = value; + onChanged(); + } else { + incrementBuilder_.setMessage(value); + } + transformTypeCase_ = 3; + return this; + } + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + public Builder setIncrement(com.google.datastore.v1.Value.Builder builderForValue) { + if (incrementBuilder_ == null) { + transformType_ = builderForValue.build(); + onChanged(); + } else { + incrementBuilder_.setMessage(builderForValue.build()); + } + transformTypeCase_ = 3; + return this; + } + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + public Builder mergeIncrement(com.google.datastore.v1.Value value) { + if (incrementBuilder_ == null) { + if (transformTypeCase_ == 3 + && transformType_ != com.google.datastore.v1.Value.getDefaultInstance()) { + transformType_ = + com.google.datastore.v1.Value.newBuilder( + (com.google.datastore.v1.Value) transformType_) + .mergeFrom(value) + .buildPartial(); + } else { + transformType_ = value; + } + onChanged(); + } else { + if (transformTypeCase_ == 3) { + incrementBuilder_.mergeFrom(value); + } else { + incrementBuilder_.setMessage(value); + } + } + transformTypeCase_ = 3; + return this; + } + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + public Builder clearIncrement() { + if (incrementBuilder_ == null) { + if (transformTypeCase_ == 3) { + transformTypeCase_ = 0; + transformType_ = null; + onChanged(); + } + } else { + if (transformTypeCase_ == 3) { + transformTypeCase_ = 0; + transformType_ = null; + } + incrementBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + public com.google.datastore.v1.Value.Builder getIncrementBuilder() { + return getIncrementFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + @java.lang.Override + public com.google.datastore.v1.ValueOrBuilder getIncrementOrBuilder() { + if ((transformTypeCase_ == 3) && (incrementBuilder_ != null)) { + return incrementBuilder_.getMessageOrBuilder(); + } else { + if (transformTypeCase_ == 3) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Adds the given value to the property's current value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If either of the given value or the current property value are doubles,
+     * both values will be interpreted as doubles. Double arithmetic and
+     * representation of double values follows IEEE 754 semantics.
+     * If there is positive/negative integer overflow, the property is resolved
+     * to the largest magnitude positive/negative integer.
+     * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + getIncrementFieldBuilder() { + if (incrementBuilder_ == null) { + if (!(transformTypeCase_ == 3)) { + transformType_ = com.google.datastore.v1.Value.getDefaultInstance(); + } + incrementBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder>( + (com.google.datastore.v1.Value) transformType_, getParentForChildren(), isClean()); + transformType_ = null; + } + transformTypeCase_ = 3; + onChanged(); + return incrementBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + maximumBuilder_; + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + * + * @return Whether the maximum field is set. + */ + @java.lang.Override + public boolean hasMaximum() { + return transformTypeCase_ == 4; + } + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + * + * @return The maximum. + */ + @java.lang.Override + public com.google.datastore.v1.Value getMaximum() { + if (maximumBuilder_ == null) { + if (transformTypeCase_ == 4) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } else { + if (transformTypeCase_ == 4) { + return maximumBuilder_.getMessage(); + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + public Builder setMaximum(com.google.datastore.v1.Value value) { + if (maximumBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + transformType_ = value; + onChanged(); + } else { + maximumBuilder_.setMessage(value); + } + transformTypeCase_ = 4; + return this; + } + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + public Builder setMaximum(com.google.datastore.v1.Value.Builder builderForValue) { + if (maximumBuilder_ == null) { + transformType_ = builderForValue.build(); + onChanged(); + } else { + maximumBuilder_.setMessage(builderForValue.build()); + } + transformTypeCase_ = 4; + return this; + } + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + public Builder mergeMaximum(com.google.datastore.v1.Value value) { + if (maximumBuilder_ == null) { + if (transformTypeCase_ == 4 + && transformType_ != com.google.datastore.v1.Value.getDefaultInstance()) { + transformType_ = + com.google.datastore.v1.Value.newBuilder( + (com.google.datastore.v1.Value) transformType_) + .mergeFrom(value) + .buildPartial(); + } else { + transformType_ = value; + } + onChanged(); + } else { + if (transformTypeCase_ == 4) { + maximumBuilder_.mergeFrom(value); + } else { + maximumBuilder_.setMessage(value); + } + } + transformTypeCase_ = 4; + return this; + } + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + public Builder clearMaximum() { + if (maximumBuilder_ == null) { + if (transformTypeCase_ == 4) { + transformTypeCase_ = 0; + transformType_ = null; + onChanged(); + } + } else { + if (transformTypeCase_ == 4) { + transformTypeCase_ = 0; + transformType_ = null; + } + maximumBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + public com.google.datastore.v1.Value.Builder getMaximumBuilder() { + return getMaximumFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + @java.lang.Override + public com.google.datastore.v1.ValueOrBuilder getMaximumOrBuilder() { + if ((transformTypeCase_ == 4) && (maximumBuilder_ != null)) { + return maximumBuilder_.getMessageOrBuilder(); + } else { + if (transformTypeCase_ == 4) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Sets the property to the maximum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the given value.
+     * If a maximum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the larger operand. If the operands are
+     * equivalent (e.g. 3 and 3.0), the property does not change.
+     * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+     * zero input value is always the stored value.
+     * The maximum of any numeric value x and NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + getMaximumFieldBuilder() { + if (maximumBuilder_ == null) { + if (!(transformTypeCase_ == 4)) { + transformType_ = com.google.datastore.v1.Value.getDefaultInstance(); + } + maximumBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder>( + (com.google.datastore.v1.Value) transformType_, getParentForChildren(), isClean()); + transformType_ = null; + } + transformTypeCase_ = 4; + onChanged(); + return maximumBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + minimumBuilder_; + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + * + * @return Whether the minimum field is set. + */ + @java.lang.Override + public boolean hasMinimum() { + return transformTypeCase_ == 5; + } + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + * + * @return The minimum. + */ + @java.lang.Override + public com.google.datastore.v1.Value getMinimum() { + if (minimumBuilder_ == null) { + if (transformTypeCase_ == 5) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } else { + if (transformTypeCase_ == 5) { + return minimumBuilder_.getMessage(); + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + public Builder setMinimum(com.google.datastore.v1.Value value) { + if (minimumBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + transformType_ = value; + onChanged(); + } else { + minimumBuilder_.setMessage(value); + } + transformTypeCase_ = 5; + return this; + } + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + public Builder setMinimum(com.google.datastore.v1.Value.Builder builderForValue) { + if (minimumBuilder_ == null) { + transformType_ = builderForValue.build(); + onChanged(); + } else { + minimumBuilder_.setMessage(builderForValue.build()); + } + transformTypeCase_ = 5; + return this; + } + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + public Builder mergeMinimum(com.google.datastore.v1.Value value) { + if (minimumBuilder_ == null) { + if (transformTypeCase_ == 5 + && transformType_ != com.google.datastore.v1.Value.getDefaultInstance()) { + transformType_ = + com.google.datastore.v1.Value.newBuilder( + (com.google.datastore.v1.Value) transformType_) + .mergeFrom(value) + .buildPartial(); + } else { + transformType_ = value; + } + onChanged(); + } else { + if (transformTypeCase_ == 5) { + minimumBuilder_.mergeFrom(value); + } else { + minimumBuilder_.setMessage(value); + } + } + transformTypeCase_ = 5; + return this; + } + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + public Builder clearMinimum() { + if (minimumBuilder_ == null) { + if (transformTypeCase_ == 5) { + transformTypeCase_ = 0; + transformType_ = null; + onChanged(); + } + } else { + if (transformTypeCase_ == 5) { + transformTypeCase_ = 0; + transformType_ = null; + } + minimumBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + public com.google.datastore.v1.Value.Builder getMinimumBuilder() { + return getMinimumFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + @java.lang.Override + public com.google.datastore.v1.ValueOrBuilder getMinimumOrBuilder() { + if ((transformTypeCase_ == 5) && (minimumBuilder_ != null)) { + return minimumBuilder_.getMessageOrBuilder(); + } else { + if (transformTypeCase_ == 5) { + return (com.google.datastore.v1.Value) transformType_; + } + return com.google.datastore.v1.Value.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Sets the property to the minimum of its current value and the given
+     * value.
+     *
+     * This must be an integer or a double value.
+     * If the property is not an integer or double, or if the property does not
+     * yet exist, the transformation will set the property to the input value.
+     * If a minimum operation is applied where the property and the input value
+     * are of mixed types (that is - one is an integer and one is a double)
+     * the property takes on the type of the smaller operand. If the operands
+     * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+     * and -0.0 are all zero. The minimum of a zero stored value and zero input
+     * value is always the stored value. The minimum of any numeric value x and
+     * NaN is NaN.
+     * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder> + getMinimumFieldBuilder() { + if (minimumBuilder_ == null) { + if (!(transformTypeCase_ == 5)) { + transformType_ = com.google.datastore.v1.Value.getDefaultInstance(); + } + minimumBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.Value, + com.google.datastore.v1.Value.Builder, + com.google.datastore.v1.ValueOrBuilder>( + (com.google.datastore.v1.Value) transformType_, getParentForChildren(), isClean()); + transformType_ = null; + } + transformTypeCase_ = 5; + onChanged(); + return minimumBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.ArrayValue, + com.google.datastore.v1.ArrayValue.Builder, + com.google.datastore.v1.ArrayValueOrBuilder> + appendMissingElementsBuilder_; + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + * + * @return Whether the appendMissingElements field is set. + */ + @java.lang.Override + public boolean hasAppendMissingElements() { + return transformTypeCase_ == 6; + } + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + * + * @return The appendMissingElements. + */ + @java.lang.Override + public com.google.datastore.v1.ArrayValue getAppendMissingElements() { + if (appendMissingElementsBuilder_ == null) { + if (transformTypeCase_ == 6) { + return (com.google.datastore.v1.ArrayValue) transformType_; + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } else { + if (transformTypeCase_ == 6) { + return appendMissingElementsBuilder_.getMessage(); + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + public Builder setAppendMissingElements(com.google.datastore.v1.ArrayValue value) { + if (appendMissingElementsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + transformType_ = value; + onChanged(); + } else { + appendMissingElementsBuilder_.setMessage(value); + } + transformTypeCase_ = 6; + return this; + } + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + public Builder setAppendMissingElements( + com.google.datastore.v1.ArrayValue.Builder builderForValue) { + if (appendMissingElementsBuilder_ == null) { + transformType_ = builderForValue.build(); + onChanged(); + } else { + appendMissingElementsBuilder_.setMessage(builderForValue.build()); + } + transformTypeCase_ = 6; + return this; + } + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + public Builder mergeAppendMissingElements(com.google.datastore.v1.ArrayValue value) { + if (appendMissingElementsBuilder_ == null) { + if (transformTypeCase_ == 6 + && transformType_ != com.google.datastore.v1.ArrayValue.getDefaultInstance()) { + transformType_ = + com.google.datastore.v1.ArrayValue.newBuilder( + (com.google.datastore.v1.ArrayValue) transformType_) + .mergeFrom(value) + .buildPartial(); + } else { + transformType_ = value; + } + onChanged(); + } else { + if (transformTypeCase_ == 6) { + appendMissingElementsBuilder_.mergeFrom(value); + } else { + appendMissingElementsBuilder_.setMessage(value); + } + } + transformTypeCase_ = 6; + return this; + } + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + public Builder clearAppendMissingElements() { + if (appendMissingElementsBuilder_ == null) { + if (transformTypeCase_ == 6) { + transformTypeCase_ = 0; + transformType_ = null; + onChanged(); + } + } else { + if (transformTypeCase_ == 6) { + transformTypeCase_ = 0; + transformType_ = null; + } + appendMissingElementsBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + public com.google.datastore.v1.ArrayValue.Builder getAppendMissingElementsBuilder() { + return getAppendMissingElementsFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + @java.lang.Override + public com.google.datastore.v1.ArrayValueOrBuilder getAppendMissingElementsOrBuilder() { + if ((transformTypeCase_ == 6) && (appendMissingElementsBuilder_ != null)) { + return appendMissingElementsBuilder_.getMessageOrBuilder(); + } else { + if (transformTypeCase_ == 6) { + return (com.google.datastore.v1.ArrayValue) transformType_; + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Appends the given elements in order if they are not already present in
+     * the current property value.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is first set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when checking if a value is missing.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * If the input contains multiple equivalent values, only the first will
+     * be considered.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.ArrayValue, + com.google.datastore.v1.ArrayValue.Builder, + com.google.datastore.v1.ArrayValueOrBuilder> + getAppendMissingElementsFieldBuilder() { + if (appendMissingElementsBuilder_ == null) { + if (!(transformTypeCase_ == 6)) { + transformType_ = com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + appendMissingElementsBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.ArrayValue, + com.google.datastore.v1.ArrayValue.Builder, + com.google.datastore.v1.ArrayValueOrBuilder>( + (com.google.datastore.v1.ArrayValue) transformType_, + getParentForChildren(), + isClean()); + transformType_ = null; + } + transformTypeCase_ = 6; + onChanged(); + return appendMissingElementsBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.ArrayValue, + com.google.datastore.v1.ArrayValue.Builder, + com.google.datastore.v1.ArrayValueOrBuilder> + removeAllFromArrayBuilder_; + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + * + * @return Whether the removeAllFromArray field is set. + */ + @java.lang.Override + public boolean hasRemoveAllFromArray() { + return transformTypeCase_ == 7; + } + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + * + * @return The removeAllFromArray. + */ + @java.lang.Override + public com.google.datastore.v1.ArrayValue getRemoveAllFromArray() { + if (removeAllFromArrayBuilder_ == null) { + if (transformTypeCase_ == 7) { + return (com.google.datastore.v1.ArrayValue) transformType_; + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } else { + if (transformTypeCase_ == 7) { + return removeAllFromArrayBuilder_.getMessage(); + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + public Builder setRemoveAllFromArray(com.google.datastore.v1.ArrayValue value) { + if (removeAllFromArrayBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + transformType_ = value; + onChanged(); + } else { + removeAllFromArrayBuilder_.setMessage(value); + } + transformTypeCase_ = 7; + return this; + } + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + public Builder setRemoveAllFromArray( + com.google.datastore.v1.ArrayValue.Builder builderForValue) { + if (removeAllFromArrayBuilder_ == null) { + transformType_ = builderForValue.build(); + onChanged(); + } else { + removeAllFromArrayBuilder_.setMessage(builderForValue.build()); + } + transformTypeCase_ = 7; + return this; + } + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + public Builder mergeRemoveAllFromArray(com.google.datastore.v1.ArrayValue value) { + if (removeAllFromArrayBuilder_ == null) { + if (transformTypeCase_ == 7 + && transformType_ != com.google.datastore.v1.ArrayValue.getDefaultInstance()) { + transformType_ = + com.google.datastore.v1.ArrayValue.newBuilder( + (com.google.datastore.v1.ArrayValue) transformType_) + .mergeFrom(value) + .buildPartial(); + } else { + transformType_ = value; + } + onChanged(); + } else { + if (transformTypeCase_ == 7) { + removeAllFromArrayBuilder_.mergeFrom(value); + } else { + removeAllFromArrayBuilder_.setMessage(value); + } + } + transformTypeCase_ = 7; + return this; + } + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + public Builder clearRemoveAllFromArray() { + if (removeAllFromArrayBuilder_ == null) { + if (transformTypeCase_ == 7) { + transformTypeCase_ = 0; + transformType_ = null; + onChanged(); + } + } else { + if (transformTypeCase_ == 7) { + transformTypeCase_ = 0; + transformType_ = null; + } + removeAllFromArrayBuilder_.clear(); + } + return this; + } + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + public com.google.datastore.v1.ArrayValue.Builder getRemoveAllFromArrayBuilder() { + return getRemoveAllFromArrayFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + @java.lang.Override + public com.google.datastore.v1.ArrayValueOrBuilder getRemoveAllFromArrayOrBuilder() { + if ((transformTypeCase_ == 7) && (removeAllFromArrayBuilder_ != null)) { + return removeAllFromArrayBuilder_.getMessageOrBuilder(); + } else { + if (transformTypeCase_ == 7) { + return (com.google.datastore.v1.ArrayValue) transformType_; + } + return com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + } + + /** + * + * + *
+     * Removes all of the given elements from the array in the property.
+     * If the property is not an array, or if the property does not yet exist,
+     * it is set to the empty array.
+     *
+     * Equivalent numbers of different types (e.g. 3L and 3.0) are
+     * considered equal when deciding whether an element should be removed.
+     * NaN is equal to NaN, and the null value is equal to the null value.
+     * This will remove all equivalent values if there are duplicates.
+     *
+     * The corresponding transform result will be the null value.
+     * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.ArrayValue, + com.google.datastore.v1.ArrayValue.Builder, + com.google.datastore.v1.ArrayValueOrBuilder> + getRemoveAllFromArrayFieldBuilder() { + if (removeAllFromArrayBuilder_ == null) { + if (!(transformTypeCase_ == 7)) { + transformType_ = com.google.datastore.v1.ArrayValue.getDefaultInstance(); + } + removeAllFromArrayBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.ArrayValue, + com.google.datastore.v1.ArrayValue.Builder, + com.google.datastore.v1.ArrayValueOrBuilder>( + (com.google.datastore.v1.ArrayValue) transformType_, + getParentForChildren(), + isClean()); + transformType_ = null; + } + transformTypeCase_ = 7; + onChanged(); + return removeAllFromArrayBuilder_; + } + + @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.datastore.v1.PropertyTransform) + } + + // @@protoc_insertion_point(class_scope:google.datastore.v1.PropertyTransform) + private static final com.google.datastore.v1.PropertyTransform DEFAULT_INSTANCE; + + static { + DEFAULT_INSTANCE = new com.google.datastore.v1.PropertyTransform(); + } + + public static com.google.datastore.v1.PropertyTransform getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PropertyTransform 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.datastore.v1.PropertyTransform getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } +} diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyTransformOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyTransformOrBuilder.java new file mode 100644 index 000000000..7371d380a --- /dev/null +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/PropertyTransformOrBuilder.java @@ -0,0 +1,451 @@ +/* + * 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/datastore/v1/datastore.proto + +// Protobuf Java Version: 3.25.5 +package com.google.datastore.v1; + +public interface PropertyTransformOrBuilder + extends + // @@protoc_insertion_point(interface_extends:google.datastore.v1.PropertyTransform) + com.google.protobuf.MessageOrBuilder { + + /** + * + * + *
+   * Optional. The name of the property.
+   *
+   * Property paths (a list of property names separated by dots (`.`)) may be
+   * used to refer to properties inside entity values. For example `foo.bar`
+   * means the property `bar` inside the entity property `foo`.
+   *
+   * If a property name contains a dot `.` or a backlslash `\`, then that name
+   * must be escaped.
+   * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The property. + */ + java.lang.String getProperty(); + + /** + * + * + *
+   * Optional. The name of the property.
+   *
+   * Property paths (a list of property names separated by dots (`.`)) may be
+   * used to refer to properties inside entity values. For example `foo.bar`
+   * means the property `bar` inside the entity property `foo`.
+   *
+   * If a property name contains a dot `.` or a backlslash `\`, then that name
+   * must be escaped.
+   * 
+ * + * string property = 1 [(.google.api.field_behavior) = OPTIONAL]; + * + * @return The bytes for property. + */ + com.google.protobuf.ByteString getPropertyBytes(); + + /** + * + * + *
+   * Sets the property to the given server value.
+   * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return Whether the setToServerValue field is set. + */ + boolean hasSetToServerValue(); + + /** + * + * + *
+   * Sets the property to the given server value.
+   * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return The enum numeric value on the wire for setToServerValue. + */ + int getSetToServerValueValue(); + + /** + * + * + *
+   * Sets the property to the given server value.
+   * 
+ * + * .google.datastore.v1.PropertyTransform.ServerValue set_to_server_value = 2; + * + * @return The setToServerValue. + */ + com.google.datastore.v1.PropertyTransform.ServerValue getSetToServerValue(); + + /** + * + * + *
+   * Adds the given value to the property's current value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If either of the given value or the current property value are doubles,
+   * both values will be interpreted as doubles. Double arithmetic and
+   * representation of double values follows IEEE 754 semantics.
+   * If there is positive/negative integer overflow, the property is resolved
+   * to the largest magnitude positive/negative integer.
+   * 
+ * + * .google.datastore.v1.Value increment = 3; + * + * @return Whether the increment field is set. + */ + boolean hasIncrement(); + + /** + * + * + *
+   * Adds the given value to the property's current value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If either of the given value or the current property value are doubles,
+   * both values will be interpreted as doubles. Double arithmetic and
+   * representation of double values follows IEEE 754 semantics.
+   * If there is positive/negative integer overflow, the property is resolved
+   * to the largest magnitude positive/negative integer.
+   * 
+ * + * .google.datastore.v1.Value increment = 3; + * + * @return The increment. + */ + com.google.datastore.v1.Value getIncrement(); + + /** + * + * + *
+   * Adds the given value to the property's current value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If either of the given value or the current property value are doubles,
+   * both values will be interpreted as doubles. Double arithmetic and
+   * representation of double values follows IEEE 754 semantics.
+   * If there is positive/negative integer overflow, the property is resolved
+   * to the largest magnitude positive/negative integer.
+   * 
+ * + * .google.datastore.v1.Value increment = 3; + */ + com.google.datastore.v1.ValueOrBuilder getIncrementOrBuilder(); + + /** + * + * + *
+   * Sets the property to the maximum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If a maximum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the larger operand. If the operands are
+   * equivalent (e.g. 3 and 3.0), the property does not change.
+   * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+   * zero input value is always the stored value.
+   * The maximum of any numeric value x and NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value maximum = 4; + * + * @return Whether the maximum field is set. + */ + boolean hasMaximum(); + + /** + * + * + *
+   * Sets the property to the maximum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If a maximum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the larger operand. If the operands are
+   * equivalent (e.g. 3 and 3.0), the property does not change.
+   * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+   * zero input value is always the stored value.
+   * The maximum of any numeric value x and NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value maximum = 4; + * + * @return The maximum. + */ + com.google.datastore.v1.Value getMaximum(); + + /** + * + * + *
+   * Sets the property to the maximum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the given value.
+   * If a maximum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the larger operand. If the operands are
+   * equivalent (e.g. 3 and 3.0), the property does not change.
+   * 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and
+   * zero input value is always the stored value.
+   * The maximum of any numeric value x and NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value maximum = 4; + */ + com.google.datastore.v1.ValueOrBuilder getMaximumOrBuilder(); + + /** + * + * + *
+   * Sets the property to the minimum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the input value.
+   * If a minimum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the smaller operand. If the operands
+   * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+   * and -0.0 are all zero. The minimum of a zero stored value and zero input
+   * value is always the stored value. The minimum of any numeric value x and
+   * NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value minimum = 5; + * + * @return Whether the minimum field is set. + */ + boolean hasMinimum(); + + /** + * + * + *
+   * Sets the property to the minimum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the input value.
+   * If a minimum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the smaller operand. If the operands
+   * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+   * and -0.0 are all zero. The minimum of a zero stored value and zero input
+   * value is always the stored value. The minimum of any numeric value x and
+   * NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value minimum = 5; + * + * @return The minimum. + */ + com.google.datastore.v1.Value getMinimum(); + + /** + * + * + *
+   * Sets the property to the minimum of its current value and the given
+   * value.
+   *
+   * This must be an integer or a double value.
+   * If the property is not an integer or double, or if the property does not
+   * yet exist, the transformation will set the property to the input value.
+   * If a minimum operation is applied where the property and the input value
+   * are of mixed types (that is - one is an integer and one is a double)
+   * the property takes on the type of the smaller operand. If the operands
+   * are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0,
+   * and -0.0 are all zero. The minimum of a zero stored value and zero input
+   * value is always the stored value. The minimum of any numeric value x and
+   * NaN is NaN.
+   * 
+ * + * .google.datastore.v1.Value minimum = 5; + */ + com.google.datastore.v1.ValueOrBuilder getMinimumOrBuilder(); + + /** + * + * + *
+   * Appends the given elements in order if they are not already present in
+   * the current property value.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is first set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when checking if a value is missing.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * If the input contains multiple equivalent values, only the first will
+   * be considered.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + * + * @return Whether the appendMissingElements field is set. + */ + boolean hasAppendMissingElements(); + + /** + * + * + *
+   * Appends the given elements in order if they are not already present in
+   * the current property value.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is first set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when checking if a value is missing.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * If the input contains multiple equivalent values, only the first will
+   * be considered.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + * + * @return The appendMissingElements. + */ + com.google.datastore.v1.ArrayValue getAppendMissingElements(); + + /** + * + * + *
+   * Appends the given elements in order if they are not already present in
+   * the current property value.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is first set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when checking if a value is missing.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * If the input contains multiple equivalent values, only the first will
+   * be considered.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue append_missing_elements = 6; + */ + com.google.datastore.v1.ArrayValueOrBuilder getAppendMissingElementsOrBuilder(); + + /** + * + * + *
+   * Removes all of the given elements from the array in the property.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when deciding whether an element should be removed.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * This will remove all equivalent values if there are duplicates.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + * + * @return Whether the removeAllFromArray field is set. + */ + boolean hasRemoveAllFromArray(); + + /** + * + * + *
+   * Removes all of the given elements from the array in the property.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when deciding whether an element should be removed.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * This will remove all equivalent values if there are duplicates.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + * + * @return The removeAllFromArray. + */ + com.google.datastore.v1.ArrayValue getRemoveAllFromArray(); + + /** + * + * + *
+   * Removes all of the given elements from the array in the property.
+   * If the property is not an array, or if the property does not yet exist,
+   * it is set to the empty array.
+   *
+   * Equivalent numbers of different types (e.g. 3L and 3.0) are
+   * considered equal when deciding whether an element should be removed.
+   * NaN is equal to NaN, and the null value is equal to the null value.
+   * This will remove all equivalent values if there are duplicates.
+   *
+   * The corresponding transform result will be the null value.
+   * 
+ * + * .google.datastore.v1.ArrayValue remove_all_from_array = 7; + */ + com.google.datastore.v1.ArrayValueOrBuilder getRemoveAllFromArrayOrBuilder(); + + com.google.datastore.v1.PropertyTransform.TransformTypeCase getTransformTypeCase(); +} diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java index a91fd271e..1e8e6ef92 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Query.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -24,6 +24,15 @@ * *
  * A query for entities.
+ *
+ * The query stages are executed in the following order:
+ * 1. kind
+ * 2. filter
+ * 3. projection
+ * 4. order + start_cursor + end_cursor
+ * 5. offset
+ * 6. limit
+ * 7. find_nearest
  * 
* * Protobuf type {@code google.datastore.v1.Query} @@ -33,6 +42,7 @@ public final class Query extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.Query) QueryOrBuilder { private static final long serialVersionUID = 0L; + // Use Query.newBuilder() to construct. private Query(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -71,6 +81,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private java.util.List projection_; + /** * * @@ -84,6 +95,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public java.util.List getProjectionList() { return projection_; } + /** * * @@ -98,6 +110,7 @@ public java.util.List getProjectionList() { getProjectionOrBuilderList() { return projection_; } + /** * * @@ -111,6 +124,7 @@ public java.util.List getProjectionList() { public int getProjectionCount() { return projection_.size(); } + /** * * @@ -124,6 +138,7 @@ public int getProjectionCount() { public com.google.datastore.v1.Projection getProjection(int index) { return projection_.get(index); } + /** * * @@ -142,6 +157,7 @@ public com.google.datastore.v1.ProjectionOrBuilder getProjectionOrBuilder(int in @SuppressWarnings("serial") private java.util.List kind_; + /** * * @@ -156,6 +172,7 @@ public com.google.datastore.v1.ProjectionOrBuilder getProjectionOrBuilder(int in public java.util.List getKindList() { return kind_; } + /** * * @@ -171,6 +188,7 @@ public java.util.List getKindList() { getKindOrBuilderList() { return kind_; } + /** * * @@ -185,6 +203,7 @@ public java.util.List getKindList() { public int getKindCount() { return kind_.size(); } + /** * * @@ -199,6 +218,7 @@ public int getKindCount() { public com.google.datastore.v1.KindExpression getKind(int index) { return kind_.get(index); } + /** * * @@ -216,6 +236,7 @@ public com.google.datastore.v1.KindExpressionOrBuilder getKindOrBuilder(int inde public static final int FILTER_FIELD_NUMBER = 4; private com.google.datastore.v1.Filter filter_; + /** * * @@ -231,6 +252,7 @@ public com.google.datastore.v1.KindExpressionOrBuilder getKindOrBuilder(int inde public boolean hasFilter() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -246,6 +268,7 @@ public boolean hasFilter() { public com.google.datastore.v1.Filter getFilter() { return filter_ == null ? com.google.datastore.v1.Filter.getDefaultInstance() : filter_; } + /** * * @@ -264,6 +287,7 @@ public com.google.datastore.v1.FilterOrBuilder getFilterOrBuilder() { @SuppressWarnings("serial") private java.util.List order_; + /** * * @@ -277,6 +301,7 @@ public com.google.datastore.v1.FilterOrBuilder getFilterOrBuilder() { public java.util.List getOrderList() { return order_; } + /** * * @@ -291,6 +316,7 @@ public java.util.List getOrderList() { getOrderOrBuilderList() { return order_; } + /** * * @@ -304,6 +330,7 @@ public java.util.List getOrderList() { public int getOrderCount() { return order_.size(); } + /** * * @@ -317,6 +344,7 @@ public int getOrderCount() { public com.google.datastore.v1.PropertyOrder getOrder(int index) { return order_.get(index); } + /** * * @@ -335,6 +363,7 @@ public com.google.datastore.v1.PropertyOrderOrBuilder getOrderOrBuilder(int inde @SuppressWarnings("serial") private java.util.List distinctOn_; + /** * * @@ -355,6 +384,7 @@ public com.google.datastore.v1.PropertyOrderOrBuilder getOrderOrBuilder(int inde public java.util.List getDistinctOnList() { return distinctOn_; } + /** * * @@ -376,6 +406,7 @@ public java.util.List getDistinctOnLi getDistinctOnOrBuilderList() { return distinctOn_; } + /** * * @@ -396,6 +427,7 @@ public java.util.List getDistinctOnLi public int getDistinctOnCount() { return distinctOn_.size(); } + /** * * @@ -416,6 +448,7 @@ public int getDistinctOnCount() { public com.google.datastore.v1.PropertyReference getDistinctOn(int index) { return distinctOn_.get(index); } + /** * * @@ -439,6 +472,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getDistinctOnOrBuilder public static final int START_CURSOR_FIELD_NUMBER = 7; private com.google.protobuf.ByteString startCursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -460,6 +494,7 @@ public com.google.protobuf.ByteString getStartCursor() { public static final int END_CURSOR_FIELD_NUMBER = 8; private com.google.protobuf.ByteString endCursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -481,6 +516,7 @@ public com.google.protobuf.ByteString getEndCursor() { public static final int OFFSET_FIELD_NUMBER = 10; private int offset_ = 0; + /** * * @@ -500,6 +536,7 @@ public int getOffset() { public static final int LIMIT_FIELD_NUMBER = 12; private com.google.protobuf.Int32Value limit_; + /** * * @@ -518,6 +555,7 @@ public int getOffset() { public boolean hasLimit() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -536,6 +574,7 @@ public boolean hasLimit() { public com.google.protobuf.Int32Value getLimit() { return limit_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : limit_; } + /** * * @@ -553,6 +592,77 @@ public com.google.protobuf.Int32ValueOrBuilder getLimitOrBuilder() { return limit_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : limit_; } + public static final int FIND_NEAREST_FIELD_NUMBER = 13; + private com.google.datastore.v1.FindNearest findNearest_; + + /** + * + * + *
+   * Optional. A potential Nearest Neighbors Search.
+   *
+   * Applies after all other filters and ordering.
+   *
+   * Finds the closest vector embeddings to the given query vector.
+   * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the findNearest field is set. + */ + @java.lang.Override + public boolean hasFindNearest() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+   * Optional. A potential Nearest Neighbors Search.
+   *
+   * Applies after all other filters and ordering.
+   *
+   * Finds the closest vector embeddings to the given query vector.
+   * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The findNearest. + */ + @java.lang.Override + public com.google.datastore.v1.FindNearest getFindNearest() { + return findNearest_ == null + ? com.google.datastore.v1.FindNearest.getDefaultInstance() + : findNearest_; + } + + /** + * + * + *
+   * Optional. A potential Nearest Neighbors Search.
+   *
+   * Applies after all other filters and ordering.
+   *
+   * Finds the closest vector embeddings to the given query vector.
+   * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + @java.lang.Override + public com.google.datastore.v1.FindNearestOrBuilder getFindNearestOrBuilder() { + return findNearest_ == null + ? com.google.datastore.v1.FindNearest.getDefaultInstance() + : findNearest_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override @@ -594,6 +704,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io if (((bitField0_ & 0x00000002) != 0)) { output.writeMessage(12, getLimit()); } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(13, getFindNearest()); + } getUnknownFields().writeTo(output); } @@ -630,6 +743,9 @@ public int getSerializedSize() { if (((bitField0_ & 0x00000002) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(12, getLimit()); } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(13, getFindNearest()); + } size += getUnknownFields().getSerializedSize(); memoizedSize = size; return size; @@ -660,6 +776,10 @@ public boolean equals(final java.lang.Object obj) { if (hasLimit()) { if (!getLimit().equals(other.getLimit())) return false; } + if (hasFindNearest() != other.hasFindNearest()) return false; + if (hasFindNearest()) { + if (!getFindNearest().equals(other.getFindNearest())) return false; + } if (!getUnknownFields().equals(other.getUnknownFields())) return false; return true; } @@ -701,6 +821,10 @@ public int hashCode() { hash = (37 * hash) + LIMIT_FIELD_NUMBER; hash = (53 * hash) + getLimit().hashCode(); } + if (hasFindNearest()) { + hash = (37 * hash) + FIND_NEAREST_FIELD_NUMBER; + hash = (53 * hash) + getFindNearest().hashCode(); + } hash = (29 * hash) + getUnknownFields().hashCode(); memoizedHashCode = hash; return hash; @@ -800,11 +924,21 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * *
    * A query for entities.
+   *
+   * The query stages are executed in the following order:
+   * 1. kind
+   * 2. filter
+   * 3. projection
+   * 4. order + start_cursor + end_cursor
+   * 5. offset
+   * 6. limit
+   * 7. find_nearest
    * 
* * Protobuf type {@code google.datastore.v1.Query} @@ -845,6 +979,7 @@ private void maybeForceBuilderInitialization() { getOrderFieldBuilder(); getDistinctOnFieldBuilder(); getLimitFieldBuilder(); + getFindNearestFieldBuilder(); } } @@ -893,6 +1028,11 @@ public Builder clear() { limitBuilder_.dispose(); limitBuilder_ = null; } + findNearest_ = null; + if (findNearestBuilder_ != null) { + findNearestBuilder_.dispose(); + findNearestBuilder_ = null; + } return this; } @@ -986,6 +1126,11 @@ private void buildPartial0(com.google.datastore.v1.Query result) { result.limit_ = limitBuilder_ == null ? limit_ : limitBuilder_.build(); to_bitField0_ |= 0x00000002; } + if (((from_bitField0_ & 0x00000200) != 0)) { + result.findNearest_ = + findNearestBuilder_ == null ? findNearest_ : findNearestBuilder_.build(); + to_bitField0_ |= 0x00000004; + } result.bitField0_ |= to_bitField0_; } @@ -1157,6 +1302,9 @@ public Builder mergeFrom(com.google.datastore.v1.Query other) { if (other.hasLimit()) { mergeLimit(other.getLimit()); } + if (other.hasFindNearest()) { + mergeFindNearest(other.getFindNearest()); + } this.mergeUnknownFields(other.getUnknownFields()); onChanged(); return this; @@ -1265,6 +1413,12 @@ public Builder mergeFrom( bitField0_ |= 0x00000100; break; } // case 98 + case 106: + { + input.readMessage(getFindNearestFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000200; + break; + } // case 106 default: { if (!super.parseUnknownField(input, extensionRegistry, tag)) { @@ -1316,6 +1470,7 @@ public java.util.List getProjectionList() { return projectionBuilder_.getMessageList(); } } + /** * * @@ -1332,6 +1487,7 @@ public int getProjectionCount() { return projectionBuilder_.getCount(); } } + /** * * @@ -1348,6 +1504,7 @@ public com.google.datastore.v1.Projection getProjection(int index) { return projectionBuilder_.getMessage(index); } } + /** * * @@ -1370,6 +1527,7 @@ public Builder setProjection(int index, com.google.datastore.v1.Projection value } return this; } + /** * * @@ -1390,6 +1548,7 @@ public Builder setProjection( } return this; } + /** * * @@ -1412,6 +1571,7 @@ public Builder addProjection(com.google.datastore.v1.Projection value) { } return this; } + /** * * @@ -1434,6 +1594,7 @@ public Builder addProjection(int index, com.google.datastore.v1.Projection value } return this; } + /** * * @@ -1453,6 +1614,7 @@ public Builder addProjection(com.google.datastore.v1.Projection.Builder builderF } return this; } + /** * * @@ -1473,6 +1635,7 @@ public Builder addProjection( } return this; } + /** * * @@ -1493,6 +1656,7 @@ public Builder addAllProjection( } return this; } + /** * * @@ -1512,6 +1676,7 @@ public Builder clearProjection() { } return this; } + /** * * @@ -1531,6 +1696,7 @@ public Builder removeProjection(int index) { } return this; } + /** * * @@ -1543,6 +1709,7 @@ public Builder removeProjection(int index) { public com.google.datastore.v1.Projection.Builder getProjectionBuilder(int index) { return getProjectionFieldBuilder().getBuilder(index); } + /** * * @@ -1559,6 +1726,7 @@ public com.google.datastore.v1.ProjectionOrBuilder getProjectionOrBuilder(int in return projectionBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1576,6 +1744,7 @@ public com.google.datastore.v1.ProjectionOrBuilder getProjectionOrBuilder(int in return java.util.Collections.unmodifiableList(projection_); } } + /** * * @@ -1589,6 +1758,7 @@ public com.google.datastore.v1.Projection.Builder addProjectionBuilder() { return getProjectionFieldBuilder() .addBuilder(com.google.datastore.v1.Projection.getDefaultInstance()); } + /** * * @@ -1602,6 +1772,7 @@ public com.google.datastore.v1.Projection.Builder addProjectionBuilder(int index return getProjectionFieldBuilder() .addBuilder(index, com.google.datastore.v1.Projection.getDefaultInstance()); } + /** * * @@ -1665,6 +1836,7 @@ public java.util.List getKindList() { return kindBuilder_.getMessageList(); } } + /** * * @@ -1682,6 +1854,7 @@ public int getKindCount() { return kindBuilder_.getCount(); } } + /** * * @@ -1699,6 +1872,7 @@ public com.google.datastore.v1.KindExpression getKind(int index) { return kindBuilder_.getMessage(index); } } + /** * * @@ -1722,6 +1896,7 @@ public Builder setKind(int index, com.google.datastore.v1.KindExpression value) } return this; } + /** * * @@ -1743,6 +1918,7 @@ public Builder setKind( } return this; } + /** * * @@ -1766,6 +1942,7 @@ public Builder addKind(com.google.datastore.v1.KindExpression value) { } return this; } + /** * * @@ -1789,6 +1966,7 @@ public Builder addKind(int index, com.google.datastore.v1.KindExpression value) } return this; } + /** * * @@ -1809,6 +1987,7 @@ public Builder addKind(com.google.datastore.v1.KindExpression.Builder builderFor } return this; } + /** * * @@ -1830,6 +2009,7 @@ public Builder addKind( } return this; } + /** * * @@ -1851,6 +2031,7 @@ public Builder addAllKind( } return this; } + /** * * @@ -1871,6 +2052,7 @@ public Builder clearKind() { } return this; } + /** * * @@ -1891,6 +2073,7 @@ public Builder removeKind(int index) { } return this; } + /** * * @@ -1904,6 +2087,7 @@ public Builder removeKind(int index) { public com.google.datastore.v1.KindExpression.Builder getKindBuilder(int index) { return getKindFieldBuilder().getBuilder(index); } + /** * * @@ -1921,6 +2105,7 @@ public com.google.datastore.v1.KindExpressionOrBuilder getKindOrBuilder(int inde return kindBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1939,6 +2124,7 @@ public com.google.datastore.v1.KindExpressionOrBuilder getKindOrBuilder(int inde return java.util.Collections.unmodifiableList(kind_); } } + /** * * @@ -1953,6 +2139,7 @@ public com.google.datastore.v1.KindExpression.Builder addKindBuilder() { return getKindFieldBuilder() .addBuilder(com.google.datastore.v1.KindExpression.getDefaultInstance()); } + /** * * @@ -1967,6 +2154,7 @@ public com.google.datastore.v1.KindExpression.Builder addKindBuilder(int index) return getKindFieldBuilder() .addBuilder(index, com.google.datastore.v1.KindExpression.getDefaultInstance()); } + /** * * @@ -2004,6 +2192,7 @@ public java.util.List getKindBui com.google.datastore.v1.Filter.Builder, com.google.datastore.v1.FilterOrBuilder> filterBuilder_; + /** * * @@ -2018,6 +2207,7 @@ public java.util.List getKindBui public boolean hasFilter() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -2036,6 +2226,7 @@ public com.google.datastore.v1.Filter getFilter() { return filterBuilder_.getMessage(); } } + /** * * @@ -2058,6 +2249,7 @@ public Builder setFilter(com.google.datastore.v1.Filter value) { onChanged(); return this; } + /** * * @@ -2077,6 +2269,7 @@ public Builder setFilter(com.google.datastore.v1.Filter.Builder builderForValue) onChanged(); return this; } + /** * * @@ -2104,6 +2297,7 @@ public Builder mergeFilter(com.google.datastore.v1.Filter value) { } return this; } + /** * * @@ -2123,6 +2317,7 @@ public Builder clearFilter() { onChanged(); return this; } + /** * * @@ -2137,6 +2332,7 @@ public com.google.datastore.v1.Filter.Builder getFilterBuilder() { onChanged(); return getFilterFieldBuilder().getBuilder(); } + /** * * @@ -2153,6 +2349,7 @@ public com.google.datastore.v1.FilterOrBuilder getFilterOrBuilder() { return filter_ == null ? com.google.datastore.v1.Filter.getDefaultInstance() : filter_; } } + /** * * @@ -2211,6 +2408,7 @@ public java.util.List getOrderList() { return orderBuilder_.getMessageList(); } } + /** * * @@ -2227,6 +2425,7 @@ public int getOrderCount() { return orderBuilder_.getCount(); } } + /** * * @@ -2243,6 +2442,7 @@ public com.google.datastore.v1.PropertyOrder getOrder(int index) { return orderBuilder_.getMessage(index); } } + /** * * @@ -2265,6 +2465,7 @@ public Builder setOrder(int index, com.google.datastore.v1.PropertyOrder value) } return this; } + /** * * @@ -2285,6 +2486,7 @@ public Builder setOrder( } return this; } + /** * * @@ -2307,6 +2509,7 @@ public Builder addOrder(com.google.datastore.v1.PropertyOrder value) { } return this; } + /** * * @@ -2329,6 +2532,7 @@ public Builder addOrder(int index, com.google.datastore.v1.PropertyOrder value) } return this; } + /** * * @@ -2348,6 +2552,7 @@ public Builder addOrder(com.google.datastore.v1.PropertyOrder.Builder builderFor } return this; } + /** * * @@ -2368,6 +2573,7 @@ public Builder addOrder( } return this; } + /** * * @@ -2388,6 +2594,7 @@ public Builder addAllOrder( } return this; } + /** * * @@ -2407,6 +2614,7 @@ public Builder clearOrder() { } return this; } + /** * * @@ -2426,6 +2634,7 @@ public Builder removeOrder(int index) { } return this; } + /** * * @@ -2438,6 +2647,7 @@ public Builder removeOrder(int index) { public com.google.datastore.v1.PropertyOrder.Builder getOrderBuilder(int index) { return getOrderFieldBuilder().getBuilder(index); } + /** * * @@ -2454,6 +2664,7 @@ public com.google.datastore.v1.PropertyOrderOrBuilder getOrderOrBuilder(int inde return orderBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2471,6 +2682,7 @@ public com.google.datastore.v1.PropertyOrderOrBuilder getOrderOrBuilder(int inde return java.util.Collections.unmodifiableList(order_); } } + /** * * @@ -2484,6 +2696,7 @@ public com.google.datastore.v1.PropertyOrder.Builder addOrderBuilder() { return getOrderFieldBuilder() .addBuilder(com.google.datastore.v1.PropertyOrder.getDefaultInstance()); } + /** * * @@ -2497,6 +2710,7 @@ public com.google.datastore.v1.PropertyOrder.Builder addOrderBuilder(int index) return getOrderFieldBuilder() .addBuilder(index, com.google.datastore.v1.PropertyOrder.getDefaultInstance()); } + /** * * @@ -2567,6 +2781,7 @@ public java.util.List getDistinctOnLi return distinctOnBuilder_.getMessageList(); } } + /** * * @@ -2590,6 +2805,7 @@ public int getDistinctOnCount() { return distinctOnBuilder_.getCount(); } } + /** * * @@ -2613,6 +2829,7 @@ public com.google.datastore.v1.PropertyReference getDistinctOn(int index) { return distinctOnBuilder_.getMessage(index); } } + /** * * @@ -2642,6 +2859,7 @@ public Builder setDistinctOn(int index, com.google.datastore.v1.PropertyReferenc } return this; } + /** * * @@ -2669,6 +2887,7 @@ public Builder setDistinctOn( } return this; } + /** * * @@ -2698,6 +2917,7 @@ public Builder addDistinctOn(com.google.datastore.v1.PropertyReference value) { } return this; } + /** * * @@ -2727,6 +2947,7 @@ public Builder addDistinctOn(int index, com.google.datastore.v1.PropertyReferenc } return this; } + /** * * @@ -2754,6 +2975,7 @@ public Builder addDistinctOn( } return this; } + /** * * @@ -2781,6 +3003,7 @@ public Builder addDistinctOn( } return this; } + /** * * @@ -2808,6 +3031,7 @@ public Builder addAllDistinctOn( } return this; } + /** * * @@ -2834,6 +3058,7 @@ public Builder clearDistinctOn() { } return this; } + /** * * @@ -2860,6 +3085,7 @@ public Builder removeDistinctOn(int index) { } return this; } + /** * * @@ -2879,6 +3105,7 @@ public Builder removeDistinctOn(int index) { public com.google.datastore.v1.PropertyReference.Builder getDistinctOnBuilder(int index) { return getDistinctOnFieldBuilder().getBuilder(index); } + /** * * @@ -2902,6 +3129,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getDistinctOnOrBuilder return distinctOnBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -2926,6 +3154,7 @@ public com.google.datastore.v1.PropertyReferenceOrBuilder getDistinctOnOrBuilder return java.util.Collections.unmodifiableList(distinctOn_); } } + /** * * @@ -2946,6 +3175,7 @@ public com.google.datastore.v1.PropertyReference.Builder addDistinctOnBuilder() return getDistinctOnFieldBuilder() .addBuilder(com.google.datastore.v1.PropertyReference.getDefaultInstance()); } + /** * * @@ -2966,6 +3196,7 @@ public com.google.datastore.v1.PropertyReference.Builder addDistinctOnBuilder(in return getDistinctOnFieldBuilder() .addBuilder(index, com.google.datastore.v1.PropertyReference.getDefaultInstance()); } + /** * * @@ -3005,6 +3236,7 @@ public com.google.datastore.v1.PropertyReference.Builder addDistinctOnBuilder(in } private com.google.protobuf.ByteString startCursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -3023,6 +3255,7 @@ public com.google.datastore.v1.PropertyReference.Builder addDistinctOnBuilder(in public com.google.protobuf.ByteString getStartCursor() { return startCursor_; } + /** * * @@ -3047,6 +3280,7 @@ public Builder setStartCursor(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -3069,6 +3303,7 @@ public Builder clearStartCursor() { } private com.google.protobuf.ByteString endCursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -3087,6 +3322,7 @@ public Builder clearStartCursor() { public com.google.protobuf.ByteString getEndCursor() { return endCursor_; } + /** * * @@ -3111,6 +3347,7 @@ public Builder setEndCursor(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -3133,6 +3370,7 @@ public Builder clearEndCursor() { } private int offset_; + /** * * @@ -3149,6 +3387,7 @@ public Builder clearEndCursor() { public int getOffset() { return offset_; } + /** * * @@ -3169,6 +3408,7 @@ public Builder setOffset(int value) { onChanged(); return this; } + /** * * @@ -3194,6 +3434,7 @@ public Builder clearOffset() { com.google.protobuf.Int32Value.Builder, com.google.protobuf.Int32ValueOrBuilder> limitBuilder_; + /** * * @@ -3211,6 +3452,7 @@ public Builder clearOffset() { public boolean hasLimit() { return ((bitField0_ & 0x00000100) != 0); } + /** * * @@ -3232,6 +3474,7 @@ public com.google.protobuf.Int32Value getLimit() { return limitBuilder_.getMessage(); } } + /** * * @@ -3257,6 +3500,7 @@ public Builder setLimit(com.google.protobuf.Int32Value value) { onChanged(); return this; } + /** * * @@ -3279,6 +3523,7 @@ public Builder setLimit(com.google.protobuf.Int32Value.Builder builderForValue) onChanged(); return this; } + /** * * @@ -3309,6 +3554,7 @@ public Builder mergeLimit(com.google.protobuf.Int32Value value) { } return this; } + /** * * @@ -3331,6 +3577,7 @@ public Builder clearLimit() { onChanged(); return this; } + /** * * @@ -3348,6 +3595,7 @@ public com.google.protobuf.Int32Value.Builder getLimitBuilder() { onChanged(); return getLimitFieldBuilder().getBuilder(); } + /** * * @@ -3367,6 +3615,7 @@ public com.google.protobuf.Int32ValueOrBuilder getLimitOrBuilder() { return limit_ == null ? com.google.protobuf.Int32Value.getDefaultInstance() : limit_; } } + /** * * @@ -3396,6 +3645,254 @@ public com.google.protobuf.Int32ValueOrBuilder getLimitOrBuilder() { return limitBuilder_; } + private com.google.datastore.v1.FindNearest findNearest_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.FindNearest, + com.google.datastore.v1.FindNearest.Builder, + com.google.datastore.v1.FindNearestOrBuilder> + findNearestBuilder_; + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the findNearest field is set. + */ + public boolean hasFindNearest() { + return ((bitField0_ & 0x00000200) != 0); + } + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The findNearest. + */ + public com.google.datastore.v1.FindNearest getFindNearest() { + if (findNearestBuilder_ == null) { + return findNearest_ == null + ? com.google.datastore.v1.FindNearest.getDefaultInstance() + : findNearest_; + } else { + return findNearestBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setFindNearest(com.google.datastore.v1.FindNearest value) { + if (findNearestBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + findNearest_ = value; + } else { + findNearestBuilder_.setMessage(value); + } + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder setFindNearest(com.google.datastore.v1.FindNearest.Builder builderForValue) { + if (findNearestBuilder_ == null) { + findNearest_ = builderForValue.build(); + } else { + findNearestBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000200; + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder mergeFindNearest(com.google.datastore.v1.FindNearest value) { + if (findNearestBuilder_ == null) { + if (((bitField0_ & 0x00000200) != 0) + && findNearest_ != null + && findNearest_ != com.google.datastore.v1.FindNearest.getDefaultInstance()) { + getFindNearestBuilder().mergeFrom(value); + } else { + findNearest_ = value; + } + } else { + findNearestBuilder_.mergeFrom(value); + } + if (findNearest_ != null) { + bitField0_ |= 0x00000200; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public Builder clearFindNearest() { + bitField0_ = (bitField0_ & ~0x00000200); + findNearest_ = null; + if (findNearestBuilder_ != null) { + findNearestBuilder_.dispose(); + findNearestBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.datastore.v1.FindNearest.Builder getFindNearestBuilder() { + bitField0_ |= 0x00000200; + onChanged(); + return getFindNearestFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + public com.google.datastore.v1.FindNearestOrBuilder getFindNearestOrBuilder() { + if (findNearestBuilder_ != null) { + return findNearestBuilder_.getMessageOrBuilder(); + } else { + return findNearest_ == null + ? com.google.datastore.v1.FindNearest.getDefaultInstance() + : findNearest_; + } + } + + /** + * + * + *
+     * Optional. A potential Nearest Neighbors Search.
+     *
+     * Applies after all other filters and ordering.
+     *
+     * Finds the closest vector embeddings to the given query vector.
+     * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.FindNearest, + com.google.datastore.v1.FindNearest.Builder, + com.google.datastore.v1.FindNearestOrBuilder> + getFindNearestFieldBuilder() { + if (findNearestBuilder_ == null) { + findNearestBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.FindNearest, + com.google.datastore.v1.FindNearest.Builder, + com.google.datastore.v1.FindNearestOrBuilder>( + getFindNearest(), getParentForChildren(), isClean()); + findNearest_ = null; + } + return findNearestBuilder_; + } + @java.lang.Override public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { return super.setUnknownFields(unknownFields); diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java index 5783fb2ea..7629bf17e 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface QueryOrBuilder @@ -34,6 +34,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.Projection projection = 2; */ java.util.List getProjectionList(); + /** * * @@ -44,6 +45,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.Projection projection = 2; */ com.google.datastore.v1.Projection getProjection(int index); + /** * * @@ -54,6 +56,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.Projection projection = 2; */ int getProjectionCount(); + /** * * @@ -65,6 +68,7 @@ public interface QueryOrBuilder */ java.util.List getProjectionOrBuilderList(); + /** * * @@ -87,6 +91,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.KindExpression kind = 3; */ java.util.List getKindList(); + /** * * @@ -98,6 +103,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.KindExpression kind = 3; */ com.google.datastore.v1.KindExpression getKind(int index); + /** * * @@ -109,6 +115,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.KindExpression kind = 3; */ int getKindCount(); + /** * * @@ -120,6 +127,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.KindExpression kind = 3; */ java.util.List getKindOrBuilderList(); + /** * * @@ -144,6 +152,7 @@ public interface QueryOrBuilder * @return Whether the filter field is set. */ boolean hasFilter(); + /** * * @@ -156,6 +165,7 @@ public interface QueryOrBuilder * @return The filter. */ com.google.datastore.v1.Filter getFilter(); + /** * * @@ -177,6 +187,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.PropertyOrder order = 5; */ java.util.List getOrderList(); + /** * * @@ -187,6 +198,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.PropertyOrder order = 5; */ com.google.datastore.v1.PropertyOrder getOrder(int index); + /** * * @@ -197,6 +209,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.PropertyOrder order = 5; */ int getOrderCount(); + /** * * @@ -207,6 +220,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.PropertyOrder order = 5; */ java.util.List getOrderOrBuilderList(); + /** * * @@ -235,6 +249,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.PropertyReference distinct_on = 6; */ java.util.List getDistinctOnList(); + /** * * @@ -252,6 +267,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.PropertyReference distinct_on = 6; */ com.google.datastore.v1.PropertyReference getDistinctOn(int index); + /** * * @@ -269,6 +285,7 @@ public interface QueryOrBuilder * repeated .google.datastore.v1.PropertyReference distinct_on = 6; */ int getDistinctOnCount(); + /** * * @@ -287,6 +304,7 @@ public interface QueryOrBuilder */ java.util.List getDistinctOnOrBuilderList(); + /** * * @@ -366,6 +384,7 @@ public interface QueryOrBuilder * @return Whether the limit field is set. */ boolean hasLimit(); + /** * * @@ -381,6 +400,7 @@ public interface QueryOrBuilder * @return The limit. */ com.google.protobuf.Int32Value getLimit(); + /** * * @@ -394,4 +414,59 @@ public interface QueryOrBuilder * .google.protobuf.Int32Value limit = 12; */ com.google.protobuf.Int32ValueOrBuilder getLimitOrBuilder(); + + /** + * + * + *
+   * Optional. A potential Nearest Neighbors Search.
+   *
+   * Applies after all other filters and ordering.
+   *
+   * Finds the closest vector embeddings to the given query vector.
+   * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return Whether the findNearest field is set. + */ + boolean hasFindNearest(); + + /** + * + * + *
+   * Optional. A potential Nearest Neighbors Search.
+   *
+   * Applies after all other filters and ordering.
+   *
+   * Finds the closest vector embeddings to the given query vector.
+   * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + * + * @return The findNearest. + */ + com.google.datastore.v1.FindNearest getFindNearest(); + + /** + * + * + *
+   * Optional. A potential Nearest Neighbors Search.
+   *
+   * Applies after all other filters and ordering.
+   *
+   * Finds the closest vector embeddings to the given query vector.
+   * 
+ * + * + * .google.datastore.v1.FindNearest find_nearest = 13 [(.google.api.field_behavior) = OPTIONAL]; + * + */ + com.google.datastore.v1.FindNearestOrBuilder getFindNearestOrBuilder(); } diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProfileProto.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProfileProto.java index 1e34aa95a..9bfe380f7 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProfileProto.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryProfileProto.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query_profile.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public final class QueryProfileProto { @@ -67,12 +67,12 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + "\003\0225\n\022execution_duration\030\003 \001(\0132\031.google.p" + "rotobuf.Duration\022\027\n\017read_operations\030\004 \001(" + "\003\022,\n\013debug_stats\030\005 \001(\0132\027.google.protobuf" - + ".StructB\303\001\n\027com.google.datastore.v1B\021Que" - + "ryProfileProtoP\001Z" - + "\n\017property_filter\030\002 \001(\0132#.google.datasto" - + "re.v1.PropertyFilterH\000B\r\n\013filter_type\"\261\001" - + "\n\017CompositeFilter\0229\n\002op\030\001 \001(\0162-.google.d" - + "atastore.v1.CompositeFilter.Operator\022,\n\007" - + "filters\030\002 \003(\0132\033.google.datastore.v1.Filt" - + "er\"5\n\010Operator\022\030\n\024OPERATOR_UNSPECIFIED\020\000" - + "\022\007\n\003AND\020\001\022\006\n\002OR\020\002\"\352\002\n\016PropertyFilter\0228\n\010" - + "property\030\001 \001(\0132&.google.datastore.v1.Pro" - + "pertyReference\0228\n\002op\030\002 \001(\0162,.google.data" - + "store.v1.PropertyFilter.Operator\022)\n\005valu" - + "e\030\003 \001(\0132\032.google.datastore.v1.Value\"\270\001\n\010" - + "Operator\022\030\n\024OPERATOR_UNSPECIFIED\020\000\022\r\n\tLE" - + "SS_THAN\020\001\022\026\n\022LESS_THAN_OR_EQUAL\020\002\022\020\n\014GRE" - + "ATER_THAN\020\003\022\031\n\025GREATER_THAN_OR_EQUAL\020\004\022\t" - + "\n\005EQUAL\020\005\022\006\n\002IN\020\006\022\r\n\tNOT_EQUAL\020\t\022\020\n\014HAS_" - + "ANCESTOR\020\013\022\n\n\006NOT_IN\020\r\"\245\002\n\010GqlQuery\022\024\n\014q" - + "uery_string\030\001 \001(\t\022\026\n\016allow_literals\030\002 \001(" - + "\010\022H\n\016named_bindings\030\005 \003(\01320.google.datas" - + "tore.v1.GqlQuery.NamedBindingsEntry\022C\n\023p" - + "ositional_bindings\030\004 \003(\0132&.google.datast" - + "ore.v1.GqlQueryParameter\032\\\n\022NamedBinding" - + "sEntry\022\013\n\003key\030\001 \001(\t\0225\n\005value\030\002 \001(\0132&.goo" - + "gle.datastore.v1.GqlQueryParameter:\0028\001\"d" - + "\n\021GqlQueryParameter\022+\n\005value\030\002 \001(\0132\032.goo" - + "gle.datastore.v1.ValueH\000\022\020\n\006cursor\030\003 \001(\014" - + "H\000B\020\n\016parameter_type\"\215\004\n\020QueryResultBatc" - + "h\022\027\n\017skipped_results\030\006 \001(\005\022\026\n\016skipped_cu" - + "rsor\030\003 \001(\014\022H\n\022entity_result_type\030\001 \001(\0162," - + ".google.datastore.v1.EntityResult.Result" - + "Type\0229\n\016entity_results\030\002 \003(\0132!.google.da" - + "tastore.v1.EntityResult\022\022\n\nend_cursor\030\004 " - + "\001(\014\022K\n\014more_results\030\005 \001(\01625.google.datas" - + "tore.v1.QueryResultBatch.MoreResultsType" - + "\022\030\n\020snapshot_version\030\007 \001(\003\022-\n\tread_time\030" - + "\010 \001(\0132\032.google.protobuf.Timestamp\"\230\001\n\017Mo" - + "reResultsType\022!\n\035MORE_RESULTS_TYPE_UNSPE" - + "CIFIED\020\000\022\020\n\014NOT_FINISHED\020\001\022\034\n\030MORE_RESUL" - + "TS_AFTER_LIMIT\020\002\022\035\n\031MORE_RESULTS_AFTER_C" - + "URSOR\020\004\022\023\n\017NO_MORE_RESULTS\020\003B\274\001\n\027com.goo" - + "gle.datastore.v1B\nQueryProtoP\001Z\n" + + "\017property_filter\030\002 \001(\0132#.google.datastore.v1.PropertyFilterH\000B\r\n" + + "\013filter_type\"\261\001\n" + + "\017CompositeFilter\0229\n" + + "\002op\030\001 \001(\0162-.google.datastore.v1.CompositeFilter.Operator\022,\n" + + "\007filters\030\002 \003(\0132\033.google.datastore.v1.Filter\"5\n" + + "\010Operator\022\030\n" + + "\024OPERATOR_UNSPECIFIED\020\000\022\007\n" + + "\003AND\020\001\022\006\n" + + "\002OR\020\002\"\352\002\n" + + "\016PropertyFilter\0228\n" + + "\010property\030\001 \001(\0132&.google.datastore.v1.PropertyReference\0228\n" + + "\002op\030\002 \001(\0162,.google.datastore.v1.PropertyFilter.Operator\022)\n" + + "\005value\030\003 \001(\0132\032.google.datastore.v1.Value\"\270\001\n" + + "\010Operator\022\030\n" + + "\024OPERATOR_UNSPECIFIED\020\000\022\r\n" + + "\tLESS_THAN\020\001\022\026\n" + + "\022LESS_THAN_OR_EQUAL\020\002\022\020\n" + + "\014GREATER_THAN\020\003\022\031\n" + + "\025GREATER_THAN_OR_EQUAL\020\004\022\t\n" + + "\005EQUAL\020\005\022\006\n" + + "\002IN\020\006\022\r" + + "\n" + + "\tNOT_EQUAL\020\t\022\020\n" + + "\014HAS_ANCESTOR\020\013\022\n\n" + + "\006NOT_IN\020\r" + + "\"\323\003\n" + + "\013FindNearest\022D\n" + + "\017vector_property\030\001" + + " \001(\0132&.google.datastore.v1.PropertyReferenceB\003\340A\002\0225\n" + + "\014query_vector\030\002 \001(\0132\032.google.datastore.v1.ValueB\003\340A\002\022O\n" + + "\020distance_measure\030\003" + + " \001(\01620.google.datastore.v1.FindNearest.DistanceMeasureB\003\340A\002\022/\n" + + "\005limit\030\004 \001(\0132\033.google.protobuf.Int32ValueB\003\340A\002\022%\n" + + "\030distance_result_property\030\005 \001(\tB\003\340A\001\022=\n" + + "\022distance_threshold\030\006" + + " \001(\0132\034.google.protobuf.DoubleValueB\003\340A\001\"_\n" + + "\017DistanceMeasure\022 \n" + + "\034DISTANCE_MEASURE_UNSPECIFIED\020\000\022\r\n" + + "\tEUCLIDEAN\020\001\022\n\n" + + "\006COSINE\020\002\022\017\n" + + "\013DOT_PRODUCT\020\003\"\245\002\n" + + "\010GqlQuery\022\024\n" + + "\014query_string\030\001 \001(\t\022\026\n" + + "\016allow_literals\030\002 \001(\010\022H\n" + + "\016named_bindings\030\005 \003(\01320.g" + + "oogle.datastore.v1.GqlQuery.NamedBindingsEntry\022C\n" + + "\023positional_bindings\030\004" + + " \003(\0132&.google.datastore.v1.GqlQueryParameter\032\\\n" + + "\022NamedBindingsEntry\022\013\n" + + "\003key\030\001 \001(\t\0225\n" + + "\005value\030\002 \001(\0132&.google.datastore.v1.GqlQueryParameter:\0028\001\"d\n" + + "\021GqlQueryParameter\022+\n" + + "\005value\030\002 \001(\0132\032.google.datastore.v1.ValueH\000\022\020\n" + + "\006cursor\030\003 \001(\014H\000B\020\n" + + "\016parameter_type\"\215\004\n" + + "\020QueryResultBatch\022\027\n" + + "\017skipped_results\030\006 \001(\005\022\026\n" + + "\016skipped_cursor\030\003 \001(\014\022H\n" + + "\022entity_result_type\030\001" + + " \001(\0162,.google.datastore.v1.EntityResult.ResultType\0229\n" + + "\016entity_results\030\002 \003(\0132!.google.datastore.v1.EntityResult\022\022\n\n" + + "end_cursor\030\004 \001(\014\022K\n" + + "\014more_results\030\005 \001(\01625.g" + + "oogle.datastore.v1.QueryResultBatch.MoreResultsType\022\030\n" + + "\020snapshot_version\030\007 \001(\003\022-\n" + + "\tread_time\030\010 \001(\0132\032.google.protobuf.Timestamp\"\230\001\n" + + "\017MoreResultsType\022!\n" + + "\035MORE_RESULTS_TYPE_UNSPECIFIED\020\000\022\020\n" + + "\014NOT_FINISHED\020\001\022\034\n" + + "\030MORE_RESULTS_AFTER_LIMIT\020\002\022\035\n" + + "\031MORE_RESULTS_AFTER_CURSOR\020\004\022\023\n" + + "\017NO_MORE_RESULTS\020\003B\273\001\n" + + "\027com.google.datastore.v1B\n" + + "QueryProtoP\001Z;cloud.google.com/go/datastore/apiv1/d" + + "atastorepb;datastorepb\252\002\031Google.Cloud.Da" + + "tastore.V1\312\002\031Google\\Cloud\\Datastore\\V1\352\002" + + "\034Google::Cloud::Datastore::V1b\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom( @@ -232,6 +287,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "EndCursor", "Offset", "Limit", + "FindNearest", }); internal_static_google_datastore_v1_AggregationQuery_descriptor = getDescriptor().getMessageTypes().get(2); @@ -335,8 +391,21 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { new java.lang.String[] { "Property", "Op", "Value", }); - internal_static_google_datastore_v1_GqlQuery_descriptor = + internal_static_google_datastore_v1_FindNearest_descriptor = getDescriptor().getMessageTypes().get(10); + internal_static_google_datastore_v1_FindNearest_fieldAccessorTable = + new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_google_datastore_v1_FindNearest_descriptor, + new java.lang.String[] { + "VectorProperty", + "QueryVector", + "DistanceMeasure", + "Limit", + "DistanceResultProperty", + "DistanceThreshold", + }); + internal_static_google_datastore_v1_GqlQuery_descriptor = + getDescriptor().getMessageTypes().get(11); internal_static_google_datastore_v1_GqlQuery_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_datastore_v1_GqlQuery_descriptor, @@ -352,7 +421,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Key", "Value", }); internal_static_google_datastore_v1_GqlQueryParameter_descriptor = - getDescriptor().getMessageTypes().get(11); + getDescriptor().getMessageTypes().get(12); internal_static_google_datastore_v1_GqlQueryParameter_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_datastore_v1_GqlQueryParameter_descriptor, @@ -360,7 +429,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { "Value", "Cursor", "ParameterType", }); internal_static_google_datastore_v1_QueryResultBatch_descriptor = - getDescriptor().getMessageTypes().get(12); + getDescriptor().getMessageTypes().get(13); internal_static_google_datastore_v1_QueryResultBatch_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_google_datastore_v1_QueryResultBatch_descriptor, diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java index a8ee6cc57..ecd44fa37 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatch.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class QueryResultBatch extends com.google.protobuf.GeneratedMessage // @@protoc_insertion_point(message_implements:google.datastore.v1.QueryResultBatch) QueryResultBatchOrBuilder { private static final long serialVersionUID = 0L; + // Use QueryResultBatch.newBuilder() to construct. private QueryResultBatch(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -141,6 +142,7 @@ public enum MoreResultsType implements com.google.protobuf.ProtocolMessageEnum { * MORE_RESULTS_TYPE_UNSPECIFIED = 0; */ public static final int MORE_RESULTS_TYPE_UNSPECIFIED_VALUE = 0; + /** * * @@ -151,6 +153,7 @@ public enum MoreResultsType implements com.google.protobuf.ProtocolMessageEnum { * NOT_FINISHED = 1; */ public static final int NOT_FINISHED_VALUE = 1; + /** * * @@ -161,6 +164,7 @@ public enum MoreResultsType implements com.google.protobuf.ProtocolMessageEnum { * MORE_RESULTS_AFTER_LIMIT = 2; */ public static final int MORE_RESULTS_AFTER_LIMIT_VALUE = 2; + /** * * @@ -172,6 +176,7 @@ public enum MoreResultsType implements com.google.protobuf.ProtocolMessageEnum { * MORE_RESULTS_AFTER_CURSOR = 4; */ public static final int MORE_RESULTS_AFTER_CURSOR_VALUE = 4; + /** * * @@ -275,6 +280,7 @@ private MoreResultsType(int value) { private int bitField0_; public static final int SKIPPED_RESULTS_FIELD_NUMBER = 6; private int skippedResults_ = 0; + /** * * @@ -293,6 +299,7 @@ public int getSkippedResults() { public static final int SKIPPED_CURSOR_FIELD_NUMBER = 3; private com.google.protobuf.ByteString skippedCursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -312,6 +319,7 @@ public com.google.protobuf.ByteString getSkippedCursor() { public static final int ENTITY_RESULT_TYPE_FIELD_NUMBER = 1; private int entityResultType_ = 0; + /** * * @@ -327,6 +335,7 @@ public com.google.protobuf.ByteString getSkippedCursor() { public int getEntityResultTypeValue() { return entityResultType_; } + /** * * @@ -349,6 +358,7 @@ public com.google.datastore.v1.EntityResult.ResultType getEntityResultType() { @SuppressWarnings("serial") private java.util.List entityResults_; + /** * * @@ -362,6 +372,7 @@ public com.google.datastore.v1.EntityResult.ResultType getEntityResultType() { public java.util.List getEntityResultsList() { return entityResults_; } + /** * * @@ -376,6 +387,7 @@ public java.util.List getEntityResultsList getEntityResultsOrBuilderList() { return entityResults_; } + /** * * @@ -389,6 +401,7 @@ public java.util.List getEntityResultsList public int getEntityResultsCount() { return entityResults_.size(); } + /** * * @@ -402,6 +415,7 @@ public int getEntityResultsCount() { public com.google.datastore.v1.EntityResult getEntityResults(int index) { return entityResults_.get(index); } + /** * * @@ -418,6 +432,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getEntityResultsOrBuilder(i public static final int END_CURSOR_FIELD_NUMBER = 4; private com.google.protobuf.ByteString endCursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -436,6 +451,7 @@ public com.google.protobuf.ByteString getEndCursor() { public static final int MORE_RESULTS_FIELD_NUMBER = 5; private int moreResults_ = 0; + /** * * @@ -451,6 +467,7 @@ public com.google.protobuf.ByteString getEndCursor() { public int getMoreResultsValue() { return moreResults_; } + /** * * @@ -473,6 +490,7 @@ public com.google.datastore.v1.QueryResultBatch.MoreResultsType getMoreResults() public static final int SNAPSHOT_VERSION_FIELD_NUMBER = 7; private long snapshotVersion_ = 0L; + /** * * @@ -499,6 +517,7 @@ public long getSnapshotVersion() { public static final int READ_TIME_FIELD_NUMBER = 8; private com.google.protobuf.Timestamp readTime_; + /** * * @@ -523,6 +542,7 @@ public long getSnapshotVersion() { public boolean hasReadTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -547,6 +567,7 @@ public boolean hasReadTime() { public com.google.protobuf.Timestamp getReadTime() { return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_; } + /** * * @@ -804,6 +825,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -1140,6 +1162,7 @@ public Builder mergeFrom( private int bitField0_; private int skippedResults_; + /** * * @@ -1155,6 +1178,7 @@ public Builder mergeFrom( public int getSkippedResults() { return skippedResults_; } + /** * * @@ -1174,6 +1198,7 @@ public Builder setSkippedResults(int value) { onChanged(); return this; } + /** * * @@ -1193,6 +1218,7 @@ public Builder clearSkippedResults() { } private com.google.protobuf.ByteString skippedCursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -1209,6 +1235,7 @@ public Builder clearSkippedResults() { public com.google.protobuf.ByteString getSkippedCursor() { return skippedCursor_; } + /** * * @@ -1231,6 +1258,7 @@ public Builder setSkippedCursor(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1251,6 +1279,7 @@ public Builder clearSkippedCursor() { } private int entityResultType_ = 0; + /** * * @@ -1266,6 +1295,7 @@ public Builder clearSkippedCursor() { public int getEntityResultTypeValue() { return entityResultType_; } + /** * * @@ -1284,6 +1314,7 @@ public Builder setEntityResultTypeValue(int value) { onChanged(); return this; } + /** * * @@ -1301,6 +1332,7 @@ public com.google.datastore.v1.EntityResult.ResultType getEntityResultType() { com.google.datastore.v1.EntityResult.ResultType.forNumber(entityResultType_); return result == null ? com.google.datastore.v1.EntityResult.ResultType.UNRECOGNIZED : result; } + /** * * @@ -1322,6 +1354,7 @@ public Builder setEntityResultType(com.google.datastore.v1.EntityResult.ResultTy onChanged(); return this; } + /** * * @@ -1373,6 +1406,7 @@ public java.util.List getEntityResultsList return entityResultsBuilder_.getMessageList(); } } + /** * * @@ -1389,6 +1423,7 @@ public int getEntityResultsCount() { return entityResultsBuilder_.getCount(); } } + /** * * @@ -1405,6 +1440,7 @@ public com.google.datastore.v1.EntityResult getEntityResults(int index) { return entityResultsBuilder_.getMessage(index); } } + /** * * @@ -1427,6 +1463,7 @@ public Builder setEntityResults(int index, com.google.datastore.v1.EntityResult } return this; } + /** * * @@ -1447,6 +1484,7 @@ public Builder setEntityResults( } return this; } + /** * * @@ -1469,6 +1507,7 @@ public Builder addEntityResults(com.google.datastore.v1.EntityResult value) { } return this; } + /** * * @@ -1491,6 +1530,7 @@ public Builder addEntityResults(int index, com.google.datastore.v1.EntityResult } return this; } + /** * * @@ -1510,6 +1550,7 @@ public Builder addEntityResults(com.google.datastore.v1.EntityResult.Builder bui } return this; } + /** * * @@ -1530,6 +1571,7 @@ public Builder addEntityResults( } return this; } + /** * * @@ -1550,6 +1592,7 @@ public Builder addAllEntityResults( } return this; } + /** * * @@ -1569,6 +1612,7 @@ public Builder clearEntityResults() { } return this; } + /** * * @@ -1588,6 +1632,7 @@ public Builder removeEntityResults(int index) { } return this; } + /** * * @@ -1600,6 +1645,7 @@ public Builder removeEntityResults(int index) { public com.google.datastore.v1.EntityResult.Builder getEntityResultsBuilder(int index) { return getEntityResultsFieldBuilder().getBuilder(index); } + /** * * @@ -1616,6 +1662,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getEntityResultsOrBuilder(i return entityResultsBuilder_.getMessageOrBuilder(index); } } + /** * * @@ -1633,6 +1680,7 @@ public com.google.datastore.v1.EntityResultOrBuilder getEntityResultsOrBuilder(i return java.util.Collections.unmodifiableList(entityResults_); } } + /** * * @@ -1646,6 +1694,7 @@ public com.google.datastore.v1.EntityResult.Builder addEntityResultsBuilder() { return getEntityResultsFieldBuilder() .addBuilder(com.google.datastore.v1.EntityResult.getDefaultInstance()); } + /** * * @@ -1659,6 +1708,7 @@ public com.google.datastore.v1.EntityResult.Builder addEntityResultsBuilder(int return getEntityResultsFieldBuilder() .addBuilder(index, com.google.datastore.v1.EntityResult.getDefaultInstance()); } + /** * * @@ -1694,6 +1744,7 @@ public com.google.datastore.v1.EntityResult.Builder addEntityResultsBuilder(int } private com.google.protobuf.ByteString endCursor_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -1709,6 +1760,7 @@ public com.google.datastore.v1.EntityResult.Builder addEntityResultsBuilder(int public com.google.protobuf.ByteString getEndCursor() { return endCursor_; } + /** * * @@ -1730,6 +1782,7 @@ public Builder setEndCursor(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1749,6 +1802,7 @@ public Builder clearEndCursor() { } private int moreResults_ = 0; + /** * * @@ -1764,6 +1818,7 @@ public Builder clearEndCursor() { public int getMoreResultsValue() { return moreResults_; } + /** * * @@ -1782,6 +1837,7 @@ public Builder setMoreResultsValue(int value) { onChanged(); return this; } + /** * * @@ -1801,6 +1857,7 @@ public com.google.datastore.v1.QueryResultBatch.MoreResultsType getMoreResults() ? com.google.datastore.v1.QueryResultBatch.MoreResultsType.UNRECOGNIZED : result; } + /** * * @@ -1822,6 +1879,7 @@ public Builder setMoreResults(com.google.datastore.v1.QueryResultBatch.MoreResul onChanged(); return this; } + /** * * @@ -1841,6 +1899,7 @@ public Builder clearMoreResults() { } private long snapshotVersion_; + /** * * @@ -1864,6 +1923,7 @@ public Builder clearMoreResults() { public long getSnapshotVersion() { return snapshotVersion_; } + /** * * @@ -1891,6 +1951,7 @@ public Builder setSnapshotVersion(long value) { onChanged(); return this; } + /** * * @@ -1923,6 +1984,7 @@ public Builder clearSnapshotVersion() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> readTimeBuilder_; + /** * * @@ -1946,6 +2008,7 @@ public Builder clearSnapshotVersion() { public boolean hasReadTime() { return ((bitField0_ & 0x00000080) != 0); } + /** * * @@ -1973,6 +2036,7 @@ public com.google.protobuf.Timestamp getReadTime() { return readTimeBuilder_.getMessage(); } } + /** * * @@ -2004,6 +2068,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -2032,6 +2097,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp.Builder builderForValue onChanged(); return this; } + /** * * @@ -2068,6 +2134,7 @@ public Builder mergeReadTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -2096,6 +2163,7 @@ public Builder clearReadTime() { onChanged(); return this; } + /** * * @@ -2119,6 +2187,7 @@ public com.google.protobuf.Timestamp.Builder getReadTimeBuilder() { onChanged(); return getReadTimeFieldBuilder().getBuilder(); } + /** * * @@ -2144,6 +2213,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() { return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java index b17dc17ae..99483d9d6 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/QueryResultBatchOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/query.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface QueryResultBatchOrBuilder @@ -63,6 +63,7 @@ public interface QueryResultBatchOrBuilder * @return The enum numeric value on the wire for entityResultType. */ int getEntityResultTypeValue(); + /** * * @@ -86,6 +87,7 @@ public interface QueryResultBatchOrBuilder * repeated .google.datastore.v1.EntityResult entity_results = 2; */ java.util.List getEntityResultsList(); + /** * * @@ -96,6 +98,7 @@ public interface QueryResultBatchOrBuilder * repeated .google.datastore.v1.EntityResult entity_results = 2; */ com.google.datastore.v1.EntityResult getEntityResults(int index); + /** * * @@ -106,6 +109,7 @@ public interface QueryResultBatchOrBuilder * repeated .google.datastore.v1.EntityResult entity_results = 2; */ int getEntityResultsCount(); + /** * * @@ -117,6 +121,7 @@ public interface QueryResultBatchOrBuilder */ java.util.List getEntityResultsOrBuilderList(); + /** * * @@ -153,6 +158,7 @@ public interface QueryResultBatchOrBuilder * @return The enum numeric value on the wire for moreResults. */ int getMoreResultsValue(); + /** * * @@ -208,6 +214,7 @@ public interface QueryResultBatchOrBuilder * @return Whether the readTime field is set. */ boolean hasReadTime(); + /** * * @@ -229,6 +236,7 @@ public interface QueryResultBatchOrBuilder * @return The readTime. */ com.google.protobuf.Timestamp getReadTime(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java index a64c56d36..954270bf8 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class ReadOptions extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.ReadOptions) ReadOptionsOrBuilder { private static final long serialVersionUID = 0L; + // Use ReadOptions.newBuilder() to construct. private ReadOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -114,6 +115,7 @@ public enum ReadConsistency implements com.google.protobuf.ProtocolMessageEnum { * READ_CONSISTENCY_UNSPECIFIED = 0; */ public static final int READ_CONSISTENCY_UNSPECIFIED_VALUE = 0; + /** * * @@ -124,6 +126,7 @@ public enum ReadConsistency implements com.google.protobuf.ProtocolMessageEnum { * STRONG = 1; */ public static final int STRONG_VALUE = 1; + /** * * @@ -239,6 +242,7 @@ public enum ConsistencyTypeCase private ConsistencyTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -276,6 +280,7 @@ public ConsistencyTypeCase getConsistencyTypeCase() { } public static final int READ_CONSISTENCY_FIELD_NUMBER = 1; + /** * * @@ -290,6 +295,7 @@ public ConsistencyTypeCase getConsistencyTypeCase() { public boolean hasReadConsistency() { return consistencyTypeCase_ == 1; } + /** * * @@ -307,6 +313,7 @@ public int getReadConsistencyValue() { } return 0; } + /** * * @@ -331,6 +338,7 @@ public com.google.datastore.v1.ReadOptions.ReadConsistency getReadConsistency() } public static final int TRANSACTION_FIELD_NUMBER = 2; + /** * * @@ -348,6 +356,7 @@ public com.google.datastore.v1.ReadOptions.ReadConsistency getReadConsistency() public boolean hasTransaction() { return consistencyTypeCase_ == 2; } + /** * * @@ -370,6 +379,7 @@ public com.google.protobuf.ByteString getTransaction() { } public static final int NEW_TRANSACTION_FIELD_NUMBER = 3; + /** * * @@ -391,6 +401,7 @@ public com.google.protobuf.ByteString getTransaction() { public boolean hasNewTransaction() { return consistencyTypeCase_ == 3; } + /** * * @@ -415,6 +426,7 @@ public com.google.datastore.v1.TransactionOptions getNewTransaction() { } return com.google.datastore.v1.TransactionOptions.getDefaultInstance(); } + /** * * @@ -439,6 +451,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getNewTransactionOrBu } public static final int READ_TIME_FIELD_NUMBER = 4; + /** * * @@ -459,6 +472,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getNewTransactionOrBu public boolean hasReadTime() { return consistencyTypeCase_ == 4; } + /** * * @@ -482,6 +496,7 @@ public com.google.protobuf.Timestamp getReadTime() { } return com.google.protobuf.Timestamp.getDefaultInstance(); } + /** * * @@ -721,6 +736,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -987,6 +1003,7 @@ public Builder clearConsistencyType() { public boolean hasReadConsistency() { return consistencyTypeCase_ == 1; } + /** * * @@ -1005,6 +1022,7 @@ public int getReadConsistencyValue() { } return 0; } + /** * * @@ -1023,6 +1041,7 @@ public Builder setReadConsistencyValue(int value) { onChanged(); return this; } + /** * * @@ -1046,6 +1065,7 @@ public com.google.datastore.v1.ReadOptions.ReadConsistency getReadConsistency() } return com.google.datastore.v1.ReadOptions.ReadConsistency.READ_CONSISTENCY_UNSPECIFIED; } + /** * * @@ -1067,6 +1087,7 @@ public Builder setReadConsistency(com.google.datastore.v1.ReadOptions.ReadConsis onChanged(); return this; } + /** * * @@ -1103,6 +1124,7 @@ public Builder clearReadConsistency() { public boolean hasTransaction() { return consistencyTypeCase_ == 2; } + /** * * @@ -1122,6 +1144,7 @@ public com.google.protobuf.ByteString getTransaction() { } return com.google.protobuf.ByteString.EMPTY; } + /** * * @@ -1145,6 +1168,7 @@ public Builder setTransaction(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1172,6 +1196,7 @@ public Builder clearTransaction() { com.google.datastore.v1.TransactionOptions.Builder, com.google.datastore.v1.TransactionOptionsOrBuilder> newTransactionBuilder_; + /** * * @@ -1193,6 +1218,7 @@ public Builder clearTransaction() { public boolean hasNewTransaction() { return consistencyTypeCase_ == 3; } + /** * * @@ -1224,6 +1250,7 @@ public com.google.datastore.v1.TransactionOptions getNewTransaction() { return com.google.datastore.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -1252,6 +1279,7 @@ public Builder setNewTransaction(com.google.datastore.v1.TransactionOptions valu consistencyTypeCase_ = 3; return this; } + /** * * @@ -1278,6 +1306,7 @@ public Builder setNewTransaction( consistencyTypeCase_ = 3; return this; } + /** * * @@ -1317,6 +1346,7 @@ public Builder mergeNewTransaction(com.google.datastore.v1.TransactionOptions va consistencyTypeCase_ = 3; return this; } + /** * * @@ -1348,6 +1378,7 @@ public Builder clearNewTransaction() { } return this; } + /** * * @@ -1366,6 +1397,7 @@ public Builder clearNewTransaction() { public com.google.datastore.v1.TransactionOptions.Builder getNewTransactionBuilder() { return getNewTransactionFieldBuilder().getBuilder(); } + /** * * @@ -1392,6 +1424,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getNewTransactionOrBu return com.google.datastore.v1.TransactionOptions.getDefaultInstance(); } } + /** * * @@ -1436,6 +1469,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getNewTransactionOrBu com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> readTimeBuilder_; + /** * * @@ -1456,6 +1490,7 @@ public com.google.datastore.v1.TransactionOptionsOrBuilder getNewTransactionOrBu public boolean hasReadTime() { return consistencyTypeCase_ == 4; } + /** * * @@ -1486,6 +1521,7 @@ public com.google.protobuf.Timestamp getReadTime() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -1513,6 +1549,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp value) { consistencyTypeCase_ = 4; return this; } + /** * * @@ -1537,6 +1574,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp.Builder builderForValue consistencyTypeCase_ = 4; return this; } + /** * * @@ -1574,6 +1612,7 @@ public Builder mergeReadTime(com.google.protobuf.Timestamp value) { consistencyTypeCase_ = 4; return this; } + /** * * @@ -1604,6 +1643,7 @@ public Builder clearReadTime() { } return this; } + /** * * @@ -1621,6 +1661,7 @@ public Builder clearReadTime() { public com.google.protobuf.Timestamp.Builder getReadTimeBuilder() { return getReadTimeFieldBuilder().getBuilder(); } + /** * * @@ -1646,6 +1687,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java index dd02b663f..7ba3d1fad 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReadOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ReadOptionsOrBuilder @@ -36,6 +36,7 @@ public interface ReadOptionsOrBuilder * @return Whether the readConsistency field is set. */ boolean hasReadConsistency(); + /** * * @@ -48,6 +49,7 @@ public interface ReadOptionsOrBuilder * @return The enum numeric value on the wire for readConsistency. */ int getReadConsistencyValue(); + /** * * @@ -75,6 +77,7 @@ public interface ReadOptionsOrBuilder * @return Whether the transaction field is set. */ boolean hasTransaction(); + /** * * @@ -108,6 +111,7 @@ public interface ReadOptionsOrBuilder * @return Whether the newTransaction field is set. */ boolean hasNewTransaction(); + /** * * @@ -126,6 +130,7 @@ public interface ReadOptionsOrBuilder * @return The newTransaction. */ com.google.datastore.v1.TransactionOptions getNewTransaction(); + /** * * @@ -160,6 +165,7 @@ public interface ReadOptionsOrBuilder * @return Whether the readTime field is set. */ boolean hasReadTime(); + /** * * @@ -177,6 +183,7 @@ public interface ReadOptionsOrBuilder * @return The readTime. */ com.google.protobuf.Timestamp getReadTime(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java index f33ed677e..3a23ce121 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class ReserveIdsRequest extends com.google.protobuf.GeneratedMessag // @@protoc_insertion_point(message_implements:google.datastore.v1.ReserveIdsRequest) ReserveIdsRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use ReserveIdsRequest.newBuilder() to construct. private ReserveIdsRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -70,6 +71,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -93,6 +95,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -121,6 +124,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -147,6 +151,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -178,6 +183,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { @SuppressWarnings("serial") private java.util.List keys_; + /** * * @@ -193,6 +199,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public java.util.List getKeysList() { return keys_; } + /** * * @@ -208,6 +215,7 @@ public java.util.List getKeysList() { public java.util.List getKeysOrBuilderList() { return keys_; } + /** * * @@ -223,6 +231,7 @@ public java.util.List getKeysOrB public int getKeysCount() { return keys_.size(); } + /** * * @@ -238,6 +247,7 @@ public int getKeysCount() { public com.google.datastore.v1.Key getKeys(int index) { return keys_.get(index); } + /** * * @@ -433,6 +443,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -691,6 +702,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -713,6 +725,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -735,6 +748,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -756,6 +770,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -773,6 +788,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -797,6 +813,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -822,6 +839,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -847,6 +865,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -871,6 +890,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -891,6 +911,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -950,6 +971,7 @@ public java.util.List getKeysList() { return keysBuilder_.getMessageList(); } } + /** * * @@ -968,6 +990,7 @@ public int getKeysCount() { return keysBuilder_.getCount(); } } + /** * * @@ -986,6 +1009,7 @@ public com.google.datastore.v1.Key getKeys(int index) { return keysBuilder_.getMessage(index); } } + /** * * @@ -1010,6 +1034,7 @@ public Builder setKeys(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1031,6 +1056,7 @@ public Builder setKeys(int index, com.google.datastore.v1.Key.Builder builderFor } return this; } + /** * * @@ -1055,6 +1081,7 @@ public Builder addKeys(com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1079,6 +1106,7 @@ public Builder addKeys(int index, com.google.datastore.v1.Key value) { } return this; } + /** * * @@ -1100,6 +1128,7 @@ public Builder addKeys(com.google.datastore.v1.Key.Builder builderForValue) { } return this; } + /** * * @@ -1121,6 +1150,7 @@ public Builder addKeys(int index, com.google.datastore.v1.Key.Builder builderFor } return this; } + /** * * @@ -1142,6 +1172,7 @@ public Builder addAllKeys(java.lang.Iterable getKeysOrB return java.util.Collections.unmodifiableList(keys_); } } + /** * * @@ -1248,6 +1284,7 @@ public java.util.List getKeysOrB public com.google.datastore.v1.Key.Builder addKeysBuilder() { return getKeysFieldBuilder().addBuilder(com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * @@ -1263,6 +1300,7 @@ public com.google.datastore.v1.Key.Builder addKeysBuilder(int index) { return getKeysFieldBuilder() .addBuilder(index, com.google.datastore.v1.Key.getDefaultInstance()); } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java index f430680f6..7b26ed5c0 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ReserveIdsRequestOrBuilder @@ -36,6 +36,7 @@ public interface ReserveIdsRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -64,6 +65,7 @@ public interface ReserveIdsRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -92,6 +94,7 @@ public interface ReserveIdsRequestOrBuilder * */ java.util.List getKeysList(); + /** * * @@ -104,6 +107,7 @@ public interface ReserveIdsRequestOrBuilder * */ com.google.datastore.v1.Key getKeys(int index); + /** * * @@ -116,6 +120,7 @@ public interface ReserveIdsRequestOrBuilder * */ int getKeysCount(); + /** * * @@ -128,6 +133,7 @@ public interface ReserveIdsRequestOrBuilder * */ java.util.List getKeysOrBuilderList(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java index 6fd381126..7d89c33f3 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class ReserveIdsResponse extends com.google.protobuf.GeneratedMessa // @@protoc_insertion_point(message_implements:google.datastore.v1.ReserveIdsResponse) ReserveIdsResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use ReserveIdsResponse.newBuilder() to construct. private ReserveIdsResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -212,6 +213,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java index f58f797f2..182dfdc18 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ReserveIdsResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ReserveIdsResponseOrBuilder diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java index ddc3bbdd6..df1b5a581 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class RollbackRequest extends com.google.protobuf.GeneratedMessageV // @@protoc_insertion_point(message_implements:google.datastore.v1.RollbackRequest) RollbackRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use RollbackRequest.newBuilder() to construct. private RollbackRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -69,6 +70,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -92,6 +94,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -120,6 +123,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -146,6 +150,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -175,6 +180,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public static final int TRANSACTION_FIELD_NUMBER = 1; private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -368,6 +374,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -579,6 +586,7 @@ public Builder mergeFrom( private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -601,6 +609,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -623,6 +632,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -644,6 +654,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -661,6 +672,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -685,6 +697,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -710,6 +723,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -735,6 +749,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -759,6 +774,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -779,6 +795,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -806,6 +823,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { } private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -822,6 +840,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public com.google.protobuf.ByteString getTransaction() { return transaction_; } + /** * * @@ -844,6 +863,7 @@ public Builder setTransaction(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java index 1396a426c..8fc63434d 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface RollbackRequestOrBuilder @@ -36,6 +36,7 @@ public interface RollbackRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -64,6 +65,7 @@ public interface RollbackRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java index 8aed6de56..22c7c565f 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -35,6 +35,7 @@ public final class RollbackResponse extends com.google.protobuf.GeneratedMessage // @@protoc_insertion_point(message_implements:google.datastore.v1.RollbackResponse) RollbackResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use RollbackResponse.newBuilder() to construct. private RollbackResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -212,6 +213,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java index 13fbedee9..69e9ae346 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RollbackResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface RollbackResponseOrBuilder diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequest.java index aff95e007..5c4fd8a80 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequest.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class RunAggregationQueryRequest extends com.google.protobuf.Genera // @@protoc_insertion_point(message_implements:google.datastore.v1.RunAggregationQueryRequest) RunAggregationQueryRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use RunAggregationQueryRequest.newBuilder() to construct. private RunAggregationQueryRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -83,6 +84,7 @@ public enum QueryTypeCase private QueryTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -119,6 +121,7 @@ public QueryTypeCase getQueryTypeCase() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -142,6 +145,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -170,6 +174,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -196,6 +201,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -225,6 +231,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public static final int PARTITION_ID_FIELD_NUMBER = 2; private com.google.datastore.v1.PartitionId partitionId_; + /** * * @@ -243,6 +250,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public boolean hasPartitionId() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -263,6 +271,7 @@ public com.google.datastore.v1.PartitionId getPartitionId() { ? com.google.datastore.v1.PartitionId.getDefaultInstance() : partitionId_; } + /** * * @@ -284,6 +293,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { public static final int READ_OPTIONS_FIELD_NUMBER = 1; private com.google.datastore.v1.ReadOptions readOptions_; + /** * * @@ -299,6 +309,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { public boolean hasReadOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -316,6 +327,7 @@ public com.google.datastore.v1.ReadOptions getReadOptions() { ? com.google.datastore.v1.ReadOptions.getDefaultInstance() : readOptions_; } + /** * * @@ -333,6 +345,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { } public static final int AGGREGATION_QUERY_FIELD_NUMBER = 3; + /** * * @@ -348,6 +361,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { public boolean hasAggregationQuery() { return queryTypeCase_ == 3; } + /** * * @@ -366,6 +380,7 @@ public com.google.datastore.v1.AggregationQuery getAggregationQuery() { } return com.google.datastore.v1.AggregationQuery.getDefaultInstance(); } + /** * * @@ -384,6 +399,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getAggregationQueryOrBu } public static final int GQL_QUERY_FIELD_NUMBER = 7; + /** * * @@ -399,6 +415,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getAggregationQueryOrBu public boolean hasGqlQuery() { return queryTypeCase_ == 7; } + /** * * @@ -417,6 +434,7 @@ public com.google.datastore.v1.GqlQuery getGqlQuery() { } return com.google.datastore.v1.GqlQuery.getDefaultInstance(); } + /** * * @@ -436,6 +454,7 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { public static final int EXPLAIN_OPTIONS_FIELD_NUMBER = 11; private com.google.datastore.v1.ExplainOptions explainOptions_; + /** * * @@ -454,6 +473,7 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { public boolean hasExplainOptions() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -474,6 +494,7 @@ public com.google.datastore.v1.ExplainOptions getExplainOptions() { ? com.google.datastore.v1.ExplainOptions.getDefaultInstance() : explainOptions_; } + /** * * @@ -742,6 +763,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -1075,6 +1097,7 @@ public Builder clearQueryType() { private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -1097,6 +1120,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -1119,6 +1143,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1140,6 +1165,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1157,6 +1183,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1181,6 +1208,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -1206,6 +1234,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -1231,6 +1260,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1255,6 +1285,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1275,6 +1306,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1307,6 +1339,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { com.google.datastore.v1.PartitionId.Builder, com.google.datastore.v1.PartitionIdOrBuilder> partitionIdBuilder_; + /** * * @@ -1324,6 +1357,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public boolean hasPartitionId() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1347,6 +1381,7 @@ public com.google.datastore.v1.PartitionId getPartitionId() { return partitionIdBuilder_.getMessage(); } } + /** * * @@ -1372,6 +1407,7 @@ public Builder setPartitionId(com.google.datastore.v1.PartitionId value) { onChanged(); return this; } + /** * * @@ -1394,6 +1430,7 @@ public Builder setPartitionId(com.google.datastore.v1.PartitionId.Builder builde onChanged(); return this; } + /** * * @@ -1424,6 +1461,7 @@ public Builder mergePartitionId(com.google.datastore.v1.PartitionId value) { } return this; } + /** * * @@ -1446,6 +1484,7 @@ public Builder clearPartitionId() { onChanged(); return this; } + /** * * @@ -1463,6 +1502,7 @@ public com.google.datastore.v1.PartitionId.Builder getPartitionIdBuilder() { onChanged(); return getPartitionIdFieldBuilder().getBuilder(); } + /** * * @@ -1484,6 +1524,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { : partitionId_; } } + /** * * @@ -1519,6 +1560,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { com.google.datastore.v1.ReadOptions.Builder, com.google.datastore.v1.ReadOptionsOrBuilder> readOptionsBuilder_; + /** * * @@ -1533,6 +1575,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { public boolean hasReadOptions() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1553,6 +1596,7 @@ public com.google.datastore.v1.ReadOptions getReadOptions() { return readOptionsBuilder_.getMessage(); } } + /** * * @@ -1575,6 +1619,7 @@ public Builder setReadOptions(com.google.datastore.v1.ReadOptions value) { onChanged(); return this; } + /** * * @@ -1594,6 +1639,7 @@ public Builder setReadOptions(com.google.datastore.v1.ReadOptions.Builder builde onChanged(); return this; } + /** * * @@ -1621,6 +1667,7 @@ public Builder mergeReadOptions(com.google.datastore.v1.ReadOptions value) { } return this; } + /** * * @@ -1640,6 +1687,7 @@ public Builder clearReadOptions() { onChanged(); return this; } + /** * * @@ -1654,6 +1702,7 @@ public com.google.datastore.v1.ReadOptions.Builder getReadOptionsBuilder() { onChanged(); return getReadOptionsFieldBuilder().getBuilder(); } + /** * * @@ -1672,6 +1721,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { : readOptions_; } } + /** * * @@ -1703,6 +1753,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { com.google.datastore.v1.AggregationQuery.Builder, com.google.datastore.v1.AggregationQueryOrBuilder> aggregationQueryBuilder_; + /** * * @@ -1718,6 +1769,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { public boolean hasAggregationQuery() { return queryTypeCase_ == 3; } + /** * * @@ -1743,6 +1795,7 @@ public com.google.datastore.v1.AggregationQuery getAggregationQuery() { return com.google.datastore.v1.AggregationQuery.getDefaultInstance(); } } + /** * * @@ -1765,6 +1818,7 @@ public Builder setAggregationQuery(com.google.datastore.v1.AggregationQuery valu queryTypeCase_ = 3; return this; } + /** * * @@ -1785,6 +1839,7 @@ public Builder setAggregationQuery( queryTypeCase_ = 3; return this; } + /** * * @@ -1817,6 +1872,7 @@ public Builder mergeAggregationQuery(com.google.datastore.v1.AggregationQuery va queryTypeCase_ = 3; return this; } + /** * * @@ -1842,6 +1898,7 @@ public Builder clearAggregationQuery() { } return this; } + /** * * @@ -1854,6 +1911,7 @@ public Builder clearAggregationQuery() { public com.google.datastore.v1.AggregationQuery.Builder getAggregationQueryBuilder() { return getAggregationQueryFieldBuilder().getBuilder(); } + /** * * @@ -1874,6 +1932,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getAggregationQueryOrBu return com.google.datastore.v1.AggregationQuery.getDefaultInstance(); } } + /** * * @@ -1912,6 +1971,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getAggregationQueryOrBu com.google.datastore.v1.GqlQuery.Builder, com.google.datastore.v1.GqlQueryOrBuilder> gqlQueryBuilder_; + /** * * @@ -1927,6 +1987,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getAggregationQueryOrBu public boolean hasGqlQuery() { return queryTypeCase_ == 7; } + /** * * @@ -1952,6 +2013,7 @@ public com.google.datastore.v1.GqlQuery getGqlQuery() { return com.google.datastore.v1.GqlQuery.getDefaultInstance(); } } + /** * * @@ -1974,6 +2036,7 @@ public Builder setGqlQuery(com.google.datastore.v1.GqlQuery value) { queryTypeCase_ = 7; return this; } + /** * * @@ -1993,6 +2056,7 @@ public Builder setGqlQuery(com.google.datastore.v1.GqlQuery.Builder builderForVa queryTypeCase_ = 7; return this; } + /** * * @@ -2025,6 +2089,7 @@ public Builder mergeGqlQuery(com.google.datastore.v1.GqlQuery value) { queryTypeCase_ = 7; return this; } + /** * * @@ -2050,6 +2115,7 @@ public Builder clearGqlQuery() { } return this; } + /** * * @@ -2062,6 +2128,7 @@ public Builder clearGqlQuery() { public com.google.datastore.v1.GqlQuery.Builder getGqlQueryBuilder() { return getGqlQueryFieldBuilder().getBuilder(); } + /** * * @@ -2082,6 +2149,7 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { return com.google.datastore.v1.GqlQuery.getDefaultInstance(); } } + /** * * @@ -2119,6 +2187,7 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { com.google.datastore.v1.ExplainOptions.Builder, com.google.datastore.v1.ExplainOptionsOrBuilder> explainOptionsBuilder_; + /** * * @@ -2136,6 +2205,7 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { public boolean hasExplainOptions() { return ((bitField0_ & 0x00000040) != 0); } + /** * * @@ -2159,6 +2229,7 @@ public com.google.datastore.v1.ExplainOptions getExplainOptions() { return explainOptionsBuilder_.getMessage(); } } + /** * * @@ -2184,6 +2255,7 @@ public Builder setExplainOptions(com.google.datastore.v1.ExplainOptions value) { onChanged(); return this; } + /** * * @@ -2207,6 +2279,7 @@ public Builder setExplainOptions( onChanged(); return this; } + /** * * @@ -2237,6 +2310,7 @@ public Builder mergeExplainOptions(com.google.datastore.v1.ExplainOptions value) } return this; } + /** * * @@ -2259,6 +2333,7 @@ public Builder clearExplainOptions() { onChanged(); return this; } + /** * * @@ -2276,6 +2351,7 @@ public com.google.datastore.v1.ExplainOptions.Builder getExplainOptionsBuilder() onChanged(); return getExplainOptionsFieldBuilder().getBuilder(); } + /** * * @@ -2297,6 +2373,7 @@ public com.google.datastore.v1.ExplainOptionsOrBuilder getExplainOptionsOrBuilde : explainOptions_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequestOrBuilder.java index cde16b816..d29e50071 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequestOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface RunAggregationQueryRequestOrBuilder @@ -36,6 +36,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -64,6 +65,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -95,6 +97,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return Whether the partitionId field is set. */ boolean hasPartitionId(); + /** * * @@ -110,6 +113,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return The partitionId. */ com.google.datastore.v1.PartitionId getPartitionId(); + /** * * @@ -136,6 +140,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return Whether the readOptions field is set. */ boolean hasReadOptions(); + /** * * @@ -148,6 +153,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return The readOptions. */ com.google.datastore.v1.ReadOptions getReadOptions(); + /** * * @@ -171,6 +177,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return Whether the aggregationQuery field is set. */ boolean hasAggregationQuery(); + /** * * @@ -183,6 +190,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return The aggregationQuery. */ com.google.datastore.v1.AggregationQuery getAggregationQuery(); + /** * * @@ -206,6 +214,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return Whether the gqlQuery field is set. */ boolean hasGqlQuery(); + /** * * @@ -218,6 +227,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return The gqlQuery. */ com.google.datastore.v1.GqlQuery getGqlQuery(); + /** * * @@ -244,6 +254,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return Whether the explainOptions field is set. */ boolean hasExplainOptions(); + /** * * @@ -259,6 +270,7 @@ public interface RunAggregationQueryRequestOrBuilder * @return The explainOptions. */ com.google.datastore.v1.ExplainOptions getExplainOptions(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponse.java index 9165ba575..21e58fece 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponse.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class RunAggregationQueryResponse extends com.google.protobuf.Gener // @@protoc_insertion_point(message_implements:google.datastore.v1.RunAggregationQueryResponse) RunAggregationQueryResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use RunAggregationQueryResponse.newBuilder() to construct. private RunAggregationQueryResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -67,6 +68,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int BATCH_FIELD_NUMBER = 1; private com.google.datastore.v1.AggregationResultBatch batch_; + /** * * @@ -82,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasBatch() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -99,6 +102,7 @@ public com.google.datastore.v1.AggregationResultBatch getBatch() { ? com.google.datastore.v1.AggregationResultBatch.getDefaultInstance() : batch_; } + /** * * @@ -117,6 +121,7 @@ public com.google.datastore.v1.AggregationResultBatchOrBuilder getBatchOrBuilder public static final int QUERY_FIELD_NUMBER = 2; private com.google.datastore.v1.AggregationQuery query_; + /** * * @@ -132,6 +137,7 @@ public com.google.datastore.v1.AggregationResultBatchOrBuilder getBatchOrBuilder public boolean hasQuery() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -147,6 +153,7 @@ public boolean hasQuery() { public com.google.datastore.v1.AggregationQuery getQuery() { return query_ == null ? com.google.datastore.v1.AggregationQuery.getDefaultInstance() : query_; } + /** * * @@ -163,6 +170,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getQueryOrBuilder() { public static final int TRANSACTION_FIELD_NUMBER = 5; private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -187,6 +195,7 @@ public com.google.protobuf.ByteString getTransaction() { public static final int EXPLAIN_METRICS_FIELD_NUMBER = 9; private com.google.datastore.v1.ExplainMetrics explainMetrics_; + /** * * @@ -204,6 +213,7 @@ public com.google.protobuf.ByteString getTransaction() { public boolean hasExplainMetrics() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -223,6 +233,7 @@ public com.google.datastore.v1.ExplainMetrics getExplainMetrics() { ? com.google.datastore.v1.ExplainMetrics.getDefaultInstance() : explainMetrics_; } + /** * * @@ -442,6 +453,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -698,6 +710,7 @@ public Builder mergeFrom( com.google.datastore.v1.AggregationResultBatch.Builder, com.google.datastore.v1.AggregationResultBatchOrBuilder> batchBuilder_; + /** * * @@ -712,6 +725,7 @@ public Builder mergeFrom( public boolean hasBatch() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -732,6 +746,7 @@ public com.google.datastore.v1.AggregationResultBatch getBatch() { return batchBuilder_.getMessage(); } } + /** * * @@ -754,6 +769,7 @@ public Builder setBatch(com.google.datastore.v1.AggregationResultBatch value) { onChanged(); return this; } + /** * * @@ -774,6 +790,7 @@ public Builder setBatch( onChanged(); return this; } + /** * * @@ -801,6 +818,7 @@ public Builder mergeBatch(com.google.datastore.v1.AggregationResultBatch value) } return this; } + /** * * @@ -820,6 +838,7 @@ public Builder clearBatch() { onChanged(); return this; } + /** * * @@ -834,6 +853,7 @@ public com.google.datastore.v1.AggregationResultBatch.Builder getBatchBuilder() onChanged(); return getBatchFieldBuilder().getBuilder(); } + /** * * @@ -852,6 +872,7 @@ public com.google.datastore.v1.AggregationResultBatchOrBuilder getBatchOrBuilder : batch_; } } + /** * * @@ -884,6 +905,7 @@ public com.google.datastore.v1.AggregationResultBatchOrBuilder getBatchOrBuilder com.google.datastore.v1.AggregationQuery.Builder, com.google.datastore.v1.AggregationQueryOrBuilder> queryBuilder_; + /** * * @@ -898,6 +920,7 @@ public com.google.datastore.v1.AggregationResultBatchOrBuilder getBatchOrBuilder public boolean hasQuery() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -918,6 +941,7 @@ public com.google.datastore.v1.AggregationQuery getQuery() { return queryBuilder_.getMessage(); } } + /** * * @@ -940,6 +964,7 @@ public Builder setQuery(com.google.datastore.v1.AggregationQuery value) { onChanged(); return this; } + /** * * @@ -959,6 +984,7 @@ public Builder setQuery(com.google.datastore.v1.AggregationQuery.Builder builder onChanged(); return this; } + /** * * @@ -986,6 +1012,7 @@ public Builder mergeQuery(com.google.datastore.v1.AggregationQuery value) { } return this; } + /** * * @@ -1005,6 +1032,7 @@ public Builder clearQuery() { onChanged(); return this; } + /** * * @@ -1019,6 +1047,7 @@ public com.google.datastore.v1.AggregationQuery.Builder getQueryBuilder() { onChanged(); return getQueryFieldBuilder().getBuilder(); } + /** * * @@ -1037,6 +1066,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getQueryOrBuilder() { : query_; } } + /** * * @@ -1064,6 +1094,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getQueryOrBuilder() { } private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -1085,6 +1116,7 @@ public com.google.datastore.v1.AggregationQueryOrBuilder getQueryOrBuilder() { public com.google.protobuf.ByteString getTransaction() { return transaction_; } + /** * * @@ -1112,6 +1144,7 @@ public Builder setTransaction(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1142,6 +1175,7 @@ public Builder clearTransaction() { com.google.datastore.v1.ExplainMetrics.Builder, com.google.datastore.v1.ExplainMetricsOrBuilder> explainMetricsBuilder_; + /** * * @@ -1158,6 +1192,7 @@ public Builder clearTransaction() { public boolean hasExplainMetrics() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1180,6 +1215,7 @@ public com.google.datastore.v1.ExplainMetrics getExplainMetrics() { return explainMetricsBuilder_.getMessage(); } } + /** * * @@ -1204,6 +1240,7 @@ public Builder setExplainMetrics(com.google.datastore.v1.ExplainMetrics value) { onChanged(); return this; } + /** * * @@ -1226,6 +1263,7 @@ public Builder setExplainMetrics( onChanged(); return this; } + /** * * @@ -1255,6 +1293,7 @@ public Builder mergeExplainMetrics(com.google.datastore.v1.ExplainMetrics value) } return this; } + /** * * @@ -1276,6 +1315,7 @@ public Builder clearExplainMetrics() { onChanged(); return this; } + /** * * @@ -1292,6 +1332,7 @@ public com.google.datastore.v1.ExplainMetrics.Builder getExplainMetricsBuilder() onChanged(); return getExplainMetricsFieldBuilder().getBuilder(); } + /** * * @@ -1312,6 +1353,7 @@ public com.google.datastore.v1.ExplainMetricsOrBuilder getExplainMetricsOrBuilde : explainMetrics_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponseOrBuilder.java index dc90c61e6..c404a126e 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponseOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunAggregationQueryResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface RunAggregationQueryResponseOrBuilder @@ -36,6 +36,7 @@ public interface RunAggregationQueryResponseOrBuilder * @return Whether the batch field is set. */ boolean hasBatch(); + /** * * @@ -48,6 +49,7 @@ public interface RunAggregationQueryResponseOrBuilder * @return The batch. */ com.google.datastore.v1.AggregationResultBatch getBatch(); + /** * * @@ -71,6 +73,7 @@ public interface RunAggregationQueryResponseOrBuilder * @return Whether the query field is set. */ boolean hasQuery(); + /** * * @@ -83,6 +86,7 @@ public interface RunAggregationQueryResponseOrBuilder * @return The query. */ com.google.datastore.v1.AggregationQuery getQuery(); + /** * * @@ -127,6 +131,7 @@ public interface RunAggregationQueryResponseOrBuilder * @return Whether the explainMetrics field is set. */ boolean hasExplainMetrics(); + /** * * @@ -141,6 +146,7 @@ public interface RunAggregationQueryResponseOrBuilder * @return The explainMetrics. */ com.google.datastore.v1.ExplainMetrics getExplainMetrics(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java index 4420d5779..39365a38b 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -33,6 +33,7 @@ public final class RunQueryRequest extends com.google.protobuf.GeneratedMessageV // @@protoc_insertion_point(message_implements:google.datastore.v1.RunQueryRequest) RunQueryRequestOrBuilder { private static final long serialVersionUID = 0L; + // Use RunQueryRequest.newBuilder() to construct. private RunQueryRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -82,6 +83,7 @@ public enum QueryTypeCase private QueryTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -118,6 +120,7 @@ public QueryTypeCase getQueryTypeCase() { @SuppressWarnings("serial") private volatile java.lang.Object projectId_ = ""; + /** * * @@ -141,6 +144,7 @@ public java.lang.String getProjectId() { return s; } } + /** * * @@ -169,6 +173,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { @SuppressWarnings("serial") private volatile java.lang.Object databaseId_ = ""; + /** * * @@ -195,6 +200,7 @@ public java.lang.String getDatabaseId() { return s; } } + /** * * @@ -224,6 +230,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public static final int PARTITION_ID_FIELD_NUMBER = 2; private com.google.datastore.v1.PartitionId partitionId_; + /** * * @@ -242,6 +249,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { public boolean hasPartitionId() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -262,6 +270,7 @@ public com.google.datastore.v1.PartitionId getPartitionId() { ? com.google.datastore.v1.PartitionId.getDefaultInstance() : partitionId_; } + /** * * @@ -283,6 +292,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { public static final int READ_OPTIONS_FIELD_NUMBER = 1; private com.google.datastore.v1.ReadOptions readOptions_; + /** * * @@ -298,6 +308,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { public boolean hasReadOptions() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -315,6 +326,7 @@ public com.google.datastore.v1.ReadOptions getReadOptions() { ? com.google.datastore.v1.ReadOptions.getDefaultInstance() : readOptions_; } + /** * * @@ -332,6 +344,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { } public static final int QUERY_FIELD_NUMBER = 3; + /** * * @@ -347,6 +360,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { public boolean hasQuery() { return queryTypeCase_ == 3; } + /** * * @@ -365,6 +379,7 @@ public com.google.datastore.v1.Query getQuery() { } return com.google.datastore.v1.Query.getDefaultInstance(); } + /** * * @@ -383,6 +398,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { } public static final int GQL_QUERY_FIELD_NUMBER = 7; + /** * * @@ -398,6 +414,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { public boolean hasGqlQuery() { return queryTypeCase_ == 7; } + /** * * @@ -416,6 +433,7 @@ public com.google.datastore.v1.GqlQuery getGqlQuery() { } return com.google.datastore.v1.GqlQuery.getDefaultInstance(); } + /** * * @@ -433,8 +451,74 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { return com.google.datastore.v1.GqlQuery.getDefaultInstance(); } + public static final int PROPERTY_MASK_FIELD_NUMBER = 10; + private com.google.datastore.v1.PropertyMask propertyMask_; + + /** + * + * + *
+   * The properties to return.
+   * This field must not be set for a projection query.
+   *
+   * See
+   * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + * + * @return Whether the propertyMask field is set. + */ + @java.lang.Override + public boolean hasPropertyMask() { + return ((bitField0_ & 0x00000004) != 0); + } + + /** + * + * + *
+   * The properties to return.
+   * This field must not be set for a projection query.
+   *
+   * See
+   * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + * + * @return The propertyMask. + */ + @java.lang.Override + public com.google.datastore.v1.PropertyMask getPropertyMask() { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + + /** + * + * + *
+   * The properties to return.
+   * This field must not be set for a projection query.
+   *
+   * See
+   * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + @java.lang.Override + public com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder() { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + public static final int EXPLAIN_OPTIONS_FIELD_NUMBER = 12; private com.google.datastore.v1.ExplainOptions explainOptions_; + /** * * @@ -451,8 +535,9 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { */ @java.lang.Override public boolean hasExplainOptions() { - return ((bitField0_ & 0x00000004) != 0); + return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -473,6 +558,7 @@ public com.google.datastore.v1.ExplainOptions getExplainOptions() { ? com.google.datastore.v1.ExplainOptions.getDefaultInstance() : explainOptions_; } + /** * * @@ -525,6 +611,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io com.google.protobuf.GeneratedMessageV3.writeString(output, 9, databaseId_); } if (((bitField0_ & 0x00000004) != 0)) { + output.writeMessage(10, getPropertyMask()); + } + if (((bitField0_ & 0x00000008) != 0)) { output.writeMessage(12, getExplainOptions()); } getUnknownFields().writeTo(output); @@ -559,6 +648,9 @@ public int getSerializedSize() { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(9, databaseId_); } if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(10, getPropertyMask()); + } + if (((bitField0_ & 0x00000008) != 0)) { size += com.google.protobuf.CodedOutputStream.computeMessageSize(12, getExplainOptions()); } size += getUnknownFields().getSerializedSize(); @@ -586,6 +678,10 @@ public boolean equals(final java.lang.Object obj) { if (hasReadOptions()) { if (!getReadOptions().equals(other.getReadOptions())) return false; } + if (hasPropertyMask() != other.hasPropertyMask()) return false; + if (hasPropertyMask()) { + if (!getPropertyMask().equals(other.getPropertyMask())) return false; + } if (hasExplainOptions() != other.hasExplainOptions()) return false; if (hasExplainOptions()) { if (!getExplainOptions().equals(other.getExplainOptions())) return false; @@ -624,6 +720,10 @@ public int hashCode() { hash = (37 * hash) + READ_OPTIONS_FIELD_NUMBER; hash = (53 * hash) + getReadOptions().hashCode(); } + if (hasPropertyMask()) { + hash = (37 * hash) + PROPERTY_MASK_FIELD_NUMBER; + hash = (53 * hash) + getPropertyMask().hashCode(); + } if (hasExplainOptions()) { hash = (37 * hash) + EXPLAIN_OPTIONS_FIELD_NUMBER; hash = (53 * hash) + getExplainOptions().hashCode(); @@ -740,6 +840,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -782,6 +883,7 @@ private void maybeForceBuilderInitialization() { if (com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders) { getPartitionIdFieldBuilder(); getReadOptionsFieldBuilder(); + getPropertyMaskFieldBuilder(); getExplainOptionsFieldBuilder(); } } @@ -808,6 +910,11 @@ public Builder clear() { if (gqlQueryBuilder_ != null) { gqlQueryBuilder_.clear(); } + propertyMask_ = null; + if (propertyMaskBuilder_ != null) { + propertyMaskBuilder_.dispose(); + propertyMaskBuilder_ = null; + } explainOptions_ = null; if (explainOptionsBuilder_ != null) { explainOptionsBuilder_.dispose(); @@ -870,9 +977,14 @@ private void buildPartial0(com.google.datastore.v1.RunQueryRequest result) { to_bitField0_ |= 0x00000002; } if (((from_bitField0_ & 0x00000040) != 0)) { + result.propertyMask_ = + propertyMaskBuilder_ == null ? propertyMask_ : propertyMaskBuilder_.build(); + to_bitField0_ |= 0x00000004; + } + if (((from_bitField0_ & 0x00000080) != 0)) { result.explainOptions_ = explainOptionsBuilder_ == null ? explainOptions_ : explainOptionsBuilder_.build(); - to_bitField0_ |= 0x00000004; + to_bitField0_ |= 0x00000008; } result.bitField0_ |= to_bitField0_; } @@ -949,6 +1061,9 @@ public Builder mergeFrom(com.google.datastore.v1.RunQueryRequest other) { if (other.hasReadOptions()) { mergeReadOptions(other.getReadOptions()); } + if (other.hasPropertyMask()) { + mergePropertyMask(other.getPropertyMask()); + } if (other.hasExplainOptions()) { mergeExplainOptions(other.getExplainOptions()); } @@ -1030,10 +1145,16 @@ public Builder mergeFrom( bitField0_ |= 0x00000002; break; } // case 74 + case 82: + { + input.readMessage(getPropertyMaskFieldBuilder().getBuilder(), extensionRegistry); + bitField0_ |= 0x00000040; + break; + } // case 82 case 98: { input.readMessage(getExplainOptionsFieldBuilder().getBuilder(), extensionRegistry); - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; break; } // case 98 default: @@ -1070,6 +1191,7 @@ public Builder clearQueryType() { private int bitField0_; private java.lang.Object projectId_ = ""; + /** * * @@ -1092,6 +1214,7 @@ public java.lang.String getProjectId() { return (java.lang.String) ref; } } + /** * * @@ -1114,6 +1237,7 @@ public com.google.protobuf.ByteString getProjectIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1135,6 +1259,7 @@ public Builder setProjectId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1152,6 +1277,7 @@ public Builder clearProjectId() { onChanged(); return this; } + /** * * @@ -1176,6 +1302,7 @@ public Builder setProjectIdBytes(com.google.protobuf.ByteString value) { } private java.lang.Object databaseId_ = ""; + /** * * @@ -1201,6 +1328,7 @@ public java.lang.String getDatabaseId() { return (java.lang.String) ref; } } + /** * * @@ -1226,6 +1354,7 @@ public com.google.protobuf.ByteString getDatabaseIdBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -1250,6 +1379,7 @@ public Builder setDatabaseId(java.lang.String value) { onChanged(); return this; } + /** * * @@ -1270,6 +1400,7 @@ public Builder clearDatabaseId() { onChanged(); return this; } + /** * * @@ -1302,6 +1433,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { com.google.datastore.v1.PartitionId.Builder, com.google.datastore.v1.PartitionIdOrBuilder> partitionIdBuilder_; + /** * * @@ -1319,6 +1451,7 @@ public Builder setDatabaseIdBytes(com.google.protobuf.ByteString value) { public boolean hasPartitionId() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -1342,6 +1475,7 @@ public com.google.datastore.v1.PartitionId getPartitionId() { return partitionIdBuilder_.getMessage(); } } + /** * * @@ -1367,6 +1501,7 @@ public Builder setPartitionId(com.google.datastore.v1.PartitionId value) { onChanged(); return this; } + /** * * @@ -1389,6 +1524,7 @@ public Builder setPartitionId(com.google.datastore.v1.PartitionId.Builder builde onChanged(); return this; } + /** * * @@ -1419,6 +1555,7 @@ public Builder mergePartitionId(com.google.datastore.v1.PartitionId value) { } return this; } + /** * * @@ -1441,6 +1578,7 @@ public Builder clearPartitionId() { onChanged(); return this; } + /** * * @@ -1458,6 +1596,7 @@ public com.google.datastore.v1.PartitionId.Builder getPartitionIdBuilder() { onChanged(); return getPartitionIdFieldBuilder().getBuilder(); } + /** * * @@ -1479,6 +1618,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { : partitionId_; } } + /** * * @@ -1514,6 +1654,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { com.google.datastore.v1.ReadOptions.Builder, com.google.datastore.v1.ReadOptionsOrBuilder> readOptionsBuilder_; + /** * * @@ -1528,6 +1669,7 @@ public com.google.datastore.v1.PartitionIdOrBuilder getPartitionIdOrBuilder() { public boolean hasReadOptions() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1548,6 +1690,7 @@ public com.google.datastore.v1.ReadOptions getReadOptions() { return readOptionsBuilder_.getMessage(); } } + /** * * @@ -1570,6 +1713,7 @@ public Builder setReadOptions(com.google.datastore.v1.ReadOptions value) { onChanged(); return this; } + /** * * @@ -1589,6 +1733,7 @@ public Builder setReadOptions(com.google.datastore.v1.ReadOptions.Builder builde onChanged(); return this; } + /** * * @@ -1616,6 +1761,7 @@ public Builder mergeReadOptions(com.google.datastore.v1.ReadOptions value) { } return this; } + /** * * @@ -1635,6 +1781,7 @@ public Builder clearReadOptions() { onChanged(); return this; } + /** * * @@ -1649,6 +1796,7 @@ public com.google.datastore.v1.ReadOptions.Builder getReadOptionsBuilder() { onChanged(); return getReadOptionsFieldBuilder().getBuilder(); } + /** * * @@ -1667,6 +1815,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { : readOptions_; } } + /** * * @@ -1698,6 +1847,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { com.google.datastore.v1.Query.Builder, com.google.datastore.v1.QueryOrBuilder> queryBuilder_; + /** * * @@ -1713,6 +1863,7 @@ public com.google.datastore.v1.ReadOptionsOrBuilder getReadOptionsOrBuilder() { public boolean hasQuery() { return queryTypeCase_ == 3; } + /** * * @@ -1738,6 +1889,7 @@ public com.google.datastore.v1.Query getQuery() { return com.google.datastore.v1.Query.getDefaultInstance(); } } + /** * * @@ -1760,6 +1912,7 @@ public Builder setQuery(com.google.datastore.v1.Query value) { queryTypeCase_ = 3; return this; } + /** * * @@ -1779,6 +1932,7 @@ public Builder setQuery(com.google.datastore.v1.Query.Builder builderForValue) { queryTypeCase_ = 3; return this; } + /** * * @@ -1810,6 +1964,7 @@ public Builder mergeQuery(com.google.datastore.v1.Query value) { queryTypeCase_ = 3; return this; } + /** * * @@ -1835,6 +1990,7 @@ public Builder clearQuery() { } return this; } + /** * * @@ -1847,6 +2003,7 @@ public Builder clearQuery() { public com.google.datastore.v1.Query.Builder getQueryBuilder() { return getQueryFieldBuilder().getBuilder(); } + /** * * @@ -1867,6 +2024,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { return com.google.datastore.v1.Query.getDefaultInstance(); } } + /** * * @@ -1903,6 +2061,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { com.google.datastore.v1.GqlQuery.Builder, com.google.datastore.v1.GqlQueryOrBuilder> gqlQueryBuilder_; + /** * * @@ -1918,6 +2077,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { public boolean hasGqlQuery() { return queryTypeCase_ == 7; } + /** * * @@ -1943,6 +2103,7 @@ public com.google.datastore.v1.GqlQuery getGqlQuery() { return com.google.datastore.v1.GqlQuery.getDefaultInstance(); } } + /** * * @@ -1965,6 +2126,7 @@ public Builder setGqlQuery(com.google.datastore.v1.GqlQuery value) { queryTypeCase_ = 7; return this; } + /** * * @@ -1984,6 +2146,7 @@ public Builder setGqlQuery(com.google.datastore.v1.GqlQuery.Builder builderForVa queryTypeCase_ = 7; return this; } + /** * * @@ -2016,6 +2179,7 @@ public Builder mergeGqlQuery(com.google.datastore.v1.GqlQuery value) { queryTypeCase_ = 7; return this; } + /** * * @@ -2041,6 +2205,7 @@ public Builder clearGqlQuery() { } return this; } + /** * * @@ -2053,6 +2218,7 @@ public Builder clearGqlQuery() { public com.google.datastore.v1.GqlQuery.Builder getGqlQueryBuilder() { return getGqlQueryFieldBuilder().getBuilder(); } + /** * * @@ -2073,6 +2239,7 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { return com.google.datastore.v1.GqlQuery.getDefaultInstance(); } } + /** * * @@ -2104,12 +2271,243 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { return gqlQueryBuilder_; } + private com.google.datastore.v1.PropertyMask propertyMask_; + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder> + propertyMaskBuilder_; + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + * + * @return Whether the propertyMask field is set. + */ + public boolean hasPropertyMask() { + return ((bitField0_ & 0x00000040) != 0); + } + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + * + * @return The propertyMask. + */ + public com.google.datastore.v1.PropertyMask getPropertyMask() { + if (propertyMaskBuilder_ == null) { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } else { + return propertyMaskBuilder_.getMessage(); + } + } + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + public Builder setPropertyMask(com.google.datastore.v1.PropertyMask value) { + if (propertyMaskBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + propertyMask_ = value; + } else { + propertyMaskBuilder_.setMessage(value); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + public Builder setPropertyMask(com.google.datastore.v1.PropertyMask.Builder builderForValue) { + if (propertyMaskBuilder_ == null) { + propertyMask_ = builderForValue.build(); + } else { + propertyMaskBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + public Builder mergePropertyMask(com.google.datastore.v1.PropertyMask value) { + if (propertyMaskBuilder_ == null) { + if (((bitField0_ & 0x00000040) != 0) + && propertyMask_ != null + && propertyMask_ != com.google.datastore.v1.PropertyMask.getDefaultInstance()) { + getPropertyMaskBuilder().mergeFrom(value); + } else { + propertyMask_ = value; + } + } else { + propertyMaskBuilder_.mergeFrom(value); + } + if (propertyMask_ != null) { + bitField0_ |= 0x00000040; + onChanged(); + } + return this; + } + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + public Builder clearPropertyMask() { + bitField0_ = (bitField0_ & ~0x00000040); + propertyMask_ = null; + if (propertyMaskBuilder_ != null) { + propertyMaskBuilder_.dispose(); + propertyMaskBuilder_ = null; + } + onChanged(); + return this; + } + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + public com.google.datastore.v1.PropertyMask.Builder getPropertyMaskBuilder() { + bitField0_ |= 0x00000040; + onChanged(); + return getPropertyMaskFieldBuilder().getBuilder(); + } + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + public com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder() { + if (propertyMaskBuilder_ != null) { + return propertyMaskBuilder_.getMessageOrBuilder(); + } else { + return propertyMask_ == null + ? com.google.datastore.v1.PropertyMask.getDefaultInstance() + : propertyMask_; + } + } + + /** + * + * + *
+     * The properties to return.
+     * This field must not be set for a projection query.
+     *
+     * See
+     * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+     * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + private com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder> + getPropertyMaskFieldBuilder() { + if (propertyMaskBuilder_ == null) { + propertyMaskBuilder_ = + new com.google.protobuf.SingleFieldBuilderV3< + com.google.datastore.v1.PropertyMask, + com.google.datastore.v1.PropertyMask.Builder, + com.google.datastore.v1.PropertyMaskOrBuilder>( + getPropertyMask(), getParentForChildren(), isClean()); + propertyMask_ = null; + } + return propertyMaskBuilder_; + } + private com.google.datastore.v1.ExplainOptions explainOptions_; private com.google.protobuf.SingleFieldBuilderV3< com.google.datastore.v1.ExplainOptions, com.google.datastore.v1.ExplainOptions.Builder, com.google.datastore.v1.ExplainOptionsOrBuilder> explainOptionsBuilder_; + /** * * @@ -2125,8 +2523,9 @@ public com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder() { * @return Whether the explainOptions field is set. */ public boolean hasExplainOptions() { - return ((bitField0_ & 0x00000040) != 0); + return ((bitField0_ & 0x00000080) != 0); } + /** * * @@ -2150,6 +2549,7 @@ public com.google.datastore.v1.ExplainOptions getExplainOptions() { return explainOptionsBuilder_.getMessage(); } } + /** * * @@ -2171,10 +2571,11 @@ public Builder setExplainOptions(com.google.datastore.v1.ExplainOptions value) { } else { explainOptionsBuilder_.setMessage(value); } - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; onChanged(); return this; } + /** * * @@ -2194,10 +2595,11 @@ public Builder setExplainOptions( } else { explainOptionsBuilder_.setMessage(builderForValue.build()); } - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; onChanged(); return this; } + /** * * @@ -2212,7 +2614,7 @@ public Builder setExplainOptions( */ public Builder mergeExplainOptions(com.google.datastore.v1.ExplainOptions value) { if (explainOptionsBuilder_ == null) { - if (((bitField0_ & 0x00000040) != 0) + if (((bitField0_ & 0x00000080) != 0) && explainOptions_ != null && explainOptions_ != com.google.datastore.v1.ExplainOptions.getDefaultInstance()) { getExplainOptionsBuilder().mergeFrom(value); @@ -2223,11 +2625,12 @@ public Builder mergeExplainOptions(com.google.datastore.v1.ExplainOptions value) explainOptionsBuilder_.mergeFrom(value); } if (explainOptions_ != null) { - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; onChanged(); } return this; } + /** * * @@ -2241,7 +2644,7 @@ public Builder mergeExplainOptions(com.google.datastore.v1.ExplainOptions value) * */ public Builder clearExplainOptions() { - bitField0_ = (bitField0_ & ~0x00000040); + bitField0_ = (bitField0_ & ~0x00000080); explainOptions_ = null; if (explainOptionsBuilder_ != null) { explainOptionsBuilder_.dispose(); @@ -2250,6 +2653,7 @@ public Builder clearExplainOptions() { onChanged(); return this; } + /** * * @@ -2263,10 +2667,11 @@ public Builder clearExplainOptions() { * */ public com.google.datastore.v1.ExplainOptions.Builder getExplainOptionsBuilder() { - bitField0_ |= 0x00000040; + bitField0_ |= 0x00000080; onChanged(); return getExplainOptionsFieldBuilder().getBuilder(); } + /** * * @@ -2288,6 +2693,7 @@ public com.google.datastore.v1.ExplainOptionsOrBuilder getExplainOptionsOrBuilde : explainOptions_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java index 9e7a6f0b9..f7f29842a 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryRequestOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface RunQueryRequestOrBuilder @@ -36,6 +36,7 @@ public interface RunQueryRequestOrBuilder * @return The projectId. */ java.lang.String getProjectId(); + /** * * @@ -64,6 +65,7 @@ public interface RunQueryRequestOrBuilder * @return The databaseId. */ java.lang.String getDatabaseId(); + /** * * @@ -95,6 +97,7 @@ public interface RunQueryRequestOrBuilder * @return Whether the partitionId field is set. */ boolean hasPartitionId(); + /** * * @@ -110,6 +113,7 @@ public interface RunQueryRequestOrBuilder * @return The partitionId. */ com.google.datastore.v1.PartitionId getPartitionId(); + /** * * @@ -136,6 +140,7 @@ public interface RunQueryRequestOrBuilder * @return Whether the readOptions field is set. */ boolean hasReadOptions(); + /** * * @@ -148,6 +153,7 @@ public interface RunQueryRequestOrBuilder * @return The readOptions. */ com.google.datastore.v1.ReadOptions getReadOptions(); + /** * * @@ -171,6 +177,7 @@ public interface RunQueryRequestOrBuilder * @return Whether the query field is set. */ boolean hasQuery(); + /** * * @@ -183,6 +190,7 @@ public interface RunQueryRequestOrBuilder * @return The query. */ com.google.datastore.v1.Query getQuery(); + /** * * @@ -206,6 +214,7 @@ public interface RunQueryRequestOrBuilder * @return Whether the gqlQuery field is set. */ boolean hasGqlQuery(); + /** * * @@ -218,6 +227,7 @@ public interface RunQueryRequestOrBuilder * @return The gqlQuery. */ com.google.datastore.v1.GqlQuery getGqlQuery(); + /** * * @@ -229,6 +239,55 @@ public interface RunQueryRequestOrBuilder */ com.google.datastore.v1.GqlQueryOrBuilder getGqlQueryOrBuilder(); + /** + * + * + *
+   * The properties to return.
+   * This field must not be set for a projection query.
+   *
+   * See
+   * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + * + * @return Whether the propertyMask field is set. + */ + boolean hasPropertyMask(); + + /** + * + * + *
+   * The properties to return.
+   * This field must not be set for a projection query.
+   *
+   * See
+   * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + * + * @return The propertyMask. + */ + com.google.datastore.v1.PropertyMask getPropertyMask(); + + /** + * + * + *
+   * The properties to return.
+   * This field must not be set for a projection query.
+   *
+   * See
+   * [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask].
+   * 
+ * + * .google.datastore.v1.PropertyMask property_mask = 10; + */ + com.google.datastore.v1.PropertyMaskOrBuilder getPropertyMaskOrBuilder(); + /** * * @@ -244,6 +303,7 @@ public interface RunQueryRequestOrBuilder * @return Whether the explainOptions field is set. */ boolean hasExplainOptions(); + /** * * @@ -259,6 +319,7 @@ public interface RunQueryRequestOrBuilder * @return The explainOptions. */ com.google.datastore.v1.ExplainOptions getExplainOptions(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java index 03d5b4b8f..224e9b21d 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class RunQueryResponse extends com.google.protobuf.GeneratedMessage // @@protoc_insertion_point(message_implements:google.datastore.v1.RunQueryResponse) RunQueryResponseOrBuilder { private static final long serialVersionUID = 0L; + // Use RunQueryResponse.newBuilder() to construct. private RunQueryResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -67,6 +68,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int BATCH_FIELD_NUMBER = 1; private com.google.datastore.v1.QueryResultBatch batch_; + /** * * @@ -82,6 +84,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasBatch() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -97,6 +100,7 @@ public boolean hasBatch() { public com.google.datastore.v1.QueryResultBatch getBatch() { return batch_ == null ? com.google.datastore.v1.QueryResultBatch.getDefaultInstance() : batch_; } + /** * * @@ -113,6 +117,7 @@ public com.google.datastore.v1.QueryResultBatchOrBuilder getBatchOrBuilder() { public static final int QUERY_FIELD_NUMBER = 2; private com.google.datastore.v1.Query query_; + /** * * @@ -128,6 +133,7 @@ public com.google.datastore.v1.QueryResultBatchOrBuilder getBatchOrBuilder() { public boolean hasQuery() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -143,6 +149,7 @@ public boolean hasQuery() { public com.google.datastore.v1.Query getQuery() { return query_ == null ? com.google.datastore.v1.Query.getDefaultInstance() : query_; } + /** * * @@ -159,6 +166,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { public static final int TRANSACTION_FIELD_NUMBER = 5; private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -183,6 +191,7 @@ public com.google.protobuf.ByteString getTransaction() { public static final int EXPLAIN_METRICS_FIELD_NUMBER = 9; private com.google.datastore.v1.ExplainMetrics explainMetrics_; + /** * * @@ -200,6 +209,7 @@ public com.google.protobuf.ByteString getTransaction() { public boolean hasExplainMetrics() { return ((bitField0_ & 0x00000004) != 0); } + /** * * @@ -219,6 +229,7 @@ public com.google.datastore.v1.ExplainMetrics getExplainMetrics() { ? com.google.datastore.v1.ExplainMetrics.getDefaultInstance() : explainMetrics_; } + /** * * @@ -437,6 +448,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -692,6 +704,7 @@ public Builder mergeFrom( com.google.datastore.v1.QueryResultBatch.Builder, com.google.datastore.v1.QueryResultBatchOrBuilder> batchBuilder_; + /** * * @@ -706,6 +719,7 @@ public Builder mergeFrom( public boolean hasBatch() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -726,6 +740,7 @@ public com.google.datastore.v1.QueryResultBatch getBatch() { return batchBuilder_.getMessage(); } } + /** * * @@ -748,6 +763,7 @@ public Builder setBatch(com.google.datastore.v1.QueryResultBatch value) { onChanged(); return this; } + /** * * @@ -767,6 +783,7 @@ public Builder setBatch(com.google.datastore.v1.QueryResultBatch.Builder builder onChanged(); return this; } + /** * * @@ -794,6 +811,7 @@ public Builder mergeBatch(com.google.datastore.v1.QueryResultBatch value) { } return this; } + /** * * @@ -813,6 +831,7 @@ public Builder clearBatch() { onChanged(); return this; } + /** * * @@ -827,6 +846,7 @@ public com.google.datastore.v1.QueryResultBatch.Builder getBatchBuilder() { onChanged(); return getBatchFieldBuilder().getBuilder(); } + /** * * @@ -845,6 +865,7 @@ public com.google.datastore.v1.QueryResultBatchOrBuilder getBatchOrBuilder() { : batch_; } } + /** * * @@ -877,6 +898,7 @@ public com.google.datastore.v1.QueryResultBatchOrBuilder getBatchOrBuilder() { com.google.datastore.v1.Query.Builder, com.google.datastore.v1.QueryOrBuilder> queryBuilder_; + /** * * @@ -891,6 +913,7 @@ public com.google.datastore.v1.QueryResultBatchOrBuilder getBatchOrBuilder() { public boolean hasQuery() { return ((bitField0_ & 0x00000002) != 0); } + /** * * @@ -909,6 +932,7 @@ public com.google.datastore.v1.Query getQuery() { return queryBuilder_.getMessage(); } } + /** * * @@ -931,6 +955,7 @@ public Builder setQuery(com.google.datastore.v1.Query value) { onChanged(); return this; } + /** * * @@ -950,6 +975,7 @@ public Builder setQuery(com.google.datastore.v1.Query.Builder builderForValue) { onChanged(); return this; } + /** * * @@ -977,6 +1003,7 @@ public Builder mergeQuery(com.google.datastore.v1.Query value) { } return this; } + /** * * @@ -996,6 +1023,7 @@ public Builder clearQuery() { onChanged(); return this; } + /** * * @@ -1010,6 +1038,7 @@ public com.google.datastore.v1.Query.Builder getQueryBuilder() { onChanged(); return getQueryFieldBuilder().getBuilder(); } + /** * * @@ -1026,6 +1055,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { return query_ == null ? com.google.datastore.v1.Query.getDefaultInstance() : query_; } } + /** * * @@ -1053,6 +1083,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { } private com.google.protobuf.ByteString transaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -1074,6 +1105,7 @@ public com.google.datastore.v1.QueryOrBuilder getQueryOrBuilder() { public com.google.protobuf.ByteString getTransaction() { return transaction_; } + /** * * @@ -1101,6 +1133,7 @@ public Builder setTransaction(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -1131,6 +1164,7 @@ public Builder clearTransaction() { com.google.datastore.v1.ExplainMetrics.Builder, com.google.datastore.v1.ExplainMetricsOrBuilder> explainMetricsBuilder_; + /** * * @@ -1147,6 +1181,7 @@ public Builder clearTransaction() { public boolean hasExplainMetrics() { return ((bitField0_ & 0x00000008) != 0); } + /** * * @@ -1169,6 +1204,7 @@ public com.google.datastore.v1.ExplainMetrics getExplainMetrics() { return explainMetricsBuilder_.getMessage(); } } + /** * * @@ -1193,6 +1229,7 @@ public Builder setExplainMetrics(com.google.datastore.v1.ExplainMetrics value) { onChanged(); return this; } + /** * * @@ -1215,6 +1252,7 @@ public Builder setExplainMetrics( onChanged(); return this; } + /** * * @@ -1244,6 +1282,7 @@ public Builder mergeExplainMetrics(com.google.datastore.v1.ExplainMetrics value) } return this; } + /** * * @@ -1265,6 +1304,7 @@ public Builder clearExplainMetrics() { onChanged(); return this; } + /** * * @@ -1281,6 +1321,7 @@ public com.google.datastore.v1.ExplainMetrics.Builder getExplainMetricsBuilder() onChanged(); return getExplainMetricsFieldBuilder().getBuilder(); } + /** * * @@ -1301,6 +1342,7 @@ public com.google.datastore.v1.ExplainMetricsOrBuilder getExplainMetricsOrBuilde : explainMetrics_; } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java index e3c0dbf8d..a3316b6ef 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/RunQueryResponseOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface RunQueryResponseOrBuilder @@ -36,6 +36,7 @@ public interface RunQueryResponseOrBuilder * @return Whether the batch field is set. */ boolean hasBatch(); + /** * * @@ -48,6 +49,7 @@ public interface RunQueryResponseOrBuilder * @return The batch. */ com.google.datastore.v1.QueryResultBatch getBatch(); + /** * * @@ -71,6 +73,7 @@ public interface RunQueryResponseOrBuilder * @return Whether the query field is set. */ boolean hasQuery(); + /** * * @@ -83,6 +86,7 @@ public interface RunQueryResponseOrBuilder * @return The query. */ com.google.datastore.v1.Query getQuery(); + /** * * @@ -127,6 +131,7 @@ public interface RunQueryResponseOrBuilder * @return Whether the explainMetrics field is set. */ boolean hasExplainMetrics(); + /** * * @@ -141,6 +146,7 @@ public interface RunQueryResponseOrBuilder * @return The explainMetrics. */ com.google.datastore.v1.ExplainMetrics getExplainMetrics(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java index 52c53d486..256238e25 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptions.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -39,6 +39,7 @@ public final class TransactionOptions extends com.google.protobuf.GeneratedMessa // @@protoc_insertion_point(message_implements:google.datastore.v1.TransactionOptions) TransactionOptionsOrBuilder { private static final long serialVersionUID = 0L; + // Use TransactionOptions.newBuilder() to construct. private TransactionOptions(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -85,6 +86,7 @@ public interface ReadWriteOrBuilder */ com.google.protobuf.ByteString getPreviousTransaction(); } + /** * * @@ -99,6 +101,7 @@ public static final class ReadWrite extends com.google.protobuf.GeneratedMessage // @@protoc_insertion_point(message_implements:google.datastore.v1.TransactionOptions.ReadWrite) ReadWriteOrBuilder { private static final long serialVersionUID = 0L; + // Use ReadWrite.newBuilder() to construct. private ReadWrite(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -132,6 +135,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public static final int PREVIOUS_TRANSACTION_FIELD_NUMBER = 1; private com.google.protobuf.ByteString previousTransaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -309,6 +313,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -495,6 +500,7 @@ public Builder mergeFrom( private com.google.protobuf.ByteString previousTransaction_ = com.google.protobuf.ByteString.EMPTY; + /** * * @@ -510,6 +516,7 @@ public Builder mergeFrom( public com.google.protobuf.ByteString getPreviousTransaction() { return previousTransaction_; } + /** * * @@ -531,6 +538,7 @@ public Builder setPreviousTransaction(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -634,6 +642,7 @@ public interface ReadOnlyOrBuilder * @return Whether the readTime field is set. */ boolean hasReadTime(); + /** * * @@ -650,6 +659,7 @@ public interface ReadOnlyOrBuilder * @return The readTime. */ com.google.protobuf.Timestamp getReadTime(); + /** * * @@ -665,6 +675,7 @@ public interface ReadOnlyOrBuilder */ com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder(); } + /** * * @@ -679,6 +690,7 @@ public static final class ReadOnly extends com.google.protobuf.GeneratedMessageV // @@protoc_insertion_point(message_implements:google.datastore.v1.TransactionOptions.ReadOnly) ReadOnlyOrBuilder { private static final long serialVersionUID = 0L; + // Use ReadOnly.newBuilder() to construct. private ReadOnly(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -710,6 +722,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { private int bitField0_; public static final int READ_TIME_FIELD_NUMBER = 1; private com.google.protobuf.Timestamp readTime_; + /** * * @@ -729,6 +742,7 @@ public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { public boolean hasReadTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -748,6 +762,7 @@ public boolean hasReadTime() { public com.google.protobuf.Timestamp getReadTime() { return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_; } + /** * * @@ -932,6 +947,7 @@ protected Builder newBuilderForType( Builder builder = new Builder(parent); return builder; } + /** * * @@ -1138,6 +1154,7 @@ public Builder mergeFrom( com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> readTimeBuilder_; + /** * * @@ -1156,6 +1173,7 @@ public Builder mergeFrom( public boolean hasReadTime() { return ((bitField0_ & 0x00000001) != 0); } + /** * * @@ -1178,6 +1196,7 @@ public com.google.protobuf.Timestamp getReadTime() { return readTimeBuilder_.getMessage(); } } + /** * * @@ -1204,6 +1223,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp value) { onChanged(); return this; } + /** * * @@ -1227,6 +1247,7 @@ public Builder setReadTime(com.google.protobuf.Timestamp.Builder builderForValue onChanged(); return this; } + /** * * @@ -1258,6 +1279,7 @@ public Builder mergeReadTime(com.google.protobuf.Timestamp value) { } return this; } + /** * * @@ -1281,6 +1303,7 @@ public Builder clearReadTime() { onChanged(); return this; } + /** * * @@ -1299,6 +1322,7 @@ public com.google.protobuf.Timestamp.Builder getReadTimeBuilder() { onChanged(); return getReadTimeFieldBuilder().getBuilder(); } + /** * * @@ -1319,6 +1343,7 @@ public com.google.protobuf.TimestampOrBuilder getReadTimeOrBuilder() { return readTime_ == null ? com.google.protobuf.Timestamp.getDefaultInstance() : readTime_; } } + /** * * @@ -1430,6 +1455,7 @@ public enum ModeCase private ModeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -1463,6 +1489,7 @@ public ModeCase getModeCase() { } public static final int READ_WRITE_FIELD_NUMBER = 1; + /** * * @@ -1478,6 +1505,7 @@ public ModeCase getModeCase() { public boolean hasReadWrite() { return modeCase_ == 1; } + /** * * @@ -1496,6 +1524,7 @@ public com.google.datastore.v1.TransactionOptions.ReadWrite getReadWrite() { } return com.google.datastore.v1.TransactionOptions.ReadWrite.getDefaultInstance(); } + /** * * @@ -1514,6 +1543,7 @@ public com.google.datastore.v1.TransactionOptions.ReadWriteOrBuilder getReadWrit } public static final int READ_ONLY_FIELD_NUMBER = 2; + /** * * @@ -1529,6 +1559,7 @@ public com.google.datastore.v1.TransactionOptions.ReadWriteOrBuilder getReadWrit public boolean hasReadOnly() { return modeCase_ == 2; } + /** * * @@ -1547,6 +1578,7 @@ public com.google.datastore.v1.TransactionOptions.ReadOnly getReadOnly() { } return com.google.datastore.v1.TransactionOptions.ReadOnly.getDefaultInstance(); } + /** * * @@ -1753,6 +1785,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -1993,6 +2026,7 @@ public Builder clearMode() { com.google.datastore.v1.TransactionOptions.ReadWrite.Builder, com.google.datastore.v1.TransactionOptions.ReadWriteOrBuilder> readWriteBuilder_; + /** * * @@ -2008,6 +2042,7 @@ public Builder clearMode() { public boolean hasReadWrite() { return modeCase_ == 1; } + /** * * @@ -2033,6 +2068,7 @@ public com.google.datastore.v1.TransactionOptions.ReadWrite getReadWrite() { return com.google.datastore.v1.TransactionOptions.ReadWrite.getDefaultInstance(); } } + /** * * @@ -2055,6 +2091,7 @@ public Builder setReadWrite(com.google.datastore.v1.TransactionOptions.ReadWrite modeCase_ = 1; return this; } + /** * * @@ -2075,6 +2112,7 @@ public Builder setReadWrite( modeCase_ = 1; return this; } + /** * * @@ -2107,6 +2145,7 @@ public Builder mergeReadWrite(com.google.datastore.v1.TransactionOptions.ReadWri modeCase_ = 1; return this; } + /** * * @@ -2132,6 +2171,7 @@ public Builder clearReadWrite() { } return this; } + /** * * @@ -2144,6 +2184,7 @@ public Builder clearReadWrite() { public com.google.datastore.v1.TransactionOptions.ReadWrite.Builder getReadWriteBuilder() { return getReadWriteFieldBuilder().getBuilder(); } + /** * * @@ -2164,6 +2205,7 @@ public com.google.datastore.v1.TransactionOptions.ReadWriteOrBuilder getReadWrit return com.google.datastore.v1.TransactionOptions.ReadWrite.getDefaultInstance(); } } + /** * * @@ -2202,6 +2244,7 @@ public com.google.datastore.v1.TransactionOptions.ReadWriteOrBuilder getReadWrit com.google.datastore.v1.TransactionOptions.ReadOnly.Builder, com.google.datastore.v1.TransactionOptions.ReadOnlyOrBuilder> readOnlyBuilder_; + /** * * @@ -2217,6 +2260,7 @@ public com.google.datastore.v1.TransactionOptions.ReadWriteOrBuilder getReadWrit public boolean hasReadOnly() { return modeCase_ == 2; } + /** * * @@ -2242,6 +2286,7 @@ public com.google.datastore.v1.TransactionOptions.ReadOnly getReadOnly() { return com.google.datastore.v1.TransactionOptions.ReadOnly.getDefaultInstance(); } } + /** * * @@ -2264,6 +2309,7 @@ public Builder setReadOnly(com.google.datastore.v1.TransactionOptions.ReadOnly v modeCase_ = 2; return this; } + /** * * @@ -2284,6 +2330,7 @@ public Builder setReadOnly( modeCase_ = 2; return this; } + /** * * @@ -2316,6 +2363,7 @@ public Builder mergeReadOnly(com.google.datastore.v1.TransactionOptions.ReadOnly modeCase_ = 2; return this; } + /** * * @@ -2341,6 +2389,7 @@ public Builder clearReadOnly() { } return this; } + /** * * @@ -2353,6 +2402,7 @@ public Builder clearReadOnly() { public com.google.datastore.v1.TransactionOptions.ReadOnly.Builder getReadOnlyBuilder() { return getReadOnlyFieldBuilder().getBuilder(); } + /** * * @@ -2373,6 +2423,7 @@ public com.google.datastore.v1.TransactionOptions.ReadOnlyOrBuilder getReadOnlyO return com.google.datastore.v1.TransactionOptions.ReadOnly.getDefaultInstance(); } } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java index 5abaa12a4..2fbfe302b 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/TransactionOptionsOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/datastore.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface TransactionOptionsOrBuilder @@ -36,6 +36,7 @@ public interface TransactionOptionsOrBuilder * @return Whether the readWrite field is set. */ boolean hasReadWrite(); + /** * * @@ -48,6 +49,7 @@ public interface TransactionOptionsOrBuilder * @return The readWrite. */ com.google.datastore.v1.TransactionOptions.ReadWrite getReadWrite(); + /** * * @@ -71,6 +73,7 @@ public interface TransactionOptionsOrBuilder * @return Whether the readOnly field is set. */ boolean hasReadOnly(); + /** * * @@ -83,6 +86,7 @@ public interface TransactionOptionsOrBuilder * @return The readOnly. */ com.google.datastore.v1.TransactionOptions.ReadOnly getReadOnly(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java index 1d63815b9..b917baaa3 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/Value.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; /** @@ -34,6 +34,7 @@ public final class Value extends com.google.protobuf.GeneratedMessageV3 // @@protoc_insertion_point(message_implements:google.datastore.v1.Value) ValueOrBuilder { private static final long serialVersionUID = 0L; + // Use Value.newBuilder() to construct. private Value(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); @@ -86,6 +87,7 @@ public enum ValueTypeCase private ValueTypeCase(int value) { this.value = value; } + /** * @param value The number of the enum to look for. * @return The enum associated with the given number. @@ -137,6 +139,7 @@ public ValueTypeCase getValueTypeCase() { } public static final int NULL_VALUE_FIELD_NUMBER = 11; + /** * * @@ -151,6 +154,7 @@ public ValueTypeCase getValueTypeCase() { public boolean hasNullValue() { return valueTypeCase_ == 11; } + /** * * @@ -168,6 +172,7 @@ public int getNullValueValue() { } return 0; } + /** * * @@ -189,6 +194,7 @@ public com.google.protobuf.NullValue getNullValue() { } public static final int BOOLEAN_VALUE_FIELD_NUMBER = 1; + /** * * @@ -204,6 +210,7 @@ public com.google.protobuf.NullValue getNullValue() { public boolean hasBooleanValue() { return valueTypeCase_ == 1; } + /** * * @@ -224,6 +231,7 @@ public boolean getBooleanValue() { } public static final int INTEGER_VALUE_FIELD_NUMBER = 2; + /** * * @@ -239,6 +247,7 @@ public boolean getBooleanValue() { public boolean hasIntegerValue() { return valueTypeCase_ == 2; } + /** * * @@ -259,6 +268,7 @@ public long getIntegerValue() { } public static final int DOUBLE_VALUE_FIELD_NUMBER = 3; + /** * * @@ -274,6 +284,7 @@ public long getIntegerValue() { public boolean hasDoubleValue() { return valueTypeCase_ == 3; } + /** * * @@ -294,6 +305,7 @@ public double getDoubleValue() { } public static final int TIMESTAMP_VALUE_FIELD_NUMBER = 10; + /** * * @@ -311,6 +323,7 @@ public double getDoubleValue() { public boolean hasTimestampValue() { return valueTypeCase_ == 10; } + /** * * @@ -331,6 +344,7 @@ public com.google.protobuf.Timestamp getTimestampValue() { } return com.google.protobuf.Timestamp.getDefaultInstance(); } + /** * * @@ -351,6 +365,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { } public static final int KEY_VALUE_FIELD_NUMBER = 5; + /** * * @@ -366,6 +381,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { public boolean hasKeyValue() { return valueTypeCase_ == 5; } + /** * * @@ -384,6 +400,7 @@ public com.google.datastore.v1.Key getKeyValue() { } return com.google.datastore.v1.Key.getDefaultInstance(); } + /** * * @@ -402,6 +419,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyValueOrBuilder() { } public static final int STRING_VALUE_FIELD_NUMBER = 17; + /** * * @@ -418,6 +436,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyValueOrBuilder() { public boolean hasStringValue() { return valueTypeCase_ == 17; } + /** * * @@ -447,6 +466,7 @@ public java.lang.String getStringValue() { return s; } } + /** * * @@ -478,6 +498,7 @@ public com.google.protobuf.ByteString getStringValueBytes() { } public static final int BLOB_VALUE_FIELD_NUMBER = 18; + /** * * @@ -496,6 +517,7 @@ public com.google.protobuf.ByteString getStringValueBytes() { public boolean hasBlobValue() { return valueTypeCase_ == 18; } + /** * * @@ -519,6 +541,7 @@ public com.google.protobuf.ByteString getBlobValue() { } public static final int GEO_POINT_VALUE_FIELD_NUMBER = 8; + /** * * @@ -534,6 +557,7 @@ public com.google.protobuf.ByteString getBlobValue() { public boolean hasGeoPointValue() { return valueTypeCase_ == 8; } + /** * * @@ -552,6 +576,7 @@ public com.google.type.LatLng getGeoPointValue() { } return com.google.type.LatLng.getDefaultInstance(); } + /** * * @@ -570,6 +595,7 @@ public com.google.type.LatLngOrBuilder getGeoPointValueOrBuilder() { } public static final int ENTITY_VALUE_FIELD_NUMBER = 6; + /** * * @@ -589,6 +615,7 @@ public com.google.type.LatLngOrBuilder getGeoPointValueOrBuilder() { public boolean hasEntityValue() { return valueTypeCase_ == 6; } + /** * * @@ -611,6 +638,7 @@ public com.google.datastore.v1.Entity getEntityValue() { } return com.google.datastore.v1.Entity.getDefaultInstance(); } + /** * * @@ -633,6 +661,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityValueOrBuilder() { } public static final int ARRAY_VALUE_FIELD_NUMBER = 9; + /** * * @@ -651,6 +680,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityValueOrBuilder() { public boolean hasArrayValue() { return valueTypeCase_ == 9; } + /** * * @@ -672,6 +702,7 @@ public com.google.datastore.v1.ArrayValue getArrayValue() { } return com.google.datastore.v1.ArrayValue.getDefaultInstance(); } + /** * * @@ -694,6 +725,7 @@ public com.google.datastore.v1.ArrayValueOrBuilder getArrayValueOrBuilder() { public static final int MEANING_FIELD_NUMBER = 14; private int meaning_ = 0; + /** * * @@ -712,6 +744,7 @@ public int getMeaning() { public static final int EXCLUDE_FROM_INDEXES_FIELD_NUMBER = 19; private boolean excludeFromIndexes_ = false; + /** * * @@ -1071,6 +1104,7 @@ protected Builder newBuilderForType(com.google.protobuf.GeneratedMessageV3.Build Builder builder = new Builder(parent); return builder; } + /** * * @@ -1461,6 +1495,7 @@ public Builder clearValueType() { public boolean hasNullValue() { return valueTypeCase_ == 11; } + /** * * @@ -1479,6 +1514,7 @@ public int getNullValueValue() { } return 0; } + /** * * @@ -1497,6 +1533,7 @@ public Builder setNullValueValue(int value) { onChanged(); return this; } + /** * * @@ -1517,6 +1554,7 @@ public com.google.protobuf.NullValue getNullValue() { } return com.google.protobuf.NullValue.NULL_VALUE; } + /** * * @@ -1538,6 +1576,7 @@ public Builder setNullValue(com.google.protobuf.NullValue value) { onChanged(); return this; } + /** * * @@ -1572,6 +1611,7 @@ public Builder clearNullValue() { public boolean hasBooleanValue() { return valueTypeCase_ == 1; } + /** * * @@ -1589,6 +1629,7 @@ public boolean getBooleanValue() { } return false; } + /** * * @@ -1608,6 +1649,7 @@ public Builder setBooleanValue(boolean value) { onChanged(); return this; } + /** * * @@ -1642,6 +1684,7 @@ public Builder clearBooleanValue() { public boolean hasIntegerValue() { return valueTypeCase_ == 2; } + /** * * @@ -1659,6 +1702,7 @@ public long getIntegerValue() { } return 0L; } + /** * * @@ -1678,6 +1722,7 @@ public Builder setIntegerValue(long value) { onChanged(); return this; } + /** * * @@ -1712,6 +1757,7 @@ public Builder clearIntegerValue() { public boolean hasDoubleValue() { return valueTypeCase_ == 3; } + /** * * @@ -1729,6 +1775,7 @@ public double getDoubleValue() { } return 0D; } + /** * * @@ -1748,6 +1795,7 @@ public Builder setDoubleValue(double value) { onChanged(); return this; } + /** * * @@ -1773,6 +1821,7 @@ public Builder clearDoubleValue() { com.google.protobuf.Timestamp.Builder, com.google.protobuf.TimestampOrBuilder> timestampValueBuilder_; + /** * * @@ -1790,6 +1839,7 @@ public Builder clearDoubleValue() { public boolean hasTimestampValue() { return valueTypeCase_ == 10; } + /** * * @@ -1817,6 +1867,7 @@ public com.google.protobuf.Timestamp getTimestampValue() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -1841,6 +1892,7 @@ public Builder setTimestampValue(com.google.protobuf.Timestamp value) { valueTypeCase_ = 10; return this; } + /** * * @@ -1862,6 +1914,7 @@ public Builder setTimestampValue(com.google.protobuf.Timestamp.Builder builderFo valueTypeCase_ = 10; return this; } + /** * * @@ -1895,6 +1948,7 @@ public Builder mergeTimestampValue(com.google.protobuf.Timestamp value) { valueTypeCase_ = 10; return this; } + /** * * @@ -1922,6 +1976,7 @@ public Builder clearTimestampValue() { } return this; } + /** * * @@ -1936,6 +1991,7 @@ public Builder clearTimestampValue() { public com.google.protobuf.Timestamp.Builder getTimestampValueBuilder() { return getTimestampValueFieldBuilder().getBuilder(); } + /** * * @@ -1958,6 +2014,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { return com.google.protobuf.Timestamp.getDefaultInstance(); } } + /** * * @@ -1996,6 +2053,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { com.google.datastore.v1.Key.Builder, com.google.datastore.v1.KeyOrBuilder> keyValueBuilder_; + /** * * @@ -2011,6 +2069,7 @@ public com.google.protobuf.TimestampOrBuilder getTimestampValueOrBuilder() { public boolean hasKeyValue() { return valueTypeCase_ == 5; } + /** * * @@ -2036,6 +2095,7 @@ public com.google.datastore.v1.Key getKeyValue() { return com.google.datastore.v1.Key.getDefaultInstance(); } } + /** * * @@ -2058,6 +2118,7 @@ public Builder setKeyValue(com.google.datastore.v1.Key value) { valueTypeCase_ = 5; return this; } + /** * * @@ -2077,6 +2138,7 @@ public Builder setKeyValue(com.google.datastore.v1.Key.Builder builderForValue) valueTypeCase_ = 5; return this; } + /** * * @@ -2107,6 +2169,7 @@ public Builder mergeKeyValue(com.google.datastore.v1.Key value) { valueTypeCase_ = 5; return this; } + /** * * @@ -2132,6 +2195,7 @@ public Builder clearKeyValue() { } return this; } + /** * * @@ -2144,6 +2208,7 @@ public Builder clearKeyValue() { public com.google.datastore.v1.Key.Builder getKeyValueBuilder() { return getKeyValueFieldBuilder().getBuilder(); } + /** * * @@ -2164,6 +2229,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyValueOrBuilder() { return com.google.datastore.v1.Key.getDefaultInstance(); } } + /** * * @@ -2212,6 +2278,7 @@ public com.google.datastore.v1.KeyOrBuilder getKeyValueOrBuilder() { public boolean hasStringValue() { return valueTypeCase_ == 17; } + /** * * @@ -2242,6 +2309,7 @@ public java.lang.String getStringValue() { return (java.lang.String) ref; } } + /** * * @@ -2272,6 +2340,7 @@ public com.google.protobuf.ByteString getStringValueBytes() { return (com.google.protobuf.ByteString) ref; } } + /** * * @@ -2295,6 +2364,7 @@ public Builder setStringValue(java.lang.String value) { onChanged(); return this; } + /** * * @@ -2316,6 +2386,7 @@ public Builder clearStringValue() { } return this; } + /** * * @@ -2358,6 +2429,7 @@ public Builder setStringValueBytes(com.google.protobuf.ByteString value) { public boolean hasBlobValue() { return valueTypeCase_ == 18; } + /** * * @@ -2378,6 +2450,7 @@ public com.google.protobuf.ByteString getBlobValue() { } return com.google.protobuf.ByteString.EMPTY; } + /** * * @@ -2402,6 +2475,7 @@ public Builder setBlobValue(com.google.protobuf.ByteString value) { onChanged(); return this; } + /** * * @@ -2428,6 +2502,7 @@ public Builder clearBlobValue() { private com.google.protobuf.SingleFieldBuilderV3< com.google.type.LatLng, com.google.type.LatLng.Builder, com.google.type.LatLngOrBuilder> geoPointValueBuilder_; + /** * * @@ -2443,6 +2518,7 @@ public Builder clearBlobValue() { public boolean hasGeoPointValue() { return valueTypeCase_ == 8; } + /** * * @@ -2468,6 +2544,7 @@ public com.google.type.LatLng getGeoPointValue() { return com.google.type.LatLng.getDefaultInstance(); } } + /** * * @@ -2490,6 +2567,7 @@ public Builder setGeoPointValue(com.google.type.LatLng value) { valueTypeCase_ = 8; return this; } + /** * * @@ -2509,6 +2587,7 @@ public Builder setGeoPointValue(com.google.type.LatLng.Builder builderForValue) valueTypeCase_ = 8; return this; } + /** * * @@ -2539,6 +2618,7 @@ public Builder mergeGeoPointValue(com.google.type.LatLng value) { valueTypeCase_ = 8; return this; } + /** * * @@ -2564,6 +2644,7 @@ public Builder clearGeoPointValue() { } return this; } + /** * * @@ -2576,6 +2657,7 @@ public Builder clearGeoPointValue() { public com.google.type.LatLng.Builder getGeoPointValueBuilder() { return getGeoPointValueFieldBuilder().getBuilder(); } + /** * * @@ -2596,6 +2678,7 @@ public com.google.type.LatLngOrBuilder getGeoPointValueOrBuilder() { return com.google.type.LatLng.getDefaultInstance(); } } + /** * * @@ -2630,6 +2713,7 @@ public com.google.type.LatLngOrBuilder getGeoPointValueOrBuilder() { com.google.datastore.v1.Entity.Builder, com.google.datastore.v1.EntityOrBuilder> entityValueBuilder_; + /** * * @@ -2649,6 +2733,7 @@ public com.google.type.LatLngOrBuilder getGeoPointValueOrBuilder() { public boolean hasEntityValue() { return valueTypeCase_ == 6; } + /** * * @@ -2678,6 +2763,7 @@ public com.google.datastore.v1.Entity getEntityValue() { return com.google.datastore.v1.Entity.getDefaultInstance(); } } + /** * * @@ -2704,6 +2790,7 @@ public Builder setEntityValue(com.google.datastore.v1.Entity value) { valueTypeCase_ = 6; return this; } + /** * * @@ -2727,6 +2814,7 @@ public Builder setEntityValue(com.google.datastore.v1.Entity.Builder builderForV valueTypeCase_ = 6; return this; } + /** * * @@ -2762,6 +2850,7 @@ public Builder mergeEntityValue(com.google.datastore.v1.Entity value) { valueTypeCase_ = 6; return this; } + /** * * @@ -2791,6 +2880,7 @@ public Builder clearEntityValue() { } return this; } + /** * * @@ -2807,6 +2897,7 @@ public Builder clearEntityValue() { public com.google.datastore.v1.Entity.Builder getEntityValueBuilder() { return getEntityValueFieldBuilder().getBuilder(); } + /** * * @@ -2831,6 +2922,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityValueOrBuilder() { return com.google.datastore.v1.Entity.getDefaultInstance(); } } + /** * * @@ -2871,6 +2963,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityValueOrBuilder() { com.google.datastore.v1.ArrayValue.Builder, com.google.datastore.v1.ArrayValueOrBuilder> arrayValueBuilder_; + /** * * @@ -2889,6 +2982,7 @@ public com.google.datastore.v1.EntityOrBuilder getEntityValueOrBuilder() { public boolean hasArrayValue() { return valueTypeCase_ == 9; } + /** * * @@ -2917,6 +3011,7 @@ public com.google.datastore.v1.ArrayValue getArrayValue() { return com.google.datastore.v1.ArrayValue.getDefaultInstance(); } } + /** * * @@ -2942,6 +3037,7 @@ public Builder setArrayValue(com.google.datastore.v1.ArrayValue value) { valueTypeCase_ = 9; return this; } + /** * * @@ -2964,6 +3060,7 @@ public Builder setArrayValue(com.google.datastore.v1.ArrayValue.Builder builderF valueTypeCase_ = 9; return this; } + /** * * @@ -2999,6 +3096,7 @@ public Builder mergeArrayValue(com.google.datastore.v1.ArrayValue value) { valueTypeCase_ = 9; return this; } + /** * * @@ -3027,6 +3125,7 @@ public Builder clearArrayValue() { } return this; } + /** * * @@ -3042,6 +3141,7 @@ public Builder clearArrayValue() { public com.google.datastore.v1.ArrayValue.Builder getArrayValueBuilder() { return getArrayValueFieldBuilder().getBuilder(); } + /** * * @@ -3065,6 +3165,7 @@ public com.google.datastore.v1.ArrayValueOrBuilder getArrayValueOrBuilder() { return com.google.datastore.v1.ArrayValue.getDefaultInstance(); } } + /** * * @@ -3100,6 +3201,7 @@ public com.google.datastore.v1.ArrayValueOrBuilder getArrayValueOrBuilder() { } private int meaning_; + /** * * @@ -3115,6 +3217,7 @@ public com.google.datastore.v1.ArrayValueOrBuilder getArrayValueOrBuilder() { public int getMeaning() { return meaning_; } + /** * * @@ -3134,6 +3237,7 @@ public Builder setMeaning(int value) { onChanged(); return this; } + /** * * @@ -3153,6 +3257,7 @@ public Builder clearMeaning() { } private boolean excludeFromIndexes_; + /** * * @@ -3169,6 +3274,7 @@ public Builder clearMeaning() { public boolean getExcludeFromIndexes() { return excludeFromIndexes_; } + /** * * @@ -3189,6 +3295,7 @@ public Builder setExcludeFromIndexes(boolean value) { onChanged(); return this; } + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java index 8e4021a58..a133a19b6 100644 --- a/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java +++ b/proto-google-cloud-datastore-v1/src/main/java/com/google/datastore/v1/ValueOrBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2024 Google LLC + * 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. @@ -16,7 +16,7 @@ // Generated by the protocol buffer compiler. DO NOT EDIT! // source: google/datastore/v1/entity.proto -// Protobuf Java Version: 3.25.3 +// Protobuf Java Version: 3.25.5 package com.google.datastore.v1; public interface ValueOrBuilder @@ -36,6 +36,7 @@ public interface ValueOrBuilder * @return Whether the nullValue field is set. */ boolean hasNullValue(); + /** * * @@ -48,6 +49,7 @@ public interface ValueOrBuilder * @return The enum numeric value on the wire for nullValue. */ int getNullValueValue(); + /** * * @@ -73,6 +75,7 @@ public interface ValueOrBuilder * @return Whether the booleanValue field is set. */ boolean hasBooleanValue(); + /** * * @@ -98,6 +101,7 @@ public interface ValueOrBuilder * @return Whether the integerValue field is set. */ boolean hasIntegerValue(); + /** * * @@ -123,6 +127,7 @@ public interface ValueOrBuilder * @return Whether the doubleValue field is set. */ boolean hasDoubleValue(); + /** * * @@ -150,6 +155,7 @@ public interface ValueOrBuilder * @return Whether the timestampValue field is set. */ boolean hasTimestampValue(); + /** * * @@ -164,6 +170,7 @@ public interface ValueOrBuilder * @return The timestampValue. */ com.google.protobuf.Timestamp getTimestampValue(); + /** * * @@ -189,6 +196,7 @@ public interface ValueOrBuilder * @return Whether the keyValue field is set. */ boolean hasKeyValue(); + /** * * @@ -201,6 +209,7 @@ public interface ValueOrBuilder * @return The keyValue. */ com.google.datastore.v1.Key getKeyValue(); + /** * * @@ -226,6 +235,7 @@ public interface ValueOrBuilder * @return Whether the stringValue field is set. */ boolean hasStringValue(); + /** * * @@ -240,6 +250,7 @@ public interface ValueOrBuilder * @return The stringValue. */ java.lang.String getStringValue(); + /** * * @@ -270,6 +281,7 @@ public interface ValueOrBuilder * @return Whether the blobValue field is set. */ boolean hasBlobValue(); + /** * * @@ -298,6 +310,7 @@ public interface ValueOrBuilder * @return Whether the geoPointValue field is set. */ boolean hasGeoPointValue(); + /** * * @@ -310,6 +323,7 @@ public interface ValueOrBuilder * @return The geoPointValue. */ com.google.type.LatLng getGeoPointValue(); + /** * * @@ -337,6 +351,7 @@ public interface ValueOrBuilder * @return Whether the entityValue field is set. */ boolean hasEntityValue(); + /** * * @@ -353,6 +368,7 @@ public interface ValueOrBuilder * @return The entityValue. */ com.google.datastore.v1.Entity getEntityValue(); + /** * * @@ -383,6 +399,7 @@ public interface ValueOrBuilder * @return Whether the arrayValue field is set. */ boolean hasArrayValue(); + /** * * @@ -398,6 +415,7 @@ public interface ValueOrBuilder * @return The arrayValue. */ com.google.datastore.v1.ArrayValue getArrayValue(); + /** * * diff --git a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/aggregation_result.proto b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/aggregation_result.proto index 91c521716..cd51f660c 100644 --- a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/aggregation_result.proto +++ b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/aggregation_result.proto @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// 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. @@ -21,7 +21,7 @@ import "google/datastore/v1/query.proto"; import "google/protobuf/timestamp.proto"; option csharp_namespace = "Google.Cloud.Datastore.V1"; -option go_package = "google.golang.org/genproto/googleapis/datastore/v1;datastore"; +option go_package = "cloud.google.com/go/datastore/apiv1/datastorepb;datastorepb"; option java_multiple_files = true; option java_outer_classname = "AggregationResultProto"; option java_package = "com.google.datastore.v1"; diff --git a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/datastore.proto b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/datastore.proto index 1a3fbdd11..c0a281b18 100644 --- a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/datastore.proto +++ b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/datastore.proto @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// 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. @@ -27,7 +27,7 @@ import "google/datastore/v1/query_profile.proto"; import "google/protobuf/timestamp.proto"; option csharp_namespace = "Google.Cloud.Datastore.V1"; -option go_package = "google.golang.org/genproto/googleapis/datastore/v1;datastore"; +option go_package = "cloud.google.com/go/datastore/apiv1/datastorepb;datastorepb"; option java_multiple_files = true; option java_outer_classname = "DatastoreProto"; option java_package = "com.google.datastore.v1"; @@ -173,6 +173,14 @@ message LookupRequest { // Required. Keys of entities to look up. repeated Key keys = 3 [(google.api.field_behavior) = REQUIRED]; + + // The properties to return. Defaults to returning all properties. + // + // If this field is set and an entity has a property not referenced in the + // mask, it will be absent from [LookupResponse.found.entity.properties][]. + // + // The entity's key is always returned. + PropertyMask property_mask = 5; } // The response for [Datastore.Lookup][google.datastore.v1.Datastore.Lookup]. @@ -234,6 +242,13 @@ message RunQueryRequest { GqlQuery gql_query = 7; } + // The properties to return. + // This field must not be set for a projection query. + // + // See + // [LookupRequest.property_mask][google.datastore.v1.LookupRequest.property_mask]. + PropertyMask property_mask = 10; + // Optional. Explain options for the query. If set, additional query // statistics will be returned. If not, only query results will be returned. ExplainOptions explain_options = 12 [(google.api.field_behavior) = OPTIONAL]; @@ -486,6 +501,18 @@ message ReserveIdsResponse {} // A mutation to apply to an entity. message Mutation { + // The possible ways to resolve a conflict detected in a mutation. + enum ConflictResolutionStrategy { + // Unspecified. Defaults to `SERVER_VALUE`. + STRATEGY_UNSPECIFIED = 0; + + // The server entity is kept. + SERVER_VALUE = 1; + + // The whole commit request fails. + FAIL = 3; + } + // The mutation operation. // // For `insert`, `update`, and `upsert`: @@ -526,6 +553,127 @@ message Mutation { // mutation conflicts. google.protobuf.Timestamp update_time = 11; } + + // The strategy to use when a conflict is detected. Defaults to + // `SERVER_VALUE`. + // If this is set, then `conflict_detection_strategy` must also be set. + ConflictResolutionStrategy conflict_resolution_strategy = 10; + + // The properties to write in this mutation. + // None of the properties in the mask may have a reserved name, except for + // `__key__`. + // This field is ignored for `delete`. + // + // If the entity already exists, only properties referenced in the mask are + // updated, others are left untouched. + // Properties referenced in the mask but not in the entity are deleted. + PropertyMask property_mask = 9; + + // Optional. The transforms to perform on the entity. + // + // This field can be set only when the operation is `insert`, `update`, + // or `upsert`. If present, the transforms are be applied to the entity + // regardless of the property mask, in order, after the operation. + repeated PropertyTransform property_transforms = 12 + [(google.api.field_behavior) = OPTIONAL]; +} + +// A transformation of an entity property. +message PropertyTransform { + // A value that is calculated by the server. + enum ServerValue { + // Unspecified. This value must not be used. + SERVER_VALUE_UNSPECIFIED = 0; + + // The time at which the server processed the request, with millisecond + // precision. If used on multiple properties (same or different entities) + // in a transaction, all the properties will get the same server timestamp. + REQUEST_TIME = 1; + } + + // Optional. The name of the property. + // + // Property paths (a list of property names separated by dots (`.`)) may be + // used to refer to properties inside entity values. For example `foo.bar` + // means the property `bar` inside the entity property `foo`. + // + // If a property name contains a dot `.` or a backlslash `\`, then that name + // must be escaped. + string property = 1 [(google.api.field_behavior) = OPTIONAL]; + + // The transformation to apply to the property. + oneof transform_type { + // Sets the property to the given server value. + ServerValue set_to_server_value = 2; + + // Adds the given value to the property's current value. + // + // This must be an integer or a double value. + // If the property is not an integer or double, or if the property does not + // yet exist, the transformation will set the property to the given value. + // If either of the given value or the current property value are doubles, + // both values will be interpreted as doubles. Double arithmetic and + // representation of double values follows IEEE 754 semantics. + // If there is positive/negative integer overflow, the property is resolved + // to the largest magnitude positive/negative integer. + Value increment = 3; + + // Sets the property to the maximum of its current value and the given + // value. + // + // This must be an integer or a double value. + // If the property is not an integer or double, or if the property does not + // yet exist, the transformation will set the property to the given value. + // If a maximum operation is applied where the property and the input value + // are of mixed types (that is - one is an integer and one is a double) + // the property takes on the type of the larger operand. If the operands are + // equivalent (e.g. 3 and 3.0), the property does not change. + // 0, 0.0, and -0.0 are all zero. The maximum of a zero stored value and + // zero input value is always the stored value. + // The maximum of any numeric value x and NaN is NaN. + Value maximum = 4; + + // Sets the property to the minimum of its current value and the given + // value. + // + // This must be an integer or a double value. + // If the property is not an integer or double, or if the property does not + // yet exist, the transformation will set the property to the input value. + // If a minimum operation is applied where the property and the input value + // are of mixed types (that is - one is an integer and one is a double) + // the property takes on the type of the smaller operand. If the operands + // are equivalent (e.g. 3 and 3.0), the property does not change. 0, 0.0, + // and -0.0 are all zero. The minimum of a zero stored value and zero input + // value is always the stored value. The minimum of any numeric value x and + // NaN is NaN. + Value minimum = 5; + + // Appends the given elements in order if they are not already present in + // the current property value. + // If the property is not an array, or if the property does not yet exist, + // it is first set to the empty array. + // + // Equivalent numbers of different types (e.g. 3L and 3.0) are + // considered equal when checking if a value is missing. + // NaN is equal to NaN, and the null value is equal to the null value. + // If the input contains multiple equivalent values, only the first will + // be considered. + // + // The corresponding transform result will be the null value. + ArrayValue append_missing_elements = 6; + + // Removes all of the given elements from the array in the property. + // If the property is not an array, or if the property does not yet exist, + // it is set to the empty array. + // + // Equivalent numbers of different types (e.g. 3L and 3.0) are + // considered equal when deciding whether an element should be removed. + // NaN is equal to NaN, and the null value is equal to the null value. + // This will remove all equivalent values if there are duplicates. + // + // The corresponding transform result will be the null value. + ArrayValue remove_all_from_array = 7; + } } // The result of applying a mutation. @@ -553,6 +701,28 @@ message MutationResult { // Whether a conflict was detected for this mutation. Always false when a // conflict detection strategy field is not set in the mutation. bool conflict_detected = 5; + + // The results of applying each + // [PropertyTransform][google.datastore.v1.PropertyTransform], in the same + // order of the request. + repeated Value transform_results = 8; +} + +// The set of arbitrarily nested property paths used to restrict an operation to +// only a subset of properties in an entity. +message PropertyMask { + // The paths to the properties covered by this mask. + // + // A path is a list of property names separated by dots (`.`), for example + // `foo.bar` means the property `bar` inside the entity property `foo` inside + // the entity associated with this path. + // + // If a property name contains a dot `.` or a backslash `\`, then that + // name must be escaped. + // + // A path must not be empty, and may not reference a value inside an + // [array value][google.datastore.v1.Value.array_value]. + repeated string paths = 1; } // The options shared by read requests. @@ -569,16 +739,13 @@ message ReadOptions { EVENTUAL = 2; } - // For Cloud Datastore, if read_consistency is not specified, then lookups and - // ancestor queries default to `read_consistency`=`STRONG`, global queries - // default to `read_consistency`=`EVENTUAL`. - // - // For Cloud Firestore in Datastore mode, if read_consistency is not specified - // then lookups and all queries default to `read_consistency`=`STRONG`. + // For Cloud Firestore in Datastore mode, if you don't specify + // read_consistency then all lookups and queries default to + // `read_consistency`=`STRONG`. Note that, in Cloud Datastore, global queries + // defaulted to `read_consistency`=`EVENTUAL`. // // Explicitly setting `read_consistency`=`EVENTUAL` will result in eventually - // consistent lookups & queries in both Cloud Datastore & Cloud Firestore in - // Datastore mode. + // consistent lookups and queries. oneof consistency_type { // The non-transactional read consistency to use. ReadConsistency read_consistency = 1; diff --git a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/entity.proto b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/entity.proto index d80dd9093..fdf0a32cb 100644 --- a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/entity.proto +++ b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/entity.proto @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// 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. @@ -21,7 +21,7 @@ import "google/protobuf/timestamp.proto"; import "google/type/latlng.proto"; option csharp_namespace = "Google.Cloud.Datastore.V1"; -option go_package = "google.golang.org/genproto/googleapis/datastore/v1;datastore"; +option go_package = "cloud.google.com/go/datastore/apiv1/datastorepb;datastorepb"; option java_multiple_files = true; option java_outer_classname = "EntityProto"; option java_package = "com.google.datastore.v1"; diff --git a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query.proto b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query.proto index d1f0f8d07..2e36f958b 100644 --- a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query.proto +++ b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query.proto @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// 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. @@ -22,7 +22,7 @@ import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; option csharp_namespace = "Google.Cloud.Datastore.V1"; -option go_package = "google.golang.org/genproto/googleapis/datastore/v1;datastore"; +option go_package = "cloud.google.com/go/datastore/apiv1/datastorepb;datastorepb"; option java_multiple_files = true; option java_outer_classname = "QueryProto"; option java_package = "com.google.datastore.v1"; @@ -82,6 +82,15 @@ message EntityResult { } // A query for entities. +// +// The query stages are executed in the following order: +// 1. kind +// 2. filter +// 3. projection +// 4. order + start_cursor + end_cursor +// 5. offset +// 6. limit +// 7. find_nearest message Query { // The projection to return. Defaults to returning all properties. repeated Projection projection = 2; @@ -127,6 +136,13 @@ message Query { // Unspecified is interpreted as no limit. // Must be >= 0 if specified. google.protobuf.Int32Value limit = 12; + + // Optional. A potential Nearest Neighbors Search. + // + // Applies after all other filters and ordering. + // + // Finds the closest vector embeddings to the given query vector. + FindNearest find_nearest = 13 [(google.api.field_behavior) = OPTIONAL]; } // Datastore query for running an aggregation over a @@ -436,6 +452,70 @@ message PropertyFilter { Value value = 3; } +// Nearest Neighbors search config. The ordering provided by FindNearest +// supersedes the order_by stage. If multiple documents have the same vector +// distance, the returned document order is not guaranteed to be stable between +// queries. +message FindNearest { + // The distance measure to use when comparing vectors. + enum DistanceMeasure { + // Should not be set. + DISTANCE_MEASURE_UNSPECIFIED = 0; + + // Measures the EUCLIDEAN distance between the vectors. See + // [Euclidean](https://en.wikipedia.org/wiki/Euclidean_distance) to learn + // more. The resulting distance decreases the more similar two vectors are. + EUCLIDEAN = 1; + + // COSINE distance compares vectors based on the angle between them, which + // allows you to measure similarity that isn't based on the vectors + // magnitude. We recommend using DOT_PRODUCT with unit normalized vectors + // instead of COSINE distance, which is mathematically equivalent with + // better performance. See [Cosine + // Similarity](https://en.wikipedia.org/wiki/Cosine_similarity) to learn + // more about COSINE similarity and COSINE distance. The resulting COSINE + // distance decreases the more similar two vectors are. + COSINE = 2; + + // Similar to cosine but is affected by the magnitude of the vectors. See + // [Dot Product](https://en.wikipedia.org/wiki/Dot_product) to learn more. + // The resulting distance increases the more similar two vectors are. + DOT_PRODUCT = 3; + } + + // Required. An indexed vector property to search upon. Only documents which + // contain vectors whose dimensionality match the query_vector can be + // returned. + PropertyReference vector_property = 1 + [(google.api.field_behavior) = REQUIRED]; + + // Required. The query vector that we are searching on. Must be a vector of no + // more than 2048 dimensions. + Value query_vector = 2 [(google.api.field_behavior) = REQUIRED]; + + // Required. The Distance Measure to use, required. + DistanceMeasure distance_measure = 3 [(google.api.field_behavior) = REQUIRED]; + + // Required. The number of nearest neighbors to return. Must be a positive + // integer of no more than 100. + google.protobuf.Int32Value limit = 4 [(google.api.field_behavior) = REQUIRED]; + + // Optional. Optional name of the field to output the result of the vector + // distance calculation. Must conform to [entity + // property][google.datastore.v1.Entity.properties] limitations. + string distance_result_property = 5 [(google.api.field_behavior) = OPTIONAL]; + + // Optional. Option to specify a threshold for which no less similar documents + // will be returned. The behavior of the specified `distance_measure` will + // affect the meaning of the distance threshold. Since DOT_PRODUCT distances + // increase when the vectors are more similar, the comparison is inverted. + // + // For EUCLIDEAN, COSINE: WHERE distance <= distance_threshold + // For DOT_PRODUCT: WHERE distance >= distance_threshold + google.protobuf.DoubleValue distance_threshold = 6 + [(google.api.field_behavior) = OPTIONAL]; +} + // A [GQL // query](https://cloud.google.com/datastore/docs/apis/gql/gql_reference). message GqlQuery { diff --git a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query_profile.proto b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query_profile.proto index 01c9fc254..71a4eb599 100644 --- a/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query_profile.proto +++ b/proto-google-cloud-datastore-v1/src/main/proto/google/datastore/v1/query_profile.proto @@ -1,4 +1,4 @@ -// Copyright 2023 Google LLC +// 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. @@ -21,7 +21,7 @@ import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; option csharp_namespace = "Google.Cloud.Datastore.V1"; -option go_package = "google.golang.org/genproto/googleapis/datastore/v1;datastore"; +option go_package = "cloud.google.com/go/datastore/apiv1/datastorepb;datastorepb"; option java_multiple_files = true; option java_outer_classname = "QueryProfileProto"; option java_package = "com.google.datastore.v1"; diff --git a/pull-gapic-grpc.sh b/pull-gapic-grpc.sh new file mode 100644 index 000000000..327d7676c --- /dev/null +++ b/pull-gapic-grpc.sh @@ -0,0 +1,42 @@ +# +# Copyright 2023 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# 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_CODE_DIR=$(pwd)/../googleapis-gen +DATASTORE_DIR=$(pwd) + +echo $GENERATED_CODE_DIR +if [ -d "$GENERATED_CODE_DIR" ]; then + echo "Pulling latest changes in ${GENERATED_CODE_DIR}" + pushd $GENERATED_CODE_DIR || exit + git pull + popd || exit +else + echo "Cloning googleapis-gen" + git clone --depth 1 git@github.com:googleapis/googleapis-gen.git $GENERATED_CODE_DIR +fi + +#Copying the required directories +mkdir -p "$DATASTORE_DIR/grpc-google-cloud-datastore-v1" +cp -r "$GENERATED_CODE_DIR/google/datastore/v1/google-cloud-datastore-v1-java/grpc-google-cloud-datastore-v1-java/." \ +"$DATASTORE_DIR/grpc-google-cloud-datastore-v1/." +cp -r "$GENERATED_CODE_DIR/google/datastore/v1/google-cloud-datastore-v1-java/gapic-google-cloud-datastore-v1-java/." \ +"$DATASTORE_DIR/google-cloud-datastore/." + +#Cleaning up unwanted files +rm grpc-google-cloud-datastore-v1/build.gradle +rm google-cloud-datastore/build.gradle + +echo "Success" diff --git a/renovate.json b/renovate.json index 7b2939806..42538270e 100644 --- a/renovate.json +++ b/renovate.json @@ -1,4 +1,6 @@ + { + "extends": [ ":separateMajorReleases", ":combinePatchMinorReleases", @@ -23,7 +25,9 @@ "fileMatch": [ "^.kokoro/presubmit/graalvm-native.*.cfg$" ], - "matchStrings": ["value: \"gcr.io/cloud-devrel-public-resources/graalvm.*:(?.*?)\""], + "matchStrings": [ + "value: \"gcr.io/cloud-devrel-public-resources/graalvm.*:(?.*?)\"" + ], "depNameTemplate": "com.google.cloud:sdk-platform-java-config", "datasourceTemplate": "maven" }, @@ -32,7 +36,9 @@ "fileMatch": [ "^.github/workflows/unmanaged_dependency_check.yaml$" ], - "matchStrings": ["uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v(?.+?)\\n"], + "matchStrings": [ + "uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v(?.+?)\\n" + ], "depNameTemplate": "com.google.cloud:sdk-platform-java-config", "datasourceTemplate": "maven" } @@ -57,7 +63,6 @@ "^org.jacoco:", "^org.codehaus.mojo:", "^org.sonatype.plugins:", - "^com.coveo:", "^com.google.cloud:google-cloud-shared-config" ], "semanticCommitType": "build", @@ -99,4 +104,4 @@ ], "semanticCommits": true, "dependencyDashboard": true -} +} \ No newline at end of file diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index d36722381..1cf6cb5f9 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -29,7 +29,7 @@ com.google.cloud google-cloud-datastore - 2.19.1 + 2.28.1 @@ -42,7 +42,7 @@ com.google.truth truth - 1.4.2 + 1.4.4 test
@@ -53,7 +53,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.5.0 + 3.6.0 add-snippets-source diff --git a/samples/native-image-sample/README.md b/samples/native-image-sample/README.md deleted file mode 100644 index 5f2cfbd27..000000000 --- a/samples/native-image-sample/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# Datastore Sample Application with Native Image - -This application uses the [Google Cloud Datastore client library](https://cloud.google.com/datastore/docs/reference/libraries) and is compatible with Native Image compilation. - -This sample runs through some basic operations of creating/deleting entities, running queries, and running transaction code. - -## Setup Instructions - -You will need to follow these prerequisite steps in order to run the samples: - -1. If you have not already, [create a Google Cloud Platform Project](https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project). - -2. Install the [Google Cloud SDK](https://cloud.google.com/sdk/) which will allow you to run the sample with your project's credentials. - - Once installed, log in with Application Default Credentials using the following command: - - ``` - gcloud auth application-default login - ``` - - **Note:** Authenticating with Application Default Credentials is convenient to use during development, but we recommend [alternate methods of authentication](https://cloud.google.com/docs/authentication/production) during production use. - -3. Install the native image compiler. - - You can follow the [installation instructions](https://www.graalvm.org/docs/getting-started/#install-graalvm). - After following the instructions, ensure that you install the native image extension installed by running: - - ``` - gu install native-image - ``` - - Once you finish following the instructions, verify that the default version of Java is set to the correct version by running `java -version` in a terminal. - - You will see something similar to the below output: - - ``` - $ java -version - - openjdk version "17.0.3" 2022-04-19 - OpenJDK Runtime Environment GraalVM CE 22.1.0 (build 17.0.3+7-jvmci-22.1-b06) - OpenJDK 64-Bit Server VM GraalVM CE 22.1.0 (build 17.0.3+7-jvmci-22.1-b06, mixed mode, sharing) - ``` -## Sample -1. **(Optional)** If you wish to run the application against the [Datastore emulator](https://cloud.google.com/sdk/gcloud/reference/beta/emulators/datastore), ensure that you have the [Google Cloud SDK](https://cloud.google.com/sdk) installed. - - In a new terminal window, start the emulator via `gcloud`: - - ``` - gcloud beta emulators datastore start --host-port=localhost:9010 - ``` - - Leave the emulator running in this terminal for now. - In the next section, we will run the sample application against the Datastore emulator instance. - -2. Navigate to this directory and compile the application with the native image compiler. - - ``` - mvn package -P native -DskipTests - ``` - -3. **(Optional)** If you're using the emulator, export the `DATASTORE_EMULATOR_HOST` as an environment variable in your terminal. - - ``` - export DATASTORE_EMULATOR_HOST=localhost:9010 - ``` - - The Datastore Client Libraries will detect this environment variable and automatically connect to the emulator instance if this variable is set. - -4. Run the application. - - ``` - ./target/native-image-sample - ``` - -5. The application will run through some basic Datastore operations and log some output statements. - - ``` - Successfully added entity. - Reading entity: 1cf34cc1-2b8a-4945-9fc4-058f03dcd08e - Successfully deleted entity: 1cf34cc1-2b8a-4945-9fc4-058f03dcd08e - Run fake transaction code. - Found entity: - name=de4f36f4-3936-4252-98d3-e0d56d485254 - kind=test-kind - namespace=nativeimage-test-namespace - properties={description=StringValue{valueType=STRING, excludeFromIndexes=false, meaning=0, value=hello world}} - Ran transaction callable. - ``` - -### Sample Integration test with Native Image Support - -In order to run the sample integration test as a native image, call the following command: - - ``` - mvn test -Pnative - ``` diff --git a/samples/native-image-sample/pom.xml b/samples/native-image-sample/pom.xml index d1d30028d..e69de29bb 100644 --- a/samples/native-image-sample/pom.xml +++ b/samples/native-image-sample/pom.xml @@ -1,141 +0,0 @@ - - - 4.0.0 - com.example.datastore - native-image-sample - Native Image Sample - https://github.com/googleapis/java-datastore - - - - com.google.cloud.samples - shared-configuration - 1.2.0 - - - - - 1.8 - 1.8 - UTF-8 - - - - - - com.google.cloud - libraries-bom - 26.38.0 - pom - import - - - - - - - com.google.cloud - google-cloud-datastore - - - - junit - junit - 4.13.2 - test - - - com.google.truth - truth - 1.4.2 - test - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - com.example.datastore.NativeImageDatastoreSample - - - - - - - - - - - native - - - - org.junit.vintage - junit-vintage-engine - 5.10.2 - test - - - org.graalvm.buildtools - junit-platform-native - 0.10.1 - test - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - 3.2.5 - - - **/IT* - - - - - org.graalvm.buildtools - native-maven-plugin - 0.10.1 - true - - com.example.datastore.NativeImageDatastoreSample - - --no-fallback - --no-server - - - - - build-native - - build - test - - package - - - test-native - - test - - test - - - - - - - - \ No newline at end of file diff --git a/samples/native-image-sample/src/main/java/com/example/datastore/NativeImageDatastoreSample.java b/samples/native-image-sample/src/main/java/com/example/datastore/NativeImageDatastoreSample.java deleted file mode 100644 index 7ce5c900a..000000000 --- a/samples/native-image-sample/src/main/java/com/example/datastore/NativeImageDatastoreSample.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright 2020-2021 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.example.datastore; - -import com.google.cloud.datastore.Datastore; -import com.google.cloud.datastore.DatastoreOptions; -import com.google.cloud.datastore.Entity; -import com.google.cloud.datastore.Key; -import com.google.cloud.datastore.Query; -import com.google.cloud.datastore.QueryResults; -import com.google.cloud.datastore.StructuredQuery; -import com.google.cloud.datastore.Transaction; -import java.time.Duration; -import java.time.Instant; -import java.util.UUID; - -/** Sample Datastore Application. */ -public class NativeImageDatastoreSample { - - /* Datastore namespace where entities will be created. */ - private static final String TEST_NAMESPACE = "nativeimage-test-namespace"; - - /* Datastore kind used. */ - private static final String TEST_KIND = "test-kind"; - - /** Entrypoint to the Datastore sample application. */ - public static void main(String[] args) { - Instant startTime = Instant.now(); - Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); - - String testId = UUID.randomUUID().toString(); - - addEntity(datastore, testId); - getEntity(datastore, testId); - deleteEntity(datastore, testId); - - runTransaction(datastore); - - String id = UUID.randomUUID().toString(); - Key key = createKey(datastore, id); - runTransactionCallable(datastore, key); - Instant endTime = Instant.now(); - Duration duration = Duration.between(startTime, endTime); - System.out.println("Duration: " + duration.toString()); - } - - static void addEntity(Datastore datastore, String id) { - Key key = createKey(datastore, id); - Entity entity = Entity.newBuilder(key).set("description", "hello world").build(); - datastore.add(entity); - System.out.println("Successfully added entity."); - } - - static void getEntity(Datastore datastore, String id) { - Key key = createKey(datastore, id); - Entity entity = datastore.get(key); - System.out.println("Reading entity: " + entity.getKey().getName()); - } - - static void deleteEntity(Datastore datastore, String id) { - Key key = createKey(datastore, id); - datastore.delete(key); - - Entity entity = datastore.get(key); - if (entity == null) { - System.out.println("Successfully deleted entity: " + id); - } else { - throw new RuntimeException("Failed to delete entity: " + id); - } - } - - static void runTransactionCallable(Datastore datastore, Key entityKey) { - datastore.runInTransaction( - client -> { - Entity entity = Entity.newBuilder(entityKey).set("description", "hello world").build(); - datastore.add(entity); - - StructuredQuery query = - Query.newEntityQueryBuilder().setNamespace(TEST_NAMESPACE).setKind(TEST_KIND).build(); - - QueryResults results = datastore.run(query); - while (results.hasNext()) { - Entity result = results.next(); - String name = result.getKey().getName(); - String kind = result.getKey().getKind(); - String namespace = result.getKey().getNamespace(); - System.out.println( - "Found entity:" - + "\n\t\tname=" - + name - + "\n\t\tkind=" - + kind - + "\n\t\tnamespace=" - + namespace - + "\n\t\tproperties=" - + result.getProperties().toString()); - } - - datastore.delete(entityKey); - return null; - }); - - System.out.println("Ran transaction callable."); - } - - private static void runTransaction(Datastore datastore) { - Transaction transaction = datastore.newTransaction(); - transaction.commit(); - transaction = datastore.newTransaction(); - transaction.rollback(); - System.out.println("Run fake transaction code."); - } - - static Key createKey(Datastore datastore, String id) { - return datastore.newKeyFactory().setNamespace(TEST_NAMESPACE).setKind(TEST_KIND).newKey(id); - } -} diff --git a/samples/native-image-sample/src/test/java/com/example/datastore/ITNativeImageDatastoreSample.java b/samples/native-image-sample/src/test/java/com/example/datastore/ITNativeImageDatastoreSample.java deleted file mode 100644 index 710f18367..000000000 --- a/samples/native-image-sample/src/test/java/com/example/datastore/ITNativeImageDatastoreSample.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2022 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.example.datastore; - -import static com.google.common.truth.Truth.assertThat; - -import com.google.cloud.datastore.Datastore; -import com.google.cloud.datastore.DatastoreOptions; -import com.google.cloud.datastore.Key; -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.util.UUID; -import org.junit.Before; -import org.junit.Test; - -/** Tests for {@link com.example.datastore.NativeImageDatastoreSample} */ -public class ITNativeImageDatastoreSample { - - private Datastore datastore; - private ByteArrayOutputStream bout; - private PrintStream out; - - @Before - public void setUp() { - datastore = DatastoreOptions.getDefaultInstance().getService(); - bout = new ByteArrayOutputStream(); - out = new PrintStream(bout); - System.setOut(out); - } - - @Test - public void testAddAndGetEntity() { - bout.reset(); - String testId = "test-id-" + UUID.randomUUID(); - NativeImageDatastoreSample.addEntity(datastore, testId); - NativeImageDatastoreSample.getEntity(datastore, testId); - assertThat(bout.toString()).contains("Reading entity: " + testId); - - NativeImageDatastoreSample.deleteEntity(datastore, testId); - } - - @Test - public void testRunTransactionalCallable() { - bout.reset(); - String testId = "test-id-" + UUID.randomUUID(); - Key key = NativeImageDatastoreSample.createKey(datastore, testId); - NativeImageDatastoreSample.runTransactionCallable(datastore, key); - assertThat(bout.toString()) - .contains( - "Found entity:" - + "\n\t\tname=" - + testId - + "\n\t\tkind=test-kind" - + "\n\t\tnamespace=nativeimage-test-namespace" - + "\n\t\tproperties={description=StringValue{valueType=STRING, excludeFromIndexes=false," - + " meaning=0, value=hello world}}\n" - + "Ran transaction callable."); - - NativeImageDatastoreSample.deleteEntity(datastore, "test-id"); - } -} diff --git a/samples/pom.xml b/samples/pom.xml index a24801164..41074b395 100644 --- a/samples/pom.xml +++ b/samples/pom.xml @@ -31,7 +31,6 @@ install-without-bom snapshot snippets - native-image-sample @@ -39,7 +38,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.1 + 3.1.4 true @@ -47,7 +46,7 @@ org.sonatype.plugins nexus-staging-maven-plugin - 1.6.13 + 1.7.0 true diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 45331e46b..3a513d18c 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-datastore - 2.19.2-SNAPSHOT + 2.28.2-SNAPSHOT @@ -41,7 +41,7 @@ com.google.truth truth - 1.4.2 + 1.4.4 test
@@ -52,7 +52,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.5.0 + 3.6.0 add-snippets-source diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 82f0945a7..88e93a110 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -30,7 +30,7 @@ com.google.cloud libraries-bom - 26.38.0 + 26.59.0 pom import @@ -53,7 +53,7 @@ com.google.truth truth - 1.4.2 + 1.4.4 test diff --git a/samples/snippets/src/main/java/com/example/datastore/filters/IndexingConsiderationQuery.java b/samples/snippets/src/main/java/com/example/datastore/filters/IndexingConsiderationQuery.java new file mode 100644 index 000000000..90a94014c --- /dev/null +++ b/samples/snippets/src/main/java/com/example/datastore/filters/IndexingConsiderationQuery.java @@ -0,0 +1,64 @@ +/* + * 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. + */ + +package com.example.datastore.filters; + +// sample-metadata: +// title: Queries with indexing considerations +// description: The following query produces a result set +// that is ordered according to the index definition. + +// [START datastore_query_indexing_considerations] + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Query; +import com.google.cloud.datastore.QueryResults; +import com.google.cloud.datastore.StructuredQuery.CompositeFilter; +import com.google.cloud.datastore.StructuredQuery.OrderBy; +import com.google.cloud.datastore.StructuredQuery.PropertyFilter; + +public class IndexingConsiderationQuery { + public static void invoke() throws Exception { + + // Instantiates a client + Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); + + // Build a query with multi inequal filters and optimized index order of index properties. + Query query = + Query.newEntityQueryBuilder() + .setKind("employees") + .setFilter( + CompositeFilter.and( + PropertyFilter.gt("salary", 100000), PropertyFilter.gt("experience", 0))) + .setOrderBy(OrderBy.asc("salary"), OrderBy.asc("experience")) + .build(); + + // Get the results back from Datastore + QueryResults results = datastore.run(query); + + if (!results.hasNext()) { + throw new Exception("query yielded no results"); + } + + while (results.hasNext()) { + Entity entity = results.next(); + System.out.printf("Entity: %s%n", entity); + } + } +} +// [END datastore_query_indexing_considerations] diff --git a/samples/snippets/src/main/java/com/example/datastore/filters/OrderFieldsQuery.java b/samples/snippets/src/main/java/com/example/datastore/filters/OrderFieldsQuery.java new file mode 100644 index 000000000..24fc7901c --- /dev/null +++ b/samples/snippets/src/main/java/com/example/datastore/filters/OrderFieldsQuery.java @@ -0,0 +1,62 @@ +/* + * 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. + */ + +package com.example.datastore.filters; + +// sample-metadata: +// title: Queries with order fileds +// description: The following query order properties +// in the decreasing order of query constraint selectivity. + +// [START datastore_query_order_fields] + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Query; +import com.google.cloud.datastore.QueryResults; +import com.google.cloud.datastore.StructuredQuery.OrderBy; +import com.google.cloud.datastore.StructuredQuery.PropertyFilter; + +public class OrderFieldsQuery { + public static void invoke() throws Exception { + + // Instantiates a client + Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); + + // Build a query with order properties in the decreasing order of query constraint selectivity. + Query query = + Query.newEntityQueryBuilder() + .setKind("employees") + .setFilter(PropertyFilter.gt("salary", 100000)) + .setOrderBy(OrderBy.asc("salary")) + .build(); + + // Get the results back from Datastore + QueryResults results = datastore.run(query); + // Order results by `experience` + + if (!results.hasNext()) { + throw new Exception("query yielded no results"); + } + + while (results.hasNext()) { + Entity entity = results.next(); + System.out.printf("Entity: %s%n", entity); + } + } +} +// [END datastore_query_order_fields] diff --git a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java index 135bedded..7fbc5f8b9 100644 --- a/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java +++ b/samples/snippets/src/main/java/com/google/datastore/snippets/TaskList.java @@ -42,6 +42,7 @@ public class TaskList { // Create a Key factory to construct keys associated with this project. private final KeyFactory keyFactory = datastore.newKeyFactory().setKind("Task"); + // [END datastore_build_service] // [START datastore_add_entity] @@ -65,6 +66,7 @@ Key addTask(String description) { datastore.put(task); return key; } + // [END datastore_add_entity] // [START datastore_update_entity] @@ -90,6 +92,7 @@ boolean markDone(long id) { } } } + // [END datastore_update_entity] // [START datastore_retrieve_entities] @@ -103,6 +106,7 @@ Iterator listTasks() { Query.newEntityQueryBuilder().setKind("Task").setOrderBy(OrderBy.asc("created")).build(); return datastore.run(query); } + // [END datastore_retrieve_entities] // [START datastore_delete_entity] @@ -115,6 +119,7 @@ Iterator listTasks() { void deleteTask(long id) { datastore.delete(keyFactory.newKey(id)); } + // [END datastore_delete_entity] /** diff --git a/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqQuerySampleIT.java b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqQuerySampleIT.java new file mode 100644 index 000000000..8e3fa4c10 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqQuerySampleIT.java @@ -0,0 +1,98 @@ +/* + * 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. + */ + +package com.example.datastore.filters; + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Key; +import com.rule.SystemsOutRule; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +@SuppressWarnings("checkstyle:abbreviationaswordinname") +public class MultiIneqQuerySampleIT { + + private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); + + private Key employeeKey1; + private Key employeeKey2; + private Key employeeKey3; + + @Rule public final SystemsOutRule systemsOutRule = new SystemsOutRule(); + + @Before + public void setUp() { + employeeKey1 = datastore.newKeyFactory().setKind("employees").newKey("employee1"); + Entity employee1 = + Entity.newBuilder(employeeKey1) + .set("name", "Alice") + .set("salary", 100001) + .set("experience", 10) + .build(); + + employeeKey2 = datastore.newKeyFactory().setKind("employees").newKey("employee2"); + Entity employee2 = + Entity.newBuilder(employeeKey2) + .set("name", "Bob") + .set("salary", 90000) + .set("experience", 5) + .build(); + + employeeKey3 = datastore.newKeyFactory().setKind("employees").newKey("employee3"); + Entity employee3 = + Entity.newBuilder(employeeKey3) + .set("name", "Jay") + .set("salary", 120000) + .set("experience", 15) + .build(); + + datastore.put(employee1); + datastore.put(employee2); + datastore.put(employee3); + } + + @After + public void tearDown() { + datastore.delete(employeeKey1); + datastore.delete(employeeKey2); + datastore.delete(employeeKey3); + } + + @Test + public void testIndexingConsiderationQuery() throws Exception { + // Act + IndexingConsiderationQuery.invoke(); + + // Assert + systemsOutRule.assertContains("Entity"); + } + + @Test + public void testOrderFieldsQuery() throws Exception { + // Act + OrderFieldsQuery.invoke(); + + // Assert + systemsOutRule.assertContains("Entity"); + } +} diff --git a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java index 1397728ba..13701eb2d 100644 --- a/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java +++ b/samples/snippets/src/test/java/com/google/datastore/snippets/ConceptsTest.java @@ -77,7 +77,6 @@ import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import org.threeten.bp.Duration; /** Contains Cloud Datastore snippets demonstrating concepts for documentation. */ @RunWith(JUnit4.class) @@ -147,7 +146,7 @@ public void tearDown() throws Exception { */ @AfterClass public static void afterClass() throws IOException, InterruptedException, TimeoutException { - HELPER.stop(Duration.ofMinutes(1)); + HELPER.stopDuration(java.time.Duration.ofMinutes(1)); } private void assertValidKey(Key taskKey) { @@ -297,8 +296,17 @@ public void testLookup() { public void testUpdate() { datastore.put(testEntity); // [START datastore_update] - Entity task = Entity.newBuilder(datastore.get(taskKey)).set("priority", 5).build(); - datastore.update(task); + Entity task; + Transaction txn = datastore.newTransaction(); + try { + task = Entity.newBuilder(txn.get(taskKey)).set("priority", 5).build(); + txn.put(task); + txn.commit(); + } finally { + if (txn.isActive()) { + txn.rollback(); + } + } // [END datastore_update] assertEquals(task, datastore.get(taskKey)); } @@ -836,6 +844,7 @@ void transferFunds(Key fromKey, Key toKey, long amount) { } } } + // [END datastore_transactional_update] @Test diff --git a/samples/snippets/src/test/resources/index.yaml b/samples/snippets/src/test/resources/index.yaml index 8652a0ee0..5f2f0c74a 100644 --- a/samples/snippets/src/test/resources/index.yaml +++ b/samples/snippets/src/test/resources/index.yaml @@ -23,3 +23,7 @@ indexes: properties: - name: tag - name: tag +- kind: employees + properties: + - name: salary + - name: experience \ No newline at end of file diff --git a/versions.txt b/versions.txt index 3d01cfb1c..cd6778817 100644 --- a/versions.txt +++ b/versions.txt @@ -1,9 +1,10 @@ # Format: # module:released-version:current-version -google-cloud-datastore:2.19.1:2.19.2-SNAPSHOT -google-cloud-datastore-bom:2.19.1:2.19.2-SNAPSHOT -proto-google-cloud-datastore-v1:0.110.1:0.110.2-SNAPSHOT -datastore-v1-proto-client:2.19.1:2.19.2-SNAPSHOT -proto-google-cloud-datastore-admin-v1:2.19.1:2.19.2-SNAPSHOT -grpc-google-cloud-datastore-admin-v1:2.19.1:2.19.2-SNAPSHOT +google-cloud-datastore:2.28.1:2.28.2-SNAPSHOT +google-cloud-datastore-bom:2.28.1:2.28.2-SNAPSHOT +proto-google-cloud-datastore-v1:0.119.1:0.119.2-SNAPSHOT +datastore-v1-proto-client:2.28.1:2.28.2-SNAPSHOT +proto-google-cloud-datastore-admin-v1:2.28.1:2.28.2-SNAPSHOT +grpc-google-cloud-datastore-admin-v1:2.28.1:2.28.2-SNAPSHOT +grpc-google-cloud-datastore-v1:2.28.1:2.28.2-SNAPSHOT